From e71220b6193ac1cc6c4956440f1c435c99591fd2 Mon Sep 17 00:00:00 2001
From: netpro2k <netpro2k@gmail.com>
Date: Wed, 25 Jul 2018 18:02:16 -0700
Subject: [PATCH] Add a simple resolver cache for farspark urls

---
 src/utils/media-utils.js | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/utils/media-utils.js b/src/utils/media-utils.js
index e4f812b59..7d699d172 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;
-- 
GitLab