fix: fall back to direct Supabase auth on proxy 500
This commit is contained in:
parent
708b90e87d
commit
79b470d03f
@ -1,15 +1,21 @@
|
||||
(()=>{
|
||||
'use strict';
|
||||
|
||||
const VERSION='17.8.3-login-session-handoff';
|
||||
const VERSION='17.8.4-auth-proxy-fallback';
|
||||
const PENDING_REGISTRATION_KEY='sunPendingRegistrationV23';
|
||||
let busy=false;
|
||||
const DIRECT_SUPABASE_URL='https://cksuehzcimitsxmeloes.supabase.co';
|
||||
const DIRECT_SUPABASE_KEY='sb_publishable_v8Z3hEBnu7zsDwAb5KCWcg_T96IejsM';
|
||||
let busy=false,directClient=null;
|
||||
|
||||
const $=id=>document.getElementById(id);
|
||||
const cloud=()=>window.SunCloudV2||null;
|
||||
const client=()=>cloud()?.getClient?.()||null;
|
||||
const esc=value=>window.SunSafe?.escapeHTML?window.SunSafe.escapeHTML(String(value??'')):String(value??'');
|
||||
|
||||
function directAuthClient(){if(directClient)return directClient;try{if(!window.supabase?.createClient)return null;directClient=window.supabase.createClient(DIRECT_SUPABASE_URL,DIRECT_SUPABASE_KEY,{auth:{persistSession:true,autoRefreshToken:true,detectSessionInUrl:true}});return directClient}catch(_){return null}}
|
||||
function isProxyServerError(error){const text=`${error?.message||error||''} ${error?.status||''} ${error?.statusCode||''}`;return /(?:http\s*)?500|internal server error|failed to fetch|networkerror|load failed/i.test(text)}
|
||||
async function signInWithFallback(c,email,password){let first=null;try{first=await c.auth.signInWithPassword({email,password})}catch(error){if(!isProxyServerError(error))throw error;first={error}}if(first?.data?.session)return{authClient:c,result:first};if(first?.error&&!isProxyServerError(first.error))throw first.error;const fallback=directAuthClient();if(!fallback)throw first?.error||new Error('Сервис входа временно недоступен.');const second=await fallback.auth.signInWithPassword({email,password});if(second.error)throw second.error;return{authClient:fallback,result:second}}
|
||||
|
||||
function redirectUrl(){try{const u=new URL(location.href);u.hash='';return u.toString();}catch(_){return location.href.split('#')[0];}}
|
||||
function savePendingRegistration(email,promoCode){try{localStorage.setItem(PENDING_REGISTRATION_KEY,JSON.stringify({email:String(email||'').trim().toLowerCase(),companyName:'Новая компания',promoCode:String(promoCode||'').trim().toUpperCase(),createdAt:new Date().toISOString()}));}catch(_){}}
|
||||
function pendingRegistration(){try{return JSON.parse(localStorage.getItem(PENDING_REGISTRATION_KEY)||'null')}catch(_){return null}}
|
||||
@ -40,10 +46,10 @@
|
||||
if(!email||password.length<6){setError(gate,'Введите email и пароль минимум из 6 символов.');return;}
|
||||
busy=true;const button=$('sunGateSubmitV3');if(button)button.disabled=true;setError(gate,'Выполняю вход…');
|
||||
try{
|
||||
const result=await c.auth.signInWithPassword({email,password});if(result.error)throw result.error;
|
||||
const signed=await signInWithFallback(c,email,password),result=signed.result,authClient=signed.authClient;
|
||||
const authUser=result.data?.user||result.data?.session?.user||null;const userId=authUser?.id||'';if(userId)try{sessionStorage.setItem(`sunCloudQuickPinUnlockedV3:${userId}`,'1')}catch(_){}
|
||||
const persisted=await c.auth.getSession();if(persisted.error)throw persisted.error;if(!persisted.data?.session?.user)throw new Error('Сессия входа не сохранилась. Повторите вход.');
|
||||
setError(gate,'Вход выполнен. Открываю Caterium…');
|
||||
const persisted=await authClient.auth.getSession();if(persisted.error)throw persisted.error;if(!persisted.data?.session?.user)throw new Error('Сессия входа не сохранилась. Повторите вход.');
|
||||
setError(gate,authClient===c?'Вход выполнен. Открываю Caterium…':'Вход выполнен через резервный канал. Открываю Caterium…');
|
||||
setTimeout(()=>location.reload(),120);
|
||||
}catch(error){setError(gate,String(error?.message||error||'Не удалось войти.'));if(button)button.disabled=false;busy=false;}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user