"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.InjectedEvents = void 0;
var _AbstractWeb3Connector = _interopRequireDefault(require("./AbstractWeb3Connector"));
var _events = _interopRequireDefault(require("events"));
var _verifyChainId = _interopRequireDefault(require("../utils/verifyChainId"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
const InjectedEvents = Object.freeze({
ACCOUNTS_CHANGED: 'accountsChanged',
CHAIN_CHANGED: 'chainChanged',
CONNECT: 'connect',
DISCONNECT: 'disconnect'
});
exports.InjectedEvents = InjectedEvents;
class NoEthereumProviderError extends Error {
constructor() {
super();
this.message = 'Non ethereum enabled browser';
}
}
/**
* Connector to connect an injected provider (like Metamask) to Moralis
* The provider should be injected in window.ethereum
*/
class InjectedWeb3Connector extends _AbstractWeb3Connector.default {
constructor(...args) {
super(...args);
_defineProperty(this, "type", 'injected');
}
verifyEthereumBrowser() {
var _window;
if (!((_window = window) !== null && _window !== void 0 && _window.ethereum)) {
throw new NoEthereumProviderError();
}
}
async activate() {
this.verifyEthereumBrowser();
const [accounts, chainId] = await Promise.all([window.ethereum.request({
method: 'eth_requestAccounts'
}), window.ethereum.request({
method: 'eth_chainId'
})]);
const account = accounts[0] ? accounts[0].toLowerCase() : null;
const provider = window.ethereum;
this.chainId = chainId;
this.account = account;
this.provider = provider;
this.subscribeToEvents(provider);
return {
provider,
chainId,
account
};
}
async switchNetwork(chainId) {
this.verifyEthereumBrowser();
chainId = (0, _verifyChainId.default)(chainId);
const currentNetwork = this.chainId;
if (currentNetwork === chainId) return;
await window.ethereum.request({
method: 'wallet_switchEthereumChain',
params: [{
chainId
}]
});
}
async addNetwork(chainId, chainName, currencyName, currencySymbol, rpcUrl, blockExplorerUrl) {
this.verifyEthereumBrowser();
const newchainId = (0, _verifyChainId.default)(chainId);
await window.ethereum.request({
method: 'wallet_addEthereumChain',
params: [{
chainId: newchainId,
chainName: chainName,
nativeCurrency: {
name: currencyName,
symbol: currencySymbol,
decimals: 18
},
rpcUrls: [rpcUrl],
blockExplorerUrls: blockExplorerUrl ? [blockExplorerUrl] : null
}]
});
}
}
var _default = InjectedWeb3Connector;
exports.default = _default;