diff --git a/js/soldomains.js b/js/soldomains.js
index 17e3bc5..d945002 100644
--- a/js/soldomains.js
+++ b/js/soldomains.js
@@ -1,8 +1,9 @@
/* .SOL DOMAINS — Solana Name Service Lookup & Registration */
const SNS_API = 'https://sns-sdk-proxy.bonfida.workers.dev';
-const BONFIDA_REG = 'https://naming.bonfida.org/#/domain/';
+const SNS_REG = 'https://www.sns.id/domain/';
const SOLSCAN = 'https://solscan.io/account/';
+const REFERRAL_WALLET = '9NuiHh5wgRPx69BFGP1ZR8kHiBENGoJrXs5GpZzKAyn8';
let walletAddress = null;
let currentTab = 'search';
@@ -31,7 +32,6 @@ function switchTab(t) {
currentTab = t;
$$('.sol-tab').forEach(tab => tab.classList.toggle('active', tab.dataset.tab === t));
$$('.sol-panel').forEach(p => p.classList.toggle('hidden', p.id !== `panel-${t}`));
-
if (t === 'mydomains' && walletAddress) loadMyDomains();
}
@@ -40,11 +40,9 @@ function initSearch() {
const input = $('#sol-search');
const btn = $('#sol-search-go');
if (!input || !btn) return;
-
btn.addEventListener('click', () => doSearch());
input.addEventListener('keydown', e => { if (e.key === 'Enter') doSearch(); });
- // Reverse lookup
const revInput = $('#sol-reverse');
const revBtn = $('#sol-reverse-go');
if (revInput && revBtn) {
@@ -56,8 +54,6 @@ function initSearch() {
async function doSearch() {
const raw = $('#sol-search').value.trim().toLowerCase();
if (!raw) return;
-
- // Strip .sol if user typed it
const domain = raw.replace(/\.sol$/i, '');
const results = $('#search-results');
results.innerHTML = loadingHTML('RESOLVING DOMAIN...');
@@ -65,12 +61,9 @@ async function doSearch() {
try {
const res = await fetch(`${SNS_API}/resolve/${domain}`);
const data = await res.json();
-
if (data.s === 'ok' && data.result) {
- // Domain is registered — show owner info
await showTakenDomain(domain, data.result);
} else {
- // Domain is available
showAvailableDomain(domain);
}
} catch (err) {
@@ -80,25 +73,11 @@ async function doSearch() {
async function showTakenDomain(domain, owner) {
const results = $('#search-results');
-
- // Try to get more data
- let records = {};
- try {
- const recRes = await fetch(`${SNS_API}/record-v2/${domain}/SOL`);
- if (recRes.ok) {
- const recData = await recRes.json();
- records.sol = recData.result || null;
- }
- } catch(e) {}
-
- // Try favourite domain of owner
let favourite = null;
try {
const favRes = await fetch(`${SNS_API}/favourite-domain/${owner}`);
- if (favRes.ok) {
- const favData = await favRes.json();
- favourite = favData.result || null;
- }
+ const favData = await favRes.json();
+ if (favData.s === 'ok') favourite = favData.result || null;
} catch(e) {}
results.innerHTML = `
@@ -129,9 +108,9 @@ async function showTakenDomain(domain, owner) {
${domains.map(d => {
- const name = typeof d === 'string' ? d : (d.domain || d);
+ const name = typeof d === 'string' ? d : (d.domain || d.name || String(d));
const isFav = favourite && name === favourite;
return `
@@ -244,26 +231,93 @@ async function doReverse() {
let connectedProvider = null;
const WALLETS = [
- { name: 'PHANTOM', icon: '👻', detect: () => window.phantom?.solana, url: 'https://phantom.app' },
- { name: 'SOLFLARE', icon: '🔆', detect: () => window.solflare, url: 'https://solflare.com' },
- { name: 'BACKPACK', icon: '🎒', detect: () => window.backpack, url: 'https://backpack.app' },
- { name: 'COINBASE', icon: '🔵', detect: () => window.coinbaseSolana, url: 'https://coinbase.com/wallet' },
- { name: 'TRUST', icon: '🛡️', detect: () => window.trustwallet?.solana, url: 'https://trustwallet.com' },
- { name: 'METAMASK', icon: '🦊', detect: () => window.ethereum?.isSolana ? window.ethereum : null, url: 'https://metamask.io' },
+ {
+ name: 'PHANTOM',
+ icon: '👻',
+ detect: () => {
+ const p = window.phantom?.solana;
+ return (p && p.isPhantom) ? p : null;
+ },
+ url: 'https://phantom.app'
+ },
+ {
+ name: 'JUPITER',
+ icon: '🪐',
+ detect: () => {
+ if (window.jupiter?.solana) return window.jupiter.solana;
+ if (window.solana?.isJupiter) return window.solana;
+ return null;
+ },
+ url: 'https://jup.ag'
+ },
+ {
+ name: 'SOLFLARE',
+ icon: '🔆',
+ detect: () => {
+ const s = window.solflare;
+ return (s && s.isSolflare) ? s : null;
+ },
+ url: 'https://solflare.com'
+ },
+ {
+ name: 'BACKPACK',
+ icon: '🎒',
+ detect: () => {
+ const b = window.backpack;
+ return (b && b.isBackpack) ? b : null;
+ },
+ url: 'https://backpack.app'
+ },
+ {
+ name: 'COINBASE',
+ icon: '🔵',
+ detect: () => window.coinbaseSolana || null,
+ url: 'https://coinbase.com/wallet'
+ },
+ {
+ name: 'TRUST',
+ icon: '🛡️',
+ detect: () => window.trustwallet?.solana || null,
+ url: 'https://trustwallet.com'
+ },
+ {
+ name: 'METAMASK',
+ icon: '🦊',
+ detect: () => {
+ // MetaMask Solana injects at window.solana with isMetaMask
+ if (window.solana?.isMetaMask) return window.solana;
+ // Or check ethereum provider flags
+ if (window.ethereum?.isMetaMask && window.ethereum?.solana) return window.ethereum.solana;
+ return null;
+ },
+ url: 'https://metamask.io'
+ },
];
function getAvailableWallets() {
const available = [];
+ const matchedProviders = new Set();
+
for (const w of WALLETS) {
try {
const provider = w.detect();
- if (provider) available.push({ ...w, provider });
+ if (provider && !matchedProviders.has(provider)) {
+ available.push({ ...w, provider });
+ matchedProviders.add(provider);
+ }
} catch(e) {}
}
- // Fallback: check generic window.solana if no specific wallet matched
+
+ // Generic fallback: window.solana if nothing matched
if (available.length === 0 && window.solana) {
- available.push({ name: 'SOLANA WALLET', icon: '◈', provider: window.solana, url: '#' });
+ available.push({
+ name: 'SOLANA WALLET',
+ icon: '◈',
+ provider: window.solana,
+ url: '#'
+ });
}
+
return available;
}
@@ -292,7 +346,6 @@ function createWalletModal() {
`;
document.body.appendChild(modal);
-
modal.querySelector('.sol-modal-backdrop').addEventListener('click', closeModal);
modal.querySelector('#modal-close').addEventListener('click', closeModal);
}
@@ -301,21 +354,24 @@ function openModal() {
const modal = $('#wallet-modal');
const list = $('#wallet-list');
const available = getAvailableWallets();
+ const detectedNames = new Set(available.map(w => w.name));
let html = '';
+ // Show detected wallets as clickable buttons
if (available.length > 0) {
+ html += '
DETECTED
';
html += available.map(w => `
-
${domains.map(d => {
- const name = typeof d === 'string' ? d : (d.domain || d);
+ const name = typeof d === 'string' ? d : (d.domain || d.name || String(d));
const isFav = favourite && name === favourite;
return `