[Do Not Merge]: New WDK Starter RN App - #38
Conversation
- expo-router file-based routing under src/app - all 18 screens with working navigation - v2 light theme + dark-ready theme system - reusable component library - domain/data/session seams for WDK (mock repository) - auto-lock, edge-to-edge config
- RepositoriesProvider DI boundary (mock now, WDK-ready) - QueryClient + typed query hooks + centralized keys - loading/error/retry states on all data screens - screens no longer import concrete repositories
- add WdkAppProvider at root with minimal Bitcoin wdkConfigs - import generated worklet bundle - log useWdkApp lifecycle (INITIALIZING -> NO_WALLET confirmed) - no screen/behaviour change; still on mock repository
- Replace mock data with live WDK hooks (balances, account, send) - Wire wallet create/import/unlock via useWalletManager - Add session/lock handling: WdkSessionGate + AutoLockOnBackground - Fix locked-vs-no-wallet detection (lock() reports NO_WALLET, not LOCKED; disambiguate via persisted wallets list) Verified on device: create → real balance/address → lock → unlock.
…which is encrypted first with the help of wdk-utils and then we are storing it to secure storage
… icon on wallet and receive screen
…ve acccounts get listed in accounts screen
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
| "CloudKit" | ||
| ], | ||
| "com.apple.developer.icloud-container-identifiers": [ | ||
| "iCloud.io.tether.wdkshowcase" |
There was a problem hiding this comment.
CloudKit container here is iCloud.io.tether.wdkshowcase, but docs / .env.example use iCloud.io.tether.wdkstarterreactnative. Please align these.
| * | ||
| * ⚠️ Arbitrum and Polygon below point at REAL MAINNET — genuine funds and | ||
| * real Pimlico gas-sponsorship costs apply there. Only Ethereum (Sepolia) | ||
| * is a safe-to-experiment-freely testnet in this configuration. |
There was a problem hiding this comment.
Testnets and mainnets are easy to confuse here: ethereum is Sepolia in .env/explorers/indexer but labeled “Ethereum” in the UI; BTC uses network: 'bitcoin' (mainnet bc1… addresses) with a testnet Blockbook default and testnet explorers; Arb/Polygon are real mainnet. Please make network identity explicit end-to-end (config + labels + provider + explorers) so forks can tell testnet from real funds.
| package: '@tetherto/wdk-wallet-btc' | ||
| }, | ||
| spark: { | ||
| package: '@tetherto/wdk-wallet-spark' |
There was a problem hiding this comment.
Spark is in the worklet but not in runtime config/UI. Docs say Bitcoin needs it — wdk-wallet-btc doesn’t, and the bundle builds without it. Drop it or document why it stays.
jonathunne
left a comment
There was a problem hiding this comment.
Overall looks really fantastic! Aside from the comments I left in-line, I wanted to flag a few places where it looks like we can trim out some dead code. These were picked up by. a clanker, so verify carefully!
- The docs already admit
src/data/is obsolete (an earlier mock/WDK seam from before screens talked to WDK directly). It’s still in the tree? src/data/**— no screen undersrc/app/imports@/data;RepositoriesProvideris never mounted.AccountsHydrator— not mounted, and it callshydrate()on a store that no longer has it (accounts were deliberately made in-memory-only after the iOS Keychain-survives-uninstall bug).src/state/session.ts— unused; real session routing isuseWdkSession/WdkSessionGate.ARCHITECTURE.mdstill lists it with the live stores - please fix that when deleting.TokenIcon— exported but unused; every screen usesAssetIcon. Two icon components is one too many for a starter surface.
… Receive/Accounts/Activity fixes
Summary
Completes the onboarding flow end to end against a real WDK wallet —
not mocked — from Welcome through wallet creation/import, app password
setup, and cloud backup. Every screen was built by extracting the exact
markup/CSS from the design prototype rather than approximating it.
What's included
WDK integration (Steps 1–5)
runtime initialized)
docs/WDK_INTEGRATION.mdfor the full step-by-step and the versionpins that matter (
wdk-react-native-coremust stay on1.0.0-beta.10— see that doc for why)
Onboarding screens (prototype-matched)
word grid)
Security
@tetherto/wdk-utils, hardware-backedvault key) — see
docs/SECURITY.mdfor the stated tradeoff vs. aone-way verifier
fixes for three platform-specific bugs (iOS's
inactivetransitionstate, wallet-creation's transient locked-looking state, Google
Sign-In's native-Activity false-backgrounding signal)
Cloud backup
platform (not platform-gated)
including the iOS Google OAuth client this required beyond the
reference implementation) documented in
docs/CLOUD_BACKUP.mdResponsive design system
anchored to the prototype's own canvas size, not fixed pixel values
Documentation
README.md— replaces a stale template README that didn't describethis project
docs/ENVIRONMENT.md,docs/ARCHITECTURE.md,docs/PROJECT_STRUCTURE.md,docs/WDK_INTEGRATION.md,docs/SECURITY.md,docs/CLOUD_BACKUP.md,docs/TROUBLESHOOTING.mdCONTRIBUTING.md,.env.exampleTesting done
wallet home
phrase
uninstall — self-healing fix verified)
Known limitations (not in scope for this PR)
yet —
downloadBackup()exists and is readythe same prototype-matching pass as onboarding
mnemonic validation)
How to test this PR
See
README.md→ Quick Start, anddocs/ENVIRONMENT.mdfor requiredtoolchain versions (npm ≥ 11 and JDK 17 specifically — mismatches here
cause confusing native crashes, not clean errors). Cloud backup requires
your own Apple/Google developer setup — see
docs/CLOUD_BACKUP.md.