@@ -9,6 +9,7 @@ supported.solana = [];
99
1010const _jsxFileName = "/Users/sebastian/Work/DePay/react-token-image/src/index.evm.js" ;
1111const tokenURIAPI = [ { "inputs" :[ { "internalType" :"uint256" , "name" :"tokenId" , "type" :"uint256" } ] , "name" :"tokenURI" , "outputs" :[ { "internalType" :"string" , "name" :"" , "type" :"string" } ] , "stateMutability" :"view" , "type" :"function" } ] ;
12+ const uriAPI = [ { "inputs" :[ { "internalType" :"uint256" , "name" :"tokenId" , "type" :"uint256" } ] , "name" :"uri" , "outputs" :[ { "internalType" :"string" , "name" :"" , "type" :"string" } ] , "stateMutability" :"view" , "type" :"function" } ] ;
1213const UNKNOWN_IMAGE = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMjgzLjUgMjgzLjUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI4My41IDI4My41OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxjaXJjbGUgZmlsbD0iI0YwRUZFRiIgY3g9IjE0MS43IiBjeT0iMTQxLjciIHI9IjE0MS43Ii8+CjxnPgoJPHBhdGggZmlsbD0iI0FCQUJBQiIgZD0iTTEyNywxNzUuMXYtNC40YzAtOC40LDEuMS0xNS4zLDMuNC0yMC43YzIuMy01LjQsNS4xLTEwLDguNC0xMy44YzMuMy0zLjcsNi42LTcsMTAuMS05LjdzNi4zLTUuNiw4LjYtOC41CgkJYzIuMy0yLjksMy40LTYuNCwzLjQtMTAuNWMwLTUtMS4xLTguNy0zLjMtMTEuMWMtMi4yLTIuNC01LTQtOC40LTQuOGMtMy40LTAuOC02LjktMS4zLTEwLjUtMS4zYy01LjgsMC0xMS44LDEtMTcuOSwyLjkKCQljLTYuMSwxLjktMTEuNSw0LjctMTYsOC40Vjc0YzIuMy0xLjcsNS40LTMuMyw5LjQtNC45YzQtMS42LDguNC0yLjksMTMuNC00YzUtMS4xLDEwLjEtMS42LDE1LjUtMS42YzguMSwwLDE1LjEsMS4xLDIxLjEsMy40CgkJYzYsMi4zLDEwLjgsNS41LDE0LjcsOS41YzMuOCw0LDYuNyw4LjcsOC42LDE0LjFjMS45LDUuMywyLjksMTEuMSwyLjksMTcuMmMwLDYuNi0xLjEsMTItMy40LDE2LjNjLTIuMyw0LjMtNS4xLDgtOC41LDExLjIKCQljLTMuNCwzLjItNi44LDYuNC0xMC4yLDkuNWMtMy40LDMuMS02LjMsNi44LTguNiwxMWMtMi4zLDQuMi0zLjQsOS41LTMuNCwxNS45djMuNEgxMjd6IE0xMjUuMiwyMTguMnYtMjcuN2gzM3YyNy43SDEyNS4yeiIvPgo8L2c+Cjwvc3ZnPgo=' ;
1314
1415let TokenImage = function ( props ) {
@@ -18,6 +19,7 @@ let TokenImage = function(props){
1819
1920 const blockchain = props . blockchain . toLowerCase ( ) ;
2021 const address = props . address ;
22+ const id = props . id ;
2123
2224 useEffect ( ( ) => {
2325 if ( CONSTANTS [ blockchain ] . NATIVE . toLowerCase ( ) == address . toLowerCase ( ) ) {
@@ -55,34 +57,43 @@ let TokenImage = function(props){
5557 setSrc ( UNKNOWN_IMAGE ) ;
5658 } ;
5759
60+ const uriToImage = ( tokenURI ) => {
61+ if ( tokenURI . match ( / ^ i p f s / ) ) {
62+ tokenURI = `https://ipfs.io/ipfs/${ tokenURI . split ( '://' ) [ 1 ] } ` ;
63+ }
64+ fetch ( tokenURI ) . then ( ( response ) => {
65+ if ( response . ok ) { return response . json ( ) }
66+ setUnknown ( ) ;
67+ } )
68+ . then ( ( responseJson ) => {
69+ if ( responseJson ) {
70+ let image = responseJson . image ;
71+ if ( image ) {
72+ if ( image . match ( / ^ i p f s / ) ) {
73+ image = `https://ipfs.io/ipfs/${ image . split ( '://' ) [ 1 ] } ` ;
74+ }
75+ setSource ( 'meta' ) ;
76+ setSrc ( image ) ;
77+ } else {
78+ setUnknown ( ) ;
79+ }
80+ }
81+ } ) . catch ( setUnknown ) ;
82+ } ;
83+
5884 const handleLoadError = ( error ) => {
5985 if ( source == 'repository' ) {
6086 setSource ( 'depay' ) ;
6187 setSrc ( `https://integrate.depay.com/tokens/${ blockchain } /${ address } /image` ) ;
6288 } else if ( source == 'depay' && supported . evm . includes ( blockchain ) ) {
63- request ( { blockchain, address, api : tokenURIAPI , method : 'tokenURI' , params : [ 1 ] } ) . then ( async ( tokenURI ) => {
64- if ( tokenURI . match ( / ^ i p f s / ) ) {
65- tokenURI = `https://ipfs.io/ipfs/${ tokenURI . split ( '://' ) [ 1 ] } ` ;
66- }
67- fetch ( tokenURI ) . then ( ( response ) => {
68- if ( response . ok ) { return response . json ( ) }
69- setUnknown ( ) ;
70- } )
71- . then ( ( responseJson ) => {
72- if ( responseJson ) {
73- let image = responseJson . image ;
74- if ( image ) {
75- if ( image . match ( / ^ i p f s / ) ) {
76- image = `https://ipfs.io/ipfs/${ image . split ( '://' ) [ 1 ] } ` ;
77- }
78- setSource ( 'meta' ) ;
79- setSrc ( image ) ;
80- } else {
81- setUnknown ( ) ;
82- }
83- }
89+ if ( id ) {
90+ request ( { blockchain, address, api : uriAPI , method : 'uri' , params : [ id ] } ) . then ( ( uri ) => {
91+ uri = uri . match ( '0x{id}' ) ? uri . replace ( '0x{id}' , id ) : uri ;
92+ uriToImage ( uri ) ;
8493 } ) . catch ( setUnknown ) ;
85- } ) . catch ( setUnknown ) ;
94+ } else {
95+ request ( { blockchain, address, api : tokenURIAPI , method : 'tokenURI' , params : [ 1 ] } ) . then ( uriToImage ) . catch ( setUnknown ) ;
96+ }
8697 } else {
8798 setUnknown ( ) ;
8899 }
@@ -94,7 +105,7 @@ let TokenImage = function(props){
94105 React . createElement ( 'img' , {
95106 className : props . className ,
96107 src : src ,
97- onError : handleLoadError , __self : this , __source : { fileName : _jsxFileName , lineNumber : 94 } }
108+ onError : handleLoadError , __self : this , __source : { fileName : _jsxFileName , lineNumber : 105 } }
98109 )
99110 )
100111} ;
0 commit comments