diff --git a/src/utils/media-utils.js b/src/utils/media-utils.js index e4f812b59dd04d2402905e97e8a6e0f29f4e85f9..7d699d172b74d8582741132bd2e28c44d2b4c959 100644 --- a/src/utils/media-utils.js +++ b/src/utils/media-utils.js @@ -5,16 +5,21 @@ if (process.env.NODE_ENV === "development") { resolveMediaUrl = `https://${process.env.DEV_RETICULUM_SERVER}${resolveMediaUrl}`; } +const farsparkCache = new Map(); export const resolveFarsparkUrl = async url => { const parsedUrl = new URL(url); - if ((parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") || isHostWhitelisted(parsedUrl.hostname)) - return { raw: url, origin: url }; + if (farsparkCache.has(url)) return farsparkCache.get(url); - return await fetch(resolveMediaUrl, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ media: { url } }) - }).then(r => r.json()); + const resolved = + (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") || isHostWhitelisted(parsedUrl.hostname) + ? { raw: url, origin: url } + : await fetch(resolveMediaUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ media: { url } }) + }).then(r => r.json()); + farsparkCache.set(url, resolved); + return resolved; }; let interactableId = 0;