/** * mavi network preference (this browser). * Used for balance, send, and test fund. */ export type MaviNetworkId = "private-anvil" | "public-anvil"; export type MaviNetwork = { id: MaviNetworkId; label: string; /** Short label for badges */ shortLabel: string; rpcUrl: string; chainId: number; /** Dev fund from anvil #0 only makes sense on local anvils */ canFund: boolean; hint: string; }; export const MAVI_NETWORKS: Record = { "private-anvil": { id: "private-anvil", label: "Private local (anvil)", shortLabel: "Private :8545", rpcUrl: "http://127.0.0.1:8545", chainId: 31337, canFund: true, hint: "Permissioned stand-in — docker compose private-anvil", }, "public-anvil": { id: "public-anvil", label: "Public local (anvil)", shortLabel: "Public :8546", rpcUrl: "http://127.0.0.1:8546", chainId: 31338, canFund: true, hint: "Anchor stand-in — docker compose public-anvil", }, }; const KEY = "mavi_network_v1"; export function listMaviNetworks(): MaviNetwork[] { return Object.values(MAVI_NETWORKS); } export function readNetworkId(): MaviNetworkId { if (typeof window === "undefined") return "private-anvil"; try { const v = window.localStorage.getItem(KEY); if (v === "private-anvil" || v === "public-anvil") return v; } catch { /* ignore */ } return "private-anvil"; } export function getActiveNetwork(): MaviNetwork { return MAVI_NETWORKS[readNetworkId()]; } export function setNetworkId(id: MaviNetworkId): void { if (typeof window === "undefined") return; try { window.localStorage.setItem(KEY, id); window.dispatchEvent(new Event("mavi-network")); } catch { /* ignore */ } }