Skip to content

live-mobile@4.16.0

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Aug 10:36
· 370 commits to develop since this release
15e4919

4.16.0

Minor Changes

  • #20278 3d24a89 Thanks @gre-ledger! - Drop the @ledgerhq/errors dependency, completing the errors sunset (LIVE-32915).

    The @ledgerhq/errors package is removed from the monorepo: no workspace source imported it anymore, every error class it held now lives in the package that owns it (@ledgerhq/ledger-wallet-framework/errors for the ones shared across coin modules). createCustomErrorClass and the serializeError / deserializeError stack are gone with it — define errors as native classes and branch on error.name.

    @ledgerhq/errors@6.37.0 stays on npm for external consumers, but is no longer published from this repo.

  • #20280 9fcbe39 Thanks @gre-ledger! - Stop depending on @ledgerhq/errors (LIVE-32915).

    No workspace package declares it anymore, and none may again: enforce-boundaries now fails CI on any manifest that does. The classes it held live in the package that owns them, with @ledgerhq/ledger-wallet-framework/errors as the shared home below the coin layer.

    The package itself stays in the repo so it keeps being published for external consumers, and is bridged to the external coin packages that still peer-depend on it via pnpm.packageExtensions using workspace:* (which reuses the single in-repo copy, so the dependency graph keeps exactly the physical copies it had before). LedgerHQ/coin-modules#752 removes that peerDependency upstream; once it is released the bridge can be dropped, but the package still needs publishing.

  • #20580 9b3fb2a Thanks @dilaouid! - feat(lwm): update lwm init params new send flow recipient

  • #20315 4b73f81 Thanks @RobinVncnt! - Portfolio upsell banner and Braze content cards can now coexist on Portfolio (Mobile: shared carousel; Desktop: side-by-side grid when Braze placement is enabled, otherwise upsell stacked above the Braze carousel).

  • #20404 0f89b44 Thanks @liviuciulinaru! - Replace the legacy Pay Card placeholders with the shared authentication flow on desktop and mobile

  • #20633 67b2d83 Thanks @tonykhaov! - Stop auto-opening the mobile product tour; open only from hub, deeplink, or debug

  • #20585 feaf2fc Thanks @claudiiafg! - Require signer confirmation before opening address delete confirmation in Contacts.

  • #20423 44694e5 Thanks @gre-ledger! - Complete the WalletSync DDD extraction: apps now compose the DDD slices directly

    @ledgerhq/live-wallet no longer owns sync infrastructure. src/cloudsync/, src/walletsync/,
    src/accountName.ts and src/store.ts are removed in favour of @shared/cloud-sync,
    @shared/wallet-sync, @features/platform-wallet-sync, @domain/entity-account-name and
    @domain/entity-recent-addresses. What remains is the account list sync module (src/accounts/)
    plus src/walletSyncComposition.ts, which assembles the sync modules into the wallet-sync schema.

    Desktop and mobile replace the monolithic wallet reducer with a combineReducers of the entity
    slices (accountNames, starredAccountIds, walletSync, recentAddresses, nonImportedAccountInfos)
    and wire the watch loop and trustchain lifecycle from @features/platform-wallet-sync at bootstrap.
    @ledgerhq/live-common drops its @ledgerhq/live-wallet runtime dependency: the wallet-api,
    platform and CSV-export helpers now take an AccountNamesState instead of the whole WalletState.

  • #20595 43bf6d8 Thanks @ysitbon! - Make every new-architecture barrel a pure regrouping point, and enforce it.

    An index.* under shared/, domain/ or features/ may now contain only export * from "./x"
    lines, plus an optional default re-export. Having to sort in the export
    (export { a, b } from "./x") proved the target file mixed public and private code; an index.*
    holding actual code proved it more loudly. A new nx plugin infers a lint:structure target on each
    of the 49 packages and fails on both, along with two related rules: a barrel may not re-export a
    private internals location, and it may not re-export another workspace package.

    That last rule removes the proxies. A package that re-exported a neighbour gave the same symbol two
    import paths and hid who actually provided it. Consumers now import the original provider and
    declare the dependency, which is why the two apps gain @features/flow-contacts-add-contact and the
    desktop app gains @features/platform-contacts.

    Renamed or relocated, with the import specifier unchanged for consumers in every case except where
    noted:

    • @domain/entity-account-name no longer exports the setAccountNames alias; use
      bulkSetAccountNames, the name the slice actually defines.
    • @shared/cloud-sync exports getCloudSyncApi as a named export from its api module instead of
      re-exporting a default under a different name.

    Five packages are left untouched behind temporary exclusions, each recording how to remove it:

    • @shared/env, the facade over the legacy @ledgerhq/live-env, which carries the wrapping in its
      barrel.
    • the @ledgerhq/engagement and @ledgerhq/ptx packages (flow-analytics-consent,
      flow-large-screen-upsell, flow-lazy-onboarding-banner, flow-pay-card-auth), so each owning
      team lands the change on its own schedule. Conformant barrels were prepared and verified for them
      before being reverted, so the work is deferred rather than open.
  • #20627 7af726b Thanks @YazhuEth! - Explain the higher network fees when sending to an address that does not exist yet. EIP-8037 charges account creation substantially more gas, and nothing in the send flow told the user why the fee jumped. The gas we send is unchanged: eth_estimateGas remains the only source.

  • #20646 fd7152a Thanks @dilaouid! - feat(lwd): add recipient contact card to the send flow

  • #20619 0175f1f Thanks @qperrot! - Chore: add tests for memo on the new send flow

  • #20207 aee0e64 Thanks @lysyi3m! - Add Internet Computer (ICP) neuron staking to the coin module: create and top up neurons, start/stop dissolving, disburse, set/increase dissolve delay, follow, split, spawn, stake maturity, and add/remove hot keys, plus neuron listing. Governance operations are routed through the NNS governance canister via the device's update-call signing, alongside the existing ledger transfer path, and account synchronization now carries neuron data. Adds the STAKE_NEURON and TOP_UP_NEURON operation types, with matching icons and labels in the desktop and mobile operation history. (LIVE-28469)

  • #20290 9708010 Thanks @sarneijim! - Add the shared lazy onboarding banner flow, its Mobile portfolio view and configurable Shop link feature flag.

  • #20456 a0f13a2 Thanks @sarneijim! - Use fixed legacy onboarding date for backfill instead of app-open date

  • #20458 9876163 Thanks @sarneijim! - Use legacy onboarding date fallback in large-screen upsell eligibility

  • #19169 92b70ef Thanks @OlivierFreyssinet! - Preserve installed apps in Device Intent Executor last seen device info.

  • #20409 91a2953 Thanks @claudiiafg! - Wire mobile contact address detail send, edit, and delete actions with confirmation sheets.

  • #20559 c904346 Thanks @claudiiafg! - Render Mobile Contacts address edit signer mismatch error and extract shared address detail action labels and UI state mapping.

  • #20539 60b4626 Thanks @gre-ledger! - Scope @ledgerhq/live-wallet down to wallet sync only

    The package now exposes ./accounts and ./walletSyncComposition and nothing else.
    ordering.ts and addAccounts.ts move to @ledgerhq/live-common/account/*, and
    accountRawToAccountUserData joins live-common/account/serialization next to fromAccountRaw.
    The liveqr/ folder is gone: importAccounts.ts and accountToAccountData were unreachable, and
    accountDataToAccount — whose only callers rehydrated a wallet-sync descriptor — becomes
    accounts/descriptorToAccount. live-common no longer depends on live-wallet.

  • #20510 a1bd49e Thanks @claudiiafg! - Model Me as the default self contact with shared display-name formatting, external address counts, and a Ledger Wallet accounts intent.

  • #18764 d266e13 Thanks @philipptpunkt! - Migrate the swap fetchQuotes helper from axios to an RTK Query endpoint (swapQuotesApi). The aggregator /quote request now flows through the Redux data layer, and the rawQuotes/providerErrors split is unchanged. Desktop and mobile register the new API and inject their store dispatch at startup via setSwapQuotesStore; wallet-cli, which has no app store, sets up a standalone one.

    The endpoint itself now lives in the new @domain/api-swap-quotes package; live-common re-exports it, so existing call sites are unchanged.

    Two behaviour changes to be aware of:

    • /quote now goes through the authenticated base query, where the legacy axios call sent no credentials. Both apps already register an auth provider on their store's extra, so whether a request carries an Authorization header is controlled entirely by the lwdAuth/lwmAuth feature flags. They are disabled by default; enabling either one makes /quote send the user's bearer token to the aggregator, and makes a 401/403 trigger the adapter's refresh-and-retry.
    • An aggregator HTTP error (4xx/5xx) now resolves to an empty result, so the caller surfaces the noQuotes global. Previously the shared axios error interceptor turned these into LedgerAPI4xx/LedgerAPI5xx, which propagated to the live app as an error. Only transport failures (no HTTP response) still reject, now with a SwapQuotesRequestFailed error rather than a bare RTK Query error object.
  • #20642 a61f702 Thanks @mcayuelas-ledger! - Persist the pay card hero balance filter across app restarts

  • #20536 a5cf9e5 Thanks @mcayuelas-ledger! - Wire the Card / Pay debug tool (@devtools/pay-card) into the mobile DevTools host, surfacing it alongside feature flags with native-platform overrides (LIVE-35498).

  • #20549 a2a6813 Thanks @mcayuelas-ledger! - Persist the payCard slice on mobile: save and restore only { hasSeenFeatureTour } so the Pay feature tour does not reappear after killing and reopening the app

  • #20414 baba728 Thanks @dilaouid! - feat(lwm): support bip21/eip681 amount in qr code scan new send flow

  • #20628 8259d4d Thanks @dilaouid! - feat(lwdm): add matched contact lookup for the send recipient flow

  • #20194 fb1ba1b Thanks @CremaFR! - Show the provider terms of use (and privacy policy) as a footer in the wallet-api swap signing bottom sheet, mirroring desktop.

  • #20518 ce46179 Thanks @dilaouid! - chore(lwdm): refactoring mvvm recipient screen

  • #20430 647804e Thanks @gre-ledger! - Move the recent-addresses domain model and in-memory store into @domain/entity-recent-addresses

    RecentAddress and RecentAddressesState are no longer declared in @ledgerhq/types-live; they are now inferred from the Zod schemas in @domain/entity-recent-addresses, which also owns RecentAddressesStore, setupRecentAddressesStore and getRecentAddressesStore. Import them from @domain/entity-recent-addresses.

    @ledgerhq/live-common/account/index still re-exports the store API unchanged, minus the RecentAddressesCache alias — use RecentAddressesState instead.

    Also fixes the store mutating its own state in place: once a first mutation had been dispatched, immer had frozen that exact object graph, so the next addAddress or removeAddress on the same currency threw TypeError: Cannot assign to read only property. The store now replaces its state instead of mutating it.

  • #20565 26e534b Thanks @mcayuelas-ledger! - Move the Lumen QueuedBottomSheet into @shared/ui-queued-bottom-sheet (app couplings injected as adapters) so DDD feature packages can consume a queue-aware bottom sheet. Queue APIs use bottom-sheet naming (QueuedBottomSheetsProvider, addBottomSheetToQueue, …). Legacy QueuedDrawer stays in the app. No behaviour change.

  • #20413 ccbda89 Thanks @deepyjr! - Add sanctioned address feedback to the Mobile Contacts flow.

  • #20473 73948c9 Thanks @dilaouid! - fix(lwdm): fix sanctionned ens address check

  • #20612 52b69ac Thanks @LucasWerey! - Retarget mobile off the dada-client shims onto @features/platform-aggregated-assets and @domain/api-aggregated-assets

  • #20111 aa3ea09 Thanks @YazhuEth! - chore(coin-solana): remove preload and hydrate - fetch validators on demand

    CurrencyBridge.preload / hydrate are deprecated, and preloading the validators.app
    list slowed down the scan account flow. Validators are now fetched lazily behind a 15min
    LRU cache (@ledgerhq/coin-solana/validators) the first time a screen needs them.

    useSolanaPreloadData is removed from @ledgerhq/live-common/families/solana/react; use
    useValidators instead. getAccountBannerState now takes the validators as a third argument.

  • #20471 3aefd3b Thanks @dilaouid! - fix(lwdm): check sanctions for token recipient addresses

  • #20622 ed79527 Thanks @mdomanski-ext-ledger! - Rename Hedera's HederaValidator.nodeId to id (string), matching the framework's Validator.id and removing the duplicate identity field. Preload caches persisted by earlier versions are migrated on hydration, so upgrading users keep their cached validators. On-chain protocol fields (Transaction.stakingNodeId, HederaDelegation.nodeId) are unchanged.

  • #20637 f440c85 Thanks @LucasWerey! - Retarget the remaining libs consumers and both store roots off the dada-client shims

Patch Changes

  • Updated dependencies [3d24a89, 9fcbe39, 8559d54, f080e51, e73390c, 6f6afe2, 1de30a9, 0f89b44, 6258380, f1e93f7, 02c6f9e, c4a8141, feaf2fc, 9ef4440, 5297c79, cc8b5b9, 44694e5, 43bf6d8, fd3e81e, 7af726b, e5ec77b, 2ec3de4, 4d27e41, 2f297f7, f77b3fa, 9e1412e, aee0e64, 9708010, 5bdffd5, e9a14f8, 91a2953, 3e0ae80, c904346, 60b4626, 64bb8cf, a1bd49e, e1e005d, 1e9db75, 0e439a0, a61f702, 40efdfb, 2edf614, 9e45705, ac57e97, 6694d77, bbfc8cf, 647804e, 6d45e7c, 79d2278, 5edd732, 8a3a0bb, 71b1069, ccbda89, 9ea6eed, aaa67a7, c9eab39, bdd82c4, 53c3431, 78ebc73, b0e81d2, b9d4a22, e664d84]:
    • @ledgerhq/coin-bitcoin@0.51.0
    • @ledgerhq/coin-canton@0.33.0
    • @ledgerhq/coin-casper@2.19.0
    • @ledgerhq/coin-concordium@0.20.0
    • @ledgerhq/coin-cosmos@0.43.0
    • @ledgerhq/coin-evm@4.10.0
    • @ledgerhq/coin-filecoin@1.32.0
    • @ledgerhq/coin-multiversx@0.24.0
    • @ledgerhq/coin-stacks@0.28.0
    • @features/flow-contacts@0.6.0
    • @features/flow-contacts-add-contact@0.2.0
    • @features/flow-pay-card-auth@0.2.0
    • @domain/entity-contact@0.6.0
    • @ledgerhq/ledger-key-ring-protocol@0.19.0
    • @shared/cloud-sync@0.1.0
    • @domain/entity-currency-crypto@0.10.0
    • @domain/entity-currency-token@0.4.0
    • @domain/entity-currency-fiat@0.4.0
    • @ledgerhq/live-wallet@1.0.0
    • @domain/entity-wallet-sync@0.1.0
    • @domain/api-currency-fiat@0.4.0
    • @domain/api-currency-token@0.4.0
    • @domain/entity-account-name@0.2.0
    • @domain/entity-client-identity@0.2.0
    • @domain/entity-currency@0.4.0
    • @features/flow-fear-and-greed@0.3.0
    • @features/platform-aggregated-assets@0.3.0
    • @features/platform-currencies@0.6.0
    • @features/platform-env@0.2.0
    • @features/platform-style@0.2.0
    • @shared/api-services@0.3.0
    • @shared/auth@0.4.0
    • @shared/feature-flags@0.18.0
    • @ledgerhq/types-live@6.119.0
    • @ledgerhq/ledger-wallet-framework@2.8.0
    • @features/flow-lazy-onboarding-banner@0.2.0
    • @domain/api-aggregated-assets@0.3.0
    • @domain/entity-interest-rate@0.3.0
    • @ledgerhq/hw-transport-http@6.37.0
    • @ledgerhq/types-devices@6.32.0
    • @domain/entity-pay-card@0.3.0
    • @devtools/bindings@0.3.0
    • @devtools/transport-panel@0.4.0
    • @devtools/shell@0.8.0
    • @ledgerhq/live-dmk-shared@0.30.0
    • @features/platform-wallet-sync@0.1.1
    • @ledgerhq/live-currency-format@0.14.1
    • @ledgerhq/wallet-analytics@0.3.3
    • @ledgerhq/wallet-pnl@0.7.6
    • @domain/entity-analytics-consent@0.2.1
    • @domain/api-push-devices@0.2.1
    • @domain/api-altcoins-sentiment@0.3.1
    • @domain/api-market-sentiment@0.3.1
    • @domain/entity-recent-addresses@0.1.1
    • @features/platform-feature-flags@0.6.5
    • @devtools/wire@0.3.1
    • @ledgerhq/domain-service@1.8.14
    • @ledgerhq/live-countervalues@0.24.2
    • @ledgerhq/live-countervalues-react@0.16.6
    • @ledgerhq/device-intent@5.0.0
    • @ledgerhq/live-dmk-mobile@0.29.3
    • @domain/api-pay-card@0.2.1
    • @shared/ui-queued-bottom-sheet@0.1.0
    • @features/flow-analytics-consent@0.2.1