Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: bridge controller #5276

Merged
merged 95 commits into from
Feb 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
8a6ef66
chore: WIP bridge controller, most tests passing
infiniteflower Feb 4, 2025
553b3d6
chore: remove logs
infiniteflower Feb 4, 2025
c3705ff
chore: clean up
infiniteflower Feb 5, 2025
482ceaf
chore: clean up
infiniteflower Feb 5, 2025
934d937
chore: add jest environment jsdom package
infiniteflower Feb 5, 2025
e95b7c1
chore: fix lint issues
infiniteflower Feb 5, 2025
c97c078
chore: bump version of controller utils
infiniteflower Feb 5, 2025
7e197cd
chore: fix lint issue
infiniteflower Feb 5, 2025
1dc1bb3
fix: broken tests
infiniteflower Feb 5, 2025
6ceefa4
fix: broken tests
infiniteflower Feb 5, 2025
5d720b2
chore: remove unused var
infiniteflower Feb 5, 2025
ecde95b
fix: broken tests
infiniteflower Feb 5, 2025
835ac44
chore: adjust coverage
infiniteflower Feb 5, 2025
7b83a3b
chore: fix lint issues
infiniteflower Feb 5, 2025
40770a6
chore: fix lint issues
infiniteflower Feb 5, 2025
386e481
chore: improve test
infiniteflower Feb 5, 2025
f4f6991
chore: add tests
infiniteflower Feb 5, 2025
4c01fe3
chore: add test
infiniteflower Feb 5, 2025
c864605
fix: incorrect import
infiniteflower Feb 5, 2025
e8ec4b0
chore: update changelog
infiniteflower Feb 5, 2025
ca66701
fix: lint errors
infiniteflower Feb 5, 2025
318ae4e
chore: remove unneeded code
infiniteflower Feb 5, 2025
4a7f526
fix: lint errors
infiniteflower Feb 5, 2025
63d7a30
fix: lint errors
infiniteflower Feb 5, 2025
c303bb4
chore: bump coverage
infiniteflower Feb 5, 2025
a19aaaa
chore: add license
infiniteflower Feb 6, 2025
5772b3c
fix: invalid deps
infiniteflower Feb 6, 2025
5db90c0
chore: align @ethersproject/contracts version
infiniteflower Feb 6, 2025
65eef16
chore: align more package versions
infiniteflower Feb 6, 2025
1ee940a
chore: migrate to ethers 6
infiniteflower Feb 6, 2025
92dea7e
chore: align ethers version
infiniteflower Feb 6, 2025
a86d46f
chore: update changelog with git diffs
infiniteflower Feb 6, 2025
e245d4f
chore: update changelog
infiniteflower Feb 6, 2025
33c5cc6
fix: incorrect import
infiniteflower Feb 6, 2025
4c01335
chore: remove unneeded link
infiniteflower Feb 6, 2025
0d0e9ac
chore: update teams.json
infiniteflower Feb 6, 2025
d190303
chore: remove 1.0.0 section
infiniteflower Feb 6, 2025
88ad488
Revert "chore: remove 1.0.0 section"
infiniteflower Feb 6, 2025
3b7432a
fix: changelog lint
infiniteflower Feb 6, 2025
d421a2e
chore: export BridgeController, types, constants, utils
infiniteflower Feb 6, 2025
0872c45
chore: simplify exports
infiniteflower Feb 6, 2025
0f67bcf
feat: add dynamic bridge API base URL configuration
infiniteflower Feb 6, 2025
07d7e31
fix: update bridge API environment variable name
infiniteflower Feb 6, 2025
8577f69
fix: lint errors
infiniteflower Feb 6, 2025
df81faa
chore: add CODEOWNERS for bridge-controller
infiniteflower Feb 6, 2025
1e23a49
chore: revert .vscode in gitignore
infiniteflower Feb 7, 2025
2e7045b
chore: add package release related lines for bridge controller
infiniteflower Feb 7, 2025
8fe137c
Update packages/bridge-controller/src/utils/fetch.test.ts
infiniteflower Feb 7, 2025
bcc4398
Update packages/bridge-controller/src/utils/fetch.test.ts
infiniteflower Feb 7, 2025
085f29d
Revert "Update packages/bridge-controller/src/utils/fetch.test.ts"
infiniteflower Feb 7, 2025
5a5e97a
Update packages/bridge-controller/package.json
infiniteflower Feb 7, 2025
7f945be
chore: use flushPromises from root tests/helpers instead
infiniteflower Feb 7, 2025
5f7edf1
Update packages/bridge-controller/src/constants/chains.ts
infiniteflower Feb 7, 2025
f450d73
chore: move mock files into root test folder
infiniteflower Feb 7, 2025
1cf3585
Update packages/bridge-controller/package.json
infiniteflower Feb 7, 2025
f038584
chore: move controller we depend on for communiciation from deps to d…
infiniteflower Feb 7, 2025
bb9ac4c
Update packages/bridge-controller/package.json
infiniteflower Feb 7, 2025
9e8368e
chore: use FakeProvider from root test folder
infiniteflower Feb 7, 2025
ff67565
chore: replace ethereumjs-util with ethers ZeroAddress
infiniteflower Feb 7, 2025
9a993cf
Update packages/bridge-controller/src/index.ts
infiniteflower Feb 7, 2025
b416235
Update packages/bridge-controller/src/index.ts
infiniteflower Feb 7, 2025
a97a19b
chore: update network client retrieval in bridge controller
infiniteflower Feb 7, 2025
c9dd174
chore: change BridgeController to named export
infiniteflower Feb 7, 2025
4fd76a9
fix: broken import
infiniteflower Feb 7, 2025
1436e3d
feat: add optional initial state to BridgeController constructor
infiniteflower Feb 11, 2025
9e65155
chore: extract default bridge controller state method
infiniteflower Feb 11, 2025
1b9f6eb
chore: set state directly in updates rather than making fresh objs
infiniteflower Feb 11, 2025
abf2f21
refactor: improve quote request validation with consistent variable n…
infiniteflower Feb 11, 2025
e6597a1
Update packages/bridge-controller/tsconfig.json
infiniteflower Feb 11, 2025
80be6b5
Update packages/bridge-controller/tsconfig.build.json
infiniteflower Feb 11, 2025
7ca2505
chore: reorganize constants, no more index
infiniteflower Feb 11, 2025
44618a3
chore: delete constants index
infiniteflower Feb 11, 2025
c7525e4
chore: remove bridge utils index and put into bridge utils file
infiniteflower Feb 11, 2025
c5c48a5
feat: add platform specific client ID to bridge controller constructor
infiniteflower Feb 11, 2025
58e20e0
chore: remove unneeded export
infiniteflower Feb 11, 2025
9eccf38
chore: bump deps
infiniteflower Feb 11, 2025
6f9d5fc
chore: bump base controller dep
infiniteflower Feb 11, 2025
8eebb18
Revert "chore: bump base controller dep"
infiniteflower Feb 11, 2025
283f59a
refactor: convert bridge client ID to enum
infiniteflower Feb 11, 2025
bec4cda
fix: incorrect export
infiniteflower Feb 11, 2025
c952032
chore: add more tests for should not fetch quotes if source and desti…
infiniteflower Feb 11, 2025
c070e8c
chore: add test for should throw an error when no provider is found
infiniteflower Feb 11, 2025
6801159
chore: add tests for should handle abort signals in fetchBridgeQuotes
infiniteflower Feb 11, 2025
7af5979
feat: add tests for fetchTokenBalance utility function
infiniteflower Feb 11, 2025
1f5ea8f
refactor: simplify BridgeControllerMessenger type definition
infiniteflower Feb 11, 2025
161f669
chore: increase coverage thresholds for bridge controller tests
infiniteflower Feb 11, 2025
e78dab7
chore: update yarn lock
infiniteflower Feb 11, 2025
8cdc9eb
fix: lint errors
infiniteflower Feb 12, 2025
64ba6ea
chore: update yarn lock
infiniteflower Feb 12, 2025
741b2d6
chore: bump versions
infiniteflower Feb 12, 2025
83f6059
fix: package deps
infiniteflower Feb 12, 2025
6d21310
feat: allow consumers to pass in their own fetch function to bridgeCo…
infiniteflower Feb 12, 2025
411424e
chore: move mock jsons inside bridge controller package
infiniteflower Feb 13, 2025
76c617d
fix: broken import
infiniteflower Feb 13, 2025
505b141
Merge branch 'main' into feat/bridge-controller
infiniteflower Feb 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
## Snaps Team
/packages/rate-limit-controller @MetaMask/snaps-devs

## Swaps-Bridge Team
/packages/bridge-controller @MetaMask/swaps-engineers

## Portfolio Team
/packages/token-search-discovery-controller @MetaMask/portfolio

Expand Down Expand Up @@ -112,4 +115,5 @@
/packages/multichain-transactions-controller/CHANGELOG.md @MetaMask/accounts-engineers @MetaMask/wallet-framework-engineers
/packages/token-search-discovery-controller/package.json @MetaMask/portfolio @MetaMask/wallet-framework-engineers
/packages/token-search-discovery-controller/CHANGELOG.md @MetaMask/portfolio @MetaMask/wallet-framework-engineers

/packages/bridge-controller/package.json @MetaMask/swaps-engineers @MetaMask/wallet-framework-engineers
/packages/bridge-controller/CHANGELOG.md @MetaMask/swaps-engineers @MetaMask/wallet-framework-engineers
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@ scripts/coverage
!.yarn/versions

# typescript
packages/*/*.tsbuildinfo
packages/*/*.tsbuildinfo
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Each package in this repository has its own README where you can find installati
- [`@metamask/approval-controller`](packages/approval-controller)
- [`@metamask/assets-controllers`](packages/assets-controllers)
- [`@metamask/base-controller`](packages/base-controller)
- [`@metamask/bridge-controller`](packages/bridge-controller)
- [`@metamask/build-utils`](packages/build-utils)
- [`@metamask/composable-controller`](packages/composable-controller)
- [`@metamask/controller-utils`](packages/controller-utils)
Expand Down
14 changes: 14 additions & 0 deletions packages/bridge-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added

- Initial release

[Unreleased]: https://github.com/MetaMask/core/
20 changes: 20 additions & 0 deletions packages/bridge-controller/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
MIT License

Copyright (c) 2025 MetaMask

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
15 changes: 15 additions & 0 deletions packages/bridge-controller/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# `@metamask/bridge-controller`

Manages bridge-related quote fetching functionality for MetaMask.

## Installation

`yarn add @metamask/bridge-controller`

or

`npm install @metamask/bridge-controller`

## Contributing

This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme).
26 changes: 26 additions & 0 deletions packages/bridge-controller/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* For a detailed explanation regarding each configuration property and type check, visit:
* https://jestjs.io/docs/configuration
*/

const merge = require('deepmerge');
const path = require('path');

const baseConfig = require('../../jest.config.packages');

const displayName = path.basename(__dirname);

module.exports = merge(baseConfig, {
// The display name when running multiple projects
displayName,

// An object that configures minimum threshold enforcement for coverage results
coverageThreshold: {
global: {
branches: 93,
functions: 98,
lines: 99,
statements: 99,
},
},
});
87 changes: 87 additions & 0 deletions packages/bridge-controller/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"name": "@metamask/bridge-controller",
"version": "0.0.0",
"description": "Manages bridge-related quote fetching functionality for MetaMask",
"keywords": [
"MetaMask",
"Ethereum"
],
"homepage": "https://github.com/MetaMask/core/tree/main/packages/bridge-controller#readme",
"bugs": {
"url": "https://github.com/MetaMask/core/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/MetaMask/core.git"
},
"license": "MIT",
"sideEffects": false,
"exports": {
".": {
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"require": {
"types": "./dist/index.d.cts",
"default": "./dist/index.cjs"
}
},
"./package.json": "./package.json"
},
"main": "./dist/index.cjs",
"types": "./dist/index.d.cts",
"files": [
"dist/"
],
"scripts": {
"build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/bridge-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/bridge-controller",
"publish:preview": "yarn npm publish --tag preview",
"since-latest-release": "../../scripts/since-latest-release.sh",
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",
"test:verbose": "NODE_OPTIONS=--experimental-vm-modules jest --verbose",
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
},
"dependencies": {
"@metamask/base-controller": "^8.0.0",
"@metamask/controller-utils": "^11.5.0",
"@metamask/metamask-eth-abis": "^3.1.1",
"@metamask/polling-controller": "^12.0.3",
"@metamask/utils": "^11.1.0",
"ethers": "^6.12.0"
},
"devDependencies": {
"@metamask/accounts-controller": "^23.1.0",
"@metamask/auto-changelog": "^3.4.4",
"@metamask/eth-json-rpc-provider": "^4.1.8",
"@metamask/json-rpc-engine": "^10.0.3",
"@metamask/network-controller": "^22.2.1",
"@metamask/transaction-controller": "^45.1.0",
"@types/jest": "^27.4.1",
"deepmerge": "^4.2.2",
"jest": "^27.5.1",
"jest-environment-jsdom": "^27.5.1",
"lodash": "^4.17.21",
"nock": "^13.3.1",
"ts-jest": "^27.1.4",
"typedoc": "^0.24.8",
"typedoc-plugin-missing-exports": "^2.0.0",
"typescript": "~5.2.2"
},
"peerDependencies": {
"@metamask/accounts-controller": "^23.0.0",
"@metamask/network-controller": "^22.0.0",
"@metamask/transaction-controller": "^45.0.0"
},
"engines": {
"node": "^18.18 || >=20"
},
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
}
}
Loading
Loading