/** * rWallet applet definitions — Balance Card + Token Balance. */ import type { AppletDefinition, AppletLiveData } from "../../shared/applet-types"; const balanceCard: AppletDefinition = { id: "balance-card", label: "Balance Card", icon: "💰", accentColor: "#059669", ports: [ { name: "address-in", type: "string", direction: "input" }, { name: "balance-out", type: "number", direction: "output" }, ], renderCompact(data: AppletLiveData): string { const { snapshot } = data; const ethBalance = (snapshot.ethBalance as number) || 0; const tokenCount = (snapshot.tokenCount as number) || 0; const usdTotal = (snapshot.usdTotal as number) || 0; const address = (snapshot.address as string) || ""; const shortAddr = address ? `${address.slice(0, 6)}…${address.slice(-4)}` : "No address"; return `
${shortAddr}
ETH ${ethBalance.toFixed(4)}
Tokens ${tokenCount}
$${usdTotal.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
`; }, onInputReceived(portName, value, ctx) { if (portName === "address-in" && typeof value === "string") { // Address received — in a real implementation this would trigger a balance fetch ctx.emitOutput("balance-out", 0); } }, }; const tokenBalance: AppletDefinition = { id: "token-balance", label: "Token Balance", icon: "🪙", accentColor: "#7c3aed", ports: [ { name: "token-in", type: "string", direction: "input" }, { name: "amount-out", type: "number", direction: "output" }, ], renderCompact(data: AppletLiveData): string { const { snapshot } = data; const tokenName = (snapshot.tokenName as string) || "Token"; const symbol = (snapshot.symbol as string) || "???"; const balance = (snapshot.balance as number) || 0; const usdValue = (snapshot.usdValue as number) || 0; return `
🪙
${tokenName}
${symbol}
${balance.toLocaleString(undefined, { maximumFractionDigits: 6 })}
≈ $${usdValue.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
`; }, onInputReceived(portName, value, ctx) { if (portName === "token-in" && typeof value === "string") { ctx.emitOutput("amount-out", 0); } }, }; export const walletApplets: AppletDefinition[] = [balanceCard, tokenBalance];