Skip to content

Prod release SP-153 — dev → main - #2567

Closed
jjramirezn wants to merge 88 commits into
mainfrom
dev
Closed

Prod release SP-153 — dev → main#2567
jjramirezn wants to merge 88 commits into
mainfrom
dev

Conversation

@jjramirezn

@jjramirezn jjramirezn commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Release page: prod release sp 153

Changelog (PRs new to main)

Migrations

None (frontend).

Note: i18n (#2447) is the big rock this release — smoke the es-419/pt-BR locales and the language picker on staging during freeze.

🤖 Generated with Claude Code

…zation header

CapacitorHttp's Android GET proxy (_capacitor_http_interceptor_) stalls under
load, timing out every in-flight request after 10s (PEANUT-UI-R44): ~400
timeouts/user on Android vs ~3 on web/iOS over 14d, GETs only, in correlated
bursts. Requests now go direct from the webview, same path as web.

- auth: token moves from the CapacitorHttp cookie jar to @capacitor/preferences
  (survives webview storage eviction, unlike localStorage — PEANUT-UI-QTQ),
  hydrated into an in-memory cache and sent as Authorization. authReady() gates
  callApi and direct fetchWithSentry call sites against cold-start races.
- login: the ZeroDev SDK consumes /passkeys/*/verify responses internally, so a
  window.fetch wrapper captures the body token on native. /users/me sliding
  refresh keeps it current via the existing setAuthToken path.
- old binaries keep working: server still accepts the jwt-token cookie and
  hasNativeSession falls back to the legacy jar. Existing native sessions are
  not migrated — testers log in once after updating.
- fetchWithSentry: idempotent requests (GET/HEAD) get one silent retry on
  timeout before surfacing.
- canary: one-shot startup probe reports direct-fetch viability to Sentry
  (message:"direct-fetch canary", tags outcome/transport) so the transport
  switch is validated fleet-wide via OTA before the binary rolls out.
@capacitor/device requires the next native binary release; JS falls back
to navigator.language on older binaries.
Hoist the lazy viem require in peanut-claim.utils (viem is already
statically imported there) and scope the rule off for Jest test files,
where require() after jest.mock()/resetModules() is intentional.
Remove dead imports/declarations, use bare catch where the binding was
unused, and _-prefix signature-bound params and kept hook results.
Also ignore ios/ and build/ (generated) in eslint.
Replace raw <a> internal-route anchors with <Link> (client-side
navigation) across LandingPage components and the dev debug page.
- src/i18n/app: locale config + resolveLocale normalizer, catalogs
  (en/es-419/pt-BR), deep-merge loader so missing keys render English,
  runtime locale store (Preferences/Device on native, cookie on web),
  AppIntlProvider with hydration-safe English-first state
- provider wired into ClientProviders; native splash gated on the
  startup locale being painted (2s timeout guard)
- loadingStates union converted to a const array + key mapping
- jest: transform ESM-only intl packages (pnpm-aware ignore pattern)

Marketing i18n (src/i18n/*.json) untouched.
/settings/language screen with the supported locales, reached from a
new Profile row showing the active language. Live re-render on switch,
persisted via Preferences (native) / cookie (web).
The OPEN-status badge fix was picked up by 1eb7c3c ("fix(lint): resolve
no-unused-vars") along with that commit's lint sweep. It is unrelated to
localization and is being reviewed on its own branch against main
(peanut-ui#2430), so remove it here to keep the two changes separable.

Pure removal — no behaviour change beyond reverting to main's badge logic.
Step titles/descriptions keyed by screenId (removed from ISetupStep),
all Setup views, wrapper, and (setup) pages on useTranslations.
es-419 + pt-BR drafts included.
Home screen, activation CTAs, carousel, perk/welcome modals, tab bar,
desktop sidebar and top navbar. TopNavbar maps pathname to typed
navigation.* keys, replacing the pathTitles util.
ExchangeRateWidget (marketing-shared) takes an optional labels prop with
English defaults; product callers pass translated labels.
Limits warning-card items now carry a kind discriminator so render
sites can map them to translated copy; qr-pay uses it.
The warning card rendered raw English item text for the withdraw and
add-money callers while qr-pay mapped the kind discriminator at its own
render site. Resolve copy inside the card instead, so every flow gets it,
and drop the duplicated mapping from qr-pay.

Passkey troubleshooting steps and warnings become ids resolved against
setup.passkey.help.*, so the modal's content is translated, not just its
chrome.
The min/max cashout branches assigned the placeholder slugs
'offramp_lt_minimum'/'offramp_mt_maximum', which ErrorAlert rendered
verbatim — users saw the raw slug. Assign real messages with the limit
formatted as currency.

Also return on the over-maximum branch: it set the error and then kept
going, fetching a route and letting the flow continue past the limit,
unlike the under-minimum branch.
validatePin returns reason codes instead of English copy so the util
stays copy-free; CardPinSetupFlow maps them to messages.
CardCountryConfirmScreen feeds the active locale into Intl.DisplayNames
(was hardcoded to en), so country names follow the UI language.
Drop the vestigial capitalize class on the feed's type label: it existed
to case raw enum values (getActionText returned the type verbatim), but
the catalog now supplies cased copy, and CSS title-casing mangles
multi-word labels in every locale.

cardDeclineReason and the bank-account label util return codes now, with
the copy resolved at the render site.
Drop the capitalize class on the badge-unlocked label for the same
reason as the transaction feed: it title-cased translated copy.

Remove invites.consts.ts — it held only display copy, and its last
consumer now reads the setup-flow waitlist key so the two gates can't
drift.
sumsub-reject-labels.consts.ts becomes a copy-free code registry; the
62 reject labels move to the kyc namespace and resolve at the render
site, with unknown codes collapsing to FALLBACK as before.

recover-funds no longer prints a raw loadingState or raw token amounts,
and the KYC screens format dates through the active locale instead of a
hardcoded en-US.
Marketing-shared components under Global/ keep their English and take
copy as props instead: they render inside the app intl context, but the
marketing site resolves its language from the URL, so a shared component
would show the app locale on a marketing page.

Fix UserCard.getTitle reading fullName/username while only depending on
type, which rendered a stale name after a rename.
Extraction silently rewrote ' to the typographic form in 32 places,
changing English copy that ships today (e.g. the balance-warning modal's
"you're the only one who can access your funds"). Straighten them all so
en matches source and reads consistently; the translated catalogs are
unaffected.

Also wrap the useSumsubKycFlow test in an intl provider — the hook now
calls useTranslations and the suite never had one.
friendly-error.utils.tsx becomes copy-free: ErrorHandler is replaced by
friendlyError(), returning a code or backend-provided text, resolved to
a message by the new useFriendlyError hook. Backend copy (rain collateral,
stale-card re-enable with its dynamic retry hint) passes through untranslated.

Three sites compared the rendered error string against a constant to gate
UI; those now compare the error CODE, so the gate survives translation.
src/features/payments was missed by every earlier pass — a lint probe
caught it. Extends the existing payment namespace (no payments dupe);
contributor and receipt counts use ICU plurals, the 'on <chain>' label
reuses the shared tokenSelector.onChain rich-text key. Also covers the
KYC status drawer, sumsub load-error, and amount-input balance label.
Scopes react/jsx-no-literals to the translated surface so new hardcoded
JSX strings fail lint. Excludes tests, the /dev catalog, and marketing-
shared Global components; allowlists non-copy glyphs (card masks, %,
decorative emoji). Extraction stragglers the guard surfaced are also
handled: the beta/demo banners and the transaction 'Enjoy Peanut!' title.
useSendMoney calls useTranslations, and it runs inside ContextProvider
(via TokenContextProvider → useWallet), which was mounted ABOVE the intl
provider — so every route 500'd with a missing-context error. Unit tests
each wrap their subject in a provider, so only a full-app render caught
it. Move AppIntlProvider to wrap ContextProvider (still inside
PeanutProvider, which needs no translations).
'Video element not available' was shown to users when the video element
lost the mount race. Say what it means to them instead.

Adds a ClientProviders provider-order test: it walks the real element
tree rather than rendering it, so the AppIntlProvider-wraps-ContextProvider
contract is checked without mocking the wallet and kernel stack.
Everything except no-explicit-any and no-restricted-imports. Most of these
turned out to be malformed eslint-disable directives rather than the code
defects the rule names suggested.

react-hooks/exhaustive-deps (PerkClaimModal, 2): the disable comments used an
em-dash before the description instead of ESLint's `--` separator, so ESLint
parsed the whole string as a rule name. The suppressions were not suppressing
anything and both exhaustive-deps warnings were firing. Both effects are
deliberately mount-only, so the separator is fixed and the reasoning kept.

react/no-unknown-property (6): `<style jsx global>` is styled-jsx, a Next
built-in, not an invalid DOM attribute. Taught the rule via `ignore` in the
config — two files under Card/share-asset had already been hand-disabling it,
so those disables are now redundant and removed.

import/first (5), jsx-a11y/alt-text (1): both rules are unregistered here (the
config uses import-x, and jsx-a11y is not installed), so these directives only
produced "rule not found" errors. Removed; the Jest-ordering rationale is kept
as a plain comment. The alt-text site is a next/image test mock, not a real
accessibility defect.

react/display-name (1): named the forwardRef render function in a Card mock.
no-empty-object-type (1): ILinkDetails.rawOnchainDepositInfo `{}` ->
Record<string, unknown>; the field is declared but read nowhere.

Also removed 7 dead disable directives for rules that are off in tests
(no-require-imports) or no longer exist (no-var-requires).

eslint: 441 -> 424 errors, 157 -> 148 warnings. typecheck, jest (142 suites /
1974 tests) and prettier all green.
Rewrites all 55 bare `from '@/interfaces'` imports to the file that actually
owns the symbol. The barrel only re-exported ./interfaces and
./wallet.interfaces, so this was uniform except useAccountSetup.ts, which is
the one consumer of WalletProviderType. src/interfaces/index.ts had no
remaining referrers and is deleted.

Also removed a jest.mock('@/interfaces') in withdraw-states.test.tsx. The deep
imports made it dead (it no longer intercepted anything), and it was redundant
regardless: it stubbed AccountType with four members whose values match the
real enum exactly, while shadowing the other three (EVM_ADDRESS,
PEANUT_WALLET, MANTECA). The suite passes against the real enum.

eslint: 424 -> 368 errors. typecheck 0, jest 142 suites / 1974 tests green.
Rewrites all 45 bare `from '@/assets'` imports. The root barrel re-exported ten
category sub-barrels, so a single named import pulled the whole asset graph in.

Most symbols resolve to a leaf file (the sub-barrels are pure
`export { default as X } from './x.svg'` re-exports), so those become direct
default imports — which is already the dominant convention in this codebase.
The exceptions are the computed consts in assets/mascot and assets/cards
(PeanutWhistling = pick(webp, gif), APPLE_WALLET_STEPS); those are defined in
their category index rather than re-exported, so the index is the owning file
and they keep a named import from '@/assets/mascot'.

eslint: 368 -> 323 errors. typecheck 0, jest 142 suites / 1974 tests green.
jjramirezn and others added 24 commits July 24, 2026 14:24
…flight

Between switching chains and the new resolution landing, recipient.address
still holds the previous chain's address and Review stayed clickable —
the exact wrong-chain send this PR fixes, in a narrow race window.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
crypto-withdraw-confirm.test.tsx (new on dev) mocks general.utils with only
the functions the page used at the time; the compatibility-modal change now
also renders printableAddress from that module.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ed-address

feat: chain-aware ENS resolution + visible resolved address in withdraw
Users pay the bank transfer / QR in ARS or BRL, but the input opened
USD-first (except Brazil), causing wrong-amount deposits. Match the
withdraw flow: local currency first, USD one toggle away.

Also map AmountInput's display symbol back to the ISO code before
persisting ?currency= — Brazil was writing currency=R$, which the
enum parser rejects, so the URL param never round-tripped.
Cohorting by payment capability (who has PIX, who has ACH) was
impossible — person profiles carried no rail info. Adds enabledRails
(PROVIDER:METHOD codes) and enabledRailIds (catalog rail ids) from the
user's ENABLED rails. Mirrors the server-side identify in peanut-api-ts
src/log/identifyUser.ts (PR #1131) — property names kept in sync.
The local-currency default was silently narrowed to Brazil-only once
(3ab0668); this suite makes the next flip fail loudly, and covers the
display-symbol → ISO-code mapping for the ?currency= param.
…rency-default

feat(add-money): default Manteca deposit input to local currency
feat: include enabled rails in PostHog identify
The balance-gate effect shares one errorState slot with submit-time failures (Rain signature-cooldown 425, settling copy). Right after a collateral spend the ~30s-polled spendable balance oscillates around the typed amount, so the gate overwrote the submit error with the insufficient-balance copy on the dip and then cleared it on the recovery - the user's real error silently vanished while they still couldn't spend (PostHog session 019f8f8c-d4d5-775c-97ab-3e47c532a694). The gate now only claims the error slot when it is free or already showing its own message; submit-time errors persist until the user retries or edits.
…ched view

New code must lint clean: type the Button mock and drop the any-spread in the useWallet mock. The touched view's '@/context' barrel import is swapped for the specific loadingStates.context file (same module instance, restricted-imports rule).
Two more transitions could still eat a submit-time error: a momentarily-unavailable balance cleared every error (now releases only the gate's own message; an emptied amount still clears all - that IS user input), and editing the amount left a stale failure on screen (now released back to the gate, which re-flags a genuine shortfall on the new amount). Regression tests for both.
…lowed

fix(send-link): keep submit-time errors visible through balance polls
…prompt

Clipboard.read() on scanner open fires before getUserMedia (camera start
deliberately sleeps 200ms on iOS), so the iOS 'Allow Paste' alert lands
first and blocks the camera permission dialog — getUserMedia never
settles and the 5s watchdog reports a false NotAllowedError ('Camera
start timed out'). Camera only opened on the second attempt, once iOS
remembered the paste grant for the session.

Reverts the pre-read shortcut from 32454bb. The explicit 'Click to
paste' button keeps the paste path on a real user gesture, which is
where the OS prompt belongs.
…-read

Reintroduces the clipboard shortcut removed in #2520 with a platform split
that can't race the camera permission dialog:

- Android native: unchanged from pre-revert — read at open, preview the
  copied EVM address in a one-tap chip (only side effect is the system
  paste toast).
- iOS native: a new app-local ClipboardDetect plugin exposes
  UIPasteboard.hasStrings — metadata only, so no iOS 16+ 'Allow Paste'
  alert. When true, a generic 'Use copied address' chip appears; the real
  Clipboard.read() runs on the chip tap, a user gesture, with the camera
  already live. Older binaries (OTA'd JS) resolve hasStrings to false and
  simply show no chip.
- Web/PWA: no pre-read; the explicit 'Click to paste' stays the fallback.

Needs an iOS binary release to activate the chip (new native plugin,
registered via AppViewController per Capacitor's app-local plugin flow).
… pin the platform split with tests

Review findings on the chip rework: a payment-routing failure inside
handleUsePasteChip landed in the clipboard catch and toasted 'Could not
access clipboard' (hiding the chip), and an empty clipboard on the chip
path used different copy than the 'Click to paste' path for the same
condition. Split the onScan await out of the clipboard try and reuse
handlePaste's empty-clipboard mapping.

New component test pins the load-bearing claim of the platform split:
Clipboard.read() never fires at scanner open off Android-native (the
PEANUT-UI-PYW paste-prompt race), iOS reads only on chip tap, Android
keeps the read-at-open preview.
…and guarded-scan helpers

Review follow-up (kush): the onScan-inside-clipboard-try misreport fixed on
the chip path still lived in handlePaste, the empty/error toast mapping was
duplicated across both handlers, and the Android chip called onScan with no
guard at all (unhandled rejection, no user feedback). One readClipboardText
helper + one scanValue wrapper now serve all three tap paths; tests pin the
two newly guarded ones.
…-preread

fix(qr-scanner): stop clipboard paste-prompt racing the camera; platform-gate the copied-address chip
…ch-timeouts

chore(fetch): back-merge #2533 (context-aware fetch timeouts) into dev
# Conflicts:
#	pnpm-lock.yaml
#	src/app/(mobile-ui)/add-money/page.tsx
#	src/app/(mobile-ui)/notifications/page.tsx
#	src/app/(mobile-ui)/withdraw/crypto/page.tsx
#	src/app/(mobile-ui)/withdraw/page.tsx
#	src/app/ClientProviders.tsx
#	src/components/Card/ApplicationStatusScreen.tsx
#	src/components/Card/PhysicalCardScreen.tsx
#	src/components/Card/YourCardScreen.tsx
#	src/components/Global/GeneralRecipientInput/index.tsx
#	src/components/Global/QRScanner/index.tsx
#	src/components/Home/ActivationCTAs.tsx
#	src/components/Kyc/KycVerificationInProgressModal.tsx
#	src/components/Send/link/views/Initial.link.send.view.tsx
#	src/components/TransactionDetails/TransactionDetailsReceipt.tsx
#	src/components/TransactionDetails/provider-rows/CardPaymentRows.tsx
#	src/components/TransactionDetails/transaction-details.utils.ts
#	src/components/Withdraw/views/Initial.withdraw.view.tsx
#	src/utils/__tests__/general.utils.test.ts
Localization (en / es-419 / pt-BR) + zero ESLint errors
The Android, iOS and demo-mode runbooks were consolidated into mono at
engineering/native/ so there is one source of truth. The copies here had
already drifted and now state wrong facts (Capgo deploy triggers, a secret
name that no longer exists, the wrong Sumsub plugin package), so a reader
landing on them gets misled.

Kept as pointers rather than deleted because three files in the release
pipeline still reference these paths. Paths are repo-relative, not
github.com URLs, so they also resolve for readers who only have a partial
copy of mono.
# Conflicts:
#	src/content
#	src/utils/auth-token.ts
chore: back-merge main into dev (keeps the CSP fix)
@vercel

vercel Bot commented Jul 29, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
peanut-wallet Ready Ready Preview, Comment Jul 29, 2026 11:21am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 514 files, which is 364 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to Pro+ to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 31c1b218-7c77-4427-a7dc-d93bc876adf0

📥 Commits

Reviewing files that changed from the base of the PR and between c4b041a and 134cf01.

⛔ Files ignored due to path filters (4)
  • android/app/capacitor.build.gradle is excluded by !android/**
  • android/capacitor.settings.gradle is excluded by !android/**
  • ios/App/CapApp-SPM/Package.swift is excluded by !ios/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (520)
  • capacitor.config.ts
  • eslint.config.js
  • next.config.js
  • package.json
  • scripts/native-build.js
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx
  • src/app/(mobile-ui)/add-money/__tests__/add-money-states.test.tsx
  • src/app/(mobile-ui)/add-money/crypto/page.tsx
  • src/app/(mobile-ui)/add-money/page.tsx
  • src/app/(mobile-ui)/card-recovery/page.tsx
  • src/app/(mobile-ui)/card/limit/page.tsx
  • src/app/(mobile-ui)/card/page.tsx
  • src/app/(mobile-ui)/card/physical/page.tsx
  • src/app/(mobile-ui)/card/pin/page.tsx
  • src/app/(mobile-ui)/dev/debug/page.tsx
  • src/app/(mobile-ui)/dev/ds/_components/Playground.tsx
  • src/app/(mobile-ui)/dev/ds/patterns/drawer/page.tsx
  • src/app/(mobile-ui)/dev/full-graph/page.tsx
  • src/app/(mobile-ui)/dev/leaderboard/page.tsx
  • src/app/(mobile-ui)/dev/perk-success-test/page.tsx
  • src/app/(mobile-ui)/history/page.tsx
  • src/app/(mobile-ui)/home/page.tsx
  • src/app/(mobile-ui)/notifications/page.tsx
  • src/app/(mobile-ui)/profile/backup/page.tsx
  • src/app/(mobile-ui)/profile/exchange-rate/page.tsx
  • src/app/(mobile-ui)/profile/page.tsx
  • src/app/(mobile-ui)/qr-pay/__tests__/qr-pay-states.test.tsx
  • src/app/(mobile-ui)/qr-pay/page.tsx
  • src/app/(mobile-ui)/qr/[code]/page.tsx
  • src/app/(mobile-ui)/qr/[code]/success/page.tsx
  • src/app/(mobile-ui)/recover-funds/page.tsx
  • src/app/(mobile-ui)/rewards/invites/page.tsx
  • src/app/(mobile-ui)/rewards/page.tsx
  • src/app/(mobile-ui)/settings/language/page.tsx
  • src/app/(mobile-ui)/settings/page.tsx
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
  • src/app/(mobile-ui)/withdraw/__tests__/withdraw-states.test.tsx
  • src/app/(mobile-ui)/withdraw/crypto/__tests__/crypto-withdraw-confirm.test.tsx
  • src/app/(mobile-ui)/withdraw/crypto/page.tsx
  • src/app/(mobile-ui)/withdraw/manteca/page.tsx
  • src/app/(mobile-ui)/withdraw/page.tsx
  • src/app/(setup)/layout.tsx
  • src/app/(setup)/setup/finish/page.tsx
  • src/app/(setup)/setup/page.tsx
  • src/app/ClientProviders.tsx
  • src/app/[...recipient]/error.tsx
  • src/app/[...recipient]/page.tsx
  • src/app/[locale]/(marketing)/team/page.tsx
  • src/app/__tests__/ClientProviders.test.tsx
  • src/app/actions/__tests__/api-headers-extended.test.ts
  • src/app/actions/__tests__/api-headers.test.ts
  • src/app/actions/__tests__/currency.test.ts
  • src/app/actions/bridge/get-customer.ts
  • src/app/actions/card.ts
  • src/app/actions/clients.ts
  • src/app/actions/currency.ts
  • src/app/actions/ens.ts
  • src/app/actions/exchange-rate.ts
  • src/app/actions/external-accounts.ts
  • src/app/actions/onramp-quote.ts
  • src/app/actions/users.ts
  • src/app/api/exchange-rate/route.ts
  • src/app/api/health/justaname/route.ts
  • src/app/api/health/route.ts
  • src/app/api/health/rpc/route.ts
  • src/app/api/health/zerodev/route.ts
  • src/app/api/og/route.tsx
  • src/app/api/preview-image/route.tsx
  • src/app/api/recent-transactions/route.ts
  • src/app/careers/page.tsx
  • src/app/dev/loading-words/page.tsx
  • src/app/invite/page.tsx
  • src/app/kyc/success/page.tsx
  • src/app/lp/card/CardLandingPage.tsx
  • src/app/quests/[questId]/page.tsx
  • src/app/quests/components/QuestCard.tsx
  • src/app/quests/components/QuestLeaderboard.tsx
  • src/app/quests/components/QuestsHero.tsx
  • src/app/quests/explore/page.tsx
  • src/components/AddMoney/components/AddMoneyBankDetails.tsx
  • src/components/AddMoney/components/ChooseNetworkDrawer.tsx
  • src/components/AddMoney/components/EvmChainChips.tsx
  • src/components/AddMoney/components/HowToDepositModal.tsx
  • src/components/AddMoney/components/InputAmountStep.tsx
  • src/components/AddMoney/components/MantecaAddMoney.tsx
  • src/components/AddMoney/components/MantecaDepositShareDetails.tsx
  • src/components/AddMoney/components/MantecaPixQrDeposit.tsx
  • src/components/AddMoney/components/OnrampConfirmationModal.tsx
  • src/components/AddMoney/components/SupportedNetworksModal.tsx
  • src/components/AddMoney/components/__tests__/MantecaAddMoney.test.tsx
  • src/components/AddMoney/components/__tests__/MantecaPixQrDeposit.test.tsx
  • src/components/AddMoney/hooks/__tests__/useMantecaDepositPolling.test.tsx
  • src/components/AddMoney/views/AddMoneyMethodSelection.view.tsx
  • src/components/AddMoney/views/CryptoDeposit.view.tsx
  • src/components/AddMoney/views/OfframpHandleGate.view.tsx
  • src/components/AddMoney/views/RhinoDeposit.view.tsx
  • src/components/AddWithdraw/AddWithdrawCountriesList.tsx
  • src/components/AddWithdraw/AddWithdrawRouterView.tsx
  • src/components/AddWithdraw/DynamicBankAccountForm.tsx
  • src/components/AddWithdraw/__tests__/AddWithdrawCountriesList.test.tsx
  • src/components/AddWithdraw/__tests__/AddWithdrawRouterView.test.tsx
  • src/components/Auth/auth.e2e.test.ts
  • src/components/Badges/BadgeDetailModal.tsx
  • src/components/Badges/BadgeEarnToast.tsx
  • src/components/Badges/BadgeStatusDrawer.tsx
  • src/components/Badges/BadgeStatusItem.tsx
  • src/components/Badges/BadgesRow.tsx
  • src/components/Badges/__tests__/BadgeEarnToast.test.tsx
  • src/components/Badges/__tests__/BadgesRow.test.tsx
  • src/components/Badges/badge.types.ts
  • src/components/Badges/index.tsx
  • src/components/Card/AddCardEntryScreen.tsx
  • src/components/Card/AddToWalletCarousel.tsx
  • src/components/Card/ApplicationStatusScreen.tsx
  • src/components/Card/BadgeSkipCelebration.tsx
  • src/components/Card/CancelCardModal.tsx
  • src/components/Card/CardCountryConfirmScreen.tsx
  • src/components/Card/CardEligibilityCheckScreen.tsx
  • src/components/Card/CardFace.tsx
  • src/components/Card/CardLimitEditModal.tsx
  • src/components/Card/CardLimitsScreen.tsx
  • src/components/Card/CardPinScreen.tsx
  • src/components/Card/CardPinSetupFlow.tsx
  • src/components/Card/CardRejectionScreen.tsx
  • src/components/Card/CardTermsScreen.tsx
  • src/components/Card/CardUnlockDrawer.tsx
  • src/components/Card/CardUnlockHistoryItem.tsx
  • src/components/Card/LockCardModal.tsx
  • src/components/Card/PhysicalCardScreen.tsx
  • src/components/Card/PinInput.tsx
  • src/components/Card/SlideToAction.tsx
  • src/components/Card/YourCardScreen.tsx
  • src/components/Card/__tests__/ApplicationStatusScreen.test.tsx
  • src/components/Card/__tests__/CardCountryConfirmScreen.test.tsx
  • src/components/Card/__tests__/CardFace.test.tsx
  • src/components/Card/__tests__/PhysicalCardScreen.test.tsx
  • src/components/Card/pin.utils.ts
  • src/components/Card/share-asset/RejectionAssetD3.tsx
  • src/components/Card/share-asset/ShareAssetActions.tsx
  • src/components/Card/share-asset/ShareAssetD3.tsx
  • src/components/Claim/Claim.tsx
  • src/components/Claim/Generic/ClaimError.view.tsx
  • src/components/Claim/Generic/Claimed.view.tsx
  • src/components/Claim/Link/Initial.view.tsx
  • src/components/Claim/Link/MantecaFlowManager.tsx
  • src/components/Claim/Link/Onchain/Confirm.view.tsx
  • src/components/Claim/Link/Onchain/Success.view.tsx
  • src/components/Claim/Link/SendLinkActionList.tsx
  • src/components/Claim/Link/__tests__/SendLinkActionList.test.tsx
  • src/components/Claim/Link/views/BankFlowManager.view.tsx
  • src/components/Claim/Link/views/Confirm.bank-claim.view.tsx
  • src/components/Claim/Link/views/MantecaDetailsStep.view.tsx
  • src/components/Claim/Link/views/MantecaReviewStep.tsx
  • src/components/Claim/__tests__/claim-states.test.tsx
  • src/components/Claim/useClaimLink.tsx
  • src/components/Common/ContactsListSkeleton.tsx
  • src/components/Common/CountryList.tsx
  • src/components/Common/CountryListRouter.tsx
  • src/components/Common/PointsCard.tsx
  • src/components/Common/SavedAccountsView.tsx
  • src/components/Create/useCreateLink.tsx
  • src/components/ExchangeRate/index.tsx
  • src/components/ForceIOSPWAInstall/index.tsx
  • src/components/Global/AmountInput/index.tsx
  • src/components/Global/AppLock/index.tsx
  • src/components/Global/Attachment/index.tsx
  • src/components/Global/BackendErrorScreen/index.tsx
  • src/components/Global/BalanceWarningModal/index.tsx
  • src/components/Global/Banner/MantecaTransfersMaintenanceView.tsx
  • src/components/Global/Banner/index.tsx
  • src/components/Global/CancelSendLinkModal/index.tsx
  • src/components/Global/ConfirmInviteModal/index.tsx
  • src/components/Global/CopyField/index.tsx
  • src/components/Global/CopyToClipboard/index.tsx
  • src/components/Global/CreateAccountButton/index.tsx
  • src/components/Global/EarlyUserModal/index.tsx
  • src/components/Global/EasterEggModal/index.tsx
  • src/components/Global/ErrorAlert/index.tsx
  • src/components/Global/ExchangeRateWidget/index.tsx
  • src/components/Global/FileUploadInput/index.tsx
  • src/components/Global/GeneralRecipientInput/__tests__/GeneralRecipientInput.test.tsx
  • src/components/Global/GeneralRecipientInput/index.tsx
  • src/components/Global/GuestLoginModal/index.tsx
  • src/components/Global/GuestVerificationModal/index.tsx
  • src/components/Global/Icons/Icon.tsx
  • src/components/Global/IframeWrapper/index.tsx
  • src/components/Global/InfoCard/index.tsx
  • src/components/Global/InviteFriendsModal/index.tsx
  • src/components/Global/InvitesGraph/index.tsx
  • src/components/Global/IosPwaInstallModal/index.tsx
  • src/components/Global/Layout/index.tsx
  • src/components/Global/LogoutButton/index.tsx
  • src/components/Global/MarqueeWrapper/index.tsx
  • src/components/Global/Modal/index.tsx
  • src/components/Global/NoMoreJailModal/index.tsx
  • src/components/Global/OfflineScreen/index.tsx
  • src/components/Global/PeanutActionCard/index.tsx
  • src/components/Global/PeanutActionDetailsCard/index.tsx
  • src/components/Global/PeanutLoading/CyclingLoading.tsx
  • src/components/Global/PeanutLoading/index.tsx
  • src/components/Global/PostSignupActionManager/index.tsx
  • src/components/Global/ProgressBar/index.tsx
  • src/components/Global/QRBottomDrawer/index.tsx
  • src/components/Global/QRCodeWrapper/index.tsx
  • src/components/Global/QRScanner/CameraPermissionModal.tsx
  • src/components/Global/QRScanner/__tests__/index.test.tsx
  • src/components/Global/QRScanner/index.tsx
  • src/components/Global/QRScanner/useQRScanner.ts
  • src/components/Global/QRScannerOverlay/index.tsx
  • src/components/Global/RainCooldown/IntroModal.tsx
  • src/components/Global/RouteExpiryTimer/index.tsx
  • src/components/Global/ScreenOrientationLocker.tsx
  • src/components/Global/SecurityVerificationOverlay/index.tsx
  • src/components/Global/ShareButton/index.tsx
  • src/components/Global/SoundPlayer.tsx
  • src/components/Global/StaleCardApproval/ReEnableModal.tsx
  • src/components/Global/StaleCardApproval/__tests__/ReEnableModal.test.tsx
  • src/components/Global/SuccessViewComponents/SuccessViewDetailsCard.tsx
  • src/components/Global/SupportCTA/index.tsx
  • src/components/Global/SupportDrawer/__tests__/SupportDrawer.test.tsx
  • src/components/Global/SupportDrawer/index.tsx
  • src/components/Global/TokenAndNetworkConfirmationModal/index.tsx
  • src/components/Global/TokenSelector/Components/NetworkButton.tsx
  • src/components/Global/TokenSelector/Components/NetworkListView.tsx
  • src/components/Global/TokenSelector/Components/SearchInput.tsx
  • src/components/Global/TokenSelector/Components/TokenListItem.tsx
  • src/components/Global/TokenSelector/TokenSelector.consts.ts
  • src/components/Global/TokenSelector/TokenSelector.tsx
  • src/components/Global/TopNavbar/index.tsx
  • src/components/Global/UnsupportedBrowserModal/index.tsx
  • src/components/Global/ValidatedInput/index.tsx
  • src/components/Global/WalletNavigation/index.tsx
  • src/components/Home/ActivationCTAs.tsx
  • src/components/Home/CardLaunchCTA/CardLaunchCTABanner.tsx
  • src/components/Home/EnableAutoBalanceBanner.tsx
  • src/components/Home/HomeCarouselCTA/CarouselCTA.tsx
  • src/components/Home/HomeCarouselCTA/index.tsx
  • src/components/Home/HomeHistory.tsx
  • src/components/Home/PerkClaimModal.tsx
  • src/components/Home/WelcomeUnlockModal/index.tsx
  • src/components/Home/__tests__/ActivationCTAs.test.tsx
  • src/components/Home/__tests__/EnableAutoBalanceBanner.test.tsx
  • src/components/IdentityVerification/UnlockRegionModal.tsx
  • src/components/Invites/InvitesPage.tsx
  • src/components/Invites/InvitesPageLayout.tsx
  • src/components/Invites/JoinWaitlistPage.tsx
  • src/components/Invites/campaign-maps.test.ts
  • src/components/Invites/campaign-maps.ts
  • src/components/Jobs/index.tsx
  • src/components/Kyc/AdvisoryPreemptModal.tsx
  • src/components/Kyc/BridgeTosStep.tsx
  • src/components/Kyc/CountryRegionRow.tsx
  • src/components/Kyc/InitiateKycModal.tsx
  • src/components/Kyc/KYCStatusDrawerItem.tsx
  • src/components/Kyc/KycFailedContent.tsx
  • src/components/Kyc/KycReverificationPendingModal.tsx
  • src/components/Kyc/KycStatusDrawer.tsx
  • src/components/Kyc/KycStatusItem.tsx
  • src/components/Kyc/KycVerificationInProgressModal.tsx
  • src/components/Kyc/PeanutDoesntStoreAnyPersonalInformation.tsx
  • src/components/Kyc/ProvideEmailStep.tsx
  • src/components/Kyc/RejectLabelsList.tsx
  • src/components/Kyc/SumsubKycWrapper.tsx
  • src/components/Kyc/__tests__/SumsubKycWrapper.test.tsx
  • src/components/Kyc/modals/KycActionRequiredModal.tsx
  • src/components/Kyc/modals/KycFailedModal.tsx
  • src/components/Kyc/modals/KycProcessingModal.tsx
  • src/components/Kyc/states/KycActionRequired.tsx
  • src/components/Kyc/states/KycCompleted.tsx
  • src/components/Kyc/states/KycFailed.tsx
  • src/components/Kyc/states/KycProcessing.tsx
  • src/components/Kyc/states/__tests__/KycActionRequired.rejectCopy.test.tsx
  • src/components/Kyc/states/__tests__/KycStates.test.tsx
  • src/components/Kyc/states/__tests__/kycCallbackHygiene.test.tsx
  • src/components/LandingPage/CardPioneers.tsx
  • src/components/LandingPage/CloudsCss.tsx
  • src/components/LandingPage/CurrencySelect.tsx
  • src/components/LandingPage/Footer.tsx
  • src/components/LandingPage/LandingPageCapacitorGate.tsx
  • src/components/LandingPage/Manteca.tsx
  • src/components/LandingPage/RegulatedRails.tsx
  • src/components/LandingPage/SendInSecondsCTA.tsx
  • src/components/LandingPage/StickyMobileCTA.tsx
  • src/components/LandingPage/TweetCarousel.tsx
  • src/components/LandingPage/faq.tsx
  • src/components/LandingPage/hero.tsx
  • src/components/LandingPage/marquee.tsx
  • src/components/LandingPage/noFees.tsx
  • src/components/LandingPage/securityBuiltIn.tsx
  • src/components/LandingPage/sendInSeconds.tsx
  • src/components/LandingPage/yourMoney.tsx
  • src/components/Marketing/DestinationGrid.tsx
  • src/components/Marketing/MarketingHero.tsx
  • src/components/Marketing/mdx/ExchangeWidget.tsx
  • src/components/Marketing/mdx/FAQ.tsx
  • src/components/Marketing/mdx/Hero.tsx
  • src/components/Marketing/mdx/ProseStars.tsx
  • src/components/Marketing/mdx/Stars.tsx
  • src/components/Notifications/SetupNotificationsModal.tsx
  • src/components/Offramp/Offramp.consts.ts
  • src/components/Payment/Views/Error.validation.view.tsx
  • src/components/Points/InviteePointsBadge.tsx
  • src/components/Profile/components/ProfileEditField.tsx
  • src/components/Profile/components/ProfileHeader.tsx
  • src/components/Profile/components/ProfileMenuItem.tsx
  • src/components/Profile/components/PublicProfile.tsx
  • src/components/Profile/index.tsx
  • src/components/Profile/views/ProfileEdit.view.tsx
  • src/components/Profile/views/UnlockedRegions.view.tsx
  • src/components/Request/Pay/Pay.tsx
  • src/components/Request/__tests__/request-states.test.tsx
  • src/components/Request/direct-request/views/Initial.direct.request.view.tsx
  • src/components/Request/link/views/Create.request.link.view.tsx
  • src/components/Send/__tests__/send-states.test.tsx
  • src/components/Send/link/LinkSendFlowManager.tsx
  • src/components/Send/link/views/Initial.link.send.view.tsx
  • src/components/Send/link/views/Success.link.send.view.tsx
  • src/components/Send/link/views/__tests__/Initial.link.send.view.test.tsx
  • src/components/Send/views/Contacts.view.tsx
  • src/components/Send/views/SendRouter.view.tsx
  • src/components/Settings/DeleteAccountButton.tsx
  • src/components/Settings/LanguageView.tsx
  • src/components/Settings/__tests__/DeleteAccountButton.test.tsx
  • src/components/Setup/Setup.consts.tsx
  • src/components/Setup/Setup.types.ts
  • src/components/Setup/Setup.utils.ts
  • src/components/Setup/Views/InstallPWA.tsx
  • src/components/Setup/Views/JoinWaitlist.tsx
  • src/components/Setup/Views/Landing.tsx
  • src/components/Setup/Views/PasskeySetupHelpModal.tsx
  • src/components/Setup/Views/SetupPasskey.tsx
  • src/components/Setup/Views/SignTestTransaction.tsx
  • src/components/Setup/Views/Signup.tsx
  • src/components/Setup/components/SetupWrapper.tsx
  • src/components/TransactionDetails/PerkIcon.tsx
  • src/components/TransactionDetails/TransactionCard.tsx
  • src/components/TransactionDetails/TransactionDetailsDrawer.tsx
  • src/components/TransactionDetails/TransactionDetailsHeaderCard.tsx
  • src/components/TransactionDetails/TransactionDetailsReceipt.tsx
  • src/components/TransactionDetails/__tests__/CardUsdAbroadNotice.test.tsx
  • src/components/TransactionDetails/__tests__/LocalRailNudge.test.tsx
  • src/components/TransactionDetails/__tests__/TransactionCard.test.tsx
  • src/components/TransactionDetails/__tests__/transaction-details.utils.test.ts
  • src/components/TransactionDetails/__tests__/transactionTransformer.test.ts
  • src/components/TransactionDetails/provider-actions/CancelDepositActions.tsx
  • src/components/TransactionDetails/provider-actions/__tests__/CancelDepositActions.test.tsx
  • src/components/TransactionDetails/provider-receipts/PerkRewardReceipt.tsx
  • src/components/TransactionDetails/provider-rows/BridgeDepositInstructions.tsx
  • src/components/TransactionDetails/provider-rows/CardPaymentRows.tsx
  • src/components/TransactionDetails/provider-rows/CardUsdAbroadNotice.tsx
  • src/components/TransactionDetails/provider-rows/LocalRailNudge.tsx
  • src/components/TransactionDetails/provider-rows/MantecaDepositInfo.tsx
  • src/components/TransactionDetails/provider-rows/__tests__/BridgeDepositInstructions.test.tsx
  • src/components/TransactionDetails/provider-rows/__tests__/CardPaymentRows.settlement-adjustment.test.tsx
  • src/components/TransactionDetails/provider-rows/__tests__/dispute-label.test.ts
  • src/components/TransactionDetails/strategies/intent/p2p-send.ts
  • src/components/TransactionDetails/transaction-details.utils.ts
  • src/components/TransactionDetails/useReceiptDateFormatter.ts
  • src/components/User/UserCard.tsx
  • src/components/UserHeader/index.tsx
  • src/components/Withdraw/views/Confirm.withdraw.view.tsx
  • src/components/Withdraw/views/Initial.withdraw.view.tsx
  • src/components/Withdraw/views/PixKeySend.view.tsx
  • src/components/index.ts
  • src/components/og/PaymentCardOG.tsx
  • src/components/og/ReceiptCardOG.tsx
  • src/config/index.ts
  • src/config/peanut.config.tsx
  • src/constants/__tests__/chainRegistry.test.ts
  • src/constants/__tests__/nonEvmLeak.test.ts
  • src/constants/actionlist.consts.ts
  • src/constants/general.consts.ts
  • src/constants/invites.consts.ts
  • src/constants/kyc.consts.ts
  • src/constants/loadingStates.consts.ts
  • src/constants/routes.ts
  • src/constants/sumsub-reject-labels.consts.ts
  • src/constants/zerodev.consts.ts
  • src/context/ClaimBankFlowContext.tsx
  • src/context/LinkSendFlowContext.tsx
  • src/context/PeanutDebug.tsx
  • src/context/RequestFulfillmentFlowContext.tsx
  • src/context/WithdrawFlowContext.tsx
  • src/context/authContext.tsx
  • src/context/index.ts
  • src/context/kernelClient.context.tsx
  • src/context/loadingStates.context.tsx
  • src/context/tokenSelector.context.tsx
  • src/features/limits/components/CryptoLimitsSection.tsx
  • src/features/limits/components/FiatLimitsLockedCard.tsx
  • src/features/limits/components/IncreaseLimitsButton.tsx
  • src/features/limits/components/LimitsDocsLink.tsx
  • src/features/limits/components/LimitsError.tsx
  • src/features/limits/components/LimitsWarningCard.tsx
  • src/features/limits/components/PeriodToggle.tsx
  • src/features/limits/hooks/useLimitsValidation.ts
  • src/features/limits/utils.ts
  • src/features/limits/views/BridgeLimitsView.tsx
  • src/features/limits/views/LimitsPageView.tsx
  • src/features/limits/views/MantecaLimitsView.tsx
  • src/features/payments/flows/contribute-pot/ContributePotPageWrapper.tsx
  • src/features/payments/flows/contribute-pot/components/ContributorsDrawer.tsx
  • src/features/payments/flows/contribute-pot/components/RequestPotActionList.tsx
  • src/features/payments/flows/contribute-pot/useContributePotFlow.ts
  • src/features/payments/flows/contribute-pot/views/ContributePotInputView.tsx
  • src/features/payments/flows/contribute-pot/views/ContributePotSuccessView.tsx
  • src/features/payments/flows/contribute-pot/views/ExternalWalletPaymentView.tsx
  • src/features/payments/flows/direct-send/DirectSendPageWrapper.tsx
  • src/features/payments/flows/direct-send/useDirectSendFlow.ts
  • src/features/payments/flows/direct-send/views/SendInputView.tsx
  • src/features/payments/flows/direct-send/views/SendSuccessView.tsx
  • src/features/payments/flows/semantic-request/SemanticRequestPageWrapper.tsx
  • src/features/payments/flows/semantic-request/useSemanticRequestFlow.ts
  • src/features/payments/flows/semantic-request/views/SemanticRequestConfirmView.tsx
  • src/features/payments/flows/semantic-request/views/SemanticRequestExternalWalletView.tsx
  • src/features/payments/flows/semantic-request/views/SemanticRequestInputView.tsx
  • src/features/payments/flows/semantic-request/views/SemanticRequestReceiptView.tsx
  • src/features/payments/flows/semantic-request/views/SemanticRequestSuccessView.tsx
  • src/features/payments/shared/components/PaymentMethodActionList.tsx
  • src/features/payments/shared/components/PaymentSuccessView.tsx
  • src/features/payments/shared/components/SendWithPeanutCta.tsx
  • src/features/payments/shared/components/__tests__/PaymentMethodActionList.test.tsx
  • src/hooks/__tests__/useGetExchangeRate.test.ts
  • src/hooks/__tests__/useSumsubKycFlow.test.ts
  • src/hooks/__tests__/useUserAutoRefresh.test.ts
  • src/hooks/query/user.ts
  • src/hooks/useAccountSetup.ts
  • src/hooks/useAccountSetupRedirect.ts
  • src/hooks/useCapabilities.test.ts
  • src/hooks/useContacts.ts
  • src/hooks/useCreateOnramp.ts
  • src/hooks/useCrispUserData.ts
  • src/hooks/useDetermineBankClaimType.ts
  • src/hooks/useDetermineBankRequestType.ts
  • src/hooks/useFeatureFlag.ts
  • src/hooks/useFriendlyError.ts
  • src/hooks/useGeoLocation.ts
  • src/hooks/useGetBrowserType.ts
  • src/hooks/useGetExchangeRate.tsx
  • src/hooks/useHomeCarouselCTAs.tsx
  • src/hooks/useLimits.ts
  • src/hooks/useNativePlugins.ts
  • src/hooks/useOnrampQuote.ts
  • src/hooks/usePWAStatus.ts
  • src/hooks/useSetupFlow.ts
  • src/hooks/useSumsubActionFlow.ts
  • src/hooks/useSumsubKycFlow.ts
  • src/hooks/useTokenPrice.ts
  • src/hooks/useTranslationMutationHandler.ts
  • src/hooks/useUserAutoRefresh.ts
  • src/hooks/useZeroDev.ts
  • src/hooks/wallet/__tests__/useSendMoney.test.tsx
  • src/hooks/wallet/useGrantSessionKey.ts
  • src/hooks/wallet/useSendMoney.ts
  • src/hooks/wallet/useSpendBundle.ts
  • src/i18n/app/AppIntlProvider.tsx
  • src/i18n/app/__tests__/loading-states.test.ts
  • src/i18n/app/__tests__/messages.test.ts
  • src/i18n/app/__tests__/reject-labels.test.ts
  • src/i18n/app/__tests__/resolve-locale.test.ts
  • src/i18n/app/config.ts
  • src/i18n/app/loading-states.ts
  • src/i18n/app/locale-store.ts
  • src/i18n/app/messages.ts
  • src/i18n/app/messages/en.json
  • src/i18n/app/messages/es-419.json
  • src/i18n/app/messages/pt-BR.json
  • src/i18n/app/next-intl.d.ts
  • src/interfaces/index.ts
  • src/interfaces/interfaces.ts
  • src/lib/url-parser/parser.ts
  • src/lib/validation/recipient.test.ts
  • src/lib/validation/recipient.ts
  • src/redux/slices/user-slice.ts
  • src/redux/types/user.types.ts
  • src/services/charges.ts
  • src/services/manteca.ts
  • src/services/quests.ts
  • src/services/rhino-bridge.ts
  • src/services/rhino-sda.ts
  • src/services/sendLinks.ts
  • src/services/tokens-price.ts
  • src/services/users.ts
  • src/services/websocket.ts
  • src/types/global.d.ts
  • src/types/react-force-graph.d.ts
  • src/types/sumsub-cordova.d.ts
  • src/utils/__mocks__/simplewebauthn-browser.ts
  • src/utils/__tests__/api-fetch.test.ts
  • src/utils/__tests__/auth-token.test.ts
  • src/utils/__tests__/capacitor.test.ts
  • src/utils/__tests__/cardDeclineReason.test.ts
  • src/utils/__tests__/demo-api.test.ts
  • src/utils/__tests__/demo-balance.test.ts
  • src/utils/__tests__/friendly-error.utils.test.tsx
  • src/utils/__tests__/general.utils.test.ts
  • src/utils/__tests__/railGate.utils.test.ts
  • src/utils/__tests__/url.utils.test.ts
  • src/utils/api-fetch.ts
  • src/utils/auth-token.ts
  • src/utils/balance.utils.ts
  • src/utils/bridge.utils.ts
  • src/utils/capacitor.ts
  • src/utils/cardDeclineReason.ts
  • src/utils/crisp.ts
  • src/utils/dateGrouping.utils.ts
  • src/utils/demo-api.ts
  • src/utils/friendly-error.utils.tsx
  • src/utils/general.utils.ts
  • src/utils/kyc-grouping.utils.ts
  • src/utils/native-auth-capture.ts
  • src/utils/native-canary.ts
  • src/utils/no-cache.ts
  • src/utils/passkeyDebug.ts
  • src/utils/peanut-claim.utils.ts
  • src/utils/railGate.utils.ts
  • src/utils/sentry.utils.ts
  • src/utils/token.utils.ts
  • src/utils/webauthn.utils.ts
  • tsconfig.test.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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

@github-actions

Copy link
Copy Markdown
Contributor

Code-analysis diff

Painscore total: 6309.2 → 6656.05 (+346.85)
Findings: +3 net (+1402 new, -1399 resolved)

🆕 New findings (1402)

  • critical complexity — src/components/Global/InvitesGraph/index.tsx — CC 515, MI 53.18, SLOC 1713
  • critical complexity — src/app/(mobile-ui)/qr-pay/page.tsx — CC 304, MI 52.63, SLOC 1073
  • critical complexity — src/components/Claim/Link/Initial.view.tsx — CC 213, MI 50.68, SLOC 731
  • critical complexity — src/utils/general.utils.ts — CC 199, MI 57.59, SLOC 758
  • critical complexity — src/components/TransactionDetails/TransactionDetailsReceipt.tsx — CC 162, MI 51.41, SLOC 424
  • critical complexity — src/app/(mobile-ui)/withdraw/manteca/page.tsx — CC 156, MI 51.57, SLOC 595
  • critical complexity — src/components/AddWithdraw/DynamicBankAccountForm.tsx — CC 150, MI 52.05, SLOC 461
  • critical complexity — src/components/Global/TokenSelector/TokenSelector.tsx — CC 127, MI 60.45, SLOC 353
  • critical complexity — src/app/(mobile-ui)/card/page.tsx — CC 125, MI 56.97, SLOC 488
  • critical complexity — src/app/(mobile-ui)/withdraw/page.tsx — CC 124, MI 53.2, SLOC 363
  • critical complexity — src/components/AddWithdraw/AddWithdrawCountriesList.tsx — CC 123, MI 56.36, SLOC 369
  • critical complexity — src/components/Claim/Link/views/BankFlowManager.view.tsx — CC 110, MI 46.94, SLOC 425
  • critical complexity — src/app/(mobile-ui)/add-money/[country]/bank/page.tsx — CC 108, MI 57.45, SLOC 393
  • critical method-complexity — src/components/TransactionDetails/TransactionDetailsReceipt.tsx:89 — CC 108 SLOC 215
  • critical complexity — src/features/payments/flows/semantic-request/useSemanticRequestFlow.ts — CC 106, MI 49.11, SLOC 457
  • critical complexity — src/utils/demo-api.ts — CC 106, MI 59.49, SLOC 908
  • critical complexity — src/components/Home/HomeHistory.tsx — CC 104, MI 57.65, SLOC 321
  • critical complexity — src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx — CC 102, MI 53.37, SLOC 386
  • critical complexity — src/context/kernelClient.context.tsx — CC 101, MI 57.09, SLOC 477
  • critical complexity — src/components/Claim/Claim.tsx — CC 100, MI 53.54, SLOC 404

…and 1382 more.

✅ Resolved (1399)

  • src/components/Global/InvitesGraph/index.tsx — CC 518, MI 53.17, SLOC 1709
  • src/app/(mobile-ui)/qr-pay/page.tsx — CC 305, MI 53.59, SLOC 971
  • src/components/Claim/Link/Initial.view.tsx — CC 212, MI 51.11, SLOC 686
  • src/utils/general.utils.ts — CC 202, MI 57.68, SLOC 763
  • src/components/TransactionDetails/TransactionDetailsReceipt.tsx — CC 160, MI 52.91, SLOC 351
  • src/app/(mobile-ui)/withdraw/manteca/page.tsx — CC 155, MI 52.57, SLOC 528
  • src/components/AddWithdraw/DynamicBankAccountForm.tsx — CC 149, MI 53.51, SLOC 410
  • src/components/Global/TokenSelector/TokenSelector.tsx — CC 126, MI 60.85, SLOC 331
  • src/app/(mobile-ui)/card/page.tsx — CC 125, MI 57.27, SLOC 475
  • src/app/(mobile-ui)/withdraw/page.tsx — CC 124, MI 54.12, SLOC 334
  • src/components/AddWithdraw/AddWithdrawCountriesList.tsx — CC 123, MI 56.91, SLOC 351
  • src/components/Claim/Link/views/BankFlowManager.view.tsx — CC 110, MI 47.15, SLOC 417
  • src/components/TransactionDetails/TransactionDetailsReceipt.tsx:74 — CC 108 SLOC 169
  • src/features/payments/flows/semantic-request/useSemanticRequestFlow.ts — CC 106, MI 49.34, SLOC 448
  • src/utils/demo-api.ts — CC 106, MI 59.5, SLOC 908
  • src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx — CC 101, MI 54.48, SLOC 352
  • src/context/kernelClient.context.tsx — CC 101, MI 57.1, SLOC 477
  • src/components/Claim/Claim.tsx — CC 100, MI 53.93, SLOC 389
  • src/components/Home/HomeHistory.tsx — CC 99, MI 58.51, SLOC 300
  • src/app/(mobile-ui)/add-money/[country]/bank/page.tsx — CC 96, MI 57.55, SLOC 347

…and 1379 more.

📈 Painscore deltas (top movers)

File Before After Δ
src/utils/native-auth-capture.ts 0.0 6.8 +6.8
src/i18n/app/AppIntlProvider.tsx 0.0 6.5 +6.5
src/utils/native-canary.ts 0.0 5.8 +5.8
src/components/TransactionDetails/useReceiptDateFormatter.ts 0.0 5.6 +5.6
src/i18n/app/config.ts 0.0 5.5 +5.5
src/components/Settings/LanguageView.tsx 0.0 5.3 +5.3
src/components/Global/FileUploadInput/index.tsx 5.4 10.7 +5.3
src/i18n/app/locale-store.ts 0.0 5.2 +5.2
src/i18n/app/messages.ts 0.0 5.2 +5.2
src/hooks/useFriendlyError.ts 0.0 4.9 +4.9
src/i18n/app/loading-states.ts 0.0 4.5 +4.5
src/components/Global/ConfirmInviteModal/index.tsx 3.0 7.4 +4.4
src/features/limits/components/LimitsDocsLink.tsx 1.0 4.7 +3.7
src/components/Badges/BadgeDetailModal.tsx 2.9 6.5 +3.6
src/components/Kyc/states/KycCompleted.tsx 6.3 9.8 +3.6
src/components/Global/PeanutActionCard/index.tsx 1.8 5.2 +3.4
src/components/Global/SuccessViewComponents/SuccessViewDetailsCard.tsx 2.1 5.4 +3.4
src/features/limits/components/LimitsWarningCard.tsx 4.0 7.3 +3.3
src/components/Global/RainCooldown/IntroModal.tsx 4.6 7.9 +3.3
src/components/Kyc/states/KycProcessing.tsx 5.0 8.3 +3.3

@github-actions

Copy link
Copy Markdown
Contributor

🧪 UI test report — ✅ all green

Suites

  • unit: 2306 ran, 0 failed, 0 skipped, 36.7s

📊 Coverage (unit)

metric %
statements 60.9%
branches 44.1%
functions 50.1%
lines 61.4%
⏱ 10 slowest test cases
time test
3.5s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › never places two stickers in heavy overlap (broad seed sweep)
1.1s src/utils/__tests__/demo-api.test.ts › isDemoMode() is false when not running under Capacitor
0.5s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › every sticker stays within canvas at any count
0.4s src/utils/__tests__/sentry.utils.test.ts › defaults to the client budget under a browser global
0.3s src/app/(mobile-ui)/withdraw/__tests__/withdraw-states.test.tsx › Bank withdrawal keeps the $1 minimum for sub-$1 amounts
0.3s src/utils/__tests__/sentry.utils.test.ts › still lets a per-call timeoutMs win over the default
0.3s src/app/actions/__tests__/api-headers.test.ts › should include Content-Type in validateInviteCode
0.3s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › keeps stickers off the username pill (final pass respects the keep-out)
0.3s src/app/actions/__tests__/api-headers-extended.test.ts › should not include apiKey in validateInviteCode body
0.2s src/utils/__tests__/demo-balance.test.ts › starts at the full balance on a fresh install and stamps a timestamp
📍 Inline annotations are in the **Unit test report** check above. Coverage artifact: `coverage-unit`. Generated by `.github/workflows/tests.yml`.

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.

6 participants