From 5f15df249b3793b50f5a69b34e3dd4a6e44f4e83 Mon Sep 17 00:00:00 2001 From: Evgeny Kuzyakov Date: Mon, 2 Oct 2023 10:58:26 -0700 Subject: [PATCH] Magic: return NFT collection icon --- functions/common.js | 21 ++++++++++++++------- functions/magic/img/nft/[[index]].js | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/functions/common.js b/functions/common.js index fa94c8ae..df6cf7aa 100644 --- a/functions/common.js +++ b/functions/common.js @@ -86,11 +86,13 @@ export async function viewCall({ contractId, method, args }) { export async function nftToImageUrl({ contractId, tokenId }) { const [token, nftMetadata] = await Promise.all([ - viewCall({ - contractId, - method: "nft_token", - args: { token_id: tokenId }, - }), + tokenId + ? viewCall({ + contractId, + method: "nft_token", + args: { token_id: tokenId }, + }) + : Promise.resolve(null), viewCall({ contractId, method: "nft_metadata", @@ -98,6 +100,10 @@ export async function nftToImageUrl({ contractId, tokenId }) { }), ]); + if (!tokenId) { + return nftMetadata.icon; + } + const tokenMetadata = token?.metadata || {}; const tokenMedia = tokenMetadata.media || ""; @@ -146,12 +152,13 @@ export async function internalImageToUrl(env, image) { try { const { contractId, tokenId } = image.nft; const NftKV = env.NftKV; + const path = tokenId ? `${contractId}/${tokenId}` : contractId; - let imageUrl = await NftKV.get(`${contractId}/${tokenId}`); + let imageUrl = await NftKV.get(path); if (!imageUrl) { imageUrl = await nftToImageUrl({ contractId, tokenId }); if (imageUrl) { - await NftKV.put(`${contractId}/${tokenId}`, imageUrl); + await NftKV.put(path, imageUrl); } } return imageUrl; diff --git a/functions/magic/img/nft/[[index]].js b/functions/magic/img/nft/[[index]].js index d8a8ca70..f0e812f0 100644 --- a/functions/magic/img/nft/[[index]].js +++ b/functions/magic/img/nft/[[index]].js @@ -3,7 +3,7 @@ import { internalImageToUrl } from "../../../common"; export async function onRequest({ request, next, env }) { const url = new URL(request.url); const parts = url.pathname.split("/"); - if (parts.length !== 6) { + if (parts.length !== 5 && parts.length !== 6) { return next(); } const contractId = parts[4];