@funkit/connect
Version:
Funkit Connect SDK elevates DeFi apps via web2 sign-ins and one-click checkouts.
743 lines (557 loc) • 213 kB
Markdown
# @funkit/connect
## 10.2.0
### Minor Changes
- 4851fe3: Add Lighter Unified Trading account support. When the connected wallet's Lighter main account reports `account_trading_mode: 1` (unified), the deposit flow hides the `USDC (Spot)` destination and shows `USDC (Perps)` as plain `USDC`, and the withdrawal flow does the same for the Fast/Secure source-token dropdowns. Simple-mode accounts (`account_trading_mode: 0`) are unchanged.
### Patch Changes
- 1ee3c30: Export `getWithdrawButtonText` from the withdrawal module so its CTA
label/disabled-reason precedence ladder can be unit-tested directly. Internal
helper only — no runtime or public-API behavior change.
- 1af584f: Lighter Unified Trading accounts: the Fast withdrawal method subtitle now reads "USDC only" instead of "USDC Perps only" (new `withdrawal.fastDisclaimerUnified` key, all 8 locales). Simple-mode accounts are unchanged.
- 8ae9a55: Move the Statsig fallback generator into connect-core's own prebuild
- cc2f674: Migrate the on-ramp fops request to the typed FIAT_TO_CRYPTO rail config
- 81dc85c: Add WithdrawRecipientAddress snapshot coverage (default/use-connected/error/risk/non-EVM). Test-only; no runtime change.
- Updated dependencies [8ae9a55]
- @funkit/connect-core@1.7.1
## 10.1.1
### Patch Changes
- 045cd95: feat(connect): update source change wordings
- 2a5b19a: fix(connect): make swapped iframe scrollable
- 6ae84b0: Hide fiat withdrawal limits when the user's balance is below the payment method limit
- 36423cd: test(connect): test TransferToken
- a074ecf: feat(connect): order connect wallet chain icons via config
- Updated dependencies [6ae84b0]
- Updated dependencies [a074ecf]
- @funkit/connect-core@1.7.0
## 10.1.0
### Minor Changes
- b3f7e3e: Allow customRecipient and generateActionsParams to be set together in the checkout config
- 1c74a2b: Add USDC Spot to Lighter Secure withdrawal via a required `routeType` on the Secure callback params
- 803bcbc: Move `WithdrawalParam.lighterAssetIndex` into a discriminated `customerData` object (`{ customerName: 'lighter', assetIndex }`)
### Patch Changes
- 7636095: Gate Cash App Lightning via dynamic config instead of a hardcoded US check
- Updated dependencies [7636095]
- @funkit/connect-core@1.6.2
## 10.0.0
### Major Changes
- 6eb4e0d: fix(connect): isolate i18next in a private instance so the SDK no longer initializes or mutates the host app's global i18next singleton
Previously `@funkit/connect` called `i18n.use(initReactI18next).init()` on the shared i18next **default singleton** at import time (and `changeLanguage()` on it at runtime via `FunkitI18nProvider`). Because bundlers dedupe i18next to a single instance, this let the SDK "take over" a host app's own i18next — surfacing as an intermittent, build-order-dependent i18next takeover under webpack.
The SDK now creates its own instance via `i18next.createInstance()` and no longer registers `initReactI18next`, so importing or rendering funkit never touches your app's i18next or react-i18next's module-global defaults.
Migration: if you imported the `i18n` export from `@funkit/connect` expecting it to be your app's shared i18next singleton, it is now a private, funkit-scoped instance — configure your own i18next for your app. Set the SDK's language via the `locale` prop on `FunkitProvider` as documented.
### Patch Changes
- a806298: Show a subtle note under the Cash header instead of a large error state when no cash-out methods are available for withdrawal.
- cac2d42: feat(connect): add cash app payment method
- e81d5c2: chore: migrate connect consumers off the legacy CDN feature-flag runtime (Statsig is now the flag source)
- remove the unused `useIsTokenWhitelisted` hook (no remaining consumers)
- drop the `useFlags()` loading gate from `LoadingAccount` — checkout no longer blocks on legacy flag fetch
- inline `AssetSelectionBannerConfig` into `useNewTokenBanner` (already Statsig-backed) so it no longer depends on `~/utils/flags/types`
Internal-only — none of these symbols are public exports.
- 9e0e045: chore: remove the legacy CDN feature-flag runtime now that Statsig is the flag source
The `FunkitFlagsProvider` (CDN-fetched flags with an offline fallback config) is no longer read by any consumer after the [3/n] migration. This removes it entirely:
- unmount `FunkitFlagsProvider` from `FunkitProvider`
- delete `FunkitFlagsProvider.tsx` and the `~/utils/flags/` module (`config`, `endpoint`, `impl`, `hash`, `types`)
Internal-only — none of these symbols were public exports. The old SDK flag config remains hosted on S3 for existing (pre-migration) consumers.
- 4b8c04b: refactor(connect): consolidate Cash App into synthetic FOP, and warn on unexpected withdrawal synthetic FOP
- 109a92c: fix(connect): use correct per-token decimals for Solana SPL tokens (USDC/USDT are 6, not 9)
- 92fad39: refactor(connect): cleanup sourcechange handler logic
- a78a301: feat(connect): finish Cash App flow
- 4c446f9: Surface specific error messages for checkout quote failures
- 5c1dd2b: feat(connect): add Cash App payment method flow
- d6e6900: refactor: narrow ts types and clean up ternary checks on lightning invoice qrcode
- c20374e: Broaden WithdrawAmountInput snapshot coverage (insufficient-balance error, USD equivalent). Test-only; no runtime change.
- 42461ff: Broaden WithdrawContent snapshot coverage (quote loading/error, risk, blacklist, Lighter Fast). Test-only; no runtime change.
- d1223b9: Add unit test coverage for getErrorNotification mapping and error-source precedence. Test-only; no runtime change.
- Updated dependencies [cac2d42]
- Updated dependencies [4b8c04b]
- Updated dependencies [79c92ec]
- Updated dependencies [16cc96f]
- Updated dependencies [4c446f9]
- Updated dependencies [d27111c]
- @funkit/connect-core@1.6.1
- @funkit/chains@2.1.3
- @funkit/api-base@6.0.0
## 9.28.1
### Patch Changes
- 1d867b3: Fix Aave supply health factor showing an inflated value while the quote loads
- 2d5650d: Show the exact withdrawable balance on withdrawal cash methods instead of a rounded-down limit
- Updated dependencies [ec71a28]
- Updated dependencies [2d5650d]
- @funkit/chains@2.1.2
- @funkit/connect-core@1.6.0
## 9.28.0
### Minor Changes
- c3d2458: Remove the vault deposit feature: dropped `finalizedToken` from `FunkitCheckoutConfig`, `finalizedTokenRate` from `DynamicTargetAssetCandidate`, and all associated UI/quote branches (`isVaultDepositCheckout`, `computeDisplayDestinationToken`). The only consumer (HyperBeat) was removed in March 2026 and no active integrators reference these fields, so this is shipped as `minor` rather than `major`.
- cb77d5c: feat(withdrawal): config-first default chain for withdrawal only
`useTokenAndChainDropdown` resolves the default chain config-first when `isWithdrawal` is set: a `withdrawalconfig` chain marked `isDefault` beats the caller-supplied source chain. Deposit/transfer stay caller-first, so a deep-linked `udaParams.defaultChainId` still wins over the deposit config's `isDefault`.
- 99812aa: feat(withdrawal): resolve token addresses from config, drop the per-symbol API lookup
The withdrawal screen no longer resolves token addresses with a `getAssetErc20ByChainAndSymbol` round-trip; the addresses already live in config.
- `@funkit/connect-core`: `resolveTokenTransferConfig` adds `addressBySymbolByChainId` (`chainId → symbol/alias → original-case address`), preserving casing (checksummed EVM, base58 Solana/Tron).
- `@funkit/connect`: `WithdrawalContent` reads the destination address from that map and the Lighter Secure source address from a hardcoded map in `LighterWithdrawal.tsx`, pricing both via `useAssetAddressPrice`. Removes all `useAssetSymbolPrice` usage from the withdrawal flow (hooks left for a follow-up cleanup).
- `@funkit/connect-rn`: test-only fixture update.
### Patch Changes
- 4bd782b: chore(connect): update btc lightning wording / icons
- a395c4c: chore: retire the `faster-notifications` flag now that it is fully rolled out
The gate is treated as permanently on and every branch collapses to its enabled path:
- `@funkit/api-base`: `getDirectExecutionsByUserId` always calls `/direct-execution/userId/{userId}/deposit-events`; the `isFasterNotificationsEnabled` field is removed from `GetDirectExecutionsByUserIdRequest`.
- `@funkit/connect-core`: `RecentDepositsApiQueryParams` drops the `isFasterNotificationsEnabled` field.
- `@funkit/connect`: deposit notifications always use the faster copy; removes the gate read and the dead Lighter/legacy notification branches.
- 21bdcd2: fix(connect): fix FunInput input text falling back to the UA-default font on hosts without a form-control CSS reset
- b8a7aaa: feat(connect): add BTC Lightning banner in Transfer Crypto step
- 043781a: Move `usePolymarketAccountBalances` from `~/clients/polymarket/` to `~/hooks/` so main-bundle code no longer imports from a customer-scoped entry point. Internal-only — not a public export.
- ce05191: rename `isTokenAddressEquivalent` → `isEVMAddressEquivalent`
The helper does a case-insensitive equality check on two EVM addresses; the new name reflects that it compares wallet/contract addresses generally, not just token addresses. **Migration:** replace `isTokenAddressEquivalent(...)` with `isEVMAddressEquivalent(...)` — the signature is unchanged. `@funkit/connect` and `@funkit/connect-core` are call-site updates only (no API change).
- 202c15b: Add `USDG` to the `stablecoinsymbols` dynamic-config fallback. `useIsStablecoin` substring-matches against this list, so USDG now displays 1:1 (price forced to `1`) on the quote input / confirmation screens regardless of its live market price. The Statsig source-of-truth config was updated first; this regenerates only the `stablecoinsymbols` fallback entry.
- 6f67939: Add unit test coverage for the withdrawal recipient address validators (per chain family). Test-only; no runtime change.
- 736141a: Add unit test coverage for the hasRisk Chainalysis screening decision logic. Test-only; no runtime change.
- 7cfc267: fix(withdrawal): block same-address self-transfers before quoting
- Updated dependencies [a395c4c]
- Updated dependencies [c3d2458]
- Updated dependencies [ce05191]
- Updated dependencies [b8a7aaa]
- Updated dependencies [202c15b]
- Updated dependencies [99812aa]
- @funkit/api-base@5.2.0
- @funkit/connect-core@1.5.0
- @funkit/utils@4.0.0
## 9.27.1
### Patch Changes
- 2277277: Checksum the Polymarket deposit recipient (predictions/perps) so a lowercased integrator-supplied address can't cause a downstream recipient mismatch.
- d59ac5d: Fix a layout jump on the checkout asset list for xStock (Nado) targets by resolving the wrapper-token address once at the `useWalletAssetHoldings` seam and awaiting it, so the list paints with the wrapper already recognized. Also bumps the wrapper-address query `staleTime` to 1h.
- 7604174: fix(polymarket): lower Polymarket Perps minimum deposit from $10 to $5 (matches the updated `ExchangeV1.supportedAssets` on-chain minimum)
- Updated dependencies [7880a7b]
- @funkit/fun-relay@2.9.0
## 9.27.0
### Minor Changes
- 6e4aa57: Disable Swapped withdrawal cash methods with a "Low Balance" badge when the withdrawal balance is below the sell minimum.
- 394a46c: Cap the Swapped withdrawal iframe input via a FOP `defaultMaxAmount` (EUR) derived from the user's source-token balance
### Patch Changes
- df21fd3: chore: update final rolly contract
- 3e22665: patch(connect): fix ostium source change top spacing
- cf7af7d: fix(connect): scope Nado direct-transfer fast-path to xStock targets
- 78a888c: fix(connect): update Mallard deposit contract address
- Updated dependencies [42aafd9]
- Updated dependencies [394a46c]
- @funkit/fun-relay@2.8.7
- @funkit/api-base@5.1.0
- @funkit/connect-core@1.4.1
## 9.26.1
### Patch Changes
- Updated dependencies [0a13c0c]
- @funkit/fun-relay@2.8.6
## 9.26.0
### Minor Changes
- 907d703: Add `useMallardWithdrawalConfig` (+ `MALLARD_USDG_ADDRESS`, `MALLARD_USDG_ICON_SRC`, `MallardWithdrawalConfig`) for Mallard (Robinhood chain) withdrawals: builds a `WalletWithdrawalConfig` for USDG signed by the user's connected wallet.
Also relaxes the withdrawal modal's "Use connected wallet" recipient shortcut to show for connected-wallet withdrawals (where the source is the connected wallet), not just proxy-based flows.
- b836b7c: Add a Statsig-driven source-route override (`swappedwithdrawalsourceoverrides`) for Swapped fiat withdrawals: when the requested target asset isn't supported by Swapped, enforce a known-good accepted route keyed on the user's source asset. Empty config leaves existing behavior unchanged.
- b8c578e: Type and validate Swapped sell order data on receipt; order execution lands in a follow-up
- ab7c4b9: Execute Swapped withdrawals via the Relay route through `useWithdrawal` (EXACT_OUT quote with real fees)
### Patch Changes
- 5d6146d: Update the "Use other assets" tooltip copy in the source-change list
- 0db2b47: Fix a new deposit started off the active checkout keeping the prior route's behavior: switching destination (e.g. Mallard USDG spot → perps) now re-binds the per-route deposit actions instead of dropping them, so the perps source token is selectable again.
- 9ff1e58: Initialize the relay client from the active wagmi config (`useConfig`), sourcing each chain's RPC from its configured transport. Fixes `WaitForTransactionReceiptTimeoutError` on chains whose default RPC isn't reachable.
- 8c0afe8: Rename the "Other options" source/payment section header to "More options" for consistency
- Updated dependencies [86d2a31]
- Updated dependencies [a24681e]
- Updated dependencies [b8c578e]
- @funkit/connect-core@1.4.0
- @funkit/fun-relay@2.8.5
## 9.25.0
### Minor Changes
- 639d776: Remove the deprecated `/support` API service. The `POST /support/send-message` endpoint is being decommissioned on the API server, so all client references are removed.
`@funkit/api-base` (breaking): the `sendSupportMessage` function and the `SendSupportMessageRequest` type are no longer exported. There is no replacement client — integrate with the support provider directly, or contact the Fun.xyz team for the supported path.
`@funkit/connect`: the in-app checkout "Tell us more" report form (which posted to `/support`) has been removed. The "Get help" affordances in checkout-complete, the post-checkout history detail, and notifications now open the support contact link (`CONTACT_US_LINK`) in a new tab, consistent with the existing direct-execution help flow. No public exports changed.
- 23ec218: Nado: deposit the user's on-chain balance of the target spot token (e.g. QQQx/SPYx on Ink) via a same-token, same-chain ERC-20 transfer run from the confirmation step, instead of routing through Relay. Behind the `enable-rpc-xstock-assets` gate (off by default).
- cd57fba: Foundational types and config for the xStock direct-transfer flow: add the optional `assetClass` field to `DynamicTargetAssetCandidate`, the `enable-rpc-xstock-assets` feature gate, the `getActiveDynamicTargetAsset` / Nado asset-class helpers, and the wSPYx / wQQQx asset logos. Additive only — no behavior change.
### Patch Changes
- b777bcf: Read a target token's (and its xStocks wrapper's) on-chain balance via RPC and inject it as a payable holding, behind the `enable-rpc-xstock-assets` gate (off by default).
- Updated dependencies [fc74160]
- Updated dependencies [bb08629]
- Updated dependencies [639d776]
- Updated dependencies [23ec218]
- Updated dependencies [09452ce]
- Updated dependencies [cd57fba]
- @funkit/api-base@5.0.0
- @funkit/connect-core@1.3.0
- @funkit/fun-relay@2.8.4
## 9.24.0
### Minor Changes
- 5f381f8: Add an integrator-provided health-factor preview (before → after) to the Aave supply confirmation screen, and route the native supply fast-path through confirmation so it's shown there too.
- d4a2a99: feat(connect): cap Lighter Fast withdrawals at $3M with a "Secure withdrawal" prompt
- 281d46c: feat(connect): add `onBeforeSign` pre-sign hook to Lighter withdrawal config
Adds an optional, awaited `onBeforeSign` hook to `LighterWithdrawalConfig` (and the underlying `WithdrawalConfigBase`, so it applies to both the Fast and Secure methods). It fires after the user taps "Withdraw" but before the SDK fetches a nonce, prompts the wallet, or submits the L2 transaction. Integrators can cancel in-flight automated strategies here so the withdrawal signs against a stable nonce; throwing aborts the withdrawal and surfaces the message verbatim without consuming a nonce.
- bb56335: Wire real backend withdrawal FOPs and preload Swapped iframe URLs for the fiat withdrawal off-ramp
- f64e821: Add Swapped sell iframe rendering and event handling for fiat withdrawal flow
### Patch Changes
- be17e90: fix(connect): show the single Lighter Fast source token (USDC Perps) as a static chip instead of a one-item dropdown.
- 03f0299: feat(connect): style the Lighter Secure receive address, token, and chain as locked read-only fields with hover tooltips. Each field now uses the tertiary filled background with muted text to signal it can't be edited, and hovering surfaces an explanation ("You can only withdraw to your connected wallet", "You can only receive the token you are choosing to withdraw", "Secure withdrawals are only available on Ethereum"). The Lighter Fast source-token chip ("USDC (Perps)") also gains a hover tooltip explaining that fast withdrawals are only available for the USDC (Perps) balance.
- 66da5ee: fix(connect): show "Pending" instead of "Requested" as the Lighter Secure withdrawal fill status, matching the status shown in Lighter's own app.
- b3a77db: fix(connect): keep the Lighter withdraw balance fresh — refetch on widget open (`refetchOnMount` + 10s stale window) and eagerly invalidate the cached account after a withdrawal completes.
- 42c71e1: fix: suppress datadog multiple
- 7391a93: Point the Rolly Arbitrum deposit target (`ROLLY_VAULT_ADDRESS` in `clients/rolly.tsx`) at the current canonical vault `0x57d05CfC7bCAc9E7Ebf4D35a2b1725a83ADA771C`, replacing the two-versions-old `0x67Ae473b…42b1`. The new vault is registered on the Arbitrum VaultDepositooor with the `depositToken(address,uint256)` selector. Used by the internal-testing Rolly quickoption only.
- 7e1a68b: fix(connect): gate the withdrawal quote on a valid, settled amount — no quote fires for insufficient/below-min amounts, and changing the amount clears the stale quote until the new value settles.
- Updated dependencies [f64e821]
- @funkit/connect-core@1.2.0
## 9.23.2
### Patch Changes
- ed6d644: feat(connect): hide price impact for free usdc banner
- ed6d644: feat(connect): replace hidden fee breakdown with Terms/Help footer for free usdc
- 7612afd: chore(connect): update withdrawal empty-selection ui
- e021cb4: test(connect): test SelectBrokerage
- 5d5d4f5: Use Statsig gate `disable-frontend-chainalysis` to skip risk assessment checks.
- Updated dependencies [5d5d4f5]
- @funkit/connect-core@1.1.1
## 9.23.1
### Patch Changes
- 0f950ae: For Nado, pin only the currently-selected dynamic candidate to the top of the SelectAsset list with the Native badge — not every entry in `dynamicTargetAssetCandidates`. Ethereal/HyENA/Mallard behavior is unchanged.
- dd362c9: Regenerate four `@funkit/connect` snapshot tests under the repo-wide react `19.2.3` pin (added for the RN 0.85 renderer) — serialization-only, no behavior change.
- 79f4b01: Add `isTransferChainEnabled` to `@funkit/connect-core` to share the non-EVM deposit-chain gate; `@funkit/connect` delegates to it. No behavior change.
- 79f4b01: Extract the UDA deposit token-list resolver (`resolveTokenTransferConfig` + types + disabled-list helpers) to `@funkit/connect-core` so RN can reuse it; `@funkit/connect` delegates to it. No behavior change.
- 2ec86c0: Fix price impact and slippage for Lighter USDC (Perps) and USDC (Spot) target tickers
- 7ff56f1: Generalize the token-transfer screen's price impact and max slippage so USDT-target clients (e.g. opinion, predict, rolly) get the same like-for-like treatment USDC-target clients already get. When the source token matches the target stablecoin ticker, slippage is now `0` on the target chain and `0.05%` cross-chain, and price impact is `0`. Cross-stablecoin moves (USDC ↔ USDT) show `0.05%` impact and `0.20%` slippage. USDT/USDT0/USD₮0 are treated as one family (LayerZero OFTs of the same token) for both impact and slippage. `isPreferredChain` now includes BSC so the USDT-on-BSC path picks up the stablecoin-aware branches.
- 186a5c7: feat(connect): cashier - add Withdraw tab
- afa1d92: chore: remove createNadoDepositActions
- fc6850b: chore: remove unmaintained default destination display in transfer crypto screen
- afa1d92: feat: pin native tokens to top for nado and mallard
- 4462972: chore: reuse abis
- 32d1cc6: feat: dynamic target candidates can override the active config's `generateActionsParams` (presence-keyed: omit to inherit, set to override, set to `undefined` to clear)
- 57e89e3: feat: mallard actions
- Updated dependencies [827fece]
- Updated dependencies [beb3c84]
- Updated dependencies [79f4b01]
- Updated dependencies [79f4b01]
- Updated dependencies [79f4b01]
- Updated dependencies [c90915d]
- Updated dependencies [389a29d]
- Updated dependencies [4462972]
- Updated dependencies [32d1cc6]
- @funkit/connect-core@1.1.0
- @funkit/chains@2.1.1
- @funkit/fun-relay@2.8.3
## 9.23.0
### Minor Changes
- bbdcd22: feat: add `funkitConfig.prefillFiatEmail` to prefill the Swapped fiat onramp/offramp iframe with an integrator-supplied email. Surfaced via `IdentityProvider`, validated with the shared `@funkit/utils` validator (invalid emails are dropped, never block checkout), captured once at provider init, and forwarded into the `/fops` request for both ramps.
### Patch Changes
- cc14c1b: feat(connect): cashier - add Withdraw tab
- ad3cea3: Lighter withdrawals improvements
- 98c8e0d: Extract the params-shaped recent-deposits/recent-checkouts query hooks and the customer-agnostic checkout-history helpers into `@funkit/connect-core` so React Native can reuse them; `@funkit/connect`'s hooks are now thin context adapters — no web behavior change.
**BREAKING (`@funkit/connect-core`):** adds `@tanstack/react-query` (`>=5.0.0`) as a required peer dependency — consumers must install it and provide a `QueryClientProvider`. (`@funkit/connect` already ships it.)
- b9c7946: Extract the `SwappedProvider` state machine into a shared `useSwappedSession` hook in `@funkit/connect-core` so React Native can reuse it over a WebView transport. `@funkit/connect`'s `SwappedProvider` is now a thin wrapper — no web API or behavior change.
- Updated dependencies [98c8e0d]
- Updated dependencies [b9c7946]
- @funkit/connect-core@1.0.0
## 9.22.0
### Minor Changes
- 8ddeb8d: Auto-hide the input-amount fiat/token switcher when the switcher token is a recognized 1:1 stablecoin (gated by `hide-stablecoin-amount-switch`), where its converted amount equals the USD amount and reads as a fake exchange rate.
### Patch Changes
- d391c25: Disable the approval-method toggle while an Aave supply transaction is submitting
- 6fde0ad: Label the input-amount switcher with the traded token per quote mode (EXACT_IN → input token, EXACT_OUT → output token) across both the loaded and loading screens.
- 27d0681: fix(connect): render the Supply APY summary value in yield green so it reads as earnings, not a fee
- 3e0a7c4: feat: configure Aave UDA
- Updated dependencies [8ddeb8d]
- @funkit/connect-core@0.3.2
## 9.21.0
### Minor Changes
- 4b998c7: feat(connect): add Nado deposit client (`@funkit/connect/clients/nado`)
Exports `createNadoDepositActions`, `buildNadoSubaccount`, and the
`NADO_ENDPOINT_ADDRESS` / `INK_VAULT_DEPOSITOR_ADDRESS` constants. Deposits
route through the Ink VaultDepositooor: a max approve + a
mediated `deposit` whose Endpoint calldata carries AMOUNT_PLACEHOLDER, so
the live collateral balance is injected at execution (robust to bridge fee
drift, no dust stranded on the EOA).
### Patch Changes
- 08fcb87: fix(connect): add bottom spacing to web3 connect steps
- 01cb9d2: feat(connect): freeze source balance during withdrawal
- 9b76a48: chore(connect): add qr code theme variables
- Updated dependencies [1c4a23a]
- @funkit/fun-relay@2.8.2
## 9.20.0
### Minor Changes
- a36a58f: Make the Rolly vault address configurable via `vaultAddress` in `createRollyDepositActions`
- 423dd1b: feat(connect): polymarket perps
- fd01e79: Add `applyDynamicTargetAssetCandidate` so account pickers reuse the shared destination-selection path, and pass the active `dynamicRoutingId` to `getMinDepositUSD` so minimum deposits can be keyed by route
- 8ec8e65: The source change screen's `customTopComponent` now receives optional navigation props (`onStepChange`, `modalState`, `dynamicRoutingId`, `applyDynamicTargetAssetCandidate`) so a custom top component can switch the checkout destination or jump to another step. Existing zero-arg components remain valid. Adds `sourceChangeScreen.showCustomTopComponentDivider` to render a full-width divider beneath the custom top component (defaults to false).
### Patch Changes
- d42728d: Remove the stale `new-withdrawal-config` feature gate and the legacy withdrawal config switching. Withdrawal now always resolves chains/tokens from the Statsig `withdrawalconfig` (like deposit/token-transfer), dropping the legacy `WithdrawalChainsAndAssets` fallback, the `WithdrawalExcludeTokens` filter, and the legacy-vs-new shadow comparison logging. No public API or behavior change for consumers — the gate was fully rolled out.
- 7a996ed: feat: trim empty space on qrcode logo and apply circle radius
- 9bad44b: feat(connect): add free usdc banner
- 9fef879: fix: stop paging on recovered browser fetch failures from connect-sdk
- `@funkit/api-base`: `sendRequest` now logs native fetch `TypeError`s ("Failed to fetch", "Load failed", "NetworkError when attempting to fetch resource") at `warn` instead of `error`. These are recovered on the next request and should not page on-call. Aligns with the project logging-severity rule that `error` is reserved for unrecoverable failures.
- `@funkit/connect`: `useFiatExchangeRates` now sets `staleTime: 30m` to match frog's `Cache-Control: max-age=1800`, eliminating redundant refetches across the multiple hooks that consume it (`SourceChange`, `WithdrawalMethodSelect`, `useMinDeposit`, `useTokenTransfer`).
- aa54159: fix: edge cases on expired lightning quote
- cbfa295: fix(connect): hide free usdc banner in success/callback states
- f5c7513: Fix reopening a "new deposit" from a completed checkout when the config uses function-valued fields (e.g. a route-keyed `modalTitle`)
- 5b7c71c: Internal refactor: extract the source change screen's shared layout decisions (target-asset selectability, content divider, crypto/cash toggle margin) into a `useSourceChangeLayout` hook so the loading skeleton cannot drift from the loaded screen. No behavior change.
- 3a482d8: Keep Swapped exchange icons visible during refetch so they don't flash when the destination changes
- 81fe47b: Ungate the approval method toggle from the `enable-permit-toggle` feature flag on the Aave native supply flow
- Updated dependencies [9bad44b]
- Updated dependencies [9fef879]
- Updated dependencies [0c67343]
- Updated dependencies [ccc9c1e]
- Updated dependencies [7cc25ca]
- Updated dependencies [651e2e8]
- Updated dependencies [ca267e5]
- Updated dependencies [55b095b]
- @funkit/connect-core@0.3.1
- @funkit/api-base@4.5.1
- @funkit/fun-relay@2.8.1
- @funkit/utils@3.1.0
## 9.19.1
### Patch Changes
- 879c9bb: fix: balance-less rails (Card, Bitcoin Lightning) no longer show a false "Insufficient balance.
- 29f38c1: Move the platform-agnostic `FunLogger` class and the `LogTransport` interface (`LogLevel`, `LogContext`, `LogRecord`, `TrackingConsent`) into `@funkit/connect-core`. `@funkit/connect` keeps the `logger` singleton — constructed by injecting the web-only `DatadogBrowserLogsTransport` (which owns `@datadog/browser-logs`) — and re-exports `FunLogger` so existing `~/utils/funLogger` importers are unchanged. React Native will inject its own Datadog transport into the same `FunLogger`. No public API or behavior change.
- 871af19: Move the Statsig wrapper hooks, `__generated__` fallbacks, and the variant-config resolver into `@funkit/connect-core` so web and React Native share them. `@funkit/connect` keeps re-export façades; no public API or behavior change.
- fcc566b: Move the `SwappedTransport` interface + message contract into `@funkit/connect-core` so web and React Native share the typed Swapped bridge. The DOM-bound `SwappedProvider` / iframe transport stay in `@funkit/connect` and import the contract from core; no public API or behavior change.
- 5b94ae0: Extract the platform-agnostic token-transfer param helpers into `@funkit/connect-core` (thin-core): `getCheckoutTokenTransferParams` (with the Polymarket destination-token override lifted out into an injected `targetAssetOverride` so the builder stays customer-agnostic), the `CheckoutTokenTransferConfig` + `UDAConfig` types, and `getMinTransferValueForChain` + `MinTransferConfig`. The hooks that consume them (`useCheckoutTransferInit`, `useTokenTransfer`, `useUDAParams`) stay in `@funkit/connect` — they read web providers and carry customer/i18n branches — and re-export the moved symbols as façades. Web resolves the Polymarket override via `getPolymarketPerpsTargetAssetOverride` and injects it at both call sites. No public API or behavior change.
- 3377b2f: fix(connect): fix font-variant-numeric input width calc
- 2505ed2: Lighter spot deposits now open the amount screen in token entry when paying with the same asset (including native ETH into the ETH Spot market); perps deposits and all other checkouts keep the existing fiat default.
- efa7902: feat: add btc lightning limit
- 860ca5e: test(connect): add Rolly deposit actions coverage
- 45e4d09: feat: enable bitcoin lightning quick options and default input amount
- 553aae3: feat: remove fee breakdown from lightning invoice screen
- d2d487a: feat: minor qr code optimization for btc lightning
- Updated dependencies [29f38c1]
- Updated dependencies [871af19]
- Updated dependencies [fcc566b]
- Updated dependencies [5b94ae0]
- Updated dependencies [c11cbb9]
- @funkit/connect-core@0.3.0
- @funkit/chains@2.1.0
## 9.19.0
### Minor Changes
- 84050ab: feat: integrate btc lightning notifications
- e8925a0: feat(connect): move Rolly deposits from mainnet USDT to Arbitrum USDT0
Renames `MAINNET_USDT` → `ARBITRUM_USDT0` and `VAULT_DEPOSITOR_MAINNET` → `VAULT_DEPOSITOR_ARBITRUM` in `@funkit/connect/clients/rolly`; `createRollyDepositActions` gains an optional `tokenAddress` param
### Patch Changes
- 8c17c3a: Move the domain / status-derivation logic — `checkoutNotifications` (multi-step direct-execution merging + variant filters + diff), the pure half of `domains/swapped` (`FOPS_STALE_TIME`, `sortFops`, `roundFopsLimit`, `getFopsLimit`), the `PaymentMethod` enum, `utils/directExecution`, and `utils/getExchangeRate` — into `@funkit/connect-core`. `@funkit/connect` keeps re-export façades; `validateFops` stays in web until the FunLogger move. No public API or behavior change.
- 0bb4c5f: Move the pure utils (`transfer`, `address`, `swapped` pure half) into `@funkit/connect-core`; `@funkit/connect` keeps re-export façades. No public API or behavior change.
- b5f5962: test(connect): add payment method component coverage
- e2bca7f: test(connect): test WithdrawalContent component
- 52419bb: fix: lightning payment source label
- 83f787c: fix(connect): add hoverWithParentInput to tertiary buttons
- 7a34bed: fix(connect): use forwardRef in PaddedScrollableArea
- f233d6b: expand withdrawal recipient risk screening
- ce279f9: Withdrawal risk screening now fails closed: the submit CTA and quoting require a clean risk result
- feb855e: feat(connect): add topbar title font-family variable
- Updated dependencies [b9acb14]
- Updated dependencies [8c17c3a]
- Updated dependencies [0bb4c5f]
- Updated dependencies [feb855e]
- Updated dependencies [84050ab]
- Updated dependencies [f1e9ee3]
- Updated dependencies [1d0d838]
- @funkit/chains@2.0.0
- @funkit/connect-core@0.2.0
- @funkit/api-base@4.5.0
## 9.18.0
### Minor Changes
- 8baaa78: Pass the active `dynamicRoutingId` to dynamic `modalTitle` resolvers. The `modalTitle` callback now receives a `ModalTitleContext` (`TokenInfo` + optional `dynamicRoutingId`) instead of just `TokenInfo`, so integrators can key the checkout title by route/action — not only the target token address. This is required when two routes share a target token (e.g. Lighter USDC perps vs spot, which both deposit mainnet USDC for new users). The change is backwards compatible: existing `(asset: TokenInfo) => string` resolvers remain assignable. The `ModalTitleContext` type is now exported from the package root so integrators can annotate their resolver.
### Patch Changes
- deefef3: Aave native supply USDT zero-reset now reads allowance via the public client (not the wallet client) and waits for the `approve(0)` receipt before the SDK's `approve(amount)`, avoiding nonce collisions on `latest`-based RPCs.
- c5c0183: Translate Aave native-supply wallet errors into human-readable messages
- 98b196e: fix(connect): make the post-checkout "Add to wallet" chip readable in dark mode by deriving its background from the `modalBackground` theme token via `color-mix()` (with an opaque fallback) instead of a hardcoded translucent white.
- 0f4c245: fix: adjust lightning qrcode scannability
- 30a626e: Freeze the amount input while an Aave native-supply transaction is confirming
- e42f6b0: feat: add min limit for btc lightning path on input screen
- b10dd58: test(connect): test useMinDeposit
- dd1c42b: chore: sort named import members via oxlint sort-imports
- 453c797: test(connect): test WithdrawAmountInput
- Updated dependencies [8baaa78]
- @funkit/fun-relay@2.8.0
## 9.17.0
### Minor Changes
- d7f8e35: Aave native supply honors the approval-method toggle: `supplyWithPermit` when the user picks "Signed message" and the reserve supports EIP-2612, else `approve + supply` (with USDT zero-reset on stale allowance). The toggle is hidden for native assets that can't permit (USDT, WBTC).
- 4c7b8b5: Add isWithdrawal and Lighter fast/secure withdrawal type to purified checkout history items
### Patch Changes
- 20ed7f5: Record the real supply amount, USD value, and deposit timestamp on Aave native Direct Execution records (was `$0` total and a negative run time in fits).
- 20ed7f5: Persist the supplied amount on Aave native Direct Execution records so the checkout success screen's "You receive" shows the real amount instead of 0.
- 3e6c69d: test(connect): test SelectAsset component
- 0fc5f37: feat: integrate lightning quote prefetch
- 62c6bab: test(connect): test useCheckoutTimeEstimate
- dc5f538: test(connect): test useBluvo
- e9ae127: test(connect): test stepTransition
- cd5b590: test(connect): test usePostCheckout
- 59b02dd: test(connect): test useAccountBalancePostCheckout
- a4d5a9b: Reformat packages with oxfmt
- aa9f1ee: test(connect): test useAvailableBalanceForCheckout
- 769bae0: test(connect): stabilize useBluvo with getTokenDecimals mock
- 3e588fc: test(connect): test useSourceAssetConfirm
- 7076a2a: test(connect): test useCheckoutQuote
- 7690c31: test(connect): test useTokenTransfer
- Updated dependencies [20ed7f5]
- Updated dependencies [a4d5a9b]
- @funkit/api-base@4.4.1
- @funkit/utils@3.0.2
- @funkit/fun-relay@2.7.4
## 9.16.0
### Minor Changes
- 33bdcdc: Add `uiCustomizations.checkoutHistory.successScreenBackground` for custom CSS gradients on the post-checkout success screen.
- 85a68f3: Show supply APY and collateralization status on the checkout confirmation screen for yield destinations like Aave.
- 18bd8a2: feat(connect): gated "Add to wallet" button on the post-checkout success screen (EIP-747 `wallet_watchAsset`), driven by a new optional `addToWalletToken` checkout config field for vault-receipt flows (e.g. Aave aUSDT).
- 1d38bb4: feat: add btc lightning quoting and invoice
- 4753c9b: Add `confirmationScreen.showSelectedRoute` to surface the Relay/Across route row independently of passthrough branding (`selectedRouteConfig`).
### Patch Changes
- 1623974: test(connect): test useCheckoutDirectExecution
- bd5d863: Internal refactor: move the pure checkout-notification logic (multi-step direct-execution merging, deposit filtering, snapshot-diff derivation) into a new `domains/checkoutNotifications.ts` module. No public API or behavior change.
- 6cc9477: test: add snapshot coverage
- 33bdcdc: Skip the destination redirect on the post-checkout success screen when `destinationConfig` is set without a `url` (avoids misleading link to the user's own wallet).
- 7dfaeb7: Restore the post-checkout destination explorer link for customers whose `destinationConfig` sets no `url` (e.g. Polymarket). The link again falls back to the block explorer of `recipientAddr` as documented; customers whose destination is a concept rather than the recipient address should set `destinationConfig.url`.
- ce7dd34: Fix Lighter deposit/withdrawal recipient selecting a sub-account instead of the main account by selecting the `account_type === 0` entry from `accountsByL1Address` rather than `sub_accounts[0]`.
- 657a284: Internal refactor: add a platform-agnostic `IdentityProvider`/`FunkitIdentity` interface and a web `useIdentity()` implementation backed by `GeneralWalletProvider`, and route `useFops`/`useSwappedExchanges` through it. No public API or user-visible behavior change.
- 3f6ceb8: Internal refactor: introduce a platform-agnostic `LogTransport` interface and move the `@datadog/browser-logs` calls out of `FunLogger` into a `DatadogBrowserLogsTransport` that the global logger is wired with. `FunLogger` now emits through an injected transport instead of importing Datadog directly. No public API or behavior change.
- 96f9b0a: chore(security): upgrade uuid to 11.1.1
- 12b4059: Move approval method toggle from confirmation screen to input amount screen and add explanatory tooltip
- 4970a3b: Internal refactor: route `QuoteModeProvider`'s feature-gate reads through the `~/hooks/statsig` `useFeatureGate` wrapper instead of `@statsig/react-bindings` directly. No public API or behavior change.
- 2e869ee: Remove unused useUpdateCardSourceAsset hook tied to deprecated Moonpay card flow
- 2e869ee: Remove unused getMockedTargetChainId helper and DepositTokenSymbol enum from Moonpay flow
- 64caa75: chore(connect): remove the stale `new-token-transfer-config` feature gate
- 2e869ee: Remove Polymarket-specific Moonpay estimate from Meld quotes now that Polymarket uses swapped quotes
- d8a374e: feat: create shared component for error statem, replace instances, and remove unused tagline path
- 9391b6f: Internal refactor: make the Swapped theme builders (`buildSwappedTheme`, `buildSwappedThemeQueryParams`) pure by moving DOM-bound CSS-variable resolution out to the web call sites. No public API or user-visible behavior change — prep for sharing the Swapped theme path with React Native via `@funkit/connect-core`.
- 2265429: Internal refactor: introduce a typed `SwappedTransport` contract (the inbound/outbound postMessage event union) and route `SwappedProvider` + `SwappedIframeController` through a web `IframeSwappedTransport` instead of touching `window.postMessage`/`addEventListener` directly. No public API or user-visible behavior change — prep for sharing the Swapped state machine with React Native (which will provide a WebView-backed transport) via `@funkit/connect-core`.
- Updated dependencies [1d38bb4]
- @funkit/api-base@4.4.0
## 9.15.1
### Patch Changes
- Updated dependencies [fc842fc]
- @funkit/fun-relay@2.7.3
## 9.15.0
### Minor Changes
- 8d525fb: Add Aave deposit fast-path: same-token deposits to supported Aave reserves go directly to the protocol, skipping the quote flow.
- cc655ee: feat(connect): add Aave V3 supply actions factory + checkout config builder via VaultDepositor
- e9883ef: Add `display.collateralizationEnabled` to `createAaveSupplyCheckoutConfig`, driving the deposit modal's collateralization subtitle.
- 11a585d: Register enable-free-usdc-banner feature gate and wire stub component in WithdrawalModal and SourceChange
- 783d034: feat(api-base, connect): track Lighter Secure withdrawals as `direct_execution` rows.
- `@funkit/api-base`: add `DirectExecutionType.EXTERNALLY_FULFILLED` for flows fulfilled outside Fun — backend persists the row but never polls for status.
- `@funkit/connect`: Lighter Secure withdrawals now post a tracking-only DE row keyed off the L2 tx hash. Fire-and-forget — failures log at warn and never block the UI.
- ab5ab81: feat(connect): add createPerpsGenerateActionParams factory for Polymarket Perps deposits
- 49b653f: Route Polymarket Perps deposits to pUSD: QR/UDA transfers for the `POLYMARKET_PERPS_DEPOSIT` action now target pUSD instead of the configured target asset.
### Patch Changes
- 650d56e: Skip the redundant approve(0) reset for Aave supply assets outside `TOKENS_REQUIRING_APPROVAL_RESET`.
- d9e78ce: test(connect): add direct execution history coverage
- 3d19a04: test(connect): add direct execution polling coverage
- 2846b98: Add unit tests for evaluateFeeBreakdown covering wallet, brokerage, card, and unsupported payment methods
- a0353b7: Show user-entered token amount (not USD) on Lighter Secure withdrawal success screen
- 86300af: test(connect): test useAmountInput
- b38e78b: test(connect): add domains/quote tests
- 8207111: test(connect): test useQuoteRefresh
- 3fd1475: Add exhaustive unit tests for the quoteMode domain builders
- 9a2c30a: Extract `SAFE_URL_PROTOCOLS` set in `sanitizeUrl`. Internal refactor, no behavior change.
- 298eec7: feat: add invoice label support on copyinput component
- 984ce0c: chore(connect): expand bundled statsig fallbacks
- Updated dependencies [8d525fb]
- Updated dependencies [783d034]
- @funkit/api-base@4.3.0
## 9.14.0
### Minor Changes
- c32bc92: feat(connect): Aave source-select renders Native + Use other assets sections; Native row fast-paths to InputAmount when wallet holds the target asset.
- ccd1855: Register Bitcoin on Cash App as a payment source on the crypto tab of the checkout modal.
### Patch Changes
- bc5ce6f: test(connect): add checkout transfer init coverage
- b69e713: Fix CopyAddress button border-radius to account for parent 1px border.
- c097446: Fix withdrawal modal conflating source-token amount with USD value. No-op for
1:1 stablecoin sources; corrects target-amount, receive-fiat, and min-amount
math for non-stable sources.
- beb12ee: test(connect): add unit test coverage
- Updated dependencies [d67a842]
- Updated dependencies [e9e960a]
- @funkit/api-base@4.2.3
- @funkit/chains@1.2.0
## 9.13.0
### Minor Changes
- ac8b104: Add `showWalletConnect` option to `uiCustomizations.sourceChangeScreen` to allow hiding the wallet connect payment method
### Patch Changes
- 01826fb: chore(connect): bump postcss
- ab86ca3: refactor(connect): split `SourceList` into a thin composer + `FlatList`/`GroupedList` layout primitives. Internal-only; no public API change; rendered DOM unchanged.
- 6039a1b: When `externalUserId` is set for Lighter customers, use it directly as `userId` and `walletAddress` instead of wrapping via `generateSyntheticUserId`
- 3719658: Split useRecentDeposits into a raw API hook and a pure testable transform function
- ce7e633: Internal: add `testId` prop to `SourceList` for testability.
- 7743d5b: Extract withdrawal error notification helpers into ErrorMessage module
- 7743d5b: Extract WithdrawRecipientAddress into its own module and allow multi-method config to disable connected wallet
- 7743d5b: Use config source chain for withdrawal source token price lookup
- Updated dependencies [ec97ba2]
- @funkit/fun-relay@2.7.2
## 9.12.0
### Minor Changes
- ad8ebdf: Add gated combined-input overload to `createPolymarketWithdrawalConfig`. Pass both UDA and wallet-unwrap params; dispatch is decided at call time by the `enable-polymarket-wallet-withdrawal` Statsig gate. Single-flow overloads are now `@deprecated`.
- d9973bf: Add wallet-unwrap variant to `createPolymarketWithdrawalConfig` that encapsulates the pUSD → USDCe approve+unwrap and atomically batches it with the SDK's withdrawal transaction
- 1c4b50a: feat(connect): add `preWithdrawalAction` hook to `WalletWithdrawalConfig`
- 5a03929: feat(connect): add optional `sendTransactions` to `WithdrawalClient` for EIP-5792 atomic batching of approve + swap/deposit steps
### Patch Changes
- 99062ff: chore(deps): bump vite to v8, vitest to 4.1.6, and storybook to v10
- 37cb800: feat(connect): improve swapped iframe skeleton loader
- ba2c3fa: Improved analytics for `createPolymarketWithdrawalConfig`.
- d9973bf: Lower wallet-unwrap variant of `createPolymarketWithdrawalConfig` minimum withdrawal to 0 USD
- 868ad27: Move useLighterWithdrawalBalances hook out of client entry into withdrawal modal
- 57f89a9: fix(connect): fix swapped iframe height
- fb64077: feat(connect): add notification banner text animations
- b592df7: Use config source chain for Lighter Secure withdrawal source token price lookup
- Updated dependencies [99062ff]
- @funkit/api-base@4.2.2
- @funkit/utils@3.0.1
- @funkit/chains@1.1.3
- @funkit/fun-relay@2.7.1
## 9.11.0
### Minor Changes
- 6a74690: feat: automatically block token addresses as a withdrawal recipient
- 1c776f1: feat(connect): add Rolly deposit actions factory via VaultDepositor
### Patch Changes
- cae480a: aave theme implementation
- b74cffc: Rename Lighter "Secure" withdrawal label to "Native Bridge"
- da69de2: chore: extend wagmi peer range to <=3.6.1
- 77723e0: feat: add withdrawal empty selection feature gate
- de42d91: Add Bybit as a brokerage option, routed through Swapped Connect via the
existing `/fops` endpoint with a new `CRYPTO_TO_CRYPTO` rail config.
- 1a67f88: revert: lighter decimal token decimal check
- Updated dependencies [cae480a]
- Updated dependencies [ad83ea0]
- Updated dependencies [de42d91]
- Updated dependencies [81e367b]
- @funkit/api-base@4.2.1
## 9.11.0-next.0
### Minor Changes
- 2bf3417: feat(connect): add Rolly deposit actions factory via VaultDepositor
### Patch Changes
- Updated dependencies [2bf3417]
- @funkit/api-base@4.2.1-next.0
## 9.10.0
### Minor Changes
- b902702: Render live Lighter Secure-withdrawal delay and consolidate Lighter setup behind one hook.
- `useLighterWithdrawalConfig(config | null)` is now the single React entry — it resolves the account index, balances, locale, and live `/api/v1/withdrawalDelay` internally and returns `null` until ready.
- `LighterWithdrawalConfig` no longer requires `accountIndex`.
- Removed the static `createLighterWithdrawalConfig` factory; use the hook.
- Secure-withdrawal disclaimer now reads "All tokens · Ethereum chain only · 1 h 50 min" (live, localized) instead of the static "60+ minutes".
- `getSecureMinWithdrawalAmount` is fully optional and may now return `undefined` to defer to the new exported `LIGHTER_DEFAULT_SECURE_MIN_WITHDRAWAL_AMOUNTS` dictionary, which is also used as the fallback when the callback is omitted.
### Patch Changes
- ab32d56: Render Lighter withdrawal receive amount and USD label with fractional digits instead of scientific notation
- d3769c2: Block Polymarket withdrawals to the user's own source (proxy) wallet address
## 9.9.0
### Minor Changes
- cb719cf: Add source-side authorization toggle ("Sign message" vs "Approve transaction") to the checkout confirmation screen for Wallet/direct-execution flows, behind the `enable-permit-toggle` Statsig gate.
### Patch Changes
- 82368fd: api-base: thread client `checkoutId` through POST /checkout
- cb719cf: Add labelSize, labelStyle, dropdownWidth, and dropdownAlign override props to BaseDropdown components
- 82368fd: fix: regenerate checkoutItem.id on SWAPPED_NEW_DEPOSIT so repeat fiat deposits in one modal session produce distinct client metadata ids
- cb719cf: Address review feedback on permit toggle: move usePermit derivation to FunkitQuoteContext, add missing translations, useCallback on handleSelect, clean up test mocks.
- Updated dependencies [82368fd]
- Updated dependencies [9684ac0]
- Updated dependencies [cb719cf]
- Updated dependencies [9684ac0]
- @funkit/api-base@4.2.0
- @funkit/fun-relay@2.7.0
## 9.8.0
### Minor Changes
- 2175863: Add Lighter Fast withdrawal via Relay with LVM wallet adapter and fix userId→accountIndex rename in Lighter configs.
- 12bc731: Add Lighter Fast withdrawal (USDC Perps → Fun + Relay → any chain) and the
combined multi-method factory:
- `createLighterFastWithdrawalConfig` — single-method Fast config.
- `createLighterWithdrawalConfig` and `useLighterWithdrawalConfig` — combined
configs that render the Fast/Secure selection screen and inject live
Lighter balances into each method's `withdrawalSourceTokenBalance`.
- 5801f0b: Add Lighter Secure withdrawal (native bridge to Ethereum mainnet) and the
generic multi-method withdrawal scaffolding:
- `createLighterSecureWithdrawalConfig` and `useLighterWithdrawalBalances` /
`useLighterWithdrawalBalance` exports from `@funkit/connect/clients/lighter`.
- `MultiMethodWithdrawalConfig` is now accepted by `FunkitWithdrawalConfig`;
`WithdrawalModal` resolves the selected method via `WithdrawalTypeSelect`.
- `CustomWithdrawalConfig.withdrawCallback` may now return a transaction hash
string — when provided, the success screen links to the transaction.
- `WithdrawalConfigBase` gains optional `getMinWithdrawalAmount` and