Перевести тестовый контур на t.shineup.me

This commit is contained in:
AidarKC
2026-06-25 13:44:22 +04:00
parent 112ab4d5d5
commit f0e1ab3af8
22 changed files with 131 additions and 58 deletions
+45
View File
@@ -0,0 +1,45 @@
const SOLANA_WEB3_SCRIPT_SRC = './solana-web3.iife.min.js';
let solanaWeb3Promise = null;
function getExistingScript() {
return document.querySelector('script[data-shine-solana-web3="1"]');
}
function resolveScriptUrl() {
return new URL(SOLANA_WEB3_SCRIPT_SRC, import.meta.url).toString();
}
export function loadSolanaWeb3() {
if (typeof window === 'undefined' || typeof document === 'undefined') {
return Promise.reject(new Error('Solana Web3 loader доступен только в браузере'));
}
if (window.solanaWeb3) {
return Promise.resolve(window.solanaWeb3);
}
if (!solanaWeb3Promise) {
solanaWeb3Promise = new Promise((resolve, reject) => {
const existing = getExistingScript();
if (existing) {
existing.addEventListener('load', () => resolve(window.solanaWeb3), { once: true });
existing.addEventListener('error', () => reject(new Error('Не удалось загрузить локальный solana-web3.js')), { once: true });
return;
}
const script = document.createElement('script');
script.src = resolveScriptUrl();
script.async = true;
script.dataset.shineSolanaWeb3 = '1';
script.onload = () => {
if (!window.solanaWeb3) {
reject(new Error('Локальный solana-web3.js загружен, но объект solanaWeb3 недоступен'));
return;
}
resolve(window.solanaWeb3);
};
script.onerror = () => reject(new Error('Не удалось загрузить локальный solana-web3.js'));
document.head.appendChild(script);
});
}
return solanaWeb3Promise;
}