Original release notes
4.22.0
Minor Changes
- #22004
c60196aThanks @liviuciulinaru! - Carry the provider app id of the Card login redirect through the desktop deep link
- #22003
40d296bThanks @liviuciulinaru! - Record the provider app the Card login redirect names, and send x-us-env on every Card request of a US holder
- #22150
731ebd2Thanks @mcayuelas-ledger! - Display card reward balance in the desktop card details view
- #21700
3702460Thanks @tonykhaov! - Unlock card numbers with the Ledger Wallet password.
- #22259
e4ac322Thanks @mcayuelas-ledger! - Wire the card's Manage PIN and Access Baanx rows to open the Baanx hosted pages in the Discover
webview, and the Help row to open the support article externally.
- #22077
72367fcThanks @mcayuelas-ledger! - Wire the card onboarding widget to real, derived onboarding data and remove the unused stub endpoint and legacy devtool mock path it replaces
- #22093
2e94d90Thanks @LucasWerey! - Fix available balance showing inflated value for DADA cross-network assets (e.g. Tezos + Etherlink)
- #21999
724f029Thanks @mdomanski-ext-ledger! - feat(aleo): share the bond pieces between Desktop and Mobile
Replaces the ad-hoc messages getTransactionStatus returned for a rejected bond with typed error classes, translated on both clients and now distinguishing a closed validator from an unbonding one. Adds the isValidatorBondable / getMinBondAmount helpers to the coin module, moves the per-network default validator into the Aleo currency config so every client reads the same address, and adds a reusable Aleo bridge mock for Mobile.
- #22053
cf09fa6Thanks @mateuszpalosz-ext! - feat(aleo): add the claim unbonded staking flow
- #21975
0a5c2a0Thanks @mateuszpalosz-ext! - added Aleo staking operations, gated on theenableStakingflag
- #22123
b5338ecThanks @mateuszpalosz-ext! - feat(aleo): add the shared staking hooks the delegation views read
- #22212
49b535fThanks @mdomanski-ext-ledger! - refactor(aleo): serve the validator committee from RTK Query
- #22228
1ec8d15Thanks @tonykhaov! - Refine the Pay card assets list with loading skeletons, translated states, funding information, and asset values in the details dialog.
- #22276
eca09daThanks @sarneijim! - Add Braze Tools inspect for local eligibility and requiredStates fetch-cache inject
- #22164
386710aThanks @sarneijim! - Share Nano S Touchscreen Upgrade Program banner copy keys so Desktop and Mobile can reuse the same model-specific lookup
- #22231
c682542Thanks @tonykhaov! - Open card transaction history from an asset, scope it to that asset, and show cashback values.
- #22312
319fbe4Thanks @sarneijim! - Show the signed-off Touchscreen Upgrade Program copy only to Nano S users
- #22278
95a1007Thanks @tonykhaov! - Reveal card numbers as soon as the image loads and shorten the flip to 300ms
- #22182
1557452Thanks @tonykhaov! - Reveal card numbers without a password unlock gate
- #22229
905d26bThanks @tonykhaov! - Add a manage dialog for reordering Pay card funding assets and starting the add-asset flow.
mapPltRejectReason turned a chain reject reason into a typed Error and had no caller. It could not gain one: an Error is what the pre-send checks return and what the signer throws, and neither ever sees a reject reason. A reject reason exists only on the wallet-proxy history response, and history renders an Operation, which carries failed: true and no cause. Surfacing the cause means a code in Operation.extra and a renderer for it, not this function.
Removed with it: ConcordiumNonExistentTokenId and ConcordiumPltTransferRejected, whose only producer it was, and ConcordiumAccountNotAllowed and ConcordiumAccountDenied, which never had one - getAccountListStatus folds both list verdicts into one, so reporting the cause means widening the stored transferStatus first.
A test in each app now pins that every PLT error a producer can raise has copy of its own, so the next one added without it fails rather than reaching a user as a class name.
A rejected PLT transfer read as a failed row with no explanation. Operation details now name the cause, on desktop and mobile.
A blocked sender was told to contact the issuer for access, which is wrong for a deny list. The send flow now reports the two causes separately.
Removes the unused PltListStatus type.
- #22187
31ec33fThanks @mateuszpalosz-ext! - aleo part 2 staking ui
- #22141
35105eaThanks @sarneijim! - Filter desktop Braze Content Cards with local eligibility before publishing to Redux
- #22281
1a1766dThanks @mdomanski-ext-ledger! - fix(desktop): keep the amount field ungrouped while it is focused
- #22208
62a6f6cThanks @vladyslavchupovskiy-ext-art! - feat(coin-cosmos): add the Gonka currency configuration
Points Gonka at the Ledger-hosted LCD, sets its minimum gas price to 0 (the chain's fee consensus parameter), and disables delegation, which the runtime rejects. Hides the account-header stake action on Desktop and Mobile for any Cosmos chain whose config sets disableDelegation, and stops a zero minimum gas price being mistaken for a missing config when preloaded data is restored.
- #22116
214d382Thanks @gre-ledger! - Enforce the QR code pairing sequence on both sides of the handshake
The host and the candidate now run the pairing messages through an explicit single-use state machine: each message is only accepted at the one point of the sequence where it is expected, and the peer that initiated the handshake is bound for the whole session. Envelopes, keys and decrypted bodies are validated before being acted upon, so a duplicate, out-of-order, foreign or malformed message ends the session with a QRCodeProtocolError: Desktop then asks for a fresh QR code, Mobile goes to its existing retry screen.
- #22063
8346e6eThanks @lewisd5! - Make the Baanx card env vars reach packaged desktop builds.CARD_BAANX_API_URL,CARD_BAANX_CLIENT_KEY,CARD_BAANX_HOSTED_UIandCARD_OAUTH_REDIRECT_URIare read through@shared/env(getEnv/useEnv), which DefinePlugin cannot reach, so setting them on a CI build step had no effect on the artifact and the Card login always used theshared/envdefaults. The renderer build now bakes them into a__BUILD_ENVS__object thatrenderer/envmerges intoprocess.envat boot, behind any real runtime value, from where the existing boot-time seeding pushes them into the env store.
- #22090
a2e8499Thanks @liviuciulinaru! - Carry every Baanx card env var into the packaged build.CARD_BAANX_US_APP_ID,CARD_BAANX_LOGIN_MANIFEST_IDandCARD_BAANX_HOSTED_MANIFEST_IDjoinBUILD_ENV_NAMES, so a build step that sets them reaches the app.
- #21786
145462cThanks @henri-ly! - Add asend-recipient-displaytest id to the read-only "To:" field of the new send flow amount step, so automation can assert the contact name is carried over from the recipient step
- #22106
a0ae584Thanks @vladyslavchupovskiy-ext-art! - Add Gonka (GNK) to the supported currencies
- #22190
0651158Thanks @koda-apps! - Bump lumen-design-core to 0.1.29, lumen-ui-react to 0.1.59, lumen-ui-rnative to 0.1.62, and lumen-utils-shared to 0.1.13. In lumen-ui-rnative,OptionList(and its subcomponents, e.g.OptionListItem) is renamed toSelectList/SelectListItem, andresolveAvatarColoris renamed touseResolveAvatarColor, now a theme-reactive hook instead of a plain function; call sites in live-mobile and@features/platform-contactsare migrated accordingly.resolveAvatarColorin lumen-ui-react is unaffected by this bump.

