Fix platform developer gate during workspace loading and prevent SaaS click events from reaching Developer Console as DOM buttons. Add v17.6.3 regression tests and PWA cache bump.
72 lines
3.4 KiB
JavaScript
72 lines
3.4 KiB
JavaScript
(()=>{
|
|
'use strict';
|
|
if(window.SunHotfixV1763)return;
|
|
|
|
const VERSION='17.6.3';
|
|
const $=id=>document.getElementById(id);
|
|
const esc=value=>window.SunSafe?.escapeHTML?window.SunSafe.escapeHTML(String(value??'')):String(value??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
|
|
let checkingGate=false;
|
|
|
|
function patchDeveloperOpen(){
|
|
const dev=window.SunDeveloperV22;
|
|
if(!dev||dev.__sunV1763SafeOpen||typeof dev.open!=='function')return false;
|
|
const original=dev.open.bind(dev);
|
|
dev.open=(source=null)=>original(source instanceof HTMLElement?source:null);
|
|
Object.defineProperty(dev,'__sunV1763SafeOpen',{value:true,configurable:true});
|
|
return true;
|
|
}
|
|
|
|
async function platformAdmin(){
|
|
const dev=window.SunDeveloperV22,cloud=window.SunCloudV2;
|
|
if(!dev||!cloud?.getSession?.()?.user)return false;
|
|
if(dev.isPlatformAdmin?.()===true)return true;
|
|
try{return await dev.checkPlatformAdmin?.(true)===true}catch(_){return false}
|
|
}
|
|
|
|
async function enhanceDeveloperGate(){
|
|
if(checkingGate)return false;
|
|
const cloud=window.SunCloudV2,dev=window.SunDeveloperV22;
|
|
if(!cloud||!dev)return false;
|
|
const session=cloud.getSession?.(),workspace=cloud.getWorkspace?.();
|
|
if(!session?.user||workspace)return false;
|
|
checkingGate=true;
|
|
try{
|
|
if(!await platformAdmin())return false;
|
|
const gate=$('sunCloudAuthGateV3'),card=gate?.querySelector('.sun-cloud-auth-card');
|
|
if(!gate||!card)return false;
|
|
if(card.dataset.dev1763==='1')return true;
|
|
gate.dataset.saasEnhanced='1';
|
|
card.dataset.devEnhanced='1';
|
|
card.dataset.dev1763='1';
|
|
card.innerHTML=`<div class="sun-cloud-auth-brand"><img src="caterium-login-logo.png" alt="Caterium"><div><h2>Аккаунт разработчика</h2><div class="hint">${esc(session.user.email||'')}</div></div></div><p class="hint">Этот аккаунт управляет платформой и не обязан иметь собственную рабочую компанию.</p><div class="sun-cloud-auth-actions"><button class="primary" type="button" data-open-dev-v1763>Открыть кабинет разработчика</button><button class="outline" type="button" data-signout-v1763>Выйти</button></div><div class="sun-cloud-auth-error" id="sunDevGateStatusV1763"></div>`;
|
|
card.querySelector('[data-open-dev-v1763]')?.addEventListener('click',()=>{patchDeveloperOpen();dev.open?.();});
|
|
card.querySelector('[data-signout-v1763]')?.addEventListener('click',()=>cloud.signOut?.());
|
|
return true;
|
|
}finally{checkingGate=false;}
|
|
}
|
|
|
|
function interceptSaasAdmin(event){
|
|
const button=event.target?.closest?.('[data-saas-admin]');
|
|
if(!button)return;
|
|
const dev=window.SunDeveloperV22;
|
|
if(!dev)return;
|
|
event.preventDefault();
|
|
event.stopImmediatePropagation();
|
|
patchDeveloperOpen();
|
|
dev.open?.();
|
|
}
|
|
|
|
function maintain(){
|
|
patchDeveloperOpen();
|
|
enhanceDeveloperGate().catch(()=>{});
|
|
}
|
|
|
|
document.addEventListener('click',interceptSaasAdmin,true);
|
|
window.addEventListener('sun:cloud-permissions-changed',()=>setTimeout(maintain,0));
|
|
window.addEventListener('sun:cloud-state-applied',()=>setTimeout(maintain,0));
|
|
setTimeout(maintain,0);
|
|
setInterval(()=>{if(!document.hidden)maintain();},1000);
|
|
|
|
window.SunHotfixV1763={VERSION,patchDeveloperOpen,enhanceDeveloperGate};
|
|
})();
|