/* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable @typescript-eslint/no-unsafe-call */ export const checkTokenUri = async (tokenUri: string, isBaseTokenUri?: boolean) => { if (isBaseTokenUri) { await fetch( tokenUri .replace('ipfs://', 'https://ipfs-gw.stargaze-apis.com/ipfs/') .concat(tokenUri.endsWith('/') ? '1' : '/1'), ) .then((res) => res .json() .then((data) => { if (!data.image) { throw Error('Metadata validation failed. The metadata files must contain an image URL.') } if (!data.image.startsWith('ipfs://')) { throw Error('Metadata file validation failed: The corresponding value for image must be an IPFS URL.') } }) .catch(() => { throw Error( `Metadata validation failed. Please check that the metadata files in the IPFS folder are valid JSON.`, ) }), ) .catch(async () => { await fetch( tokenUri .replace('ipfs://', 'https://ipfs-gw.stargaze-apis.com/ipfs/') .concat(tokenUri.endsWith('/') ? '1.json' : '/1.json'), ) .then((response) => response .json() .then((file) => { if (!file.image) { throw Error('Metadata validation failed. The metadata files must contain an image URL.') } if (!file.image.startsWith('ipfs://')) { throw Error('Metadata file validation failed: The corresponding value for image must be an IPFS URL.') } }) .catch(() => { throw Error( `Metadata validation failed. Please check that the metadata files in the IPFS folder are valid JSON.`, ) }), ) .catch(() => { throw Error( `Unable to fetch metadata from ${tokenUri}. Metadata validation failed. Please check that the base token URI points to an IPFS folder with metadata files in it.`, ) }) }) } else { await fetch(tokenUri.replace('ipfs://', 'https://ipfs-gw.stargaze-apis.com/ipfs/')) .then((res) => res .json() .then((file) => { if (!file.image) { throw Error('Token URI must contain an image URL.') } if (!file.image.startsWith('ipfs://')) { throw Error('Metadata file: The corresponding value for image must be an IPFS URL.') } }) .catch(() => { throw Error(`Metadata file could not be parsed. Please check that it is valid JSON.`) }), ) .catch(() => { throw Error(`Unable to fetch metadata from ${tokenUri}`) }) } }