diff --git a/src/mappings/nfts/setMetadata.ts b/src/mappings/nfts/setMetadata.ts index 552c615..1d33df1 100644 --- a/src/mappings/nfts/setMetadata.ts +++ b/src/mappings/nfts/setMetadata.ts @@ -39,6 +39,8 @@ export async function handleMetadataSet(context: Context): Promise { if (final.metadata) { const metadata = await handleMetadata(final.metadata, context.store) + const previousNftMedia = final?.image || final?.media + const newNftMedia = metadata?.image || metadata?.animationUrl final.meta = metadata final.name = metadata?.name final.image = metadata?.image @@ -51,7 +53,7 @@ export async function handleMetadataSet(context: Context): Promise { warn(OPERATION, `collection ${event.collectionId} not found`) return } - if (final instanceof NFTEntity) { + if (final instanceof NFTEntity && newNftMedia !== previousNftMedia) { await setMetadataHandler(context, collection, final) } } diff --git a/src/mappings/shared/token/setMetadata.ts b/src/mappings/shared/token/setMetadata.ts index db6fdbd..3f59e14 100644 --- a/src/mappings/shared/token/setMetadata.ts +++ b/src/mappings/shared/token/setMetadata.ts @@ -11,22 +11,18 @@ export async function setMetadataHandler(context: Context, collection: CE, nft: if (!nftMedia) { return } + const tokenAPI = new TokenAPI(context.store) - let nftWithToken, existingToken try { - [nftWithToken, existingToken] = await Promise.all([ - getWith(context.store, NE, nft.id, { token: true }), - getOptional(context.store, TE, generateTokenId(collection.id, nftMedia)), - ]) + const nftWithToken = await getWith(context.store, NE, nft.id, { token: true }) + if (nftWithToken?.token) { + await tokenAPI.removeNftFromToken(nft, nftWithToken.token) + } } catch (error) { warn(OPERATION, `ERROR ${error}`) return } - const tokenAPI = new TokenAPI(context.store) - - if (nftWithToken.token) { - await tokenAPI.removeNftFromToken(nft, nftWithToken.token) - } + const existingToken = await getOptional(context.store, TE, generateTokenId(collection.id, nftMedia)) return await (existingToken ? tokenAPI.addNftToToken(nft, existingToken) : tokenAPI.create(collection, nft)) }