From dbeb69cbdb9c59e74c1dbcefc9a929b50913b907 Mon Sep 17 00:00:00 2001 From: Amirul Islam Redwan71 Date: Tue, 1 Sep 2026 09:12:24 +0600 Subject: [PATCH] Fix image CORS loader and Supabase credentials --- app.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app.js b/app.js index e31a911..b1e8eb4 100644 --- a/app.js +++ b/app.js @@ -300,14 +300,14 @@ async function resolveProductUrl(input) { try { const res = await fetch(`https://fmcltrjnuvuooarkvufn.supabase.co/rest/v1/products?id=eq.${productId}&select=*`, { headers: { - 'apikey': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZtY2x0cmpudXZ1b29hcmt2dWZuIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MjY3MjEzNzgsImV4cCI6MjA0MjI5NzM3OH0.528YkG1V7c8UoK5QvW_V1hS0W1oQ5W_V1hS0W1oQ5W8', - 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZtY2x0cmpudXZ1b29hcmt2dWZuIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MjY3MjEzNzgsImV4cCI6MjA0MjI5NzM3OH0.528YkG1V7c8UoK5QvW_V1hS0W1oQ5W_V1hS0W1oQ5W8' + 'apikey': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZtY2x0cmpudXZ1b29hcmt2dWZuIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzUxMzY3MDQsImV4cCI6MjA5MDcxMjcwNH0.PkSgBAZx41X4sZurfyOdxCVa01hkKTkyBhVkGzx_4y4', + 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZtY2x0cmpudXZ1b29hcmt2dWZuIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzUxMzY3MDQsImV4cCI6MjA5MDcxMjcwNH0.PkSgBAZx41X4sZurfyOdxCVa01hkKTkyBhVkGzx_4y4' } }); const data = await res.json(); if (data && data.length > 0) { const p = data[0]; - let imgUrl = p.image_url || ''; + let imgUrl = p.image || p.image_url || ''; if (p.images && p.images.length > 0) imgUrl = p.images[0]; return { title: p.name || 'Authentic Korean Skincare', @@ -324,11 +324,22 @@ async function resolveProductUrl(input) { function loadImage(src) { return new Promise((resolve, reject) => { + let loadUrl = src; + if (src.startsWith('http://') || src.startsWith('https://')) { + loadUrl = 'https://images.weserv.nl/?url=' + encodeURIComponent(src) + '&output=jpg&q=95'; + } + const img = new Image(); img.crossOrigin = 'anonymous'; img.onload = () => resolve(img); - img.onerror = (e) => reject(new Error('Could not load image across CORS')); - img.src = src; + img.onerror = () => { + const fallbackImg = new Image(); + fallbackImg.crossOrigin = 'anonymous'; + fallbackImg.onload = () => resolve(fallbackImg); + fallbackImg.onerror = () => reject(new Error('Could not load image across CORS')); + fallbackImg.src = src; + }; + img.src = loadUrl; }); }