[8] feat(checkout): pending-deposit activity list + copy polish#789
Merged
Conversation
🦋 Changeset detectedLatest commit: cb4a9e1 The changes in this PR will be included in the next version bump. This PR includes changesets to release 4 packages
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 |
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.
5b2c819 to
29475b7
Compare
b16ebfe to
3b2e1c7
Compare
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.
29475b7 to
b0b0702
Compare
3b2e1c7 to
434a835
Compare
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.
Deposit terms remain only where mechanism-accurate (transfer deposit address flow, "Deposit with cash") or API-bound (depositAddress, custom deposit mode gate).
- Replace deep-resume-on-mount with a tappable activity list, each deposit polled by address to reconcile done/failed states. - Quote through shared useRoutes via a new quoteFromAddress placeholder instead of a parallel getRoutes. - Re-key pending records by a stable per-deposit id to avoid collisions.
b0b0702 to
820d119
Compare
434a835 to
08cd204
Compare
chybisov
approved these changes
Jul 7, 2026
chybisov
left a comment
Member
There was a problem hiding this comment.
Approved as part of checkout stack review (clean tier).
Base automatically changed from
checkout/07-exchange-destination
to
feat/widget-checkout
July 7, 2026 15:12
…out/08-activity-and-polish # Conflicts: # packages/widget-checkout/src/CheckoutModal.test.tsx # packages/widget-checkout/src/CheckoutRouter.tsx # packages/widget-checkout/src/components/CheckoutFlowCtaButton.tsx # packages/widget-checkout/src/components/CheckoutStatusScreen.tsx # packages/widget-checkout/src/components/CloseConfirmationDialog.test.tsx # packages/widget-checkout/src/components/Header.tsx # packages/widget-checkout/src/hooks/useCheckoutRoutes.ts # packages/widget-checkout/src/hooks/useCheckoutStatusSources.ts # packages/widget-checkout/src/hooks/useIsCheckoutBusy.ts # packages/widget-checkout/src/hooks/usePendingCheckoutWriter.test.tsx # packages/widget-checkout/src/hooks/usePendingCheckoutWriter.ts # packages/widget-checkout/src/hooks/useResumeKey.test.tsx # packages/widget-checkout/src/hooks/useResumeKey.ts # packages/widget-checkout/src/pages/CheckoutTransactionPage.tsx # packages/widget-checkout/src/pages/CheckoutTransactionStatusPage/CheckoutTransactionStatusPage.tsx # packages/widget-checkout/src/pages/CheckoutTransactionStatusPage/statusVariants.test.ts # packages/widget-checkout/src/pages/CheckoutTransactionStatusPage/statusVariants.ts # packages/widget-checkout/src/pages/DepositErrorPages/DepositErrorPages.tsx # packages/widget-checkout/src/pages/EnterAmountPage/EnterAmountPage.tsx # packages/widget-checkout/src/pages/SelectSourcePage/SelectSourcePage.tsx # packages/widget-checkout/src/pages/TransferDepositPage/TransferDepositPage.tsx # packages/widget-checkout/src/providers/OnRampProvider/OnRampProvider.tsx # packages/widget-checkout/src/stores/useCheckoutFlowStore.tsx # packages/widget-checkout/src/stores/usePendingCheckoutStore.test.tsx # packages/widget-checkout/src/stores/usePendingCheckoutStore.ts # packages/widget-checkout/src/test/renderWithI18n.tsx # packages/widget-playground/src/components/Widget/CheckoutWidgetView.tsx # packages/widget-playground/src/components/Widget/WidgetView.tsx # packages/widget-playground/src/components/Widget/WidgetViewContainer.tsx # packages/widget/src/i18n/en.json # packages/widget/src/shared.ts # pnpm-lock.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Which Linear task is linked to this PR?
Why was it implemented this way?
This is PR 8 of 8 in a stacked split of the original
feat/widget-checkoutbranch (formerly the single ~16k-line draft #727). The work is broken into reviewable layers that merge bottom-up intofeat/widget-checkout; each PR targets the branch below it.Top of the stack. Replaces auto-resume with a pending/failed deposit activity list (polled by deposit address), routes quoting through the shared `useRoutes` engine, removes deposit lingo from user-facing copy, and drops stale knip config / unused shared exports.
Visual showcase (Screenshots or Videos)
Checklist before requesting a review