Skip to content

Cursor/multi wallet account restore 9650 - #18

Merged
nghiacc merged 13 commits into
mainfrom
cursor/multi-wallet-account-restore-9650
Oct 20, 2026
Merged

nghiacc merged 13 commits into
mainfrom
cursor/multi-wallet-account-restore-9650

Conversation

@nghiacc

@nghiacc nghiacc commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

multi wallet account restore

cursoragent and others added 13 commits October 20, 2026 09:19
…vice worker, and register push/system notifications

Co-authored-by: nghiacc <nghiacc@yahoo.com>
- refreshBalances: dedupe concurrent refreshes (mount/SSE/detail polls),
  read the latest wallet list via ref, and merge results into the latest
  state instead of replacing the array from a stale closure - a slow or
  failed refresh could previously revert a newly imported (second)
  Wallet's balance to 0
- preserve last known balance/tokenCount when a balance fetch fails and
  never let a fiat-rate failure discard a good balance
- apply each Account's tokens as soon as it resolves and persist
  tokensByAccount in localStorage, so Settings-enabled tokens show on
  Home immediately after reopening the PWA
- heal the seed-level request key (m/1'/0) from the stored mnemonic in
  parseStoredCredentials so records saved with a mismatched key recover
  instead of failing every signed balance request
- refresh on PWA resume (visibilitychange/focus); derive total fiat from
  per-Account fiat values
- Home: aggregate the same token across grouped Account entries
- API getBalance: bounded-concurrency address scan with one retry instead
  of silently zeroing an address on a transient indexer error

Co-authored-by: nghiacc <nghiacc@yahoo.com>
…Home Account labels

- Pad the app root by env(safe-area-inset-top) so the header clears the
  status bar in the standalone PWA (black-translucent), and define the
  safe-area-bottom inset used by the tab bar
- Refresh: apiFetch now uses cache:no-store (signed GETs are identical
  between taps and could be answered from HTTP cache) and a 45s timeout
  so a hung request cannot block refreshes forever; each Account is
  applied as soon as it resolves; WalletContext exposes a refreshing
  flag and the Home button shows a spinning Refreshing state
- Home: drop the 'Account eCash m/44...' heading rows from Account cards
  so balances and token lines get the space (full path still on the
  Account detail page)

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Tiles again show 'eCash m/44'/1899'/0'' at the top, but without the
leading 'Account' label, and multisig shows as a separate 2-of-4 badge
on the right so it is never truncated by the path

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Wallet cards now show the name given when the Wallet was imported or
created on the left of the header (seed id stays on the right) instead
of the generic 'Wallet' text. The name is stored per Wallet (seed) at
restore/create/join time; Wallets imported before this fall back to
their non-generic account name and then the import-time name, skipping
migrated placeholders like 'Wallet 8880224f' / 'Copayer 80bcc6', so
existing Wallets show their name without a re-import. Settings shows
the same name.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Co-authored-by: nghiacc <nghiacc@yahoo.com>
Replace raw toFixed displays with shared en-US grouped formatters so
balances like 689169783.73 render as 689,169,783.73 across Home, detail,
history, send/receive, and fiat totals. Token parsing accepts commas.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Live Chronik→API→SSE already pushes tx events. Remove the Home Refresh
control, detail-page interval polls, and focus/visibility auto-refresh.
Balances still load once on import and update on SSE events/reconnect;
pull-to-reload covers hard sync and new builds.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Replace the full-width solid tab bar with a floating frosted pill:
backdrop blur, rim shine, sliding active blob across Home/Scan/Settings,
and a body portal so iOS does not flatten backdrop-filter.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Drop convex highlights, inset rim shadows, and glossy blob gradients.
Keep the frosted floating pill with a flat active segment.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Load token images from icons.etokens.cash (same CDN Cashtab uses),
cache them in abcpay-token-icons-v1 for reuse/offline, prefetch on
discovery, and show them on Home, detail, Settings, and send-token.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Add a top-of-page pull gesture with progress indicator that hard-reloads
(after requesting a service-worker update). Standalone iOS PWAs lack
Safari’s native pull-to-refresh; this restores that affordance.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
Short pull peeks for a new web build (reload only if the bundle changed)
and otherwise soft-refreshes balances. Long pull force-reloads immediately
without waiting on the service worker, so everyday pulls stay fast.

Co-authored-by: nghiacc <nghiacc@yahoo.com>
@coderabbitai

coderabbitai Bot commented Oct 20, 2026

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 71a9c128-5179-4ba0-90ee-a797d2efdb2e
📥 Commits

Reviewing files that changed from the base of the PR and between 7f64d37 and 7987d8d.

⛔ Files ignored due to path filters: 12
  • apps/abcpay-web/public/abcpay-logo.svg is excluded by !**/*.svg
  • apps/abcpay-web/public/abcpay-text.svg is excluded by !**/*.svg
  • apps/abcpay-web/public/currencies/doge.svg is excluded by !**/*.svg
  • apps/abcpay-web/public/currencies/eToken.svg is excluded by !**/*.svg
  • apps/abcpay-web/public/currencies/token.svg is excluded by !**/*.svg
  • apps/abcpay-web/public/currencies/xec.svg is excluded by !**/*.svg
  • apps/abcpay-web/public/favicon.ico is excluded by !**/*.ico
  • apps/abcpay-web/public/icons/apple-touch-icon.png is excluded by !**/*.png
  • apps/abcpay-web/public/icons/icon-192.png is excluded by !**/*.png
  • apps/abcpay-web/public/icons/icon-512.png is excluded by !**/*.png
  • apps/abcpay-web/public/icons/icon-foreground.png is excluded by !**/*.png
  • apps/abcpay-web/public/logo-round.svg is excluded by !**/*.svg
📒 Files selected for processing: 31
  • apps/abcpay-api/src/routes.ts
  • apps/abcpay-api/src/services/__tests__/notification.service.test.ts
  • apps/abcpay-api/src/services/notification.service.ts
  • apps/abcpay-api/src/services/wallet.service.ts
  • apps/abcpay-web/index.html
  • apps/abcpay-web/public/manifest.webmanifest
  • apps/abcpay-web/public/sw.js
  • apps/abcpay-web/src/App.tsx
  • apps/abcpay-web/src/components/PaymentRequestsCard.tsx
  • apps/abcpay-web/src/components/PullToReload.tsx
  • apps/abcpay-web/src/components/TokenIcon.tsx
  • apps/abcpay-web/src/components/ui.tsx
  • apps/abcpay-web/src/context/NotificationContext.tsx
  • apps/abcpay-web/src/context/WalletContext.tsx
  • apps/abcpay-web/src/index.css
  • apps/abcpay-web/src/lib/api.ts
  • apps/abcpay-web/src/lib/pwa.ts
  • apps/abcpay-web/src/lib/token-format.ts
  • apps/abcpay-web/src/lib/token-icons.ts
  • apps/abcpay-web/src/pages/CreateWalletPage.tsx
  • apps/abcpay-web/src/pages/HistoryPage.tsx
  • apps/abcpay-web/src/pages/HomePage.tsx
  • apps/abcpay-web/src/pages/JoinWalletPage.tsx
  • apps/abcpay-web/src/pages/ReceivePage.tsx
  • apps/abcpay-web/src/pages/RestorePage.tsx
  • apps/abcpay-web/src/pages/SendPage.tsx
  • apps/abcpay-web/src/pages/SettingsPage.tsx
  • apps/abcpay-web/src/pages/TokenSendPage.tsx
  • apps/abcpay-web/src/pages/WalletDetailPage.tsx
  • packages/abcpay-wallet-core/src/__tests__/format-amount.test.ts
  • packages/abcpay-wallet-core/src/derivation.ts
+-----------------------------------------------------------+
| Ultimately, we're all just debugging someone else's code. |
+-----------------------------------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@nghiacc
nghiacc merged commit eb93094 into main Oct 20, 2026
1 of 2 checks passed
@nghiacc
nghiacc deleted the cursor/multi-wallet-account-restore-9650 branch October 20, 2026 13:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants