Releases: AmbireTech/extension
Releases · AmbireTech/extension
v5.8.0 (Browser Extensions)
Changelog:
- Added: Migrate to ambire-common v2.58.0, see changelog in there too.
- Added: Advanced toast links
onClick
andurl
weren't used anywhere, so I decided to remove them in favour of these changes. If onClick is ever required, we can add toast buttons- Add link parsing support to toasts. Links can be added in the format
[Text](URL)
- Automatically parse 'contact support' strings as links. We can do the same with other often-used links if needed in the future.
- Added: Protection for unexpected missing data
- Added: Missing props in
wallet_getPermissions
andwallet_requestPermissions
JSON-RPC call response- For
wallet_requestPermissions
:- Added: In the
eth_accounts
parent capability, the missingdate
(when the permission was granted),invoker
andcaveats
, compliant with EIP-2255. Also addedid
, that is NOT mentioned in the return type in EIP-2255, but MetaMask sends it. ID gets generated when permission is granted and it gets persisted until the permission is revoked.
- Added: In the
- For
wallet_getPermissions
:- Added: In the
eth_accounts
parent capability, same as whatwallet_requestPermissions
returns. - Changed: If permissions were granted, return result even if the extension is locked.
- Added: In the
- For
wallet_revokePermissions
:- Changed: Allow apps to revoke their permissions with no need of an additional user confirmation.
- For
- 📣 Added: Support for interacting with Trezor devices via Trezor Suitpull/4860
- Changed: Migrates to the
@trezor/conntect-webextension
package to v9.6.0 that has the experimental Trezor Suit connectivity mechanism. How to enable the trezor suite: https://connect.trezor.io/9/guides/new-connect-flow-in-trezor-suite/ (Basically under the Settings > Experimental features toggle). - Fixed: Trezor contract deployments were not working because
to
wasundefined
instead ofnull
- Changed: Migrates to the
- Added: One click flow go to sign account op on batch, check
networkUserRequests
to determine if there's anything in the batch for the selected token's network and if there is, make "one click mode" work by opening the sign account op. Along with these, additions:- typehints for updating signAccountOp were fix (signingKeyAddr and signingKeyType were typehinted strings while they are Key['addr'] and Key['type']
- Fixed: when both a signAndSwap error and a valid quote were happening at the same time (possible when doing a batch and a bridge at the same time), they overlapped and broke the page's style.
- 📣 Added: Humanizer: fetch contract names from Etherscan
- 📣 Added: Extend the DeFi positions with data from DeBank
- Added: Playwright E2E transfer tests
- Should send a transaction and pay with the current account gas tank
- Should send a transaction and pay with the current account's ERC-20 token
- Should batch multiple transfer transactions
- Change: Refactor tokens identifier, in order to select it easier with Playwright. Now we can simply do
page.getByTestId(option-${address}.${chain})
, instead of trying to construct and match this id:option-0x0b2c639c533813f4aa9d7837caf62653d097ff85.10.usdc.false..op-mainnet
- Fix: Playwright - When running E2E tests with
headless: true
(CI), window.screen is not available. As a workaround, we return a hardcoded centered window position based on a 1920x1080 viewport. - Change: Reduce global test timeout to 3min.
- Added: Display service fee
- Added: Force update DeFi positionspositions when the user manually reloads their balance from the dashboard. The force update should be triggered only if all the following conditions are met:
- The user clicks the refresh button on the dashboard
- The account is not view-only
- The DeFi tab is currently focused on the dashboard
- Changed: Calculate all Trezor accounts via requesting the public key (instead of asking for a set of Ethereum accounts)
- Only 1 device request (Trezor popup) for getting ALL pages now
- No need to pre-fetch addresses anymore
- Previously, upon initial account import from Trezor, user was either informed we get a set of 50 addresses (which can be confusing - we don't communicate well that we pre-fetch 5 pages of addresses) or worse - see all addresses we export in Trezor Suit vs now, only verifying the public key which is better communicated in Trezor Suit.
- Changed: Update TypeScript to v5 and bump up other dependencies to reduce the found vulnerabilities
- Change: Bump up TypeScript to v5.8.3, in sync with the ambire-common update
- Change: Bump up eth-crypto to v2.8.0 (still has vulnerabilities, but better to be on the latest v anyways)
- Change: Remove obsolete packages that are no longer used:
eth-sig-util
,@ethersproject/units
andweb3
. - Changed: Bump up crypto-browserify to v3.12.1 (removing web3 allowed this)
- Changed: Benzin confetti and simplification
- move txId, userOpHash and originated from to the "confirmed"
- this makes sense because all of those except userOpHash can change
- hide txId, userOpHash, originated and block number by default
- have a "show. more" that shows them
- move txId, userOpHash and originated from to the "confirmed"
- Changed: Always sort rewards to the top of the app catalog
- Changed: E2E Playwright Project migration from Puppeteer and writing new tests
- All Puppeteer-based extension tests have been fully ported to Playwright, leveraging its native test runner and modern testing features.
- Extension launch logic has been reimplemented using launchPersistentContext, enabling accurate simulation of extension behavior with proper argument-based loading.
- Introduced a Page Object Model (POM) structure for critical flows such as onboarding, account import, and dashboard interactions.
- Extracted locators and constants into centralized utility files, reducing duplication and enhancing code clarity.
- Added a unified playwright.config.ts to standardize timeouts, retries, reporters, and environment setup across all test executions.
- Continuous Integration (CI) scripts updated to support Playwright test runs with persistent extension loading and environment initialization.
- Changed: Trezor Connect manifest app icon and name
- Changed: Playwright - Structure clean-up
- Merged
config/constants
and/constants
into a single directory:/constants
. - Renamed
/constants/constants.ts
to/constants/mainConstants.ts
. This file now holds and organizes simple constants. For more structured data (e.g., tokens), we use separate files like/constants/tokens.ts
. Constants are exported as a default object (e.g.,export default { urls, addresses, ... })
to simplify imports:import { urls } from '/constants/mainConstants'.
- Moved files from
/config
to a new directory/utils
, since they include logic and don't represent pure configuration. - Moved
common/selectors
andcommon/locators
into/constants
, as these are effectively constant values as well.
- Merged
- Fixed:
signAccountOp
doesn't initialize after switching account opspull/4847 - Fixed: Scientific balance notation
- Fix: Don't parse the balance to a float number, as it results in a scientific notation when
balance < 1e-6 or balance >= 1e21
. Screenshots attached before/after. - Change: Stop deducting the gas fee when setting the maximum amount to be sent on the Transfer screen. Why:
- It's not immediately clear why the full balance isn't populated in the input field - even when the amount isn't sufficient.
- With the new OneClick estimation, the user will now see an "insufficient amount" message on the same screen.
- In the long term, with EIP-7702 support, gas fees could be paid using non-native tokens (including via hardware wallets), and validating all possible fee token balances could become unnecessarily complex.
- Fix: Don't parse the balance to a float number, as it results in a scientific notation when
- Fixed: Change Benzin page title to Explorer
- Fixed: No routes error reason in Swap & Bridge
- Fixed: Dark Mode various problems
- Fixed: Error boundary style and show details after dark theme changespull/4876
- Fixed: Swap and transfer content overflow in popup
- Fixed: BottomSheetContainer component when closed on drag
- Fixed: Arc Browser action window focus glitch (On the Arc browser, it seems like there’s either a bug or an intentional restriction that prevents extensions from programmatically focusing existing windows. So if an action window is minimized or out of focus, we can’t bring it back to the front. As a workaround, we’ll need to implement fallback logic for Arc that closes the current action window and reopens it instead.)
- Fixed: Apps communication mechanism issue when MetaMask is installed (an issue in the
detectScriptType()
logic where the inpage script was incorrectly identified as a content script due to MetaMask injecting a mock chrome.runtime and chrome.tabs into the page context) - Fixed:
isTopUp
flag was always false inTransferControllerStateProvider
- Fixed: Hide dashboard overview animation
Full Changelog: v5.7.1...v5.8.0
v5.7.1 (Browser Extensions)
Changelog:
- Fixed: Keystore setup redirect issue (when a new Ambire tab is opened it incorrectly navigates to keystore setup when keystore is already set up)
Full Changelog: v5.7.0...v5.7.1
v5.7.0 (Browser Extensions)
Changelog:
- Added: Migrate to ambire-common v2.57.0, see changelog in there too.
- 📣 Added: Dark Mode now finalized and ready to rock (can be enabled by a toggle in the hamburger menu)
- 📣 Changed: Rename Benzin to Explorer
- Changed: Handle Swap & Bridge estimation failures in the controller
- Fixed: Workaround for NOT always having errors in service worker after initial start
- Fixed: Double-check for Web HID API before using it (otherwise, this causes errors for browsers that don't support web hid, like FF)
- Fixed: The AccountPersonalize screen was occasionally skipped after adding an account using an existing seed phrase
- Fixed: 712 ambiguous types
- Fixed: Missing
SWAP_AND_BRIDGE_CONTROLLER_CLOSE_SIGNING_ACTION_WINDOW
(The missing action is replaced withCLOSE_SIGNING_ACTION_WINDOW
, which is used in transfer) - Fixed: Corner case being able to bypass setting device (extension) password
- Fixed: Corner case where
feeSpeeds
are not yet available
Full Changelog: v5.6.0...v5.7.0
v5.6.0 (Browser Extensions)
Changelog:
- Added: Migrate to ambire-common v2.56.0, see changelog in there too.
- 📣 Added: Transfer and Gas Tank - built-in signing
- Refactor Transfer controller to be initialized in the background, including context and form useEffect optimizations, as they were triggered multiple times due to non-memoized props (tokens).
- Storage persistence for initiated Transfer and Gas Tank form changes. We detect if the form was changed by the user, and if so, the next time you open the Popup, it will automatically load your previously filled form.
- Built-in signing and broadcasting (aka OneClick mode) for Transfers and Gas Tank top-ups.
- Built-in re-estimation for the Transfer SignAccountOp controller every 30 seconds. If we destroy the AccountOp or change the chain, we’ve implemented a reliable AbortController to stop the estimation loop.
- Reusable components across Transfer and Swap & Bridge. When testing, please double-check Swap & Bridge as well.
- HW support. We need to test it carefully here.
- Trezor guard logic to prevent other actions from being added if we are in the process of signing and broadcasting.
- Added: Dark Mode (Part 1), behind the scenes, there is currently no theme toggle in the UI yet
- themeConfig refactoring
- theme context refactoring
- removed colors constants
- onboarding screen dark mode implemented
- components and icons memorization
- Added: Support for the
wallet_revokePermissions
JSON-RPC API call - Changed: Migrate Extension E2E Tests from Puppeteer to Playwright
- All Puppeteer-based extension tests have been fully ported to Playwright, leveraging its native test runner and modern testing features.
- Extension launch logic has been reimplemented using launchPersistentContext, enabling accurate simulation of extension behavior with proper argument-based loading.
- Introduced a Page Object Model (POM) structure for critical flows such as onboarding, account import, and dashboard interactions.
- Extracted locators and constants into centralized utility files, reducing duplication and enhancing code clarity.
- Added a unified playwright.config.ts to standardize timeouts, retries, reporters, and environment setup across all test executions.
- Continuous Integration (CI) scripts updated to support Playwright test runs with persistent extension loading and environment initialization.
- Changed: Exclude all tests that failing in Puppeteer pipeline and remove test
- Excluded tests that are currently failing in the Puppeteer CI pipeline to reduce noise and ensure more reliable runs.
- Removed tests that have already been successfully migrated to Playwright, as they are now being maintained in the new test suite.
- Changed: Always show the Gas Tank as the first broadcast option; native - second
- Changed: Improve Batch Added screen wording
- Changed: More generic and clear call to action texts
- Fixed: Duplicated test id for the add-more-swaps action
- Fixed: Delete obsolete Batch Modal component (no longer in use)
- Changed: Do not pause updates if the Ledger connect modal is displayed
- Changed: Optimize Swap & Bridge controller "To" token list
- Fixed: Cut only the active route
onEstimationFailure
Full Changelog: v5.5.0...v5.6.0
v5.5.0 (Browser Extensions)
Changelog:
- Added: Migrate to ambire-common v2.55.0, see changelog in there too.
- Added: Separate workflow that makes gecko production builds on ARM64 architecture and disables mangling to ensure bit-for-bit deterministic builds
- Added: Temporarily introduce a separate workflow that makes gecko production builds on ARM64 architecture (via QEMU emulation). Separate, because it takes 1h 45min to complete (vs 10 min for the AMD64 architecture). When native ARM64 runners are available for private repositories in GH, remove this workflow and migrate to build-extensions.yml only.
- Changed: Disable mangling to ensure bit-for-bit deterministic builds. This avoids differences in variable/function names (e.g.
P
vsx
) that cause review rejections. The drawback is larger bundle size, so only do it for the gecko build.
- Changed: Hide error msg on simulation failure (if we fail to do the simulation, do not show the error to the user as most of the times it would just confuse him)
- Changed: Pin Extension and Open Dashboard
- Fix a bug in the pin extension logic in the wallet-state controller.
- Prevent the extension from opening the dashboard in a tab after successful accounts addition. Some edge cases still allow it—for example, if the user intentionally navigates the account-personalize screen into a state where no accounts remain to be added in that session. In such cases, the screen will automatically redirect to the dashboard. However, all other scenarios should be handled to avoid showing a CTA that opens the dashboard in a tab, especially in Firefox.
- Replace the "Pin Extension" balloon image with a component for easier customization
- Changed: Update Trezor-related libs to their latest v
- Changed: Automated new test for network management
- Automated the process of adding a network directly from Chainlist.
- Verified that the network details were correctly imported and displayed in the wallet settings.
- Changed: Migrate from LedgerJS Transport libs to the new libs under the Ledger Device Management Kit and Device Signer Kit umbrella
- Changed: Migrate from the soon-to-be-deprecated LedgerJS Transport libs to the new libs under the Ledger Device Management Kit and Device Signer Kit umbrella. Needed for early Ledger EIP-7702 support, because it seems like Ledger are planning to implement EIP-7702 support on their new libs exclusively.
- Changed: Migrate from EthersJS v6.8.0 to v6.13.4. Needed, because Ledger @ledgerhq/device-signer-kit-ethereum lib requires this v specifically and otherwise - two EthersJS v6 versions would have been packaged in our bundles.
- Changed: Migrate reflect-metadata from v0.1.13 to v0.2.2. Needed, because otherwise our version was conflicting with the version used by the @ledgerhq/device-signer-kit-ethereum lib. Importing the
SignerEthBuilder
class statically was silently failing in the service worker - somewhere in the rpcFlow (but I was not sure where exactly, because the error was getting swallowed). - Fixed: Missing web worker context and web HID config in TS, causing missing type warns
- Fixed: Expanding Dashboard overview on tab changing
- Fixed: Swap & Bridge footer note (select route) spacing regression
- Fixed: Try to fix slice of undefined error in Activity / txn history
- Fixed: Missing space between account key badge text and icon
- Fixed: Multiple Ambire Tabs Opened From ActionWindow
- Improve the args structure of openInTab and openInternalPageInTab
- Optimize tab-opening logic to reduce the number of Chrome API calls, which can lead to slight performance gains
Full Changelog: v5.4.0...v5.5.0
v5.4.0 (Browser Extensions)
Changelog:
- Added: Migrate to ambire-common v2.54.0, see changelog in there too.
- 🎉 Added: Smart Settings. What should be tested:
- The delegations page. To open, go to settings -> accounts -> pick a EOA account that can become 7702 -> dropdown -> Smart Settings. Maybe we should rename the dropdown. On the page, you can activate/deactivate your delegations. Try some txns and see the results. It doesn't work very well on Gnosis as RPCs are shit but it should be neat on other chains
- import the same account in metamask. Make sure it doesn't have an active delegation on the chain you are going to delegate. Go to jumper and trigger a token (not native) swap. A popup in metamask should appear for enabling smart settings. Enable them and complete the transaction. Go back to ambire and check if the metamask logo, banner etc appear in the accounts dropdown + delegations page. Try to remove it -> "revoking Metamask" or something like this should appear in benzina
- after revoking/enabling a delegation through the delegations page (only through that page), activity, txn history should display a correct humanization
- Added: "Already added" network screen
- Changed: Rename "Add from current recovery phrase" to "Add from stored recovery phrases"
- Changed: Remove "Basic Account" terminology
- Added: Tooltips for the token amounts in humanizations and simulations
- Changed: Remove links from humanization in Activity tab
- Changed: Hardware wallet edge case handling (during signing)
- Changed: If there's no sponsor, say that the connected dapp is the sponsor
- Changed: One click swap warnings
- Add: Reusable Modals component for one-click swap/transfer and sign account op
- Add: Prompt before sign warnings to swap and bridge
- Changed: Improve Keystore encrypt and decrypt performance (when unlocking and adding secrets to the Keystore) on Firefox
- Changed: Enable "File Injection" to support AmbireProvider, EthereumProvider, and content-script injection in dApps loaded as files in the browser
- Fixed: Gas tank E2E tests
- Enabled top up Gas Tank if it has a Gas Tank in token details
- Fix E2E tests related to Gas Tank
- Fixed: Onboarding flow bugs
- Fixed: Bug with the navigation behavior of the AccountsPersonalize
- Fixed: Sign Account Op and Sign Message screen troubles with sizing and vertical scrollability
- Fixed: On the Sing Account Op screen (action window), the inherited height from the popup window was hiding the footer call to action buttons (including sign).
- Fixed: Vertical scroll bar indication was missing, making it not obvious that one can scroll the inner content. I refactored the content wrappers (found two
ScrollableWrapper
s, the latter one not needed) and moved the padding alongside the content that could potentially have a vertical scroll. - Fixed: Sign Message screen similar troubles
Full Changelog: v5.3.0...v5.4.0
v5.3.0 (Browser Extensions)
Changelog:
- Added: Migrate to ambire-common v2.53.0, see changelog in there too.
- 📣 Added: Disabled networks; More details: Include a rich list of disabled networks that the user can easily enable. We can source those directly from chainlist, modifying the ones that don't work well by default.
- Changed: Make browser extension builds fully deterministic
- Added: GitHub action that makes extension PROD builds and outputs a source code zip (including .env file) - so that the build is hopefully reproducible by the Firefox review team
- Changed: Altering the webpack configuration so that the builds are deterministic
- Refactored: Move clipboard logic (via expo-clipboard) in an util. The lib introduced slight non-determinism in builds across different OSs, so this was needed while I was debugging and decided to leave it as is.
- Refactored: Remove expo-splash-screen package and biometrics context from the web build, they are mobile-only and were causing slight non-determinism in builds across different OSs
- Changed: Smaller Action window
- Create action window optimization - decrease the number of chrome api requests to speed up the opening of the window
Full Changelog: v5.2.3...v5.3.0
v5.2.3 (Browser Extensions)
v5.2.2 (Browser Extensions)
Alias of v5.2.1.
v5.2.1 (Browser Extensions)
Changelog:
- Added: Migrate to ambire-common v2.52.1, see changelog in there too.
- Added: Associate Account Keys with the Legacy Saved Seed
- Changed: Enhance required env variables validation logic + cleanup obsolete values
- Changed: Swap and transfer menus
- Recipient menu to open to the bottom. It can't open as a bottom sheet because the menu is complementary to the input field.
- The network select for the toToken to open as a bottom sheet
- Fixed: EOA send calls (txn receipts could be null and that broke the EOA send calls confirmation)
- Fixed: Focus window fails because of outdated window props
- Fixed: The extension fails to focus action window if the user changes his resolution
- Fixed: Incorrect focus position after resizing the browser window
- Fixed: Window undefined error when trying to open Swap & Bridge from Ambire Rewards
Full Changelog: v5.2.0...v5.2.1