Skip to content

Conversation

jjramirezn
Copy link
Contributor

No description provided.

kushagrasarathe and others added 18 commits August 13, 2025 16:52
* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title
* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>
)

* refactor: use networkName instead of axelarChainName

* fix: types
* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock
* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views
* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function
* fix: usa bank account claims

* fix: show bank account details in confirm claim view
* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation
#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount
* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim
Copy link

Prod Release 105

Copy link

vercel bot commented Aug 21, 2025

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

Project Deployment Preview Comments Updated (UTC)
peanut-wallet Ready Ready Preview Comment Aug 21, 2025 5:16pm

Copy link
Contributor

coderabbitai bot commented Aug 21, 2025

Walkthrough

Replaces GuestFlow with ClaimBankFlow across claim and home UIs, adds new bank-claim orchestration and components, standardizes chain display to networkName, updates withdraw/contexts/types accordingly, introduces geolocation/country lists and saved accounts views, revises EIP-681 parsing and debouncing hooks, tweaks KYC flow handling, and updates some metadata/icons and layouts.

Changes

Cohort / File(s) Summary of changes
Metadata icon updates
src/app/(mobile-ui)/claim/page.tsx, src/app/(mobile-ui)/request/pay/page.tsx, src/app/[...recipient]/page.tsx
generateMetadata icons.icon path updated to /favicon.ico.
Home flow context swap
src/app/(mobile-ui)/home/page.tsx
Replaced GuestFlow with ClaimBankFlow; reset flow hook/alias and effect dependencies updated.
Exchange/NoFees API
src/components/LandingPage/noFees.tsx, src/app/exchange/page.tsx
NoFees prop removed; ExchangePage now renders <NoFees /> without isExchangePage.
Client directive
src/components/0_Bruddle/Button.tsx
Added 'use client'.
Deposit method list tweak
src/components/AddMoney/components/DepositMethodList.tsx
Adjusted first-item CardPosition when crypto-first in all-methods view; removed unused import.
Add/Withdraw router and lists overhaul
src/components/AddWithdraw/AddWithdrawCountriesList.tsx, src/components/AddWithdraw/AddWithdrawRouterView.tsx
Removed caching/OnrampFlow integration, simplified form view; replaced ALL_METHODS_DATA/search UI with CountryList and SavedAccountsView; added loading with PeanutLoading; adapted navigation and recent methods.
Dynamic bank account form updates
src/components/AddWithdraw/DynamicBankAccountForm.tsx
Added optional countryName prop; refined selectedCountry resolution; adjusted onSubmit rawData (accountNumber/bic), improved submitting/error handling and input trimming; added conditional name/email fields for claim/non-claim flows.
Claim flow refactor to ClaimBankFlow
src/components/Claim/Link/Initial.view.tsx, src/components/Claim/Link/views/BankFlowManager.view.tsx, src/components/Claim/Link/Onchain/Success.view.tsx
Switched to ClaimBankFlow context; added state-machine BankFlowManager with KYC/websocket integration and offramp orchestration; updated Success to new hook.
Removed legacy claim country view
src/components/Claim/Link/views/ClaimCountryList.view.tsx
Deleted component and its guest-flow based logic.
Bank-claim confirm view enhancements
src/components/Claim/Link/views/Confirm.bank-claim.view.tsx
Safer flag code access; header visibility/layout tweaks; display additional bank fields (CLABE, Account Number, Routing Number) in uppercase.
Onchain confirm route/min-received
src/components/Claim/Link/Onchain/Confirm.view.tsx
Use selectedRoute-based min received; stablecoin formatting via isStableCoin; gate claim button when xChain and no route; uses isXChain.
New common views for actions/countries/saved accounts
src/components/Common/ActionList.tsx, src/components/Common/CountryList.tsx, src/components/Common/CountryListRouter.tsx, src/components/Common/CountryListSkeleton.tsx, src/components/Common/SavedAccountsView.tsx
Added ActionList (bank/external choices with min-US$ guard), CountryList (searchable list with geolocation prioritization and crypto entry), Router wrapper, skeleton, and saved accounts list/mapping view.
Chain name standardization (networkName)
src/app/actions/squid.ts, src/components/Claim/Claim.utils.ts, src/components/Global/TokenSelector/*, src/hooks/useTokenChainIcons.ts, src/components/Withdraw/views/*.tsx, src/context/tokenSelector.context.tsx, src/context/WithdrawFlowContext.tsx
Added/propagated networkName in chain types/returns; replaced axelarChainName usage with networkName and getChainName where applicable; updated dependent prop types and displays.
DirectSendQR amount parsing
src/components/Global/DirectSendQR/utils.ts, src/components/Global/DirectSendQR/__tests__/parseEip681.test.ts
Parse EIP-681 amounts to human-readable via formatUnits and token decimals; updated tests to expect decimal strings.
Unsupported browser modal
src/components/Global/UnsupportedBrowserModal/index.tsx
Wrapped with Suspense; split content component; copy URL prefers redirect_uri; signature now takes a props object.
Debounce refactor
src/components/Global/ValidatedInput/index.tsx, src/hooks/useUserSearch.ts
Replaced local timeout debouncing with shared useDebounce.
Profile internal navigation
src/components/Profile/components/PublicProfile.tsx, src/components/Profile/index.tsx, src/utils/general.utils.ts
Added checkIfInternalNavigation; back button uses internal referrer check and falls back to /home; extended ProfileHeader props usage.
KYC flow gating
src/hooks/useKycFlow.ts
Adjusted handleIframeClose paths with explicit gating and early returns for source events.
New hooks
src/hooks/useDetermineBankClaimType.ts, src/hooks/useGeoLocaion.ts, src/hooks/useSavedAccounts.tsx
Added bank-claim type resolver, geolocation (ipapi.co) for country code, and saved accounts filter hook.
Misc constants/tests/mocks
src/utils/bridge.utils.ts, src/utils/__mocks__/peanut-sdk.ts, src/lib/validation/token.test.ts, src/interfaces/interfaces.ts
Bridge: treat 'USA' like 'US'; peanut-sdk TOKEN_DETAILS mock reshaped; tests/types updated for networkName; removed internal IChain interface.
Context provider switch
src/context/contextProvider.tsx, src/context/ClaimBankFlowContext.tsx
Replaced GuestFlow provider with ClaimBankFlow provider; introduced new ClaimBankFlow context API and enum.
Landing page minor cleanups
src/components/LandingPage/CurrencySelect.tsx, src/components/LandingPage/dropLink.tsx, src/components/LandingPage/hero.tsx
Adjusted import path; whitespace; removed unused import.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Suggested labels

enhancement

Suggested reviewers

  • Zishan-7

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/prod-release-105

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

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

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 18

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (11)
src/components/LandingPage/CurrencySelect.tsx (1)

19-25: Normalize flag codes to lowercase to avoid broken flags (tie-in with prior learning).

FlagCDN expects lowercase ISO 3166-1 alpha-2 codes in the URL path. Depending on the source data, mapping.flagCode may come in different cases. Per our prior learning, some country code maps in this repo use uppercase keys and require normalization. Let’s defensively lowercase here to prevent broken images.

Using learnings: Retrieved note indicates uppercase 3-letter codes are used elsewhere and require normalization to uppercase for lookups. While this file uses flagCode, normalizing here is still prudent to guarantee FlagCDN compatibility.

Apply this diff:

-const currencies = countryCurrencyMappings.map((mapping) => ({
-    countryCode: mapping.flagCode,
+const currencies = countryCurrencyMappings.map((mapping) => ({
+    countryCode: (mapping.flagCode ?? mapping.countryCode ?? '').toLowerCase(),
     country: mapping.country,
     currency: mapping.currencyCode,
     currencyName: mapping.currencyName,
     comingSoon: mapping.comingSoon || false,
 }))
src/components/0_Bruddle/Button.tsx (1)

209-216: Dynamic Tailwind class won’t be generated and can produce undefinedpx at runtime.

You interpolate active:translate-y-[${shadowSize}px] inside a template string. Two issues:

  • Tailwind JIT cannot see dynamic arbitrary values, so the corresponding CSS won’t be emitted unless explicitly safelisted.
  • When shadowSize is undefined, you render active:translate-y-[undefinedpx].

Refactor to use a static map of allowed classes and pass it conditionally to twMerge.

Apply this diff:

+        const activeTranslateY =
+            shadowSize
+                ? ({ '4': 'active:translate-y-[4px]', '6': 'active:translate-y-[6px]', '8': 'active:translate-y-[8px]' } as const)[
+                      shadowSize
+                  ]
+                : undefined
+
         const buttonClasses = twMerge(
-            `btn w-full flex items-center gap-2 transition-all duration-100 active:translate-x-[3px] active:translate-y-[${shadowSize}px] active:shadow-none notranslate`,
+            `btn w-full flex items-center gap-2 transition-all duration-100 active:translate-x-[3px] active:shadow-none notranslate`,
             buttonVariants[variant],
             variant === 'transparent' && props.disabled && 'disabled:bg-transparent disabled:border-transparent',
             size && buttonSizes[size],
             shape === 'square' && 'btn-square',
             shadowSize && buttonShadows[shadowType || 'primary'][shadowSize],
+            activeTranslateY,
 
             className
         )

If you prefer to keep the dynamic form, add the three concrete classes to your Tailwind safelist.

src/components/LandingPage/noFees.tsx (2)

24-27: Harden query param parsing to avoid NaN propagation.

If amount exists but is invalid (e.g., ?amount=foo), parseFloat yields NaN and gets passed into useExchangeRate as initialSourceAmount. Depending on the hook implementation, this can surface as unexpected UI behavior. Suggest sanitizing to a safe default.

Apply this diff:

-const urlSourceAmount = searchParams.get('amount') ? parseFloat(searchParams.get('amount')!) : 10
+const rawAmount = searchParams.get('amount')
+const parsedAmount = rawAmount !== null ? Number(rawAmount) : 10
+const urlSourceAmount = Number.isFinite(parsedAmount) ? parsedAmount : 10

242-249: Add HTTPS remotePattern for flagcdn.com

It looks like your next.config.js already defines a catch-all HTTP pattern:

/** @type {import('next').NextConfig} */
let nextConfig = {
  images: {
    remotePatterns: [
      {
        protocol: 'http',
        hostname: '*',
        /* … */
      }
    ]
  },
  /* … */
}

However, your flags are loaded over HTTPS (src="https://flagcdn.com/…") and won’t match a protocol-restricted pattern. To avoid runtime failures, you must explicitly allow HTTPS and (ideally) scope it to the flagcdn.com host. For example:

--- a/next.config.js
+++ b/next.config.js
@@ images: {
-    remotePatterns: [
-      {
-        protocol: 'http',
-        hostname: '*',
-        port: '',
-        pathname: '/**',
-      },
-    ],
+    remotePatterns: [
+      // Allow HTTP (if you need it)…
+      {
+        protocol: 'http',
+        hostname: '*',
+        port: '',
+        pathname: '/**',
+      },
+      // …and allow HTTPS for flagcdn.com
+      {
+        protocol: 'https',
+        hostname: 'flagcdn.com',
+        port: '',
+        pathname: '/w320/**',
+      },
+    ],

Alternatively, you can simplify by using domains:

--- a/next.config.js
+++ b/next.config.js
@@ images: {
-    remotePatterns: [ /* … */ ],
+    domains: ['flagcdn.com'],

Either approach will ensure your remote-served flag images load without errors.

src/hooks/useKycFlow.ts (1)

56-57: Fix optional chaining to prevent runtime crash when user.user is undefined

Accessing user?.user.username will throw if user.user is undefined. Chain both levels.

-        username: user?.user.username ?? undefined,
+        username: user?.user?.username ?? undefined,
src/components/Global/PeanutActionDetailsCard/index.tsx (3)

73-79: Add icon for ADD_MONEY_BANK_ACCOUNT to keep UX consistent

getIcon doesn’t handle ADD_MONEY_BANK_ACCOUNT, so the card may render without the down arrow for bank add flows.

-        if (transactionType === 'ADD_MONEY' || transactionType === 'CLAIM_LINK_BANK_ACCOUNT') return 'arrow-down'
+        if (
+            transactionType === 'ADD_MONEY' ||
+            transactionType === 'ADD_MONEY_BANK_ACCOUNT' ||
+            transactionType === 'CLAIM_LINK_BANK_ACCOUNT'
+        )
+            return 'arrow-down'

81-99: Title missing for ADD_MONEY_BANK_ACCOUNT

Currently only ADD_MONEY sets “You’re adding”. Bank add flows fall through to an empty title.

-        if (transactionType === 'ADD_MONEY') title = `You're adding`
+        if (transactionType === 'ADD_MONEY' || transactionType === 'ADD_MONEY_BANK_ACCOUNT')
+            title = `You're adding`

158-164: Flag CDN expects lowercase ISO codes — use toLowerCase() to avoid 404s

flagcdn.com requires lowercase country codes (e.g., us, gb). Passing “US” yields a 404.

-                            src={`https://flagcdn.com/w320/${countryCodeForFlag}.png`}
+                            src={`https://flagcdn.com/w320/${countryCodeForFlag.toLowerCase()}.png`}
src/components/Claim/Claim.utils.ts (1)

44-51: Preserve token decimals if provided

Hardcoding decimals: 0 will break formatting/amount math for non-USD chains/tokens. Use token decimals when available.

                 combinedObject.tokens.push({
                     address: token.address || '',
                     name: token.name || '',
                     symbol: token.symbol || '',
-                    decimals: 0,
+                    decimals: (token as any).decimals ?? 0,
                     logoURI: token.logoURI || '',
                     chainId: chain.chainId || '',
                 })
src/components/Claim/Link/Onchain/Confirm.view.tsx (1)

87-95: Avoid route/context drift: use selectedRoute values for x-chain claim params

Passing selectedChainID/selectedTokenAddress can drift from the chosen selectedRoute. Use the route’s own destination values to ensure consistency and prevent mismatched claims.

-                claimTxHash = await claimLinkXchain({
-                    address: recipient ? recipient.address : (address ?? ''),
-                    link: claimLinkData.link,
-                    destinationChainId: selectedChainID,
-                    destinationToken: selectedTokenAddress,
-                })
+                claimTxHash = await claimLinkXchain({
+                    address: recipient ? recipient.address : (address ?? ''),
+                    link: claimLinkData.link,
+                    destinationChainId: String(selectedRoute.rawResponse.route.params.toChain),
+                    destinationToken: selectedRoute.rawResponse.route.estimate.toToken.address,
+                })
src/components/Global/TokenSelector/TokenSelector.tsx (1)

1-704: Remove remaining axelarChainName references

Legacy uses of the axelarChainName property are still present in both runtime code and tests. To prevent regressions, please remove or replace every occurrence with the updated chainName (or equivalent) field. Specifically:

  • Runtime utilities
    • src/components/utils/utils.ts (line 10): remove the axelarChainName: string property and update any functions that consume it.
  • Interface definitions
    • src/components/Claim/Claim.interfaces.ts (line 5): drop the optional axelarChainName?: string from the interface and adjust all implementing components or hooks accordingly.
  • Validation tests
    • src/lib/validation/token.test.ts (lines 11, 40, 69): update test fixtures to use the new field instead of axelarChainName.
  • URL parser tests
    • src/utils/__tests__/url-parser.test.ts (line 62): modify the test to expect chainName (or the current URL-param key) rather than axelarChainName.

Ensure you run the full test suite after making these changes to catch any remaining references.

Comment on lines +203 to +207
ref={formRef}
country={getCountryCodeForWithdraw(currentCountry.id)}
onSuccess={handleFormSubmit}
initialData={{}}
/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Bug: Passing 3-letter code breaks MX handling in DynamicBankAccountForm.

DynamicBankAccountForm treats Mexico as country === 'MX'. Passing MEX via getCountryCodeForWithdraw causes MX to be misclassified as IBAN and fails CLABE validation.

Apply:

-                <DynamicBankAccountForm
-                    ref={formRef}
-                    country={getCountryCodeForWithdraw(currentCountry.id)}
+                <DynamicBankAccountForm
+                    ref={formRef}
+                    country={countryCodeMap[currentCountry.id] === 'MX' ? 'MX' : currentCountry.id}
                     onSuccess={handleFormSubmit}
                     initialData={{}}
                 />

…and remove the now-unused import:

-import { getCountryCodeForWithdraw } from '@/utils/withdraw.utils'

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines +220 to +232
<CountryList
inputTitle={mainHeading}
viewMode="add-withdraw"
onCountryClick={(country) => {
const countryPath = `${baseRoute}/${country.path}`
router.push(countryPath)
}}
onCryptoClick={() => {
const cryptoPath = `${baseRoute}/crypto`
router.push(cryptoPath)
}}
flow={flow}
/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Recents aren’t updated when selecting from the new CountryList (regression).

In the all-methods view, choosing a country/crypto no longer updates recentAddMethods, so the “Recent methods” section can never gain new items.

Apply:

             <CountryList
                 inputTitle={mainHeading}
                 viewMode="add-withdraw"
                 onCountryClick={(country) => {
-                    const countryPath = `${baseRoute}/${country.path}`
-                    router.push(countryPath)
+                    const countryPath = `${baseRoute}/${country.path}`
+                    if (flow === 'add') {
+                        const prefs = getUserPreferences() || {}
+                        const current = prefs.recentAddMethods || []
+                        const newEntry: RecentMethod = {
+                            id: country.id,
+                            type: 'country',
+                            title: country.title,
+                            description: country.currency,
+                            path: countryPath,
+                            currency: country.currency,
+                        }
+                        const filtered = current.filter((m: RecentMethod) => !(m.id === newEntry.id && m.type === newEntry.type))
+                        const updated = [newEntry, ...filtered].slice(0, MAX_RECENT_METHODS)
+                        updateUserPreferences({ ...prefs, recentAddMethods: updated })
+                    }
+                    router.push(countryPath)
                 }}
                 onCryptoClick={() => {
-                    const cryptoPath = `${baseRoute}/crypto`
-                    router.push(cryptoPath)
+                    const cryptoPath = `${baseRoute}/crypto`
+                    if (flow === 'add') {
+                        const prefs = getUserPreferences() || {}
+                        const current = prefs.recentAddMethods || []
+                        const newEntry: RecentMethod = {
+                            id: 'crypto-add',
+                            type: 'crypto',
+                            title: 'Crypto',
+                            description: 'Use an exchange or your wallet',
+                            path: cryptoPath,
+                        }
+                        const filtered = current.filter((m: RecentMethod) => !(m.id === newEntry.id && m.type === newEntry.type))
+                        const updated = [newEntry, ...filtered].slice(0, MAX_RECENT_METHODS)
+                        updateUserPreferences({ ...prefs, recentAddMethods: updated })
+                    }
+                    router.push(cryptoPath)
                 }}
                 flow={flow}
             />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<CountryList
inputTitle={mainHeading}
viewMode="add-withdraw"
onCountryClick={(country) => {
const countryPath = `${baseRoute}/${country.path}`
router.push(countryPath)
}}
onCryptoClick={() => {
const cryptoPath = `${baseRoute}/crypto`
router.push(cryptoPath)
}}
flow={flow}
/>
<CountryList
inputTitle={mainHeading}
viewMode="add-withdraw"
- onCountryClick={(country) => {
- const countryPath = `${baseRoute}/${country.path}`
- router.push(countryPath)
onCountryClick={(country) => {
const countryPath = `${baseRoute}/${country.path}`
if (flow === 'add') {
const prefs = getUserPreferences() || {}
const current = prefs.recentAddMethods || []
const newEntry: RecentMethod = {
id: country.id,
type: 'country',
title: country.title,
description: country.currency,
path: countryPath,
currency: country.currency,
}
const filtered = current.filter(
(m: RecentMethod) =>
!(m.id === newEntry.id && m.type === newEntry.type)
)
const updated = [newEntry, ...filtered].slice(
0,
MAX_RECENT_METHODS
)
updateUserPreferences({
...prefs,
recentAddMethods: updated,
})
}
router.push(countryPath)
}}
onCryptoClick={() => {
- const cryptoPath = `${baseRoute}/crypto`
const cryptoPath = `${baseRoute}/crypto`
if (flow === 'add') {
const prefs = getUserPreferences() || {}
const current = prefs.recentAddMethods || []
const newEntry: RecentMethod = {
id: 'crypto-add',
type: 'crypto',
title: 'Crypto',
description: 'Use an exchange or your wallet',
path: cryptoPath,
}
const filtered = current.filter(
(m: RecentMethod) =>
!(m.id === newEntry.id && m.type === newEntry.type)
)
const updated = [newEntry, ...filtered].slice(
0,
MAX_RECENT_METHODS
)
updateUserPreferences({
...prefs,
recentAddMethods: updated,
})
}
router.push(cryptoPath)
}}
flow={flow}
/>
🤖 Prompt for AI Agents
In src/components/AddWithdraw/AddWithdrawRouterView.tsx around lines 220 to 232,
selecting a country or crypto from CountryList navigates but does not update
recentAddMethods; before calling router.push, call the existing routine that
records recent add methods (e.g., dispatch the store action or call the
context/helper like updateRecentAddMethods/addRecentMethod) with a properly
shaped method object for the selected country or crypto, then proceed with
router.push so the “Recent methods” list receives the new item; ensure you reuse
the same data shape used elsewhere for recentAddMethods and keep navigation
unchanged.

Comment on lines 62 to 69
const minReceived = useMemo<string>(() => {
let amountNumber: number

// manual 1% slippage calculation based on the deposited token amount
amountNumber = Number(formatUnits(BigInt(claimLinkData.amount), claimLinkData.tokenDecimals)) * 0.99 // subtract 1%

const formattedAmount = formatTokenAmount(amountNumber)

return `$ ${formattedAmount}`
if (!selectedRoute || !resolvedTokenSymbol) return ''
const amount = formatUnits(
BigInt(selectedRoute.rawResponse.route.estimate.toAmountMin),
selectedRoute.rawResponse.route.estimate.toToken.decimals
)
return isStableCoin(resolvedTokenSymbol) ? `$ ${amount}` : `${amount} ${resolvedTokenSymbol}`
}, [selectedRoute, resolvedTokenSymbol, claimLinkData])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Min Received: clamp decimals for readability; avoid long raw strings

formatUnits may yield long fractional strings. Pipe through formatTokenAmount for a user-friendly display. Stablecoins should still render with $.

-    const minReceived = useMemo<string>(() => {
-        if (!selectedRoute || !resolvedTokenSymbol) return ''
-        const amount = formatUnits(
-            BigInt(selectedRoute.rawResponse.route.estimate.toAmountMin),
-            selectedRoute.rawResponse.route.estimate.toToken.decimals
-        )
-        return isStableCoin(resolvedTokenSymbol) ? `$ ${amount}` : `${amount} ${resolvedTokenSymbol}`
-    }, [selectedRoute, resolvedTokenSymbol, claimLinkData])
+    const minReceived = useMemo<string>(() => {
+        if (!selectedRoute || !resolvedTokenSymbol) return ''
+        const amountStr = formatUnits(
+            BigInt(selectedRoute.rawResponse.route.estimate.toAmountMin),
+            selectedRoute.rawResponse.route.estimate.toToken.decimals
+        )
+        const formatted = formatTokenAmount(Number(amountStr)) ?? amountStr
+        return isStableCoin(resolvedTokenSymbol) ? `$ ${formatted}` : `${formatted} ${resolvedTokenSymbol}`
+    }, [selectedRoute, resolvedTokenSymbol])
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const minReceived = useMemo<string>(() => {
let amountNumber: number
// manual 1% slippage calculation based on the deposited token amount
amountNumber = Number(formatUnits(BigInt(claimLinkData.amount), claimLinkData.tokenDecimals)) * 0.99 // subtract 1%
const formattedAmount = formatTokenAmount(amountNumber)
return `$ ${formattedAmount}`
if (!selectedRoute || !resolvedTokenSymbol) return ''
const amount = formatUnits(
BigInt(selectedRoute.rawResponse.route.estimate.toAmountMin),
selectedRoute.rawResponse.route.estimate.toToken.decimals
)
return isStableCoin(resolvedTokenSymbol) ? `$ ${amount}` : `${amount} ${resolvedTokenSymbol}`
}, [selectedRoute, resolvedTokenSymbol, claimLinkData])
const minReceived = useMemo<string>(() => {
if (!selectedRoute || !resolvedTokenSymbol) return ''
const amountStr = formatUnits(
BigInt(selectedRoute.rawResponse.route.estimate.toAmountMin),
selectedRoute.rawResponse.route.estimate.toToken.decimals
)
const formatted = formatTokenAmount(Number(amountStr)) ?? amountStr
return isStableCoin(resolvedTokenSymbol)
? `$ ${formatted}`
: `${formatted} ${resolvedTokenSymbol}`
}, [selectedRoute, resolvedTokenSymbol])
🤖 Prompt for AI Agents
In src/components/Claim/Link/Onchain/Confirm.view.tsx around lines 62 to 69, the
minReceived string uses formatUnits which can produce long fractional strings;
wrap the raw amount with formatTokenAmount to clamp decimals for readability and
then render the stablecoin prefixed with "$" or append the token symbol for
others. Specifically, compute the raw amount as now, pass that value into
formatTokenAmount (using the token decimals or a sensible display precision),
then return isStableCoin(resolvedTokenSymbol) ? `$ ${formattedAmount}` :
`${formattedAmount} ${resolvedTokenSymbol}` to ensure user-friendly display.

const finalBankDetails = { ...rawData, ...(externalAccountResponse as object) }
setLocalBankDetails(finalBankDetails)
setBankDetails(finalBankDetails)
setReceiverFullName(payload.accountOwnerName.firstName + ' ' + payload.accountOwnerName.lastName)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Potential string concatenation issue with undefined values.

If either firstName or lastName in the payload is undefined, the concatenation might produce "undefined undefined". Add a defensive check.

-                setReceiverFullName(payload.accountOwnerName.firstName + ' ' + payload.accountOwnerName.lastName)
+                const firstName = payload.accountOwnerName.firstName || ''
+                const lastName = payload.accountOwnerName.lastName || ''
+                setReceiverFullName(`${firstName} ${lastName}`.trim())
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
setReceiverFullName(payload.accountOwnerName.firstName + ' ' + payload.accountOwnerName.lastName)
const firstName = payload.accountOwnerName.firstName || ''
const lastName = payload.accountOwnerName.lastName || ''
setReceiverFullName(`${firstName} ${lastName}`.trim())
🤖 Prompt for AI Agents
In src/components/Claim/Link/views/BankFlowManager.view.tsx around line 317, the
current concatenation uses payload.accountOwnerName.firstName + ' ' +
payload.accountOwnerName.lastName which can produce "undefined" parts if names
are missing; update the assignment to defensively handle missing
accountOwnerName/firstName/lastName by reading the properties with optional
chaining, defaulting each to an empty string (or using nullish coalescing),
joining the non-empty parts with a space and trimming the result so you never
set "undefined" in the receiver full name.

Comment on lines +52 to 53
return countryCodeMap[bankDetails?.country?.toUpperCase()] ?? bankDetails.country.toUpperCase()
}, [bankDetails.country])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Potential crash when country is missing: fallback calls toUpperCase on undefined

The left side safely optional-chains, but the nullish-coalescing fallback dereferences bankDetails.country directly. If country is undefined, this throws.

Apply this safe normalization (also aligns with the uppercase-3-letter normalization requirement):

-    const countryCodeForFlag = useMemo(() => {
-        return countryCodeMap[bankDetails?.country?.toUpperCase()] ?? bankDetails.country.toUpperCase()
-    }, [bankDetails.country])
+    const countryCodeForFlag = useMemo(() => {
+        const iso3 = (bankDetails?.country ?? '').toString().toUpperCase()
+        return countryCodeMap[iso3] ?? iso3
+    }, [bankDetails?.country])
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
return countryCodeMap[bankDetails?.country?.toUpperCase()] ?? bankDetails.country.toUpperCase()
}, [bankDetails.country])
const countryCodeForFlag = useMemo(() => {
const iso3 = (bankDetails?.country ?? '').toString().toUpperCase()
return countryCodeMap[iso3] ?? iso3
}, [bankDetails?.country])
🤖 Prompt for AI Agents
In src/components/Claim/Link/views/Confirm.bank-claim.view.tsx around lines
52-53, the fallback currently calls bankDetails.country.toUpperCase() which can
throw if country is undefined; change the expression to safely normalize by
uppercasing a guarded value (e.g. (bankDetails?.country ?? '').toUpperCase())
when indexing countryCodeMap and for the fallback, and update the useMemo
dependency to bankDetails?.country so we don't dereference undefined in the
dependency array.

Comment on lines +90 to 96
// copy the redirect uri if it exists, otherwise copy the current url
const redirectUri = searchParams.get('redirect_uri')
const urlToCopy = redirectUri
? `${window.location.origin}${decodeURIComponent(redirectUri)}`
: window.location.href
await copyTextToClipboardWithFallback(urlToCopy)
setCopyButtonText('Copied!')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix redirect_uri handling to avoid malformed links and decoding errors.

Current logic blindly prefixes window.location.origin and always decodeURIComponent, which can:

  • Produce invalid URLs if redirect_uri is absolute (common for OAuth-style params).
  • Throw on bad/partial percent-encoding, causing the copy to fail.

Normalize safely with URL + guarded decoding; fall back gracefully.

Apply this diff:

-                    // copy the redirect uri if it exists, otherwise copy the current url
-                    const redirectUri = searchParams.get('redirect_uri')
-                    const urlToCopy = redirectUri
-                        ? `${window.location.origin}${decodeURIComponent(redirectUri)}`
-                        : window.location.href
-                    await copyTextToClipboardWithFallback(urlToCopy)
+                    // Copy redirect_uri if present (supports absolute and relative), else copy current URL
+                    const redirectUriRaw = searchParams.get('redirect_uri')
+                    let urlToCopy = window.location.href
+                    if (redirectUriRaw) {
+                        // Try to decode if it is percent-encoded. Ignore decode errors.
+                        let decoded = redirectUriRaw
+                        try {
+                            decoded = decodeURIComponent(redirectUriRaw)
+                        } catch {
+                            /* ignore */
+                        }
+                        // Normalize to absolute URL using URL API; ignore parse errors.
+                        try {
+                            urlToCopy = new URL(decoded, window.location.origin).toString()
+                        } catch {
+                            /* ignore */
+                        }
+                    }
+                    await copyTextToClipboardWithFallback(urlToCopy)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// copy the redirect uri if it exists, otherwise copy the current url
const redirectUri = searchParams.get('redirect_uri')
const urlToCopy = redirectUri
? `${window.location.origin}${decodeURIComponent(redirectUri)}`
: window.location.href
await copyTextToClipboardWithFallback(urlToCopy)
setCopyButtonText('Copied!')
// Copy redirect_uri if present (supports absolute and relative), else copy current URL
const redirectUriRaw = searchParams.get('redirect_uri')
let urlToCopy = window.location.href
if (redirectUriRaw) {
// Try to decode if it is percent-encoded. Ignore decode errors.
let decoded = redirectUriRaw
try {
decoded = decodeURIComponent(redirectUriRaw)
} catch {
/* ignore */
}
// Normalize to absolute URL using URL API; ignore parse errors.
try {
urlToCopy = new URL(decoded, window.location.origin).toString()
} catch {
/* ignore */
}
}
await copyTextToClipboardWithFallback(urlToCopy)
setCopyButtonText('Copied!')

Comment on lines +25 to +37
<NavHeader
hideLabel
onPrev={() => {
// Check if the referrer is from the same domain (internal navigation)
const isInternalReferrer = checkIfInternalNavigation()

if (isInternalReferrer && window.history.length > 1) {
router.back()
} else {
router.push('/home')
}
}}
/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Mirror history behavior: use replace() for the non-internal fallback

Same reasoning as in PublicProfile: when there’s no internal referrer, replace('/home') avoids an extra history entry and a possible back-and-forth loop.

-                        router.push('/home')
+                        router.replace('/home')

Also verify that the “/home” route exists in the app router or pages router to prevent a broken fallback:


🏁 Script executed:

#!/bin/bash
# Look for an App Router page or Pages Router file for /home
fd -a -t f '(^|/)home(/page\.(tsx|ts|jsx|js)|\.(tsx|ts|jsx|js))$' 2>/dev/null || true

Length of output: 123


Mirror history behavior and ensure valid fallback route
Using router.replace('/home') prevents an extra history entry on external navigations. However, no /home page was found in your App or Pages router (only src/components/Global/Icons/home.tsx was detected), which would lead to a broken link. Please:

  • Change router.push to router.replace for the non-internal fallback.
  • Add or correct the /home route in your App Router (src/app/home/page.tsx) or Pages Router (src/pages/home.tsx), or update the fallback to point at an existing route.
-                        router.push('/home')
+                        router.replace('/home')
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<NavHeader
hideLabel
onPrev={() => {
// Check if the referrer is from the same domain (internal navigation)
const isInternalReferrer = checkIfInternalNavigation()
if (isInternalReferrer && window.history.length > 1) {
router.back()
} else {
router.push('/home')
}
}}
/>
<NavHeader
hideLabel
onPrev={() => {
// Check if the referrer is from the same domain (internal navigation)
const isInternalReferrer = checkIfInternalNavigation()
if (isInternalReferrer && window.history.length > 1) {
router.back()
} else {
router.replace('/home')
}
}}
/>
🤖 Prompt for AI Agents
In src/components/Profile/index.tsx around lines 25 to 37, the back handler uses
router.push('/home') for external fallbacks which adds a history entry and
points to a non-existent route; change router.push to router.replace('/home') to
mirror native history behavior and either add a real /home route (create
src/app/home/page.tsx or src/pages/home.tsx depending on your router) or update
the fallback path to an existing route in your app (e.g., '/' or '/dashboard')
so the redirect is valid.

@@ -8,7 +8,7 @@ export type WithdrawView = 'INITIAL' | 'CONFIRM' | 'STATUS'

export interface WithdrawData {
token: ITokenPriceData
chain: peanutInterfaces.ISquidChain & { tokens: peanutInterfaces.ISquidToken[] }
chain: peanutInterfaces.ISquidChain & { networkName: string; tokens: peanutInterfaces.ISquidToken[] }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Type expansion for WithdrawData.chain to include networkName looks good; ensure all producers provide it

This aligns with the repo-wide shift to networkName. Please verify that all creators of WithdrawData (and onReview payloads) now supply chain.networkName to prevent runtime casts or undefined access down the line. Also consider a small type alias to avoid repeating the long intersection across files.

Apply this minimal refactor to reduce repetition:

-    chain: peanutInterfaces.ISquidChain & { networkName: string; tokens: peanutInterfaces.ISquidToken[] }
+    chain: ISquidChainWithTokens

Add this helper type near the top of the file (outside of the selected range):

type ISquidChainWithTokens = peanutInterfaces.ISquidChain & {
  networkName: string
  tokens: peanutInterfaces.ISquidToken[]
}

Run this script to confirm there are no lingering old shapes:


🏁 Script executed:

#!/bin/bash
# 1) Find any remaining uses missing `networkName` in chain intersections
rg -nP --type=ts '\bISquidChain\s*&\s*{[^}]*\btokens:\s*interfaces?\.ISquidToken\[\][^}]?}' -g '!**/node_modules/**' | rg -nPv 'networkName\s*:\s*string'

# 2) Check that `getSquidChainsAndTokens` advertises the updated return type
rg -nP --type=ts 'getSquidChainsAndTokens\s*\([^)]*\)\s*:\s*Promise<\s*Record<string,\s*interfaces?\.ISquidChain\s*&\s*{[^}]*networkName\s*:\s*string' src/app/actions/squid.ts -g '!**/node_modules/**'

Length of output: 1245


Ensure all ISquidChain intersections include networkName and adopt a shared alias

The grep results show multiple locations still using

interfaces.ISquidChain & { tokens: interfaces.ISquidToken[] }

without the new networkName: string field. These must be updated—both for correctness and to eliminate repetition via a type alias.

Define the alias (e.g. at the top of src/context/WithdrawFlowContext.tsx or in a central types.ts):

type ISquidChainWithTokens = peanutInterfaces.ISquidChain & {
  networkName: string;
  tokens: peanutInterfaces.ISquidToken[];
}

Replace each intersection with the alias:

  • src/hooks/useTokenChainIcons.ts:18
  • src/lib/url-parser/parser.ts:111, 152
  • src/lib/url-parser/types/payment.ts:15
  • src/lib/validation/token.ts:79–81

For example:

- chainDetails?: interfaces.ISquidChain & { tokens: interfaces.ISquidToken[] }
+ chainDetails?: ISquidChainWithTokens

Update the getSquidChainsAndTokens signature in src/app/actions/squid.ts to return:

Promise<Record<string, ISquidChainWithTokens>>

This will enforce at compile time that every producer of WithdrawData.chain (and related payloads) supplies networkName, and it DRYs up the codebase by centralizing the intersection type.

🤖 Prompt for AI Agents
In src/context/WithdrawFlowContext.tsx around line 11, the code uses an inline
intersection type for ISquidChain with tokens but omits networkName and repeats
this pattern across the codebase; define a shared type alias (e.g.
ISquidChainWithTokens) that extends peanutInterfaces.ISquidChain with
networkName: string and tokens: peanutInterfaces.ISquidToken[] at the top of
this file or a central types.ts, then replace all occurrences of
peanutInterfaces.ISquidChain & { tokens: ... } (and any similar inline
intersections) with that alias in the listed files
(src/hooks/useTokenChainIcons.ts line ~18, src/lib/url-parser/parser.ts lines
~111 and ~152, src/lib/url-parser/types/payment.ts line ~15,
src/lib/validation/token.ts lines ~79–81) and finally update
getSquidChainsAndTokens in src/app/actions/squid.ts to return
Promise<Record<string, ISquidChainWithTokens>> so all producers/consumers
require networkName and tokens consistently.

* Used to get the user's country code from ipapi.co
* @returns {object} An object containing the country code, whether the request is loading, and any error that occurred
*/
export const useGeoLocaion = () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Typo in hook name and file name (useGeoLocaion) — rename to useGeoLocation

Spelling mismatch is easy to miss and will cause import inconsistencies across the app. Recommend renaming the file to useGeoLocation.ts and the export accordingly, then updating imports.


🏁 Script executed:

#!/bin/bash
# Find current imports and usages to update after rename.
rg -n "useGeoLocaion|useGeoLocation" -C2

Length of output: 1465


Rename useGeoLocaion to useGeoLocation

The typo exists in both the hook definition and its import. Please apply the following mandatory refactors:

  • Rename the file
    src/hooks/useGeoLocaion.tssrc/hooks/useGeoLocation.ts
  • Update the hook’s export in src/hooks/useGeoLocation.ts
    - export const useGeoLocaion = () => {
    + export const useGeoLocation = () => {
  • Update all imports (example in CountryList.tsx):
    - import { useGeoLocaion } from '@/hooks/useGeoLocaion'
    + import { useGeoLocation } from '@/hooks/useGeoLocation'
  • Ensure any remaining references (e.g. destructured variables) align with the corrected hook name.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export const useGeoLocaion = () => {
export const useGeoLocation = () => {
🤖 Prompt for AI Agents
In src/hooks/useGeoLocaion.ts around line 8, the hook and filename are
misspelled as useGeoLocaion; rename the file to src/hooks/useGeoLocation.ts,
change the exported hook identifier to export const useGeoLocation = () => { ...
}, and update all imports and references across the codebase (e.g.,
CountryList.tsx and any destructured variables) to use useGeoLocation so the
filename, export and usage are consistent.

Comment on lines +132 to +134
const kycUrl = convertPersonaUrl(apiResponse.kycLink)
setIframeOptions({
src: kycUrl,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

KYC URL converter likely malformed (missing bracket) — will break Persona widget URL

convertPersonaUrl appears to construct fields[iqt_token without the closing bracket before =. That will produce an invalid query string and block the KYC flow. The issue is in src/utils/bridge-accounts.utils.ts (see provided snippet lines 19-31).

Proposed fix in src/utils/bridge-accounts.utils.ts:

export const convertPersonaUrl = (url: string) => {
  const parsedUrl = new URL(url)
  const templateId = parsedUrl.searchParams.get('inquiry-template-id')
  const iqtToken = parsedUrl.searchParams.get('fields[iqt_token]')
  const developerId = parsedUrl.searchParams.get('fields[developer_id]')
  const referenceId = parsedUrl.searchParams.get('reference-id')
  const origin = encodeURIComponent(
    isInAllowedFrame() ? new URL(document.referrer).origin : window.location.origin
  )

  return `https://bridge.withpersona.com/widget?environment=production&inquiry-template-id=${templateId}&fields[iqt_token]=${iqtToken}&iframe-origin=${origin}&redirect-uri=${origin}&fields[developer_id]=${developerId}&reference-id=${referenceId}`
}

🏁 Script executed:

#!/bin/bash
# Verify the malformed param in the current branch.
rg -n "convertPersonaUrl" -C3
rg -n "fields\\[iqt_token" -C2 src/utils

Length of output: 3350


Fix malformed fields[iqt_token] parameter in convertPersonaUrl

The return statement in src/utils/bridge-accounts.utils.ts incorrectly omits the closing bracket before the = for the fields[iqt_token] query parameter, producing:

&fields[iqt_token=${iqtToken}&

This generates an invalid URL and will break the Persona widget flow.

• File: src/utils/bridge-accounts.utils.ts
Line: 31 (return statement)

Suggested diff:

- return `https://bridge.withpersona.com/widget?environment=production&inquiry-template-id=${templateId}&fields[iqt_token=${iqtToken}&iframe-origin=${origin}&redirect-uri=${origin}&fields[developer_id]=${developerId}&reference-id=${referenceId}`
+ return `https://bridge.withpersona.com/widget?environment=production&inquiry-template-id=${templateId}&fields[iqt_token]=${iqtToken}&iframe-origin=${origin}&redirect-uri=${origin}&fields[developer_id]=${developerId}&reference-id=${referenceId}`

Please apply this change to ensure the fields[iqt_token] parameter is correctly formatted.

🤖 Prompt for AI Agents
In src/utils/bridge-accounts.utils.ts around line 31, the return statement
builds a query param for fields[iqt_token] but is missing the closing bracket
before the equals sign, producing "...&fields[iqt_token=${iqtToken}&..."; update
the return string so the parameter is formatted as
"fields[iqt_token]=${iqtToken}" (i.e. add the closing ] before the =). Ensure
the rest of the query string concatenation/encoding remains intact after this
change.

@jjramirezn jjramirezn merged commit e64e47a into peanut-wallet Aug 21, 2025
9 of 10 checks passed
@jjramirezn jjramirezn deleted the chore/prod-release-105 branch August 21, 2025 17:30
@jjramirezn jjramirezn restored the chore/prod-release-105 branch August 21, 2025 17:34
Hugo0 added a commit that referenced this pull request Aug 21, 2025
* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* [TASK-14052] Prod release 105 (#1122)

* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* fix: formatting

---------

Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
jjramirezn added a commit that referenced this pull request Aug 25, 2025
* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* [TASK-14052] Prod release 105 (#1122)

* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* fix: formatting

---------

Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
jjramirezn added a commit that referenced this pull request Aug 29, 2025
* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* [TASK-14052] Prod release 105 (#1122)

* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* fix: formatting

---------

Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

* fix: bank claim flow runtime error (#1138)

* hotfix: make iban non optional (#1139)

* fix: bank claim flow runtime error

* fix: dont have iban as optional

* fix: merge conflicts

* fix: merge external account with bank details (#1140)

* fix: add id to external account (#1142)

* added tg footer (#1144)

* Hotfix : add missing countries - claim as guest flow (#1146)

* fix: add missing countries

* remove duplicate comment

* fix: show error on dynamic bank account form (#1147)

* fix: Invalid IBAN for UK (#1151)

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
jjramirezn added a commit that referenced this pull request Sep 3, 2025
* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* [TASK-14052] Prod release 105 (#1122)

* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* fix: formatting

---------

Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

* fix: bank claim flow runtime error (#1138)

* hotfix: make iban non optional (#1139)

* fix: bank claim flow runtime error

* fix: dont have iban as optional

* fix: merge conflicts

* fix: merge external account with bank details (#1140)

* fix: add id to external account (#1142)

* added tg footer (#1144)

* Hotfix : add missing countries - claim as guest flow (#1146)

* fix: add missing countries

* remove duplicate comment

* fix: show error on dynamic bank account form (#1147)

* fix: Invalid IBAN for UK (#1151)

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Juan José Ramírez <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
jjramirezn added a commit that referenced this pull request Sep 4, 2025
* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* Prod to staging (#1124)

* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* [TASK-14052] Prod release 105 (#1122)

* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* fix: formatting

---------

Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

* fix: dates in receipts (#1105)

* [TASK-13865] fix: add tx info on receipt (#1109)

* fix: add tx info on receipt

* feat: use address explorer url for depositor address

* fix(history): check befroe creating address explorer url

* Fix: logged in users have to re-login after installing PWA (#1103)

* store `LOCAL_STORAGE_WEB_AUTHN_KEY` in cookies

* ensure backward compatibility

* refactor: move syncLocalStorageToCookie call into useEffect for better lifecycle management

* feat: links v2.1 req fulfilment flows (#1085)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* feat: req fulfillment exchange flow

* fix: header title

* feat: req fulfillment using connected external wallet

* fix: navigation and ui

* fix: file name

* feat: abstract reusbale components from onramp flow for bank fulfilment

* feat: handle onramp creation for request fulfilment

* feat: reusable verification component

* feat: handle bank req fulfilment for peanut users

* fix: show all supported countries in req/claim bank flow

* feat: show google-pay/apple-pay based on users device

* fix: resolve pr review comments

* fix: exhange rate hook fallback value

* fix: resolve pr comments

* Feat: Collect tg username (#1110)

* feat: collect tg username

* update animations

* fix api route

* add thinking peanut gif

* fix typescript errors

* fix typo and reset telegramHandle field on logout

* fix: spacing and describe regex rules

* add missing export

* feat: add sound in success views (#1127)

* feat: handle history ui changes for links v2.1 (#1106)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* feat: req fulfillment exchange flow

* fix: header title

* feat: req fulfillment using connected external wallet

* fix: navigation and ui

* fix: file name

* feat: abstract reusbale components from onramp flow for bank fulfilment

* feat: handle onramp creation for request fulfilment

* feat: reusable verification component

* feat: handle bank req fulfilment for peanut users

* fix: show all supported countries in req/claim bank flow

* feat: show google-pay/apple-pay based on users device

* feat: handle bank send link claim hisotry for peanut users

* feat: handle history ui changes for request fulfillment using bank accounts

* fix: resolve pr review comments

* fix: exhange rate hook fallback value

* fix: resolve pr comments

* fix: review comments

* feat: badges updates (#1119)

* feat: badges updates and hook to check for interactions

* feat: handle badges for receipts and drawer header

* feat: handle badges on request and send flow

* feat: tooltip for badges

* fix: tooltip positioning

* fix: associate a external wallet claim to user if logged in (#1126)

* fix: associate a external wallet claim to user if logged in

* chore: fix comments

* [TASK-14113] fix: handle rpc outage when creating sendlinks (#1120)

* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* fix: handle rpc outage when creating sendlinks

* fix: formatting

* fix: parallelize geting deposit index

---------

Co-authored-by: Mohd Zishan <[email protected]>

* Integrate Daimo Pay (#1104)

* add daimo pay

* minor improvements

* cleanup and add success state

* resolve dependency issues

* fix: formatting

* fix: recent methods redirection

* add functions for daimo payment in request fulfilment flow

* Integrate daimo in request fulfilment flow

* remove hardcoded address

* add separate arbitrum usdc flow for deposits

* Add risk modal

* fix overlay blur

* Enhance loading state indication in payment process

* Add payer's address in deposit history entry

* Add validation

* add error handling

* remove action and move logic to API route

* fix errors

* fix: request flow

* fix: validation

* fixes

* add daimo flow in country specific method

* fix: slider not working on first attempt

* filter supported networks

* create reusable daimo button

* remove space

* remove route.ts file and move logic to server actions

* fix: infinite loading edge case

* update api and remove delay

* fix: layout shift

* fix: shadow

* update function name

* fix: success receipt (#1129)

* fix: roboto font not working (#1130)

* fix: allow cancel link from the claim page

* fix: allow canceling links from the shared receipt (#1134)

* fix: send flow cta (#1133)

* fix: send flow ctas

* fix: success sound on send flow

* fix: disabled btn on req pay flow

* Fix Daimo bugs (#1132)

* fix: bugs

* fix cross chain deposit details not correct

* fix: request screen UI

* add loading state

* remove old daimo button

* fix: missing dependencies and dead code

* add try catch finally block

* remove clear Daimo errors inside the balance-check effect

* fix copy

* minor fixes

* move ACTION_METHODS to constants file to remove circular dependency

* fix: circular dependency

* fix ts error

* update daimo version

* [TASK-14095] feat: add fallback transport to viem clients (#1131)

* feat: add fallback transport to viem clients

Use viem fallback transport to handle RPC errors and fallback to other
providers.

* style: Apply prettier formatting

* test: add fallback to viem mock

* fix: external claim links history ui + badges fix (#1136)

* fix: external claim links history ui + badges fix

* fix: resolve codderrabbit suggestions

* fix: coderrabbit comment on state stale

* Fix: disable add money button on default state + disable sound on IOS (#1145)

* fix: add money success screen shows usernmae

* disable add money button in default state

* disable sound on IOS

* Fix: daimo bugs part2 (#1149)

* fix: black screen on IOS

* fix: sucess screen showed without paying - add money flow

* fix currency and double $ in  txn history

* fix: x-chan token size and add API to get missing token icons

* fix: req fulfilment

* add default value to tokenData

* fix: move useeffect above transaction null check

* format amount

* fix: space between currency and amount (#1135)

* Lock token to USDC arb for peanut ens username (#1128)

* Lock token to USDC arb for peanut ens username

* add comment

* revert variable declaration for sanitizedValue in GeneralRecipientInput component

* fix add regex to strip only from the end

* [TASK-13900] Feat/kyc modal changes (#1137)

* fix: pointer events

* fix: modal btns not working on mobile

* add missing dependency

* remove close button

* Chore/prod to dev 106 (#1152)

* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* [TASK-14052] Prod release 105 (#1122)

* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* fix: formatting

---------

Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

* fix: bank claim flow runtime error (#1138)

* hotfix: make iban non optional (#1139)

* fix: bank claim flow runtime error

* fix: dont have iban as optional

* fix: merge conflicts

* fix: merge external account with bank details (#1140)

* fix: add id to external account (#1142)

* added tg footer (#1144)

* Hotfix : add missing countries - claim as guest flow (#1146)

* fix: add missing countries

* remove duplicate comment

* fix: show error on dynamic bank account form (#1147)

* fix: Invalid IBAN for UK (#1151)

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13950] Fix: incorrect token amount on second withdraw (#1150)

* fix: incorrect token amount on second withdraw

* move `resetTokenContextProvider()` to unmount callback

* fix: transaction explorer url for deposits

* fix: history skeleton copy

* save token and chain details for cross chain req-fulfilments (#1154)

* fix: send links history ui for senders pov when claimed to bank accounts (#1156)

* fix: sort action list methods

* fix: send links claimed to bank accounts history ui for senders pov

* fix: issues for request link paying with bank (#1158)

- Specify recipient when creating onramp for request fulfillment
- Use correct amount depending on currency

* fix: stop cleaning error by bic field (#1159)

We now always clear before starting submission and also bic field will
always show, so that logic is not needed anymore.

* fix: claim country currency and amount, fallback to $  (#1164)

* feat: show local bank currency incase of bank claims

* fix: activity rows for sender's send link history

* fix: verification modal when claiming

* fix: state issue when new user tries to claim to bank

* fix: request pay copy (#1165)

* fix: close kyc modal btn (#1166)

* Fix testing github action (#1167)

* chore: remove prettier action

When commiting it clashes with signature verification rules

* chore: update test action setup version

* fix: install first

* fix: actually make sure that cancelledDate is a Date (#1170)

* fix: icon and margin (#1171)

* Hide pay with wallet button in Daimo component (#1172)

* hide pay with wallet button

* improve targeted css approach

* Fix: Daimo bug and activity receipt bug (#1175)

* sligify chain name

* fix: stale state issue

* hide row if tokenData is not present

* Fix/conflicts (#1177)

* HOTFIX - IBAN country detection and incorrect bank acc details (#1094)

* Fix: Iban country detection and incorrect bank acc details

* Fix: update IBAN country validation to use correct locale string comparison

* add validations for US and mexican bank accounts

* fix typo

* fix claim flow and create a reusable function for getting 3 letter code

* fix country code mismatch

* fix: show error below input field

* remove unnecessary checks

* remove unnecessary CLABE check

* Prod LP v2.1 (#1098)

* feat: lpv2.1

* fix: gigaclouds, font and exchange widget

* fixes and improvements

* remove duplicate export

* remove unused component

* Fix: Landing page hero section responsiveness issue (#1107)

* fix: hero section responsiveness issue

* fix: stars position

* fix height on desktop

* remove unused code

* fix margins (#1113)

* [TASK-14052] Prod release 105 (#1122)

* feat: handle send link claims to bank account for peanut users (#1078)

* reafactor: create reusable country list component and use it for all the flows

* feat: reusable user accounts components

* feat: handle different cases based on kyc status for bank claim

* fix: account creation

* chore: add docstring to hooks

* chore: better comments for bank flow manager

* fix: kyc modal closing after tos acceptance issue

* fix: remove bank acc caching from withdraw flow

* fix: update confirm claim modal copy

* fix: remove bank acc caching from claim flow

* fix: navheader title

* remove duplicate debounce code and use `useDebounce` hook instead (#1079)

* Landing page v2.1 (#1089)

* lpv2.1 part 1

* Add exchange widget

* add and integrate exchange API

* add yourMoney component bg

* update landing countries svg

* integrate frankfurter API

* fixes and improvements

* decrease hero section height

* allow max 2 decimal places

* Add `/exchange` route

* fix: overlay

* make destination amount editable and bugg fixes

* some fixes & currency improvements

* crucial commit

* fix checkmark, font size and weight

---------

Co-authored-by: Hugo Montenegro <[email protected]>

* [TASK-13186] refactor: use networkName instead of axelarChainName (#1095)

* refactor: use networkName instead of axelarChainName

* fix: types

* fix: onramp currency (#1096)

* fix: stretched favicon (#1099)

* [TASK-13971] fix: scientific notation in eip681 parsing (#1097)

* fix: scientific notation in eip681 parsing

* fix: qr handling tests

* fix: peanut sdk mock

* pull iban hotfix (#1100)

* fix: claim flow bugs (#1102)

* fix: cross chain claim

* fix: full name issue on confirm bank claim view

* fix: back navigation on desktop views

* Fix back button not working on /profile (#1101)

* Fix back button not working

* fix public profile page

* extract internal navigation logic to utility function

* fix: send link claims to us bank accounts (#1108)

* fix: usa bank account claims

* fix: show bank account details in confirm claim view

* Sync Landing page changes (#1111)

* reduce clouds size and update font

* fix: hero section responsiveness issue

* fix: formatting errors

* add currency animation

* fix: us bank claims after kyc for logged in users (#1112)

* fix: trim account form inputs for spaces (#1114)

* [TASK-14107] fix: don't allow claiming on xChain if route is not found (#1115)

* fix: don't allow claiming on xChain if route is not found

* fix(claim): use correct decimals for min receive amount

* feat: handle redirect uri when on unsupported browsers (#1117)

* feat: handle redirect uri when on unsupported browsers

* fix: confirm bank claim ui rows for iban guest claim

* remove animation (#1118)

* fix: formatting

---------

Co-authored-by: Kushagra Sarathe <[email protected]>
Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

* fix: bank claim flow runtime error (#1138)

* hotfix: make iban non optional (#1139)

* fix: bank claim flow runtime error

* fix: dont have iban as optional

* fix: merge conflicts

* fix: merge external account with bank details (#1140)

* fix: add id to external account (#1142)

* added tg footer (#1144)

* Hotfix : add missing countries - claim as guest flow (#1146)

* fix: add missing countries

* remove duplicate comment

* fix: show error on dynamic bank account form (#1147)

* fix: Invalid IBAN for UK (#1151)

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Juan José Ramírez <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>

---------

Co-authored-by: Mohd Zishan <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
Co-authored-by: Juan José Ramírez <[email protected]>
Co-authored-by: Juan José Ramírez <[email protected]>
Co-authored-by: Hugo Montenegro <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants