Route Supabase REST/Auth/Storage/Functions traffic through api.caterium.ru proxy

The api.caterium.ru PHP reverse proxy has been deployed and verified end-to-end
(curl tests plus live authenticated RPC calls through a real browser session).
This switches the client's Supabase fetch calls to go through the proxy so
requests from Russia work without a VPN. Realtime's WebSocket connection is
unaffected since it doesn't go through fetch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
pavlov346346-source 2026-09-13 02:50:37 +03:00
parent aafad18d6a
commit 5d73b2c37e

View File

@ -1988,6 +1988,17 @@ window.SUN_LEGACY_CATALOG_V175=[{"id":"1","name":"Фуршетный бокс
const DEFAULT_SUPABASE_URL = 'https://cksuehzcimitsxmeloes.supabase.co'; const DEFAULT_SUPABASE_URL = 'https://cksuehzcimitsxmeloes.supabase.co';
const DEFAULT_SUPABASE_KEY = 'sb_publishable_v8Z3hEBnu7zsDwAb5KCWcg_T96IejsM'; const DEFAULT_SUPABASE_KEY = 'sb_publishable_v8Z3hEBnu7zsDwAb5KCWcg_T96IejsM';
const SUPABASE_API_PROXY = 'https://api.caterium.ru';
function supabaseProxyFetch(input, init) {
try {
const url = typeof input === 'string' ? input : input?.url;
if (url && url.indexOf(DEFAULT_SUPABASE_URL) === 0) {
const proxied = SUPABASE_API_PROXY + url.slice(DEFAULT_SUPABASE_URL.length);
input = typeof input === 'string' ? proxied : new Request(proxied, input);
}
} catch (_) {}
return fetch(input, init);
}
let config = loadConfig(); let config = loadConfig();
let client = null; let client = null;
@ -2951,7 +2962,7 @@ window.SUN_LEGACY_CATALOG_V175=[{"id":"1","name":"Фуршетный бокс
await loadSupabaseLibrary(); await loadSupabaseLibrary();
const signature=`${config.url}|${config.key}`; const signature=`${config.url}|${config.key}`;
if(!client||signature!==clientSignature){ if(!client||signature!==clientSignature){
client=window.supabase.createClient(config.url,config.key,{auth:{persistSession:true,autoRefreshToken:true,detectSessionInUrl:true}});clientSignature=signature; client=window.supabase.createClient(config.url,config.key,{auth:{persistSession:true,autoRefreshToken:true,detectSessionInUrl:true},global:{fetch:supabaseProxyFetch}});clientSignature=signature;
client.auth.onAuthStateChange((_event,next)=>{session=next;membershipsLoading=Boolean(next?.user);membershipsLoaded=!next?.user;setTimeout(async()=>{try{if(!next?.user){const sw=await switchTenantLocal('');if(sw.changed){location.reload();return;}}else{const sw=await loadMemberships();if(sw){location.reload();return;}}}finally{renderCloudUI();updatePill();}},0);}); client.auth.onAuthStateChange((_event,next)=>{session=next;membershipsLoading=Boolean(next?.user);membershipsLoaded=!next?.user;setTimeout(async()=>{try{if(!next?.user){const sw=await switchTenantLocal('');if(sw.changed){location.reload();return;}}else{const sw=await loadMemberships();if(sw){location.reload();return;}}}finally{renderCloudUI();updatePill();}},0);});
} }
const {data,error}=await client.auth.getSession();if(error)throw error;session=data.session||null; const {data,error}=await client.auth.getSession();if(error)throw error;session=data.session||null;