// AutistMask popup entry point. // Loads state, initializes views, triggers first render. const { DEBUG } = require("../shared/constants"); const { state, saveState, loadState } = require("../shared/state"); const { refreshPrices } = require("../shared/prices"); const { refreshBalances } = require("../shared/balances"); const { $, showView } = require("./views/helpers"); const home = require("./views/home"); const welcome = require("./views/welcome"); const addWallet = require("./views/addWallet"); const importKey = require("./views/importKey"); const addressDetail = require("./views/addressDetail"); const send = require("./views/send"); const confirmTx = require("./views/confirmTx"); const receive = require("./views/receive"); const addToken = require("./views/addToken"); const settings = require("./views/settings"); const approval = require("./views/approval"); function renderWalletList() { home.render(ctx); } let refreshInFlight = false; async function doRefreshAndRender() { if (refreshInFlight) return; refreshInFlight = true; try { await Promise.all([ refreshPrices(), refreshBalances(state.wallets, state.rpcUrl, state.blockscoutUrl), ]); state.lastBalanceRefresh = Date.now(); await saveState(); renderWalletList(); } finally { refreshInFlight = false; } } const ctx = { renderWalletList, doRefreshAndRender, showAddWalletView: () => addWallet.show(), showImportKeyView: () => importKey.show(), showAddressDetail: () => addressDetail.show(), showAddTokenView: () => addToken.show(), showConfirmTx: (txInfo) => confirmTx.show(txInfo), }; async function init() { if (DEBUG) { const banner = document.createElement("div"); banner.id = "debug-banner"; banner.textContent = "DEBUG / INSECURE"; banner.style.cssText = "background:#c00;color:#fff;text-align:center;font-size:10px;padding:1px 0;font-family:monospace;position:sticky;top:0;z-index:9999;"; document.body.prepend(banner); } await loadState(); $("btn-settings").addEventListener("click", () => { $("settings-rpc").value = state.rpcUrl; $("settings-blockscout").value = state.blockscoutUrl; showView("settings"); }); welcome.init(ctx); addWallet.init(ctx); importKey.init(ctx); home.init(ctx); addressDetail.init(ctx); send.init(ctx); confirmTx.init(ctx); receive.init(ctx); addToken.init(ctx); settings.init(ctx); approval.init(ctx); if (!state.hasWallet) { showView("welcome"); } else { renderWalletList(); showView("main"); doRefreshAndRender(); setInterval(doRefreshAndRender, 10000); } } document.addEventListener("DOMContentLoaded", init);