Skip to content

Fixes for onramper and cash app - #2598

Open
mul53 wants to merge 11 commits into
masterfrom
qa
Open

mul53 wants to merge 11 commits into
masterfrom
qa

Conversation

@mul53

@mul53 mul53 commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

claude and others added 7 commits September 27, 2026 11:37
Implements the Yield boost card from Figma 26134:23293 with its Claim
button, and puts the card back on the funded savings vault screen (the
redesign had dropped it), under the balance card.

- The boost is paid by Merkl campaigns (one per vault, all WFUSE on
  Fuse). lib/merklYieldBoost.ts reads the WFUSE leaf from
  /v4/users/{address}/rewards, scopes "Total Earned" to the campaign ids
  in EXPO_PUBLIC_MERKL_YIELD_BOOST_CAMPAIGN_IDS, and builds the claim.
  It doesn't import @merkl/api, so it can be tested without it.
- Claim is one user operation: Distributor.claim with the cumulative
  amount, then WFUSE.withdraw of exactly what the claim pays, measured
  against the Distributor's own claimed record so a stale index can't
  revert the batch. Proofs are re-read (bypassing Merkl's cache) right
  before signing, and the query is refreshed the same way afterwards.
- Total Earned is the boost campaigns' credited amount plus pending, in
  USD at the app's FUSE price (Merkl's quote as a fallback).
- The card stays visible with a disabled "—" boost for a user who lost
  their tier but still has something to claim.
- The rewards yield-boost sheet now describes the FUSE boost and its
  balance cap ("on your first $10,000") when the backend sends
  yieldBoostBalanceCap, and keeps the old copy when it doesn't.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EupadZ9qYL5nDLM6dDtu5n
…mentation-nogeis

Add Merkl yield boost claiming to savings screen
The rail only existed in the wallet flow. It now appears in all three
card funding modals — Wirex, and Rain on mobile and desktop.

The steps are the same screens; only the shell differs. OrchestraFlow
renders them with the host's own navigator, the way BuyCryptoFlow already
does for TransFi, and lib/orchestraFlow supplies the title and back
target so each host asks the owning flow rather than keeping its own
copy. Both embedded flows now route through one pair of helpers in each
modal.

Which balance gets funded is the entry point's to decide, not the
screen's: useOrchestraCardEntry sets it to 'card' and the amount screen
sends it, so the server resolves the card's own address instead of the
Safe. The receive line follows suit — "in your card balance" rather than
"in your wallet". A modal that forgot to set it would quietly fund the
wallet from a screen titled Fund your card, which is why that lives in a
shared hook rather than three copies.

The row is passed only when the server says the deposit is available, so
it stays hidden rather than disabled outside the US.

Worth noting the neighbouring "Buy crypto" row is dead code today: it
takes onBuyCryptoPress and none of the three modals pass it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Onramper's hosted widget is back, as an "Apple Pay" method under USD in both
deposit flows.

- Wallet: Cash → USD → "Deposit US Dollars" lists Wire transfer/ACH, Cash App
  where the server allows it, and Apple Pay. The bank rail and Apple Pay are
  offered everywhere, so USD now always opens the chooser instead of going
  straight to the bank rail outside the US.
- Card (Rain mobile and desktop): USD opens the same list — Wire transfer/ACH
  and Apple Pay — as a step of the funding modal, and back from the widget
  returns to it. Wirex's funding screen has no USD section and is unchanged.
- The rows live in one UsdMethodList shared by both flows, and Cash App
  availability in one useIsCashAppAvailable hook shared by the cash list's
  chips and the USD list.
- The widget session now names its destination: the card funding modals ask
  for `card`, so the purchase lands on the card deposit address and arrives as
  card balance, while the wallet flow keeps `wallet`. Until the matching
  backend change deploys, the field is ignored and card-screen purchases keep
  landing in the wallet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nramp

feat(deposit): offer Cash App under Fund your card
Resolves the conflicts with a4b43a8 (Cash App under Fund your card) in both
Rain card funding modals. Titles and back targets come from the shared
getEmbeddedTitle and getEmbeddedBackTarget, and the Onramper widget still
returns to the USD methods step it is opened from. useOrchestraCardEntry now
reads Cash App availability from useIsCashAppAvailable, so the rule lives in
one place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(deposit): Apple Pay under USD, funding the card from card screens
@vercel

vercel Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
solid-app-staging Ready Ready Preview Sep 28, 2026 10:16pm UTC
1 Skipped Deployment
Project Deployment Actions Updated
solid-app Ignored Ignored Preview Sep 28, 2026 10:16pm UTC

Request Review

mul53 and others added 2 commits September 28, 2026 22:45
…page

On STANDARD_KYC_REQUIRED / ENHANCED_KYC_REQUIRED the error screen offered
"Verify identity", which opened our own identity flow. The user is already
verified there, so it bounced them back to the amount screen and into the same
refusal - a loop with no way out.

The screen now reads "Upgrade your verification" and asks the backend for
TransFi's page for the level the refusal names (POST /transfi/kyc/upgrade),
then opens it. When TransFi already has a submission it shows "Verification in
review" instead, and it offers "Buy a smaller amount", since the limit only
caps this purchase. Every other complete_kyc error behaves as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(buy-crypto): send a KYC-limit refusal to TransFi's verification page
@claude

claude Bot commented Sep 28, 2026

Copy link
Copy Markdown

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

mul53 and others added 2 commits September 29, 2026 00:08
Cash App was a row of its own at the bottom of "Fund your card", in the
Other group, while the wallet flow lists it under USD beside Apple Pay.
The card screens now do the same.

- Rain (mobile and desktop): USD opens "Deposit US Dollars", which lists
  Wire transfer/ACH, Cash App where the server allows it, and Apple Pay.
  The USD row's chips name Cash App when it is offered, and back from the
  Cash App amount screen returns to the USD methods rather than the list.
- Wirex has no USD section, so it no longer offers Cash App at all. Its
  modal is back to what it was before Cash App was added to it, and the
  Other group's Cash App row goes with its last caller.
- The USD chips come from one getUsdMethodChips helper beside
  UsdMethodList, shared by the wallet's cash list and the card options,
  so the two USD rows cannot drift apart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-position-faaa69

fix(deposit): list Cash App under USD on Fund your card

This branch was successfully deployed

1 active deployment
Production – solid-app-staging — 88d8c7f2 Deployed Sep 28, 2026 by vercel[bot]
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.

3 participants