Skip to content

[7] feat(checkout): reconnect exchange accounts + custom destination address#788

Merged
chybisov merged 18 commits into
feat/widget-checkoutfrom
checkout/07-exchange-destination
Jul 7, 2026
Merged

[7] feat(checkout): reconnect exchange accounts + custom destination address#788
chybisov merged 18 commits into
feat/widget-checkoutfrom
checkout/07-exchange-destination

Conversation

@tomiiide

Copy link
Copy Markdown
Contributor

Which Linear task is linked to this PR?

Why was it implemented this way?

This is PR 7 of 8 in a stacked split of the original feat/widget-checkout branch (formerly the single ~16k-line draft #727). The work is broken into reviewable layers that merge bottom-up into feat/widget-checkout; each PR targets the branch below it.

Two user-facing features layered on the complete flow: reconnecting previously linked exchange accounts, and letting users set their own destination address.

Visual showcase (Screenshots or Videos)

Checklist before requesting a review

  • I have performed a self-review and testing of my code.
  • This pull request is focused and addresses a single problem.
  • If this PR modifies the Widget API or adds new features that require documentation, I have updated the documentation in the public-docs repository.

@changeset-bot

changeset-bot Bot commented Jun 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: b6ad5c2

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 14 packages
Name Type
@lifi/widget-checkout Minor
@lifi/widget-provider Minor
@lifi/widget-provider-mesh Major
@lifi/widget Patch
@lifi/wallet-management Patch
@lifi/widget-provider-bitcoin Patch
@lifi/widget-provider-ethereum Patch
@lifi/widget-provider-solana Patch
@lifi/widget-provider-sui Patch
@lifi/widget-provider-transak Major
@lifi/widget-provider-tron Patch
vite-iframe Patch
nft-checkout Patch
tanstack-router-example Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@tomiiide tomiiide changed the title feat(checkout): reconnect exchange accounts + custom destination address [7/8] feat(checkout): reconnect exchange accounts + custom destination address Jun 15, 2026
Add vitest coverage for the session HTTP client and sessions store.
Rename the page-local StepActionsList to ExecutionStepActionsList to
drop the duplicate component name, and document the Host session
memoization contract.
@tomiiide tomiiide force-pushed the checkout/06-playground branch from 8a46b0a to 69cd6ce Compare June 15, 2026 15:49
@tomiiide tomiiide force-pushed the checkout/07-exchange-destination branch from 5b2c819 to 29475b7 Compare June 15, 2026 15:49
tomiiide added 9 commits June 17, 2026 11:57
Drop duplicate ExecutionProgress* components and export the canonical
ExecutionStatusCard/StatusIcon/useExecutionRows stack instead. Also stop
shipping src in the published widget tarball.
Gate the Transak debug logger to development (integrator bundlers
dead-code-strip it from production) and drop the wallet address from
its payload. Read onError/close/cancel/openDepositFlow through latest
refs in the SDK init effect so an unstable callback identity no longer
tears down and remounts the iframe mid-session. Document useMeshBalance
as a non-wired stub that callers must not gate funding on.
Scan all live pending records (not just the connected wallet's key) in
useResumeKey and useIsCheckoutBusy, so a deposit-keyed record stays
visible once a wallet connects; add useResumeKey regression coverage.
Move the useResumeRecord expiry check into useMemo. Hoist the
cash/exchange default source token to a shared constant and document
the deny-list assumption. Serve exchange/card funding logos from the
@lifi/types assets instead of an external CDN.
Expose remainingMs from useFrozenQuote and drop the duplicate
per-second interval in TransferDepositPage. Gate the preview-only
deposit-error kinds (which render mocked amounts) to development so
production only renders the kinds the status poll actually produces
(unexpected, address-expired).
Replace the removed ExecutionProgressCards with a checkout-local component
built on the canonical widget execution-status primitives.
@tomiiide tomiiide force-pushed the checkout/07-exchange-destination branch from 29475b7 to b0b0702 Compare June 17, 2026 10:10
@tomiiide tomiiide force-pushed the checkout/06-playground branch from 69cd6ce to 0a789b7 Compare June 17, 2026 10:10
tomiiide added 6 commits June 17, 2026 12:34
ExecutionStatusCard renders motion's m-components, which stay hidden
without a LazyMotion feature provider. Declare motion and wrap the
checkout execution card like the widget's own execution page.
- Capture linked Mesh accounts (MMT tokenId); show one-tap "Pay with
{exchange}" rows on return, with disconnect to switch
- Persist in sessionStorage per integrator+user with TTL expiry
- Pass theme/language/fiat to Mesh Link; add Mesh preconnect origin
- Pause deposit polling while the on-ramp session loads, not just
while the modal is open
- Catalog-skip needs a backend change, tracked in EXBE-372
- Add opt-in `allowUserDestinationAddress`: user sets recipient in-widget
  (paste/ENS or connect wallet) when `toAddress` is omitted
- Validate against destination ecosystem, persist per integrator
- Quote walletless funding using the destination as from-address
- Export `useAddressValidation`/`AddressType` from the widget
addConnectedAccounts no longer prunes every integrator's records on
each write; it sweeps only the key being written (whole-store hygiene
still runs once on rehydrate). Add a regression test.
@tomiiide tomiiide force-pushed the checkout/07-exchange-destination branch from b0b0702 to 820d119 Compare June 17, 2026 10:38
@tomiiide tomiiide force-pushed the checkout/06-playground branch from 0a789b7 to 6f932b9 Compare June 17, 2026 10:38
@tomiiide tomiiide changed the title [7/8] feat(checkout): reconnect exchange accounts + custom destination address [7] feat(checkout): reconnect exchange accounts + custom destination address Jun 18, 2026

@chybisov chybisov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Approved as part of checkout stack review (clean tier).

Base automatically changed from checkout/06-playground to feat/widget-checkout July 7, 2026 15:02
…out/07-exchange-destination

# Conflicts:
#	packages/widget-checkout/src/CheckoutLayout.tsx
#	packages/widget-checkout/src/CheckoutRouter.tsx
#	packages/widget-checkout/src/LifiWidgetCheckout.tsx
#	packages/widget-checkout/src/components/CheckoutFlowCtaButton.tsx
#	packages/widget-checkout/src/components/CheckoutReceiveCard.tsx
#	packages/widget-checkout/src/hooks/useCheckoutConfigError.ts
#	packages/widget-checkout/src/hooks/useCheckoutFlowQuote.ts
#	packages/widget-checkout/src/hooks/useCheckoutToAddress.ts
#	packages/widget-checkout/src/pages/CheckoutRoutesPage.tsx
#	packages/widget-checkout/src/pages/CheckoutTransactionStatusPage/CheckoutTransactionStatusPage.tsx
#	packages/widget-checkout/src/pages/EnterAmountPage/EnterAmountPage.tsx
#	packages/widget-checkout/src/pages/SelectSourcePage/SelectSourceFundingOptions.tsx
#	packages/widget-checkout/src/pages/SelectSourcePage/SelectSourcePage.tsx
#	packages/widget-checkout/src/providers/CheckoutProvider.tsx
#	packages/widget-checkout/src/providers/OnRampProvider/OnRampProvider.tsx
#	packages/widget-checkout/src/stores/useCheckoutFlowStore.tsx
#	packages/widget-checkout/src/types/config.ts
#	packages/widget-checkout/src/utils/navigationRoutes.ts
#	packages/widget-playground/src/components/Widget/CheckoutWidgetView.tsx
#	packages/widget-provider-mesh/src/MeshHost.tsx
#	packages/widget-provider-mesh/src/index.ts
#	packages/widget-provider/src/checkout/index.ts
#	packages/widget-provider/src/checkout/types.ts
#	packages/widget/src/i18n/en.json
#	packages/widget/src/shared.ts
#	pnpm-lock.yaml
@chybisov chybisov merged commit d611ddb into feat/widget-checkout Jul 7, 2026
2 checks passed
@chybisov chybisov deleted the checkout/07-exchange-destination branch July 7, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants