const { $, showView, showFlash } = require("./helpers"); const { getTopTokens } = require("../../shared/tokenList"); const { state, saveState } = require("../../shared/state"); const { lookupTokenInfo } = require("../../shared/balances"); const { isScamAddress } = require("../../shared/scamlist"); const { log } = require("../../shared/log"); function show() { $("add-token-address").value = ""; $("add-token-info").classList.add("hidden"); const list = $("common-token-list"); list.innerHTML = getTopTokens(25) .map( (t) => ``, ) .join(""); list.querySelectorAll(".common-token").forEach((btn) => { btn.addEventListener("click", () => { $("add-token-address").value = btn.dataset.address; }); }); showView("add-token"); } function init(ctx) { $("btn-add-token-confirm").addEventListener("click", async () => { const contractAddr = $("add-token-address").value.trim(); if (!contractAddr || !contractAddr.startsWith("0x")) { showFlash( "Please enter a valid contract address starting with 0x.", ); return; } const already = state.trackedTokens.find( (t) => t.address.toLowerCase() === contractAddr.toLowerCase(), ); if (already) { showFlash(already.symbol + " is already being tracked."); return; } if (isScamAddress(contractAddr)) { showFlash("This address is on a known scam/fraud list."); return; } const infoEl = $("add-token-info"); infoEl.textContent = "Looking up token..."; infoEl.classList.remove("hidden"); log.debugf("Looking up token contract", contractAddr); try { const info = await lookupTokenInfo(contractAddr, state.rpcUrl); log.infof("Adding token", info.symbol, contractAddr); state.trackedTokens.push({ address: contractAddr, symbol: info.symbol, decimals: info.decimals, name: info.name, }); await saveState(); ctx.doRefreshAndRender(); ctx.showAddressDetail(); } catch (e) { const detail = e.shortMessage || e.message || String(e); log.errorf("Token lookup failed for", contractAddr, detail); showFlash(detail); infoEl.classList.add("hidden"); } }); $("btn-add-token-back").addEventListener("click", ctx.showAddressDetail); } module.exports = { init, show };