На Squarespace нет серверного кода: только статика и клиентский JS через Code Injection. Как только виджету нужны данные внешнего API, всплывают две стены: CORS и невозможность спрятать API-ключ. Ниже обе стены показаны вживую, вместе с рабочим обходом.
Боль
Живой артефакт
API ПриватБанка не отдаёт CORS-заголовки, поэтому запрос из браузера падает. Наш тонкий прокси на этом же домене снимает проблему. Обе кнопки делают настоящие сетевые запросы, лог справа пишется в реальном времени.
Решение
export default {
async fetch(request, env) {
const upstream = await fetch(
"https://api.example.com/data",
{ headers: { "X-Api-Key": env.SECRET_KEY } }
);
const body = await upstream.text();
return new Response(body, {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "https://вашсайт.com",
},
});
},
};
Как проверить