@iandjx/wallet
Version:
Implmentation of web3react-v8 for RT widgets
559 lines (548 loc) • 19 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
CHAINS: () => CHAINS,
ConnectionList: () => ConnectionList,
ConnectionType: () => ConnectionType,
NetworkName: () => NetworkName,
URLS: () => URLS,
WalletContext: () => WalletContext,
WalletProvider: () => WalletProvider,
coinbaseWalletConnection: () => coinbaseWalletConnection,
getAddChainParameters: () => getAddChainParameters,
getAddChainParametersfromNetworkName: () => getAddChainParametersfromNetworkName,
getConnection: () => getConnection,
getConnectionName: () => getConnectionName,
injectedConnection: () => injectedConnection,
networkConnection: () => networkConnection,
useWallets: () => useWallets,
walletConnectConnection: () => walletConnectConnection
});
module.exports = __toCommonJS(src_exports);
__reExport(src_exports, require("@web3-react/core"), module.exports);
// src/hooks/useWallets.ts
var import_react3 = require("react");
// src/context/WalletProvider.tsx
var import_core2 = require("@web3-react/core");
var import_react2 = __toESM(require("react"), 1);
var import_ethers = require("ethers");
var import_bridge = require("@romeblockchain/bridge");
// src/bannedAccounts.json
var bannedAccounts_default = [
"0x8589427373d6d84e98730d7795d8f6f8731fda16",
"0x722122df12d4e14e13ac3b6895a86e84145b6967",
"0xdd4c48c0b24039969fc16d1cdf626eab821d3384",
"0xd90e2f925da726b50c4ed8d0fb90ad053324f31b",
"0xd96f2b1c14db8458374d9aca76e26c3d18364307",
"0x4736dcf1b7a3d580672cce6e7c65cd5cc9cfba9d",
"0xd4b88df4d29f5cedd6857912842cff3b20c8cfa3",
"0x910cbd523d972eb0a6f4cae4618ad62622b39dbf",
"0xa160cdab225685da1d56aa342ad8841c3b53f291",
"0xfd8610d20aa15b7b2e3be39b396a1bc3516c7144",
"0xf60dd140cff0706bae9cd734ac3ae76ad9ebc32a",
"0x22aaa7720ddd5388a3c0a3333430953c68f1849b",
"0xba214c1c1928a32bffe790263e38b4af9bfcd659",
"0xb1c8094b234dce6e03f10a5b673c1d8c69739a00",
"0x527653ea119f3e6a1f5bd18fbf4714081d7b31ce",
"0x58e8dcc13be9780fc42e8723d8ead4cf46943df2",
"0xd691f27f38b395864ea86cfc7253969b409c362d",
"0xaeaac358560e11f52454d997aaff2c5731b6f8a6",
"0x1356c899d8c9467c7f71c195612f8a395abf2f0a",
"0xa60c772958a3ed56c1f15dd055ba37ac8e523a0d",
"0x169ad27a470d064dede56a2d3ff727986b15d52b",
"0x0836222f2b2b24a3f36f98668ed8f0b38d1a872f",
"0xf67721a2d8f736e75a49fdd7fad2e31d8676542a",
"0x9ad122c22b14202b4490edaf288fdb3c7cb3ff5e",
"0x905b63fff465b9ffbf41dea908ceb12478ec7601",
"0x07687e702b410fa43f4cb4af7fa097918ffd2730",
"0x94a1b5cdb22c43faab4abeb5c74999895464ddaf",
"0xb541fc07bc7619fd4062a54d96268525cbc6ffef",
"0x12d66f87a04a9e220743712ce6d9bb1b5616b8fc",
"0x47ce0c6ed5b0ce3d3a51fdb1c52dc66a7c3c2936",
"0x23773e65ed146a459791799d01336db287f25334",
"0xd21be7248e0197ee08e0c20d4a96debdac3d20af",
"0x610b717796ad172b316836ac95a2ffad065ceab4",
"0x178169b423a011fff22b9e3f3abea13414ddd0f1",
"0xbb93e510bbcd0b7beb5a853875f9ec60275cf498",
"0x2717c5e28cf931547b621a5dddb772ab6a35b701",
"0x03893a7c7463ae47d46bc7f091665f1893656003",
"0xca0840578f57fe71599d29375e16783424023357",
"0x58e8dcc13be9780fc42e8723d8ead4cf46943df2",
"0x8589427373d6d84e98730d7795d8f6f8731fda16",
"0x722122df12d4e14e13ac3b6895a86e84145b6967",
"0xdd4c48c0b24039969fc16d1cdf626eab821d3384",
"0xd90e2f925da726b50c4ed8d0fb90ad053324f31b",
"0xd96f2b1c14db8458374d9aca76e26c3d18364307",
"0x4736dcf1b7a3d580672cce6e7c65cd5cc9cfba9d"
];
// src/connection/connectors.ts
var import_coinbase_wallet = require("@web3-react/coinbase-wallet");
var import_core = require("@web3-react/core");
var import_metamask = require("@web3-react/metamask");
var import_network = require("@web3-react/network");
var import_walletconnect = require("@web3-react/walletconnect");
// src/chains.ts
var INFURA_KEY = process.env.REACT_APP_INFURA_KEY ? process.env.REACT_APP_INFURA_KEY : process.env.INFURA_KEY;
var ALCHEMY_KEY = process.env.REACT_APP_ALCHEMY_KEY ? process.env.REACT_APP_ALCHEMY_KEY : process.env.ALCHEMY_KEY;
var ETH = {
name: "Ether",
symbol: "ETH",
decimals: 18
};
var MATIC = {
name: "Matic",
symbol: "MATIC",
decimals: 18
};
var AVAX = {
name: "Avax",
symbol: "AVAX",
decimals: 18
};
var BNB = {
name: "Binance Coin",
symbol: "BNB",
decimals: 18
};
var GLMR = {
name: "Glimmer",
symbol: "GLMR",
decimals: 18
};
var MOVR = {
name: "Moonriver",
symbol: "MOVR",
decimals: 18
};
var METIS = {
name: "Metis",
symbol: "METIS",
decimals: 18
};
var JEWEL = {
name: "Jewel",
symbol: "JEWEL",
decimals: 18
};
var KLAY = {
name: "Klay",
symbol: "KLAY",
decimals: 18
};
var NetworkName = /* @__PURE__ */ ((NetworkName2) => {
NetworkName2["ETHEREUM"] = "ethereum";
NetworkName2["AVALANCHE"] = "avalanche";
NetworkName2["BINANCE"] = "bsc";
NetworkName2["MOONBEAM"] = "moonbeam";
NetworkName2["MOONRIVER"] = "moonriver";
NetworkName2["METIS"] = "metis";
NetworkName2["OPTIMISM"] = "optimism";
NetworkName2["POLYGON"] = "polygon";
NetworkName2["DFK"] = "dfk";
NetworkName2["KLAYTN"] = "klaytn";
return NetworkName2;
})(NetworkName || {});
function getAddChainParameters(chainId) {
const chainInformation = CHAINS[chainId];
return {
chainId,
chainName: chainInformation.name,
nativeCurrency: chainInformation.nativeCurrency,
rpcUrls: chainInformation.urls,
blockExplorerUrls: chainInformation.blockExplorerUrls
};
}
var NetworkChainMap = {
ethereum: 1,
avalanche: 43114,
bsc: 56,
moonbeam: 1284,
moonriver: 1285,
metis: 1088,
optimism: 10,
polygon: 137,
dfk: 53935,
klaytn: 8217
};
var CHAINS = {
1: {
urls: [
INFURA_KEY ? `https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161` : void 0,
ALCHEMY_KEY ? `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}` : void 0,
"https://cloudflare-eth.com"
].filter((url) => url !== void 0),
name: "Mainnet",
nativeCurrency: ETH,
blockExplorerUrls: ["https://etherscan.io/"]
},
5: {
urls: [INFURA_KEY ? `https://goerli.infura.io/v3/${INFURA_KEY}` : void 0].filter((url) => url !== void 0),
name: "G\xF6rli",
nativeCurrency: ETH,
blockExplorerUrls: ["https://goerli.etherscan.io/"]
},
10: {
urls: [
INFURA_KEY ? `https://optimism-mainnet.infura.io/v3/${INFURA_KEY}` : void 0,
"https://mainnet.optimism.io"
].filter((url) => url !== void 0),
name: "Optimism",
nativeCurrency: ETH,
blockExplorerUrls: ["https://optimistic.etherscan.io"]
},
42161: {
urls: [
INFURA_KEY ? `https://arbitrum-mainnet.infura.io/v3/${INFURA_KEY}` : void 0,
"https://arb1.arbitrum.io/rpc"
].filter((url) => url !== void 0),
name: "Arbitrum One",
nativeCurrency: ETH,
blockExplorerUrls: ["https://arbiscan.io"]
},
137: {
urls: [
INFURA_KEY ? `https://polygon-mainnet.infura.io/v3/${INFURA_KEY}` : void 0,
"https://polygon-rpc.com"
].filter((url) => url !== void 0),
name: "Polygon Mainnet",
nativeCurrency: MATIC,
blockExplorerUrls: ["https://polygonscan.com"]
},
80001: {
urls: [INFURA_KEY ? `https://polygon-mumbai.infura.io/v3/${INFURA_KEY}` : void 0].filter(
(url) => url !== void 0
),
name: "Polygon Mumbai",
nativeCurrency: MATIC,
blockExplorerUrls: ["https://mumbai.polygonscan.com"]
},
43114: {
urls: ["https://api.avax.network/ext/bc/C/rpc"].filter((url) => url !== void 0),
name: "Avalanche",
nativeCurrency: AVAX,
blockExplorerUrls: ["https://snowtrace.io"]
},
56: {
urls: ["https://bsc-dataseed.binance.org"].filter((url) => url !== void 0),
name: "Binance",
nativeCurrency: BNB,
blockExplorerUrls: ["https://bscscan.com"]
},
1284: {
urls: ["https://rpc.api.moonbeam.network"].filter((url) => url !== void 0),
name: "Glimmer",
nativeCurrency: GLMR,
blockExplorerUrls: ["https://moonbeam.moonscan.io"]
},
1285: {
urls: ["https://rpc.moonriver.moonbeam.network"].filter((url) => url !== void 0),
name: "Moonriver",
nativeCurrency: MOVR,
blockExplorerUrls: ["https://moonriver.moonscan.io"]
},
1088: {
urls: ["https://andromeda.metis.io/?owner=1088"].filter((url) => url !== void 0),
name: "Metis",
nativeCurrency: METIS,
blockExplorerUrls: ["https://andromeda-explorer.metis.io"]
},
53935: {
urls: ["https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"].filter((url) => url !== void 0),
name: "DFK",
nativeCurrency: JEWEL,
blockExplorerUrls: ["https://subnets.avax.network/defi-kingdoms"]
},
8217: {
urls: ["https://public-node-api.klaytnapi.com/v1/cypress"].filter((url) => url !== void 0),
name: "Klaytn",
nativeCurrency: KLAY,
blockExplorerUrls: ["https://scope.klaytn.com"]
}
};
var URLS = Object.keys(CHAINS).reduce(
(accumulator, chainId) => {
const validURLs = CHAINS[Number(chainId)].urls;
if (validURLs.length) {
accumulator[Number(chainId)] = validURLs;
}
return accumulator;
},
{}
);
var getAddChainParametersfromNetworkName = (network) => {
const chainId = NetworkChainMap[network];
return getAddChainParameters(chainId);
};
// src/connection/connectors.ts
var ConnectionType = /* @__PURE__ */ ((ConnectionType2) => {
ConnectionType2["INJECTED"] = "INJECTED";
ConnectionType2["COINBASE_WALLET"] = "COINBASE_WALLET";
ConnectionType2["WALLET_CONNECT"] = "WALLET_CONNECT";
ConnectionType2["NETWORK"] = "NETWORK";
ConnectionType2["GNOSIS_SAFE"] = "GNOSIS_SAFE";
return ConnectionType2;
})(ConnectionType || {});
function onError(error) {
console.debug(`web3-react error: ${error}`);
}
var [web3Network, web3NetworkHooks] = (0, import_core.initializeConnector)(
(actions) => new import_network.Network({
actions,
urlMap: URLS,
defaultChainId: 1
})
);
var networkConnection = {
connector: web3Network,
hooks: web3NetworkHooks,
type: "NETWORK" /* NETWORK */
};
var [web3Injected, web3InjectedHooks] = (0, import_core.initializeConnector)((actions) => new import_metamask.MetaMask({ actions, onError }));
var injectedConnection = {
connector: web3Injected,
hooks: web3InjectedHooks,
type: "INJECTED" /* INJECTED */
};
var [web3WalletConnect, web3WalletConnectHooks] = (0, import_core.initializeConnector)((actions) => {
return new import_walletconnect.WalletConnect({
actions,
options: {
rpc: URLS,
qrcode: true
},
onError
});
});
var walletConnectConnection = {
connector: web3WalletConnect,
hooks: web3WalletConnectHooks,
type: "WALLET_CONNECT" /* WALLET_CONNECT */
};
var [web3CoinbaseWallet, web3CoinbaseWalletHooks] = (0, import_core.initializeConnector)(
(actions) => new import_coinbase_wallet.CoinbaseWallet({
actions,
options: {
url: URLS[1][0],
appName: "RBL",
appLogoUrl: "https://app.benqi.fi/favicon.svg",
reloadOnDisconnect: false
},
onError
})
);
var coinbaseWalletConnection = {
connector: web3CoinbaseWallet,
hooks: web3CoinbaseWalletHooks,
type: "COINBASE_WALLET" /* COINBASE_WALLET */
};
var ConnectionList = [injectedConnection, coinbaseWalletConnection, walletConnectConnection];
// src/connection/utils.ts
var import_types = require("@web3-react/types");
var CONNECTIONS = [injectedConnection, coinbaseWalletConnection, walletConnectConnection, networkConnection];
function getConnection(connector) {
if (connector instanceof import_types.Connector) {
const connection = CONNECTIONS.find((connection2) => connection2.connector === connector);
if (!connection) {
throw Error("unsupported connector");
}
return connection;
} else {
switch (connector) {
case "INJECTED" /* INJECTED */:
return injectedConnection;
case "COINBASE_WALLET" /* COINBASE_WALLET */:
return coinbaseWalletConnection;
case "WALLET_CONNECT" /* WALLET_CONNECT */:
return walletConnectConnection;
case "NETWORK" /* NETWORK */:
return networkConnection;
default:
throw Error("invalid connector");
}
}
}
function getConnectionName(connectionType, isMetaMask, connectionName) {
switch (connectionType) {
case "INJECTED" /* INJECTED */:
return isMetaMask ? "MetaMask" : connectionName ? connectionName : "Browser Wallet";
case "COINBASE_WALLET" /* COINBASE_WALLET */:
return "Coinbase Wallet";
case "WALLET_CONNECT" /* WALLET_CONNECT */:
return "WalletConnect";
case "NETWORK" /* NETWORK */:
return "Network";
case "GNOSIS_SAFE" /* GNOSIS_SAFE */:
return "Gnosis Safe";
}
}
// src/hooks/useOrderedConnections.ts
var import_react = require("react");
var SELECTABLE_WALLETS = ["INJECTED" /* INJECTED */, "COINBASE_WALLET" /* COINBASE_WALLET */, "WALLET_CONNECT" /* WALLET_CONNECT */];
function useOrderedConnections(selectedWallet) {
return (0, import_react.useMemo)(() => {
const orderedConnectionTypes = [];
if (selectedWallet) {
orderedConnectionTypes.push(selectedWallet);
}
orderedConnectionTypes.push(...SELECTABLE_WALLETS.filter((wallet) => wallet !== selectedWallet));
orderedConnectionTypes.push("NETWORK" /* NETWORK */);
return orderedConnectionTypes.map(getConnection);
}, [selectedWallet]);
}
// src/context/WalletProvider.tsx
var WalletContext = import_react2.default.createContext({
setSelectedWallet: () => {
},
selectedWallet: void 0,
handleConnect: async () => {
},
loading: false
});
var OfacBan = ({ children }) => {
const { account } = (0, import_core2.useWeb3React)();
const ofacBanned = account && bannedAccounts_default.includes(account.toLowerCase());
if (ofacBanned) {
return /* @__PURE__ */ import_react2.default.createElement(
"div",
{
style: {
display: "flex",
justifyContent: "center",
alignItems: "center",
width: "100%",
height: "100%"
}
},
/* @__PURE__ */ import_react2.default.createElement(
"div",
{
style: {
padding: "1.25rem",
backgroundColor: "#991b1b",
borderRadius: "0.375rem"
}
},
/* @__PURE__ */ import_react2.default.createElement(
"p",
{
style: {
marginBottom: "0.75rem",
fontSize: "large"
}
},
"Blocked Address"
),
/* @__PURE__ */ import_react2.default.createElement("p", null, "This address is blocked because it is associated with banned activities.")
)
);
}
return children;
};
var WalletProvider = ({ children, connectToNetwork }) => {
const [selectedWallet, setSelectedWallet] = (0, import_react2.useState)();
const [loading, setLoading] = (0, import_react2.useState)(false);
const connections = useOrderedConnections(selectedWallet);
const handleConnect = async (connection, chainParams) => {
const chainIdInput = chainParams && chainParams.chainId;
const chainIdInputHex = chainIdInput && import_ethers.ethers.utils.hexValue(chainIdInput);
const { connector } = connection;
setLoading(true);
try {
await connector.activate(chainIdInput);
console.log(connector.provider, "provider");
await connector.provider?.request({
method: "wallet_addEthereumChain",
params: [
{
...chainParams,
chainId: chainIdInputHex
}
]
});
await connector.provider?.request({
method: "wallet_switchEthereumChain",
params: [
{
chainId: chainIdInputHex
}
]
});
const accounts = connector.provider && await connector.provider.request({
method: "eth_requestAccounts"
});
import_bridge.widgetBridge && accounts && import_bridge.widgetBridge.sendWalletConnectEvent(import_bridge.RomeEventType.WIDGET_WALLET_CONNECT_EVENT, {
address: accounts[0],
wallet: ConnectionType
});
} catch (error) {
throw new Error("Unable to connect to wallet. error:", error);
}
setLoading(false);
};
(0, import_react2.useEffect)(() => {
if (!selectedWallet && import_bridge.widgetBridge) {
import_bridge.widgetBridge.sendWalletDisconnectEvent(import_bridge.RomeEventType.WIDGET_WALLET_DISCONNECT_EVENT);
}
}, [selectedWallet]);
(0, import_react2.useEffect)(() => {
if (connectToNetwork) {
networkConnection.connector.activate();
}
}, [connectToNetwork]);
const key = (0, import_react2.useMemo)(() => connections.map(({ type }) => getConnectionName(type)).join("-"), [connections]);
const connectors = connections.map(({ hooks, connector }) => [connector, hooks]);
return /* @__PURE__ */ import_react2.default.createElement(import_core2.Web3ReactProvider, { connectors, key }, /* @__PURE__ */ import_react2.default.createElement(WalletContext.Provider, { value: { selectedWallet, setSelectedWallet, handleConnect, loading } }, /* @__PURE__ */ import_react2.default.createElement(OfacBan, null, children)));
};
// src/hooks/useWallets.ts
function useWallets() {
const context = (0, import_react3.useContext)(WalletContext);
if (context === void 0) {
throw new Error("useWallet must be used within a useWalletsProvider");
}
return context;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
CHAINS,
ConnectionList,
ConnectionType,
NetworkName,
URLS,
WalletContext,
WalletProvider,
coinbaseWalletConnection,
getAddChainParameters,
getAddChainParametersfromNetworkName,
getConnection,
getConnectionName,
injectedConnection,
networkConnection,
useWallets,
walletConnectConnection
});
//# sourceMappingURL=index.cjs.map