All checks were successful
ci / gate (push) Successful in 11m41s
History comes from the observer's account activity route, chosen over a relay because the observer already indexes every chain with a profile and serves per-account activity keyset-paginated (recorded on #23). A HistorySource port in wallet-core with an observer adapter in wallet-data reads it; the rows a person looks for are typed (transfers in and out, wormhole exits, reversible schedule, cancel and execute, and calls the account signed) and the rest dropped, while the cursor always advances over the raw rows. The wormhole pallet mirrors every native transfer as NativeTransferred, so only rows with the wormhole's own account as a party count as wormhole movements; the mirrors would otherwise list each send twice. A saved response pins the parser. A HistoryCache port with a rusqlite adapter keeps what the indexer said under <data>/history.sqlite, keyed by chain, account and position, with a per-account record of when the indexer last answered and how far it had read. The history_page command stores as it fetches and, when the indexer cannot be reached, serves the cache with from_cache set and the reason attached. Profiles carry the indexer URL (none for the dev node, and the screen says so). The history screen pages with "Older", refreshes, shows an offline chip with the cache's age, and opens the account on the public explorer through tauri-plugin-opener, granted open-url for those two hosts only, with the reason in the capability file. Verified on mainnet: two pages of 45 and 46 rows for an active account through the client, the cache file written; with the indexer overridden to a dead address, the same call served 50 cached rows marked offline with the error and the last fetch time, and the screen showed "offline: cached 1 min ago". An unknown account reads as "Nothing yet". The observer's ignored live test reads two pages. Closes #23 Closes #30 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ftBXYuba8ARhQeF74oUgW
43 lines
1.1 KiB
JSON
43 lines
1.1 KiB
JSON
{
|
|
"name": "wallet-ui",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"packageManager": "pnpm@10.30.3",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"preview": "vite preview",
|
|
"lint": "eslint .",
|
|
"format": "prettier --write src",
|
|
"format:check": "prettier --check src",
|
|
"typecheck": "tsc -b --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@tanstack/react-query": "^5.102.8",
|
|
"@tauri-apps/api": "^2.9.0",
|
|
"@tauri-apps/plugin-clipboard-manager": "^2.3.3",
|
|
"@tauri-apps/plugin-dialog": "^2.7.3",
|
|
"@tauri-apps/plugin-opener": "^2.5.5",
|
|
"qrcode-generator": "^2.0.4",
|
|
"react": "^19.1.1",
|
|
"react-dom": "^19.1.1",
|
|
"react-router-dom": "^7.8.0"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.32.0",
|
|
"@types/node": "^26.4.1",
|
|
"@types/react": "^19.1.9",
|
|
"@types/react-dom": "^19.1.7",
|
|
"@vitejs/plugin-react-swc": "^4.0.0",
|
|
"eslint": "^9.32.0",
|
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
"eslint-plugin-react-refresh": "^0.4.20",
|
|
"globals": "^16.3.0",
|
|
"prettier": "^3.4.2",
|
|
"typescript": "~5.8.3",
|
|
"typescript-eslint": "^8.39.0",
|
|
"vite": "^7.1.0"
|
|
}
|
|
}
|