* refactor(e2e): extract shared extension launcher from MetaMask fixture
Move the persistent-context + temp-profile + SW-derived extension-id
logic into launchExtensionContext (with beforeLaunch, afterClose,
extraChromeArgs, profilePrefix, viewport options) so other extensions
can reuse it. MetaMask fixture becomes a thin wrapper; behavior
unchanged for the existing Hub suite.
* feat(e2e): add congestion and balance controls to Anvil helper
Add setNextBlockBaseFee, setBlockGasLimit, disableAutoMining,
dropTransaction, setEthBalanceFor, and getEthBalance for staging
network conditions and localizing accounts on the forks.
* feat(e2e): add rpc-router and opt-in wallet test-server orchestration
Anvil only answers JSON-RPC at / while apps/api appends path suffixes
(/ethereum/mainnet/alchemy), so add a small host-side router that
strips the prefix and forwards by chain segment to the forks.
Wire wallet-send/wallet-swap Playwright projects behind the
RUN_WALLET_E2E env flag (env rather than argv: workers re-evaluate the
config without --project) with apps/api and the router as web servers,
narrow the @wallet grep so it no longer swallows the new tags, and add
setup:wallet / test:wallet-* scripts. setup:wallet passes
WXT_STATUS_API_URL explicitly because wxt build --mode development
otherwise bakes the production API URL.
* chore: add changeset
* ci: point changesets and workflow triggers at master
The main branch was renamed to master, so origin/main no longer exists:
the changeset status step failed to find the divergence point, and the
CI/E2E/Release push triggers never fired.
* feat(e2e): add wallet page objects
Onboarding (seed import), portfolio, send modal (Max fees parsing,
password step, Confirm-with-new-gas-price, success toast), and a thin
LiFi swap-drawer wrapper. Add a clickVisible helper to BasePage since
the wallet renders controls twice (desktop + hidden mobile variant).
* feat(e2e): add wallet extension fixture stack with API data seam and LiFi mock
wallet-extension.fixture provides anvilRpc with per-test
snapshot/revert isolation, the dev-built extension context, seed-import
onboarding (compliant password decoupled from WALLET_PASSWORD), and
page-object fixtures.
status-api-mocks intercepts only the Alchemy enhanced-API tRPC routes
(assets.all, assets.nativeToken, activities.page) with fork-consistent
fixtures and exposes setFeeRate for the gas-shift test; rpc.proxy and
nodes.* pass through to the real backend and fork. lifi-mock serves
every li.quest endpoint the widget/SDK call; the mocked step calldata
is a real WETH9 deposit() so the swap executes genuinely on the fork
with an exactly assertable 1:1 output.
* test(e2e): add wallet send network-condition suite
Happy path with on-chain delta assertion, slow inclusion (no state
change until mineBlock), high base fee reflected in quoted Max fees and
actually paid, and a deterministic GasShiftedError -> Confirm with new
gas price flow via a pinned fee quote bumped mid-signing. The planned
tight-gas-limit row was dropped: Anvil estimates a 21k transfer fine
under a 20k block limit, making the scenario artificial.
* test(e2e): add wallet swap suite against mocked LiFi quotes
ETH -> WETH via the exchange drawer with recorded li.quest fixtures:
happy path with exact 1:1 on-chain output assertion, slow inclusion
(widget pending until mineBlock), and high base fee (swap executes,
elevated gas provably paid). Deliberately shallow on adverse-condition
UX, which LiFi owns; the deep matrix lives in the send suite.
* ci: add wallet e2e job
Build the extension in dev mode (WXT_STATUS_API_URL pointed at the
local api), start the forks (optionally against an archive upstream
via the E2E_MAINNET_FORK_URL secret), and run the wallet-send and
wallet-swap projects under xvfb with RUN_WALLET_E2E=1. apps/api boots
with dummy secrets since chain calls hit the fork and enhanced
endpoints are seam-mocked.
* chore: add changeset
* fix(e2e): disambiguate send success toast from its aria-live announcer
Radix Toast renders a hidden screen-reader announcer that duplicates the
toast message as "Notification Transaction signed and sent", so the
substring locator intermittently resolved to two elements and tripped
Playwright strict mode in CI.
* fix(e2e): keep vault accounting consistent when seeding shares
The live WETH pre-deposit vault drained below 1 token of totalSupply, so
seeding 1e18 shares via a bare balance-slot write made the on-chain
withdraw revert InvalidState() (amount exceeds stored totalAssets, burn
exceeds totalSupply) -- the forks track the latest block, so state drift
broke the test without a code change.
fundVaultShares now bumps the vault's totalSupply and stored totalAssets
by the seeded delta. Backing slots are discovered by value match plus a
write probe (the vaults keep both values equal, so a match alone is
ambiguous) and cached per vault.
* chore: add changeset
* refactor(e2e): extract shared extension launcher from MetaMask fixture
Move the persistent-context + temp-profile + SW-derived extension-id
logic into launchExtensionContext (with beforeLaunch, afterClose,
extraChromeArgs, profilePrefix, viewport options) so other extensions
can reuse it. MetaMask fixture becomes a thin wrapper; behavior
unchanged for the existing Hub suite.
* feat(e2e): add congestion and balance controls to Anvil helper
Add setNextBlockBaseFee, setBlockGasLimit, disableAutoMining,
dropTransaction, setEthBalanceFor, and getEthBalance for staging
network conditions and localizing accounts on the forks.
* feat(e2e): add rpc-router and opt-in wallet test-server orchestration
Anvil only answers JSON-RPC at / while apps/api appends path suffixes
(/ethereum/mainnet/alchemy), so add a small host-side router that
strips the prefix and forwards by chain segment to the forks.
Wire wallet-send/wallet-swap Playwright projects behind the
RUN_WALLET_E2E env flag (env rather than argv: workers re-evaluate the
config without --project) with apps/api and the router as web servers,
narrow the @wallet grep so it no longer swallows the new tags, and add
setup:wallet / test:wallet-* scripts. setup:wallet passes
WXT_STATUS_API_URL explicitly because wxt build --mode development
otherwise bakes the production API URL.
* chore: add changeset
* ci: point changesets and workflow triggers at master
The main branch was renamed to master, so origin/main no longer exists:
the changeset status step failed to find the divergence point, and the
CI/E2E/Release push triggers never fired.
* test(e2e): run the suite against a local Hub
Start the Hub dev server via Playwright's webServer and default BASE_URL to
localhost so tests exercise local code; set BASE_URL to test a deployment.
Pre-compile routes in global-setup, derive the wallet address from the seed
(dropping WALLET_ADDRESS), and let anvil:up/down run without a .env file.
* ci(e2e): build and serve the local Hub with forks
Drop the deployed-URL logic; build Hub deps, start Anvil forks, and run all
projects against the webServer-started local Hub.
* chore(e2e): remove dead pre-deposit deposit tests
Deposits are sunsetted; the Hub pre-deposits page is now withdrawal-only.
Drop the network-switch and validation specs, the deposit modal page
object, and the now-unused TEST_AMOUNTS and clickDepositForVault helpers.
* fix(e2e): repair pre-deposits display smoke test
- sidebar: match the renamed "Pre-deposit vaults" link
- vaultHeadings: anchor to "<token> vault" so FAQ headings aren't counted
- assert exact vault names to avoid FAQ strict-mode collisions
* chore: add changeset
* ci(e2e): align workflow triggers with CI
Run on push to main, pull_request, and workflow_call.
Drop deployment_status, path filters, and manual dispatch.
* fix: add foundry-toolchain to release workflow and pin forge version to v1.5.1
* fix: update git submodule command to use --recursive option
* fix: remove unnecessary fix message from silent-wolves-dream.md
* feat: migrate community dapp
* fix: change server protocol from https to http in webpack config
* fix: update build script in package.json and add output directory to turbo.json
* fix: update CI workflow to initialize git submodules recursively and add Foundry installation step
* chore: change from community to community-dapp
* feat: add global type declarations for wallet and API integration
* fix: correct syntax for not-first-child selector in Card component
* fix(wallet): use type-safe globalThis cast instead of direct property assignment
* fix(community-dapp): fix eslint FlatCompat config and include test files in tsconfig
* fix(ci): fix forge test args and disable broken community-dapp tests
* fix(community-dapp): resolve @libp2p/interface to v2.10.4 for webpack build
* fix: add @libp2p/interface as missing dependency for @waku packages via packageExtensions
* fix: address PR review feedback
* fix(wallet): restore type-safe globalThis cast for CI build
* fix: commit ABI artifacts and add vercel.json for SPA routing
* fix(community-dapp): add 404.html for SPA routing on Vercel
* fix(community-dapp): simplify vercel.json to rewrites only
* fix(community-dapp): update vercel.json with build and output configurations
* fix: add Foundry dependencies to .gitignore
* Add E2E tests and fixtures for MetaMask wallet integration and Pre-Deposits functionalities
* Enhance MetaMask notification handling and improve E2E test robustness
* Add pnpm workspace file for E2E test setup
* chore(hub): add changeset
* Refactor timeout configurations and relocate Pre-Deposits E2E test under hub module
* Reorganize E2E configuration and workflows; refactor imports and environment handling
* Refactor E2E environment handling: centralize env types, simplify `EnvConfig`, and reduce workflow timeout to 15 mins
* Add E2E tests for deposit flows with network switching and validation
- Implement comprehensive Pre-Deposit tests for network switching and balance validation.
- Enhance MetaMask handling with dismissPendingAddNetwork and popup detection improvements.
- Extend constants and page objects to support new test cases.
* Refactor timeout configurations across components and tests; standardize and replace hardcoded values with constants.
* Refactor MetaMask extension download: use specific versioning, remove unused env vars, and streamline process
* Remove `pnpm-lock.yaml` and refactor Pre-Deposits E2E test imports and MetaMask handling
* chore: add empty changeset for CI
* Refactor MetaMask connection approval: simplify button handling and remove redundant steps
* Refactor Pre-Deposit E2E tests: use shared chain ID constants and update Node.js version in workflow
* refactor: extract chain constants and use flexible node version in CI
* Refactor e2e tests: centralize MetaMask network switching and SIWE dialog dismissal logic into reusable helpers.
* Add `@helpers/*` path alias to e2e `tsconfig.json`
* Add E2E tests for deposit flow
Added end-to-end tests for the deposit flow, including network switch and validation checks.
* Delete .changeset/bold-candies-clap.md
---------
Co-authored-by: Egor Rachkovskii <egorrachkovskii@status.im>
Co-authored-by: JulesFILIOT <dev@julesfiliot.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Felicio <felicio@users.noreply.github.com>
* chore: add github.vscode-github-actions extension to recommended extensions
* chore: run job on single machine
* chore: Add reusable workflow for CI
* Create olive-laws-exercise.md
* chore: Add dependency on ci workflow for release workflow
* add new GitHub Action for CI
* add yarn flag
* use actions v3
* add ci badge (lol)
* cache lint and format scripts
* add more steps
* remove unused component
* fix lint errors
* remove unsued eslint plugins