A JavaScript Ethereum provider that connects to the wallet over a stream.
npm install @atomrigslab/providersThe Ethereum provider object injected by MetaMask into various environments.
Contains a lot of implementation details specific to MetaMask, and is probably
not suitable for out-of-the-box use with other wallets.
The BaseProvider implements the Ethereum JavaScript provider specification ([EIP-1193]), but must be modified by a sub-class in order to function.StreamProvider is such a sub-class, which synchronizes its state and marshals JSON-RPC messages via a duplex stream.MetamaskInpageProvider further extends StreamProvider to support legacy provider interfaces in addition to [EIP-1193], and is used to instantiate the object injected by MetaMask into web pages as window.ethereum.
``javascript
import { initializeProvider } from '@metamask/providers';
// Create a stream to a remote provider:
const metamaskStream = new LocalMessageDuplexStream({
name: 'inpage',
target: 'contentscript',
});
// this will initialize the provider and set it as window.ethereum
initializeProvider({
connectionStream: metamaskStream,
});
const { ethereum } = window;
`
Types are exposed at index.d.ts.EventEmitter
They require Node.js and Duplex stream types, which you can grab from e.g. @types/node.
The Provider object should not be mutated by consumers under any circumstances.
The maintainers of this package will neither fix nor take responsbility for bugs caused by third parties mutating the provider object.
- Install Node.js version 12
- If you are using nvm (recommended) running nvm use will automatically choose the right node version for you.yarn setup
- Install Yarn v1
- Run to install dependencies and run any requried post-install scriptsyarn
- Warning: Do not use the / yarn install command directly. Use yarn setup instead. The normal install command will skip required post-install scripts, leaving your development environment in an invalid state.
Run yarn test to run the tests once. To run tests on file changes, run yarn test:watch.
Run yarn lint to run the linter, or run yarn lint:fix to run the linter and fix any automatically fixable issues.
The project follows the same release process as the other libraries in the MetaMask organization:
1. Create a release branch
- For a typical release, this would be based on main1.x
- To update an older maintained major version, base the release branch on the major version branch (e.g. )yarn version --minor --no-git-tag-version
2. Update the changelog
3. Update version in package.json file (e.g. )main
4. Create a pull request targeting the base branch (e.g. or 1.x`)
5. Code review and QA
6. Once approved, the PR is squashed & merged
7. The commit on the base branch is tagged
8. The tag can be published as needed
[eip-1193]: https://eips.ethereum.org/EIPS/eip-1193