Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@taynguyen/inpage-provider

MetaMask13MIT8.0.4-aTypeScript support: included

A JavaScript Ethereum provider that connects to the wallet over a stream.

MetaMask, Ethereum, Provider

readme

MetaMask Inpage Provider

The inpage Ethereum provider object injected by MetaMask into web pages. Contains a lot of implementation details specific to MetaMask, and is probably not suitable for out-of-the-box use with other wallets.

Implements the Ethereum JavaScript provider specification, EIP-1193.

Installation

yarn add @metamask/inpage-provider

Usage

import { initializeProvider } from '@metamask/inpage-provider'

// 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

Types are exposed at index.d.ts. They require Node.js EventEmitter and Duplex stream types, which you can grab from e.g. @types/node.

Do Not Modify the Provider

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.

changelog

Changelog

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

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

8.0.4 - 2021-02-04

Fixed

  • Fix warning on second currentProvider access (#138)

8.0.3 - 2021-01-20

Fixed

  • Restore 'data' provider event (#135)

8.0.2 - 2021-01-12

Changed

  • Reduce window.web3 shim console noise (#133)

8.0.1 - 2020-12-08

Fixed

  • Fix 8.0.0 types (#127)

8.0.0 - 2020-12-07

Added

  • Add logger parameter to initializeProvider (#116)
  • Add window.web3 shim, shimWeb3 export (#113, #115)
    • This is to maintain window.web3.currentProvider once MetaMask stops injecting window.web3 (very soon), and to log attempts to access any properties on the shim other than currentProvider.
    • initializeWeb3 now has a shouldShimWeb3 argument, which causes the shim to be set as window.web3 if true.

Changed

  • (BREAKING) Rename initProvider export to initializeProvider (#114)
  • (BREAKING) Replace ethereum.publicConfigStore with new set of JSON-RPC notifications (#109)

Fixed

  • Correctly implement connect and disconnect events (#120)
    • See EIP-1193 for the specification of these events.
    • disconnect emits with an RPC error. Like all such errors emitted by this module, they have a code property with a number value. There are currently two codes:
      • 1013 indicates that MetaMask is attempting to reestablish the connection
      • 1011 indicates that a page reload is required
  • Send page metadata even if page is already loaded (#119)
  • Convert MetaMaskInpageProvider logger to instance variable (#118)
    • Previously, it was erroneously a singleton across all class instances.
  • Stop emitting state change events on initialization (#117)
    • Includes accountsChanged, chainChanged, and networkChanged.
    • This prevents sites that handle any of these events by reloading the page from entering into a reload loop.

Removed

  • (BREAKING) Remove _metamask.isEnabled and _metamask.isApproved (#112)
  • (BREAKING) Remove the chainIdChanged event (#111)
  • (BREAKING) Remove ethereum.publicConfigStore (#109)
  • (BREAKING) Remove web3.js-related functionality (#106)
    • This functionality caused the page to reload if there was a web3.js instance at window.web3, and kept web3.eth.defaultAccount in sync with ethereum.selectedAddress.
    • This functionality is replicated in @metamask/legacy-web3.

7.0.0 - 2020-09-08

Changed

  • (BREAKING) Changed casing of Metamask in all exports to MetaMask
    • A brand is a brand ¯\_(ツ)_/¯

6.3.0 - 2020-09-04

Added

  • Types

Changed

  • ethereum.networkVersion and .chainId now default to null instead of undefined
  • Improved JSDoc comments and tags

6.2.0 - 2020-08-04

Added

  • Package consumers can now provide a logger object to the provider constructor, to override the default logger
    • The default logger is the console global
    • The following methods are required: debug, error, info, log, trace

6.1.1 - 2020-07-28

Changed

  • Updated dependencies, which produces a smaller bundle size

6.1.0 - 2020-07-21

Changed

  • Only emit data event for notifications present in ^4.0.0 (#73)
    • Some consumers make assumptions about the shape of the object emitted with the event that do not hold for all notifications in ^6.0.0.
  • Select icon using rel~="icon" when retrieving site metadata (#76)
    • This is instead of defaulting to rel="shortcut icon".

Fixed

  • Emit accountsChanged event after all related state has been updated (#72)
    • For example, ethereum.selectedAddress will now have been updated by the time the event is emitted.
  • Enable retrieval of site icons not hosted on the same origin (#78)
    • For example, icons hosted on assets.foo.com that are used on foo.com will now be retrieved successfully.

6.0.1 - 2020-07-15

Fixed

  • Warning message for the data event
    • This deprecated event was added back in 6.0.0, but the warning message was not defined.
  • Restore publicConfigStore property as alias for _publicConfigStore
    • The _publicConfigStore was named publicConfigStore before 4.0.0. The original property turned out to be used by consumers. The store is scheduled to be removed completely, and accessing publicConfigStore emits a warning.

6.0.0 - 2020-07-04

Added

  • The data event
    • This event was removed in 4.0.0, as it was thought to only be used internally. This assumption was incorrect, and the event is now restored.

Changed

  • (BREAKING) Restore the notification event value to its pre-4.0.0 state
    • Prior to 4.0.0 this event was emitted by code in the MetaMask extension. Its value was inadvertently changed when it was moved to this package.

5.2.1 - 2020-06-29

Changed

  • Un-deprecate isConnected method.

5.2.0 - 2020-06-24

Changed

  • Remove property protections
    • Unless we lock down the entire provide object, which we can't do, a determined consumer can break our provider. Thus, protected properties are pointless.
  • Fix requests params type checks
  • Update deprecation warning messages per most recent deprecation plans

5.1.0 - 2020-06-01

Changed

  • Update request params type to unknown[] | object
    • This is not breaking in practice, since no RPC methods with other params values exist.

5.0.2 - 2020-05-22

Changed

  • Fix ethereum.send return value for certain argument combination
    • Reverted to pre-4.0.0 state
  • Stop protecting overwrites of the following properties, that existed prior to 4.0.0:
    • ethereum.isMetaMask
    • ethereum._metamask
  • Protect the following new, private properties required for ethereum.request to work:
    • ethereum._rpcRequest
    • ethereum._rpcEngine

5.0.1 - 2020-05-11

Changed

  • Rename package to @metamask/inpage-provider
  • Prevent overwrite of certain properties on the Provider
    • ethereum.request
    • ethereum.isMetaMask
    • ethereum._metamask

5.0.0 - 2020-04-22

Added

  • The most recent EIP 1193 API (#30)
    • The method request
    • The events disconnect and message
  • A global initialization event, ethereum#initialized, for asynchronous injection (#31)
  • Helper methods for initializing the provider (#31)

Changed

  • (BREAKING) Use named instead of default exports (#31)
  • (BREAKING) MetaMaskInpage constructor now takes a connectionStream and an options object (#31)
  • (BREAKING) _metamask.sendBatch -> _metamask.requestBatch (#30)
  • (BREAKING) Revert send to match provider in v7.7.8 of metamask-extension (#29)
  • The connect event now emits with a ProviderConnectInfo object per EIP 1193 (#30)
  • Deprecated the send method (#30)
  • Deprecated the events close, networkChanged, and notification, and added deprecation warnings for them (#30)
  • Un-deprecated sendAsync (#29)