SHiNE-server/shine-UI/js/vendor/solana-web3-loader.js

46 lines
1.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}