Modules
ecash-balance
Always-on module — fediInternal version detection, mini app listing, and install prompts at /demo/ecash.
Surfaces Fedi-specific APIs that exist only inside the wallet WebView. This module focuses on window.fediInternal discovery and mini app management (list installed apps, trigger install prompts).
Files added
| File | Purpose |
|---|---|
hooks/useFediBalance.ts | Detects fediInternal version; lazy-loads mini apps on user action |
components/fedi/BalanceDisplay.tsx | Version badge, load button, installed app list |
components/fedi/FediVersionBadge.tsx | Shows detected API version |
components/fedi/InstallMiniAppButton.tsx | Triggers installMiniApp prompt |
components/fedi/ManageMiniAppsPermissionHint.tsx | Actionable copy when manageInstalledMiniApps is denied |
app/demo/ecash/page.tsx | Demo explaining version tiers and permissions |
useFediBalance
type TMiniAppsLoadState =
| { status: 'idle' }
| { status: 'loading' }
| { status: 'loaded'; miniApps: TMiniApp[] }
| { status: 'permissionDenied' }
| { status: 'error' };
type TFediBalanceState =
| { status: 'loading' }
| { status: 'unavailable' }
| { status: 'ready'; version: 0 | 1 | 2; miniAppsLoad: TMiniAppsLoadState };State machine:
- loading — initial mount
- unavailable —
window.fediInternalnot injected (normal browser) - ready — version detected; on v2, mini apps load only when
loadMiniApps()is called from a button
FediVersionBadge
Small debug badge for development. Shows fediInternal API v2 or "not available" message.
InstallMiniAppButton
Calls installMiniApp on v2 after user click. Shows ManageMiniAppsPermissionHint when Fedi denies manageInstalledMiniApps.
<InstallMiniAppButton
id="companion-app"
title="Companion App"
url="https://example.com/app"
/>Demo route
/demo/ecash — explains v0/v1/v2 differences, user-triggered mini app list, and install flow with permission handling.