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.
- Bump
@metamask/json-rpc-engine
from^10.0.1
to^10.0.2
(#397) - Bump
@metamask/json-rpc-middleware-stream
from^8.0.5
to^8.0.6
(#397) - Bump
@metamask/rpc-errors
from^7.0.1
to^7.0.2
(#397) - Bump
@metamask/utils
from^10.0.0
to^11.0.1
(#397)
- Add new export for
initializeInpageProvider
with legacy build system support (#391)- Previously this module could be imported from
/dist/initializeInpageProvider
, but this only worked with build systems that support theexports
field (e.g. browserify). - This new
initializeInpageProvider
export has a JavaScript redirect for older build systems, so it should work correctly in all cases.
- Previously this module could be imported from
- Allow optional
jsonRpcStreamName
forinitializeInpageProvider
(#390)- This parameter was accidentally made required in v18.1.0
- Add intializeInpageProvider as package export (#380)
- Remove spurious typescript reference (#381)
- BREAKING: Bump
@metamask/json-rpc-engine
from^9.0.1
to^10.0.0
(#378) - BREAKING: Bump
@metamask/rpc-errors
from^6.4.0
to^7.0.0
(#373) - Bump @metamask/object-multiplex from
^2.0.0
to^2.1.0
(#375) - Bump @metamask/utils from
^9.2.1
to^9.3.0
(#370)
- Add support for edge-chromium to
createExternalExtensionProvider
(#318, #368) - Fix ESM-related build issues (#362, #363)
- Bump @metamask/utils from 9.1.0 to 9.2.1 (#357)
- Bump micromatch from 4.0.5 to 4.0.8 in the npm_and_yarn group (#359)
- Remove deprecation console warnings when accessing
window.ethereum.chainId
,window.ethereum.networkVersion
, andwindow.ethereum.selectedAddress
(#360)
- Add
@metamask/providers/stream-provider
export (#351)- This replaces the
@metamask/providers/dist/StreamProvider
export. It still exists for backwards compatibility, but will be removed in a future major release.
- This replaces the
- Bump
@metamask/utils
from9.0.0
to9.1.0
(#348)
- Bump
@metamask/json-rpc-engine
to^9.0.1
(#345) - Bump
@metamask/json-rpc-middleware-stream
to^8.0.1
(#345) - Bump
@metamask/rpc-errors
to^6.3.1
(#345) - Bump
@metamask/superstruct
to^3.1.0
(#338) - Bump
@metamask/utils
to^9.0.0
(#345)
- Bump devDependency
@ts-bridge/cli
to^0.2.0
(#343)- Fixes incorrect handling of
json
file imports, where an extension was appended to the file name after compilation (e.g.*.json.cjs
or*.json.mjs
).
- Fixes incorrect handling of
- Bump
@metamask/json-rpc-middleware-stream
from^7.0.1
to^8.0.0
(#327) - Bump
@metamask/json-rpc-engine
from^8.0.2
to^9.0.0
(#328) - Bump
extension-port-stream
from^3.0.0
to^4.1.0
(#331) - Bump
@metamask/utils
from^8.4.0
to^8.5.0
(#329) - Bump
@metamask/rpc-errors
from^6.2.1
to^6.3.0
(#326)
- Produce and export ESM-compatible TypeScript type declaration files in addition to CommonJS-compatible declaration files (#336)
- This fixes the issue of this package being unusable by any TypeScript project that uses
Node16
orNodeNext
as itsmoduleResolution
option. - Previously, this package shipped with only one variant of type declaration files, and these files were only CommonJS-compatible, and the
exports
field inpackage.json
linked to these files. This is an anti-pattern and was rightfully flagged by the "Are the Types Wrong?" tool as "masquerading as CJS".
- This fixes the issue of this package being unusable by any TypeScript project that uses
- Remove chunk files (#336).
- Previously, the build tool we used to generate JavaScript files extracted common code to "chunk" files. While this was intended to make this package more tree-shakeable, it also made debugging more difficult for our development teams. These chunk files are no longer present.
- Use named
extension-port-stream
import to ensure compatibility with bundlers such as Vite (#331)
- Change provider RPC error log severity from
error
towarn
(#323)
- BREAKING: Change webextension-polyfill from dependency to peerDependency (#319)
- Users are now expected to have the polyfill in their environment
- Restore deprecated properties, networkChanged event, and offline send() net_version support (#312)
- Bump MetaMask dependencies (#310)
- Bump @metamask/safe-event-emitter from 3.0.0 to 3.1.1 (#309)
- Bump @metamask/utils from 8.3.0 to 8.4.0 (#311)
- Bump tar from 6.1.13 to 6.2.1 (#314)
- BREAKING: Remove deprecated properties, networkChanged event, and offline send() net_version support (#306)
window.ethereum.chainId
has been removed. Use the 'eth_chainId' RPC method instead.window.ethereum.networkVersion
has been removed. Use the 'net_version' RPC method instead.window.ethereum.selectedAddress
has been removed. Use the 'eth_accounts' RPC method instead.networkChanged
event has been removed. The closest equivalent is thechainChanged
event.window.ethereum.send()
no longer resolvesnet_version
offline (from cache).
- Bump @metamask/json-rpc-engine from 7.3.2 to 7.3.3 (#305)
- BREAKING: Add ESM build (#296)
- It's no longer possible to import files from the
dist
folder directly, with the exception of./dist/StreamProvider
- It's no longer possible to import files from the
- Don't send
null
params to underlying provider (#292)
- Don't send
undefined
params to underlying provider (#290)
- BREAKING: Update to streams3 API (#288)
- Update
extension-port-stream
from^2.1.1
to^3.0.0
- Force subdependency
readable-stream
to^3.6.2
in resolutions
- Force subdependency
- Update
json-rpc-middleware-stream
from^4.2.3
to^5.0.1
- Update
@metamask/object-multiplex
from^1.3.0
to^2.0.0
- Add direct dependency on
readable-stream@^3.6.2
- Replace internal usage of stream with
readable-stream
- Update
- Add support for EIP-6963 (#263)
initializeProvider()
params object now accepts an optionalproviderInfo
property with a value of EIP6963ProviderInfo object- Add
eip6963AnnounceProvider()
which supports a wallet by announcing a provider through theeip6963:announceProvider
event and re-announcing the provider whenever aneip6963:requestProvider
event is received - Add
eip6963RequestProvider()
which supports a dapp by dispatching aneip6963:requestProvider
event and invoking a callback for eacheip6963:announceProvider
event received - Add
EIP6963AnnounceProviderEvent
type - Add
EIP6963ProviderDetail
type - Add
EIP6963ProviderInfo
type - Add
EIP6963RequestProviderEvent
type
- BREAKING: Update
chainId
,networkVersion
, andselectedAddress
to be read-only (#280) - Log deprecation warning when accessing
chainId
,networkVersion
, andselectedAddress
(#280) - Remove
pump
(#281)
- BREAKING: Replace
eth-rpc-errors
@^4.0.2
with@metamask/rpc-errors
@6.0.0
(#277) - BREAKING: Replace
json-rpc-engine
@^6.1.0
with@metamask/json-rpc-engine
@7.1.1
(#277) - Upgrade
@metamask/utils
from^6.2.0
to^8.1.0
(#277)
- Update
extension-port-stream
to^2.1.1
(#273)
- Update
fast-deep-equal
(#258)
- Add warning for callers of
wallet_watchAsset
with ERC721 and ERC1155 token types, that support is currently considered experimental (#264)
- BREAKING: Minimum Node.js version 16 (#254)
- Support Flask and Beta in the external extension provider (#252)
- Bump @metamask/safe-event-emitter from 2.0.0 to 3.0.0 (#255)
- Fix console warning about deprecated
webextension-polyfill-ts
(#249) - Prevent
accountsChanged
+eth_accounts
callback loop (#248)- If you listen to the provider
accountsChanged
event, modify the returned accounts, then calleth_accounts
, it was possible to enter an infinite loop. This was caused by the provider mistakenly thinking the accounts had changed because of the mutation performed in the event listener, triggering redundantaccountsChanged
events. This was fixed; there should be no more redundantaccountsChanged
events and no infinite loop.
- If you listen to the provider
- Update
json-rpc-middleware-stream
(#234)
- Update
json-rpc-middleware-stream
(#230)
- Update
json-rpc-middleware-stream
(#228)
- Retry sending messages to extension when
METAMASK_EXTENSION_STREAM_CONNECT
is received (#223) - BREAKING: Update minimum Node.js version to v14 (#225)
- Add deprecation warning for encryption methods (#218)
- BREAKING: Move stream functionality from
BaseProvider
to newStreamProvider
(#209)BaseProvider
is now a transport-agnostic abstract class.StreamProvider
accepts a stream and relies on MetaMask's internal JSON-RPC API for its behavior. See theStreamProvider
class for more details.MetaMaskInpageProvider
should be completely unaffected except that its prototype chain now includes a class namedAbstractStreamProvider
.
8.1.1 - 2021-05-12
- Rename package to
@metamask/providers
(#168)
- Restore
networkChanged
event inMetaMaskInpageProvider
(#171)
8.1.0 - 2021-05-05
BaseProvider
, implementing EIP-1193 without any legacy features (#144)createExternalExtensionProvider
, from the extension-provider package (#152)
8.0.4 - 2021-02-04
- Fix warning on second
currentProvider
access (#138)
8.0.3 - 2021-01-20
- Restore 'data' provider event (#135)
8.0.2 - 2021-01-12
- Reduce
window.web3
shim console noise (#133)
8.0.1 - 2020-12-08
- Fix
8.0.0
types (#127)
8.0.0 - 2020-12-07
- Add
logger
parameter toinitializeProvider
(#116) - Add
window.web3
shim,shimWeb3
export (#113, #115)- This is to maintain
window.web3.currentProvider
once MetaMask stops injectingwindow.web3
(very soon), and to log attempts to access any properties on the shim other thancurrentProvider
. initializeWeb3
now has ashouldShimWeb3
argument, which causes the shim to be set aswindow.web3
iftrue
.
- This is to maintain
- BREAKING: Rename
initProvider
export toinitializeProvider
(#114) - BREAKING: Replace
ethereum.publicConfigStore
with new set of JSON-RPC notifications (#109)
- 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 atwindow.web3
, and keptweb3.eth.defaultAccount
in sync withethereum.selectedAddress
. - This functionality is replicated in @metamask/legacy-web3.
- This functionality caused the page to reload if there was a
- Correctly implement
connect
anddisconnect
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 acode
property with anumber
value. There are currently two codes:1013
indicates that MetaMask is attempting to reestablish the connection1011
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
, andnetworkChanged
. - This prevents sites that handle any of these events by reloading the page from entering into a reload loop.
- Includes
7.0.0 - 2020-09-08
- BREAKING: Changed casing of
Metamask
in all exports toMetaMask
- A brand is a brand ¯\_(ツ)_/¯
6.3.0 - 2020-09-04
- Types
ethereum.networkVersion
and.chainId
now default tonull
instead ofundefined
- Improved JSDoc comments and tags
6.2.0 - 2020-08-04
- 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
- The default logger is the
6.1.1 - 2020-07-28
- Updated dependencies, which produces a smaller bundle size
6.1.0 - 2020-07-21
- 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
.
- Some consumers make assumptions about the shape of the object emitted with the event that do not hold for all notifications in
- Select icon using
rel~="icon"
when retrieving site metadata (#76)- This is instead of defaulting to
rel="shortcut icon"
.
- This is instead of defaulting to
- 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.
- For example,
- Enable retrieval of site icons not hosted on the same origin
(#78)
- For example, icons hosted on
assets.foo.com
that are used onfoo.com
will now be retrieved successfully.
- For example, icons hosted on
6.0.1 - 2020-07-15
- Warning message for the
data
event- This deprecated event was added back in
6.0.0
, but the warning message was not defined.
- This deprecated event was added back in
- Restore
publicConfigStore
property as alias for_publicConfigStore
- The
_publicConfigStore
was namedpublicConfigStore
before4.0.0
. The original property turned out to be used by consumers. The store is scheduled to be removed completely, and accessingpublicConfigStore
emits a warning.
- The
6.0.0 - 2020-07-04
- 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.
- This event was removed in
- 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.
- Prior to
5.2.1 - 2020-06-29
- Un-deprecate
isConnected
method.
5.2.0 - 2020-06-24
- 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
- Update
request
params
type tounknown[] | object
- This is not breaking in practice, since no RPC methods with other
params
values exist.
- This is not breaking in practice, since no RPC methods with other
5.0.2 - 2020-05-22
- Fix
ethereum.send
return value for certain argument combination- Reverted to pre-
4.0.0
state
- Reverted to pre-
- 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
- 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
- The most recent EIP 1193 API (#30)
- The method
request
- The events
disconnect
andmessage
- The method
- A global initialization event,
ethereum#initialized
, for asynchronous injection (#31) - Helper methods for initializing the provider (#31)
- BREAKING: Use named instead of default exports (#31)
- BREAKING:
MetaMaskInpage
constructor now takes aconnectionStream
and an options object (#31) - BREAKING:
_metamask.sendBatch
->_metamask.requestBatch
(#30) - BREAKING: Revert
send
to match provider in v7.7.8 ofmetamask-extension
(#29) - The
connect
event now emits with aProviderConnectInfo
object per EIP 1193 (#30) - Deprecated the
send
method (#30) - Deprecated the events
close
,networkChanged
, andnotification
, and added deprecation warnings for them (#30) - Un-deprecated
sendAsync
(#29)