diff --git a/public/core/hotfix-v1763.js b/public/core/hotfix-v1763.js new file mode 100644 index 0000000..ed4e13e --- /dev/null +++ b/public/core/hotfix-v1763.js @@ -0,0 +1,71 @@ +(()=>{ + '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=`
Caterium

Аккаунт разработчика

${esc(session.user.email||'')}

Этот аккаунт управляет платформой и не обязан иметь собственную рабочую компанию.

`; + 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}; +})();