diff --git a/src/services/rain.ts b/src/services/rain.ts index 946a845f81..89d1e83c26 100644 --- a/src/services/rain.ts +++ b/src/services/rain.ts @@ -429,12 +429,15 @@ export const rainApi = { /** * Persist the serialized ZeroDev permission on the user's card so the * backend can submit session-key UserOps for collateral withdrawals. + * + * No step-up: the payload is itself a fresh passkey signature (the grant + * ceremony's enable sig) — an extra assertion here just doubles the + * fingerprint prompts on the grant flow. */ submitWithdrawSessionApproval: async (input: { serializedApproval: string }): Promise => { await rainRequest<{ ok: boolean }>({ method: 'POST', path: '/rain/cards/withdraw/session-approve', - stepUp: true, body: input, }) }, @@ -443,12 +446,16 @@ export const rainApi = { * Stage a Rain V2 withdrawal: backend fetches Rain's executor signature, * reads the current adminNonce from the collateral proxy, and persists a * short-lived prep record. Caller then signs the admin EIP-712 payload. + * + * No step-up: a prep is inert until the passkey produces the admin + * EIP-712 signature that follows it, so the flow proves user presence on + * its own. Step-up here made every collateral-funded send cost three + * fingerprint prompts instead of two (the 2026-07 triple-prompt reports). */ prepareWithdrawal: async (input: PrepareRainWithdrawalInput): Promise => { return rainRequest({ method: 'POST', path: '/rain/cards/withdraw/prepare', - stepUp: true, body: input, }) },