= (props: ConnectWalletProps) => {
- const {
- onConnect,
- onBeforeConnect,
- shouldInvertWalletIcon,
- setRequirements,
- metrics,
- ...rest
- } = props;
- const onConnectMetamask =
- metrics?.events?.connect?.handlers.onConnectMetamask;
- const onClickMetamask = metrics?.events?.click?.handlers.onClickMetamask;
- const { connect } = useConnectorMetamask({
- onConnect: () => {
- onConnect?.();
- onConnectMetamask?.();
- },
- });
- const WalletIcon = shouldInvertWalletIcon
- ? MetaMaskCircleInversion
- : MetaMaskCircle;
-
- const handleConnect = useCallback(async () => {
- onBeforeConnect?.();
- onClickMetamask?.();
-
- const { hasConflicts, conflictingApps, conflictingAppsArray } =
- checkConflicts([
- CONFLICTS.Xdefi,
- CONFLICTS.Exodus,
- CONFLICTS.Coin98,
- CONFLICTS.Tally,
- CONFLICTS.Trust,
- ]);
-
- if (hasConflicts) {
- setRequirements(true, {
- icon: ,
- title: "MetaMask couldn't connect",
- text:
- conflictingAppsArray.length > 1 ? (
-
- Your browser has these extensions turned-on:
- {conflictingApps}
- Please, turn them off and reload the page to enable MetaMask.
-
- ) : (
- `Your browser has a turned-on “${conflictingApps}” extension.` +
- ' Please, turn off this extension and reload the page to enable MetaMask.'
- ),
- });
- return;
- }
-
- await connect();
- }, [connect, onBeforeConnect, onClickMetamask, setRequirements, WalletIcon]);
-
- return (
-
- MetaMask
-
- );
-};
-
-export default ConnectMetamask;
diff --git a/packages/connect-wallet-modal/src/connectButtons/index.ts b/packages/connect-wallet-modal/src/connectButtons/index.ts
index aa981c0f..6bdd6c95 100644
--- a/packages/connect-wallet-modal/src/connectButtons/index.ts
+++ b/packages/connect-wallet-modal/src/connectButtons/index.ts
@@ -1,5 +1,5 @@
export * from './ConnectLedger';
-export { default as ConnectMetamask } from './connectMetamask';
export * from './ConnectInjected';
export * from './ConnectWC';
export * from './ConnectCoinbase';
+export * from './ConnectBrowser';
diff --git a/packages/connect-wallet-modal/src/constants/conflictChecks.ts b/packages/connect-wallet-modal/src/constants/conflictChecks.ts
deleted file mode 100644
index b31529b3..00000000
--- a/packages/connect-wallet-modal/src/constants/conflictChecks.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { helpers } from '@reef-knot/web3-react';
-
-export type ConflictCheck = [checkerFn: () => boolean, walletName: string];
-
-export type ConflictChecks = {
- Tally: ConflictCheck;
- Exodus: ConflictCheck;
- Coin98: ConflictCheck;
- Coinbase: ConflictCheck;
- Xdefi: ConflictCheck;
- Trust: ConflictCheck;
-};
-
-export const CONFLICTS: ConflictChecks = {
- Tally: [helpers.isTallyProvider, 'Taho'],
- Exodus: [helpers.isExodusProvider, 'Exodus'],
- Coin98: [helpers.isCoin98Provider, 'Coin98'],
- Coinbase: [helpers.isCoinbaseProvider, 'Coinbase'],
- Xdefi: [helpers.isXdefiProvider, 'XDEFI'],
- Trust: [helpers.isTrustProvider, 'Trust'],
-};
diff --git a/packages/connect-wallet-modal/src/constants/index.ts b/packages/connect-wallet-modal/src/constants/index.ts
deleted file mode 100644
index aac5bca9..00000000
--- a/packages/connect-wallet-modal/src/constants/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './wallets';
-export * from './conflictChecks';
diff --git a/packages/connect-wallet-modal/src/constants/wallets.ts b/packages/connect-wallet-modal/src/constants/wallets.ts
deleted file mode 100644
index 053eb421..00000000
--- a/packages/connect-wallet-modal/src/constants/wallets.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export const WALLET_IDS = {
- METAMASK: 'Metamask',
- COINBASE: 'Coinbase',
-} as const;
-
-export type WalletId = (typeof WALLET_IDS)[keyof typeof WALLET_IDS] | string;
diff --git a/packages/connect-wallet-modal/src/helpers/checkConflicts.tsx b/packages/connect-wallet-modal/src/helpers/checkConflicts.tsx
deleted file mode 100644
index dcab8eb4..00000000
--- a/packages/connect-wallet-modal/src/helpers/checkConflicts.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { ConflictCheck } from '../constants/conflictChecks';
-
-type ConflictsCheckResult = {
- hasConflicts: boolean;
- conflictingAppsArray: string[];
- conflictingApps: string;
-};
-
-const checkConflicts = (checks: ConflictCheck[]): ConflictsCheckResult => {
- const conflictingAppsArray = checks
- .filter(([checkerFn]) => checkerFn())
- .map(([, appName]) => appName);
- const conflictingApps = conflictingAppsArray.join(', ');
- const hasConflicts = conflictingAppsArray.length > 0;
-
- return { hasConflicts, conflictingApps, conflictingAppsArray };
-};
-
-export default checkConflicts;
diff --git a/packages/connect-wallet-modal/src/helpers/user-agents.ts b/packages/connect-wallet-modal/src/helpers/user-agents.ts
index a1e290bd..c6fe553a 100644
--- a/packages/connect-wallet-modal/src/helpers/user-agents.ts
+++ b/packages/connect-wallet-modal/src/helpers/user-agents.ts
@@ -5,13 +5,3 @@ const parser = new UAParser();
export const os = parser.getOS();
export const isIOS = os.name === 'iOS';
export const isAndroid = os.name === 'Android';
-
-export const device = parser.getDevice();
-export const isMobile = device.type === 'mobile';
-export const isTablet = device.type === 'tablet';
-export const isMobileOrTablet = isMobile || isTablet;
-
-export const checkIfBraveBrowser = async (): Promise =>
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- (navigator.brave && (await navigator.brave.isBrave())) || false;
diff --git a/packages/connect-wallet-modal/src/index.ts b/packages/connect-wallet-modal/src/index.ts
index 15ff02d2..523d0c01 100644
--- a/packages/connect-wallet-modal/src/index.ts
+++ b/packages/connect-wallet-modal/src/index.ts
@@ -1,3 +1,2 @@
export * from './components';
export * from './connectButtons';
-export * from './constants';
diff --git a/packages/connectors/ledger-connector/src/hid/connector.ts b/packages/connectors/ledger-connector/src/hid/connector.ts
index f56d0a3e..ea79aa8e 100644
--- a/packages/connectors/ledger-connector/src/hid/connector.ts
+++ b/packages/connectors/ledger-connector/src/hid/connector.ts
@@ -72,6 +72,7 @@ export class LedgerHIDConnector extends Connector {
}
async getProvider() {
+ if (this.#provider) return this.#provider;
const { LedgerHQProvider } = await import('./provider');
const chainId = await this.getChainId();
return new LedgerHQProvider(
diff --git a/packages/connectors/ledger-connector/src/hid/provider.ts b/packages/connectors/ledger-connector/src/hid/provider.ts
index c12f76a8..f424eccc 100644
--- a/packages/connectors/ledger-connector/src/hid/provider.ts
+++ b/packages/connectors/ledger-connector/src/hid/provider.ts
@@ -1,6 +1,6 @@
import invariant from 'tiny-invariant';
import { JsonRpcBatchProvider, Network } from '@ethersproject/providers';
-import type TransportHID from '@ledgerhq/hw-transport-webhid';
+import type TransportWebHID from '@ledgerhq/hw-transport-webhid';
import { LedgerHQSigner } from './signer';
import { checkError, convertToUnsigned } from './helpers';
import { TransactionRequestExtended } from './types';
@@ -10,7 +10,7 @@ export class LedgerHQProvider extends JsonRpcBatchProvider {
public device?: HIDDevice;
- public transport?: typeof TransportHID;
+ public transport?: typeof TransportWebHID;
constructor(...args: any[]) {
super(...args);
@@ -29,11 +29,11 @@ export class LedgerHQProvider extends JsonRpcBatchProvider {
return Promise.resolve(this._network);
}
- async getTransport(): Promise {
+ async getTransport(): Promise {
invariant(this.transport, 'Transport is not defined');
try {
- const transport = (await this.transport?.create()) as TransportHID;
+ const transport = (await this.transport?.create()) as TransportWebHID;
this.device = transport.device;
return transport;
@@ -44,10 +44,10 @@ export class LedgerHQProvider extends JsonRpcBatchProvider {
async enable(): Promise {
try {
- const { default: TransportHID } = await import(
+ const { default: TransportWebHID } = await import(
'@ledgerhq/hw-transport-webhid'
);
- this.transport = TransportHID;
+ this.transport = TransportWebHID;
const { hid } = window.navigator;
diff --git a/packages/connectors/ledger-connector/src/hid/signer.ts b/packages/connectors/ledger-connector/src/hid/signer.ts
index 269326a0..dac50b71 100644
--- a/packages/connectors/ledger-connector/src/hid/signer.ts
+++ b/packages/connectors/ledger-connector/src/hid/signer.ts
@@ -1,4 +1,4 @@
-import Eth, { ledgerService } from '@ledgerhq/hw-app-eth';
+import type Eth from '@ledgerhq/hw-app-eth';
import {
LoadConfig,
ResolutionConfig,
@@ -18,7 +18,7 @@ import { toUtf8Bytes } from '@ethersproject/strings';
import { Bytes, hexlify, joinSignature } from '@ethersproject/bytes';
import { _TypedDataEncoder } from '@ethersproject/hash';
-import { LedgerHQProvider } from './provider';
+import type { LedgerHQProvider } from './provider';
import { checkError, convertToUnsigned, toNumber } from './helpers';
import { UnsignedTransactionStrict } from './types';
@@ -49,6 +49,7 @@ export class LedgerHQSigner extends Signer implements TypedDataSigner {
const transport = await this.provider.getTransport();
try {
+ const { default: Eth } = await import('@ledgerhq/hw-app-eth');
const eth = new Eth(transport);
await eth.getAppConfiguration();
@@ -112,6 +113,7 @@ export class LedgerHQSigner extends Signer implements TypedDataSigner {
const populatedTx = await this.populateUnsigned(unsignedTx);
const serializedTx = serialize(populatedTx).substring(2);
+ const { ledgerService } = await import('@ledgerhq/hw-app-eth');
const resolution = await ledgerService.resolveTransaction(
serializedTx,
loadConfig,
diff --git a/packages/core-react/CHANGELOG.md b/packages/core-react/CHANGELOG.md
index c022ac32..96aeadda 100644
--- a/packages/core-react/CHANGELOG.md
+++ b/packages/core-react/CHANGELOG.md
@@ -1,5 +1,11 @@
# @reef-knot/core-react
+## 1.8.1
+
+### Patch Changes
+
+- 253796d: Fix typings
+
## 1.8.0
### Minor Changes
diff --git a/packages/core-react/package.json b/packages/core-react/package.json
index 54e910ce..11a0f575 100644
--- a/packages/core-react/package.json
+++ b/packages/core-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@reef-knot/core-react",
- "version": "1.8.0",
+ "version": "1.8.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
@@ -37,9 +37,9 @@
"lint": "eslint --ext ts,tsx,js,mjs ."
},
"devDependencies": {
- "@reef-knot/wallets-list": "^1.10.0",
+ "@reef-knot/wallets-list": "^1.11.0",
"@reef-knot/types": "^1.4.0",
- "@reef-knot/ui-react": "^1.0.7",
+ "@reef-knot/ui-react": "^1.0.8",
"eslint-config-custom": "*",
"react": "18.2.0",
"wagmi": "^0.12.19"
diff --git a/packages/core-react/src/context/acceptTermsModal.tsx b/packages/core-react/src/context/acceptTermsModal.tsx
index fd66662a..3a79db55 100644
--- a/packages/core-react/src/context/acceptTermsModal.tsx
+++ b/packages/core-react/src/context/acceptTermsModal.tsx
@@ -1,4 +1,4 @@
-import React, { createContext, FC, useMemo, useState } from 'react';
+import React, { createContext, useMemo, useState } from 'react';
export type AcceptTermsModalContextValue = {
acceptTermsModal: {
@@ -21,7 +21,11 @@ export const AcceptTermsModalContext = createContext({
},
} as AcceptTermsModalContextValue);
-export const AcceptTermsModalContextProvider: FC = ({ children }) => {
+export const AcceptTermsModalContextProvider = ({
+ children,
+}: {
+ children: React.ReactNode;
+}) => {
const [isAcceptTermsModalVisible, setIsAcceptTermsModalVisible] = useState(
isVisibleDefaultValue,
);
diff --git a/packages/core-react/src/context/reefKnot.tsx b/packages/core-react/src/context/reefKnot.tsx
index 7a19f675..21cf7aae 100644
--- a/packages/core-react/src/context/reefKnot.tsx
+++ b/packages/core-react/src/context/reefKnot.tsx
@@ -1,4 +1,4 @@
-import React, { createContext, FC, useMemo } from 'react';
+import React, { createContext, FC, ReactNode, useMemo } from 'react';
import { WalletAdapterData } from '@reef-knot/types';
import { Chain } from 'wagmi/chains';
import { WCWarnBannerContextProvider } from '@reef-knot/ui-react';
@@ -9,7 +9,8 @@ export interface ReefKnotContextProps {
rpc: Record;
walletconnectProjectId?: string;
chains: Chain[];
- defaultChain?: Chain;
+ defaultChain: Chain;
+ children?: ReactNode;
}
export type ReefKnotContextValue = {
diff --git a/packages/reef-knot/CHANGELOG.md b/packages/reef-knot/CHANGELOG.md
index 7ff0509a..53b1968b 100644
--- a/packages/reef-knot/CHANGELOG.md
+++ b/packages/reef-knot/CHANGELOG.md
@@ -1,5 +1,16 @@
# reef-knot
+## 1.14.1
+
+### Patch Changes
+
+- Updated dependencies [253796d]
+ - @reef-knot/wallets-list@1.11.0
+ - @reef-knot/web3-react@1.13.0
+ - @reef-knot/core-react@1.8.1
+ - @reef-knot/ui-react@1.0.8
+ - @reef-knot/connect-wallet-modal@1.17.0
+
## 1.14.0
### Patch Changes
diff --git a/packages/reef-knot/package.json b/packages/reef-knot/package.json
index 23405d7e..0c112358 100644
--- a/packages/reef-knot/package.json
+++ b/packages/reef-knot/package.json
@@ -1,6 +1,6 @@
{
"name": "reef-knot",
- "version": "1.14.0",
+ "version": "1.15.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
@@ -41,12 +41,11 @@
"lint": "eslint --ext ts,tsx,js,mjs ."
},
"dependencies": {
- "@reef-knot/connect-wallet-modal": "1.16.0",
- "@reef-knot/core-react": "1.8.0",
- "@reef-knot/web3-react": "1.12.0",
- "@reef-knot/ui-react": "1.0.7",
- "@reef-knot/wallets-icons": "1.5.0",
- "@reef-knot/wallets-list": "1.10.0",
+ "@reef-knot/connect-wallet-modal": "1.17.0",
+ "@reef-knot/core-react": "1.8.1",
+ "@reef-knot/web3-react": "1.13.0",
+ "@reef-knot/ui-react": "1.0.8",
+ "@reef-knot/wallets-list": "1.11.0",
"@reef-knot/wallets-helpers": "1.1.5",
"@reef-knot/types": "1.4.0",
"@reef-knot/ledger-connector": "2.0.0"
diff --git a/packages/reef-knot/src/index.ts b/packages/reef-knot/src/index.ts
index 461068ad..4b8915fc 100644
--- a/packages/reef-knot/src/index.ts
+++ b/packages/reef-knot/src/index.ts
@@ -1,6 +1,5 @@
export * as ConnectWalletModal from './packages/connect-wallet-modal';
export * as Web3React from './packages/web3-react';
export * as UIReact from './packages/ui-react';
-export * as WalletsIcons from './packages/wallets-icons';
export * as CoreReact from './packages/core-react';
export * as WalletsList from './packages/wallets';
diff --git a/packages/reef-knot/src/packages/wallets-icons.ts b/packages/reef-knot/src/packages/wallets-icons.ts
deleted file mode 100644
index 9f9ab129..00000000
--- a/packages/reef-knot/src/packages/wallets-icons.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from '@reef-knot/wallets-icons';
diff --git a/packages/ui-react/CHANGELOG.md b/packages/ui-react/CHANGELOG.md
index 4d4b10d2..d1ea670f 100644
--- a/packages/ui-react/CHANGELOG.md
+++ b/packages/ui-react/CHANGELOG.md
@@ -1,5 +1,11 @@
# @reef-knot/ui-react
+## 1.0.8
+
+### Patch Changes
+
+- 253796d: Fix typings
+
## 1.0.7
### Patch Changes
diff --git a/packages/ui-react/package.json b/packages/ui-react/package.json
index bfb8d2bd..ab1978f6 100644
--- a/packages/ui-react/package.json
+++ b/packages/ui-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@reef-knot/ui-react",
- "version": "1.0.7",
+ "version": "1.0.8",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
diff --git a/packages/ui-react/src/components/WCWarnBanner/WCWarnBannerContextProvider.tsx b/packages/ui-react/src/components/WCWarnBanner/WCWarnBannerContextProvider.tsx
index 8f3aa42f..27719059 100644
--- a/packages/ui-react/src/components/WCWarnBanner/WCWarnBannerContextProvider.tsx
+++ b/packages/ui-react/src/components/WCWarnBanner/WCWarnBannerContextProvider.tsx
@@ -1,10 +1,14 @@
-import React, { FC, useEffect, useMemo, useState } from 'react';
+import React, { useEffect, useMemo, useState } from 'react';
import { createPortal } from 'react-dom';
import { WCWarnBannerContext } from './WCWarnBannerContext';
import { WCWarnBanner } from './WCWarnBanner';
import { WCWarnBannerAutoRequest } from './WCWarnBannerAutoRequest';
-export const WCWarnBannerContextProvider: FC = ({ children }) => {
+export const WCWarnBannerContextProvider = ({
+ children,
+}: {
+ children: React.ReactNode;
+}) => {
const [counter, setCounter] = useState(0);
const [portalTarget, setPortalTarget] = useState();
const providerValue = useMemo(
diff --git a/packages/wallets-icons/CHANGELOG.md b/packages/wallets-icons/CHANGELOG.md
index 07e5cc8c..cf5f443f 100644
--- a/packages/wallets-icons/CHANGELOG.md
+++ b/packages/wallets-icons/CHANGELOG.md
@@ -1,5 +1,11 @@
# @reef-knot/wallets-icons
+## 1.6.0
+
+### Minor Changes
+
+- DEPRECATE
+
## 1.5.0
### Minor Changes
diff --git a/packages/wallets-icons/README.md b/packages/wallets-icons/README.md
index 9ab97fa9..3dca2cc8 100644
--- a/packages/wallets-icons/README.md
+++ b/packages/wallets-icons/README.md
@@ -1,5 +1,5 @@
-# Wallets Icons
+# Wallets Icons [Deprecated]
-Legacy package for storing icons for wallets.
-It is planned to store such icons in wallet adapter packages.
-Therefore, try not to use this package if you are adding a new wallet.
+## Deprecation notice
+The icons from this package is moved to wallet adapters.
+Do not use this package.
diff --git a/packages/wallets-icons/package.json b/packages/wallets-icons/package.json
index f6b88e15..94a70ab6 100644
--- a/packages/wallets-icons/package.json
+++ b/packages/wallets-icons/package.json
@@ -1,6 +1,6 @@
{
"name": "@reef-knot/wallets-icons",
- "version": "1.5.0",
+ "version": "1.6.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
diff --git a/packages/wallets-list/CHANGELOG.md b/packages/wallets-list/CHANGELOG.md
index 8aaad5e2..eaec8195 100644
--- a/packages/wallets-list/CHANGELOG.md
+++ b/packages/wallets-list/CHANGELOG.md
@@ -1,5 +1,11 @@
# @reef-knot/wallets-list
+## 1.11.0
+
+### Minor Changes
+
+- 253796d: Add MetaMask and generic browser extension wallet adapters
+
## 1.10.0
### Minor Changes
diff --git a/packages/wallets-list/package.json b/packages/wallets-list/package.json
index e4a69d19..0be9c8ca 100644
--- a/packages/wallets-list/package.json
+++ b/packages/wallets-list/package.json
@@ -1,6 +1,6 @@
{
"name": "@reef-knot/wallets-list",
- "version": "1.10.0",
+ "version": "1.11.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
@@ -37,8 +37,10 @@
"lint": "eslint --ext ts,tsx,js,mjs ."
},
"dependencies": {
- "@reef-knot/wallet-adapter-exodus": "1.2.4",
+ "@reef-knot/wallet-adapter-browserExtension": "1.0.0",
+ "@reef-knot/wallet-adapter-metamask": "1.0.0",
"@reef-knot/wallet-adapter-okx": "1.3.1",
+ "@reef-knot/wallet-adapter-exodus": "1.2.4",
"@reef-knot/wallet-adapter-walletconnect": "1.2.4",
"@reef-knot/wallet-adapter-ambire": "1.2.4",
"@reef-knot/wallet-adapter-bitkeep": "1.1.1",
diff --git a/packages/wallets-list/src/ethereum.ts b/packages/wallets-list/src/ethereum.ts
index ef197782..9eed1b36 100644
--- a/packages/wallets-list/src/ethereum.ts
+++ b/packages/wallets-list/src/ethereum.ts
@@ -1,6 +1,8 @@
import { WalletsListType } from '@reef-knot/types';
-import { Exodus } from '@reef-knot/wallet-adapter-exodus';
+import { BrowserExtension } from '@reef-knot/wallet-adapter-browserExtension';
+import { MetaMask } from '@reef-knot/wallet-adapter-metamask';
import { Okx } from '@reef-knot/wallet-adapter-okx';
+import { Exodus } from '@reef-knot/wallet-adapter-exodus';
import { WalletConnect } from '@reef-knot/wallet-adapter-walletconnect';
import { Ambire } from '@reef-knot/wallet-adapter-ambire';
import { BitKeep } from '@reef-knot/wallet-adapter-bitkeep';
@@ -13,6 +15,8 @@ import { Coinbase } from '@reef-knot/wallet-adapter-coinbase';
import { Ledger } from '@reef-knot/wallet-adapter-ledger-hid';
export const WalletsListEthereum: WalletsListType = {
+ browserExtension: BrowserExtension,
+ metamask: MetaMask,
okx: Okx,
walletconnect: WalletConnect,
ledgerHID: Ledger,
diff --git a/packages/wallets/browserExtension/.eslintrc.json b/packages/wallets/browserExtension/.eslintrc.json
new file mode 100644
index 00000000..06342be5
--- /dev/null
+++ b/packages/wallets/browserExtension/.eslintrc.json
@@ -0,0 +1,9 @@
+{
+ "root": true,
+ "extends": [
+ "custom"
+ ],
+ "rules": {
+ "import/no-extraneous-dependencies": "warn"
+ }
+}
diff --git a/packages/wallets/browserExtension/package.json b/packages/wallets/browserExtension/package.json
new file mode 100644
index 00000000..c4e18133
--- /dev/null
+++ b/packages/wallets/browserExtension/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "@reef-knot/wallet-adapter-browserExtension",
+ "version": "1.0.0",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "exports": {
+ ".": "./dist/index.js"
+ },
+ "typesVersions": {
+ "*": {
+ ".": [
+ "dist/index.d.ts"
+ ]
+ }
+ },
+ "type": "module",
+ "files": [
+ "dist"
+ ],
+ "license": "MIT",
+ "homepage": "https://github.com/lidofinance/reef-knot",
+ "bugs": {
+ "url": "https://github.com/lidofinance/reef-knot/issues"
+ },
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/",
+ "access": "public"
+ },
+ "scripts": {
+ "build": "rollup -c",
+ "dev": "dev=on rollup -c -w",
+ "lint": "eslint --ext ts,tsx,js,mjs ."
+ },
+ "devDependencies": {
+ "@reef-knot/types": "^1.3.0",
+ "@svgr/rollup": "^6.5.1",
+ "eslint-config-custom": "*"
+ },
+ "peerDependencies": {
+ "wagmi": "^0.12.19",
+ "@reef-knot/types": "^1.2.1"
+ }
+}
diff --git a/packages/wallets/browserExtension/rollup.config.js b/packages/wallets/browserExtension/rollup.config.js
new file mode 100644
index 00000000..a91f4d4a
--- /dev/null
+++ b/packages/wallets/browserExtension/rollup.config.js
@@ -0,0 +1,57 @@
+import * as process from 'node:process';
+import fs from 'node:fs';
+import ts from 'typescript';
+import { defineConfig } from 'rollup';
+import del from 'rollup-plugin-delete';
+import resolve from '@rollup/plugin-node-resolve';
+import typescript from 'rollup-plugin-typescript2';
+import { babel } from '@rollup/plugin-babel';
+import svgr from '@svgr/rollup';
+
+const extensions = ['.js', '.jsx', '.ts', '.tsx', '.svg'];
+const { dependencies = {}, peerDependencies = {} } =
+ JSON.parse(fs.readFileSync('package.json', 'utf-8'));
+const commonExternal = [
+ 'react/jsx-runtime',
+ // Do not include in the bundle subpath exports like:
+ /^@reef-knot\/.*/, // e.g. @reef-knot//
+ /^reef-knot\/.*/, // e.g. reef-knot/wallets-icons/react
+];
+const external = [
+ ...commonExternal,
+ ...Object.keys({ ...dependencies, ...peerDependencies }),
+ /node_modules/
+];
+const isDevMode = process.env.dev === 'on';
+
+export default defineConfig({
+ input: './src/index',
+ output: {
+ format: 'es',
+ dir: 'dist',
+ preserveModules: true,
+ preserveModulesRoot: 'src',
+ generatedCode: 'es2015'
+ },
+ plugins: [
+ isDevMode ? null : del({ targets: 'dist/*', runOnce: true }),
+ resolve({ extensions, preferBuiltins: true }),
+ svgr({
+ typescript: true,
+ prettier: false,
+ memo: true,
+ svgo: false,
+ }),
+ typescript({
+ typescript: ts,
+ tsconfig: 'tsconfig.json',
+ check: false,
+ }),
+ babel({
+ exclude: 'node_modules/**',
+ babelHelpers: 'bundled',
+ extensions,
+ }),
+ ],
+ external,
+});
diff --git a/packages/wallets/browserExtension/src/custom.d.ts b/packages/wallets/browserExtension/src/custom.d.ts
new file mode 100644
index 00000000..006534e2
--- /dev/null
+++ b/packages/wallets/browserExtension/src/custom.d.ts
@@ -0,0 +1,4 @@
+declare module '*.svg' {
+ const content: React.FunctionComponent>;
+ export default content;
+}
diff --git a/packages/wallets/browserExtension/src/icons/browserExtension.svg b/packages/wallets/browserExtension/src/icons/browserExtension.svg
new file mode 100644
index 00000000..874c8223
--- /dev/null
+++ b/packages/wallets/browserExtension/src/icons/browserExtension.svg
@@ -0,0 +1,10 @@
+
diff --git a/packages/wallets/browserExtension/src/icons/index.ts b/packages/wallets/browserExtension/src/icons/index.ts
new file mode 100644
index 00000000..51357a8d
--- /dev/null
+++ b/packages/wallets/browserExtension/src/icons/index.ts
@@ -0,0 +1 @@
+export { default as WalletIcon } from './browserExtension.svg';
diff --git a/packages/wallets/browserExtension/src/index.ts b/packages/wallets/browserExtension/src/index.ts
new file mode 100644
index 00000000..26c977d3
--- /dev/null
+++ b/packages/wallets/browserExtension/src/index.ts
@@ -0,0 +1,20 @@
+import { WalletAdapterType } from '@reef-knot/types';
+import { InjectedConnector } from 'wagmi/connectors/injected';
+import { WalletIcon } from './icons/index.js';
+
+const id = 'browserExtension';
+const name = 'Browser';
+
+export class BrowserExtensionConnector extends InjectedConnector {
+ readonly id = id;
+ readonly name = name;
+}
+
+export const BrowserExtension: WalletAdapterType = ({ chains }) => ({
+ walletName: name,
+ walletId: id,
+ icon: WalletIcon,
+ connector: new BrowserExtensionConnector({
+ chains,
+ }),
+});
diff --git a/packages/wallets/browserExtension/tsconfig.json b/packages/wallets/browserExtension/tsconfig.json
new file mode 100644
index 00000000..23709e73
--- /dev/null
+++ b/packages/wallets/browserExtension/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "tsconfig/react-library.json",
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "**/*.test.*"],
+ "compilerOptions": {
+ "rootDir": "src",
+ }
+}
diff --git a/packages/wallets/metamask/.eslintrc.json b/packages/wallets/metamask/.eslintrc.json
new file mode 100644
index 00000000..06342be5
--- /dev/null
+++ b/packages/wallets/metamask/.eslintrc.json
@@ -0,0 +1,9 @@
+{
+ "root": true,
+ "extends": [
+ "custom"
+ ],
+ "rules": {
+ "import/no-extraneous-dependencies": "warn"
+ }
+}
diff --git a/packages/wallets/metamask/package.json b/packages/wallets/metamask/package.json
new file mode 100644
index 00000000..8e135142
--- /dev/null
+++ b/packages/wallets/metamask/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "@reef-knot/wallet-adapter-metamask",
+ "version": "1.0.0",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "exports": {
+ ".": "./dist/index.js"
+ },
+ "typesVersions": {
+ "*": {
+ ".": [
+ "dist/index.d.ts"
+ ]
+ }
+ },
+ "type": "module",
+ "files": [
+ "dist"
+ ],
+ "license": "MIT",
+ "homepage": "https://github.com/lidofinance/reef-knot",
+ "bugs": {
+ "url": "https://github.com/lidofinance/reef-knot/issues"
+ },
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/",
+ "access": "public"
+ },
+ "scripts": {
+ "build": "rollup -c",
+ "dev": "dev=on rollup -c -w",
+ "lint": "eslint --ext ts,tsx,js,mjs ."
+ },
+ "devDependencies": {
+ "@reef-knot/types": "^1.3.0",
+ "@svgr/rollup": "^6.5.1",
+ "eslint-config-custom": "*"
+ },
+ "peerDependencies": {
+ "wagmi": "^0.12.19",
+ "@reef-knot/types": "^1.2.1"
+ }
+}
diff --git a/packages/wallets/metamask/rollup.config.js b/packages/wallets/metamask/rollup.config.js
new file mode 100644
index 00000000..a91f4d4a
--- /dev/null
+++ b/packages/wallets/metamask/rollup.config.js
@@ -0,0 +1,57 @@
+import * as process from 'node:process';
+import fs from 'node:fs';
+import ts from 'typescript';
+import { defineConfig } from 'rollup';
+import del from 'rollup-plugin-delete';
+import resolve from '@rollup/plugin-node-resolve';
+import typescript from 'rollup-plugin-typescript2';
+import { babel } from '@rollup/plugin-babel';
+import svgr from '@svgr/rollup';
+
+const extensions = ['.js', '.jsx', '.ts', '.tsx', '.svg'];
+const { dependencies = {}, peerDependencies = {} } =
+ JSON.parse(fs.readFileSync('package.json', 'utf-8'));
+const commonExternal = [
+ 'react/jsx-runtime',
+ // Do not include in the bundle subpath exports like:
+ /^@reef-knot\/.*/, // e.g. @reef-knot//
+ /^reef-knot\/.*/, // e.g. reef-knot/wallets-icons/react
+];
+const external = [
+ ...commonExternal,
+ ...Object.keys({ ...dependencies, ...peerDependencies }),
+ /node_modules/
+];
+const isDevMode = process.env.dev === 'on';
+
+export default defineConfig({
+ input: './src/index',
+ output: {
+ format: 'es',
+ dir: 'dist',
+ preserveModules: true,
+ preserveModulesRoot: 'src',
+ generatedCode: 'es2015'
+ },
+ plugins: [
+ isDevMode ? null : del({ targets: 'dist/*', runOnce: true }),
+ resolve({ extensions, preferBuiltins: true }),
+ svgr({
+ typescript: true,
+ prettier: false,
+ memo: true,
+ svgo: false,
+ }),
+ typescript({
+ typescript: ts,
+ tsconfig: 'tsconfig.json',
+ check: false,
+ }),
+ babel({
+ exclude: 'node_modules/**',
+ babelHelpers: 'bundled',
+ extensions,
+ }),
+ ],
+ external,
+});
diff --git a/packages/wallets/metamask/src/custom.d.ts b/packages/wallets/metamask/src/custom.d.ts
new file mode 100644
index 00000000..006534e2
--- /dev/null
+++ b/packages/wallets/metamask/src/custom.d.ts
@@ -0,0 +1,4 @@
+declare module '*.svg' {
+ const content: React.FunctionComponent>;
+ export default content;
+}
diff --git a/packages/wallets/metamask/src/icons/index.ts b/packages/wallets/metamask/src/icons/index.ts
new file mode 100644
index 00000000..1d5a94ff
--- /dev/null
+++ b/packages/wallets/metamask/src/icons/index.ts
@@ -0,0 +1,2 @@
+export { default as WalletIcon } from './metamask.svg';
+export { default as WalletIconInverted } from './metamask-inverted.svg';
diff --git a/packages/wallets/metamask/src/icons/metamask-inverted.svg b/packages/wallets/metamask/src/icons/metamask-inverted.svg
new file mode 100644
index 00000000..b0822d37
--- /dev/null
+++ b/packages/wallets/metamask/src/icons/metamask-inverted.svg
@@ -0,0 +1,32 @@
+
diff --git a/packages/wallets/metamask/src/icons/metamask.svg b/packages/wallets/metamask/src/icons/metamask.svg
new file mode 100644
index 00000000..8cd45b8d
--- /dev/null
+++ b/packages/wallets/metamask/src/icons/metamask.svg
@@ -0,0 +1,32 @@
+
diff --git a/packages/wallets/metamask/src/index.ts b/packages/wallets/metamask/src/index.ts
new file mode 100644
index 00000000..7a090984
--- /dev/null
+++ b/packages/wallets/metamask/src/index.ts
@@ -0,0 +1,22 @@
+import { WalletAdapterType } from '@reef-knot/types';
+import { MetaMaskConnector } from 'wagmi/connectors/metaMask';
+import { WalletIcon, WalletIconInverted } from './icons/index.js';
+
+export const MetaMask: WalletAdapterType = ({ chains }) => ({
+ walletName: 'MetaMask',
+ walletId: 'metamask',
+ icon: {
+ light: WalletIcon,
+ dark: WalletIconInverted,
+ },
+ detector: () => !!globalThis.window?.ethereum?.isMetaMask,
+ downloadURLs: {
+ default: 'https://metamask.app.link/dapp/',
+ },
+ connector: new MetaMaskConnector({
+ chains,
+ options: {
+ UNSTABLE_shimOnConnectSelectAccount: true, // allows to select a different MetaMask account
+ },
+ }),
+});
diff --git a/packages/wallets/metamask/tsconfig.json b/packages/wallets/metamask/tsconfig.json
new file mode 100644
index 00000000..23709e73
--- /dev/null
+++ b/packages/wallets/metamask/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "tsconfig/react-library.json",
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "**/*.test.*"],
+ "compilerOptions": {
+ "rootDir": "src",
+ }
+}
diff --git a/packages/web3-react/CHANGELOG.md b/packages/web3-react/CHANGELOG.md
index a25ccc92..e0369787 100644
--- a/packages/web3-react/CHANGELOG.md
+++ b/packages/web3-react/CHANGELOG.md
@@ -1,5 +1,11 @@
# @reef-knot/web3-react
+## 1.13.0
+
+### Minor Changes
+
+- 253796d: Remove unused MetaMask-related code
+
## 1.12.0
### Minor Changes
diff --git a/packages/web3-react/package.json b/packages/web3-react/package.json
index f97d58f2..823d0b75 100644
--- a/packages/web3-react/package.json
+++ b/packages/web3-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@reef-knot/web3-react",
- "version": "1.12.0",
+ "version": "1.13.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
@@ -49,7 +49,7 @@
"@lido-sdk/constants": "^3.2.0",
"@lido-sdk/providers": "^1.4.13",
"@lido-sdk/react": "^2.0.2",
- "@reef-knot/core-react": "^1.8.0",
+ "@reef-knot/core-react": "^1.8.1",
"@reef-knot/ledger-connector": "^2.0.0",
"@testing-library/react": "^12.1.5",
"@testing-library/react-hooks": "^7.0.2",
diff --git a/packages/web3-react/src/context/connectors.tsx b/packages/web3-react/src/context/connectors.tsx
index 953cc7de..89f13217 100644
--- a/packages/web3-react/src/context/connectors.tsx
+++ b/packages/web3-react/src/context/connectors.tsx
@@ -8,6 +8,7 @@ import { useAutoConnect } from '../hooks/useAutoConnect';
import { CONNECTOR_NAMES } from '../constants';
export interface ConnectorsContextProps {
+ children?: React.ReactNode;
defaultChainId: CHAINS;
rpc: Record;
appName?: string;
diff --git a/packages/web3-react/src/context/web3.tsx b/packages/web3-react/src/context/web3.tsx
index 0dfda39d..4c39ce20 100644
--- a/packages/web3-react/src/context/web3.tsx
+++ b/packages/web3-react/src/context/web3.tsx
@@ -1,4 +1,4 @@
-import React, { memo, FC, useEffect, useState } from 'react';
+import React, { memo, useEffect, useState } from 'react';
import invariant from 'tiny-invariant';
import {
Web3Provider,
@@ -18,6 +18,7 @@ import { POLLING_INTERVAL } from '../constants';
import ProviderConnectors, { ConnectorsContextProps } from './connectors';
export interface ProviderWeb3Props extends ConnectorsContextProps {
+ children?: React.ReactNode;
defaultChainId: CHAINS;
supportedChainIds: CHAINS[];
swrConfig?: SWRConfiguration;
@@ -32,7 +33,7 @@ function getLibrary(provider: ExternalProvider | JsonRpcFetchFunc) {
return library;
}
-const ProviderSDK: FC = (props) => {
+const ProviderSDK = (props: ProviderWeb3Props) => {
const {
rpc,
defaultChainId,
@@ -97,6 +98,7 @@ const ProviderSDK: FC = (props) => {
);
return (
+ // @ts-expect-error Property children does not exist on type IntrinsicAttributes & SDKContextProps
= (props) => {
);
};
-const ProviderWeb3: FC = (props) => {
+const ProviderWeb3 = (props: ProviderWeb3Props) => {
const {
children,
rpc,
@@ -126,9 +128,9 @@ const ProviderWeb3: FC = (props) => {
const supportedWagmiChains = wagmiChainsArray.filter((chain) =>
supportedChainIds.includes(chain.id),
);
- const defaultWagmiChain = wagmiChainsArray.find(
- (chain) => chain.id === defaultChainId,
- );
+ const defaultWagmiChain =
+ wagmiChainsArray.find((chain) => chain.id === defaultChainId) ||
+ wagmiChainsArray[0];
return (
@@ -148,4 +150,4 @@ const ProviderWeb3: FC = (props) => {
);
};
-export default memo>(ProviderWeb3);
+export default memo(ProviderWeb3);
diff --git a/packages/web3-react/src/hooks/index.ts b/packages/web3-react/src/hooks/index.ts
index b72c4a84..9ebebebf 100644
--- a/packages/web3-react/src/hooks/index.ts
+++ b/packages/web3-react/src/hooks/index.ts
@@ -1,6 +1,5 @@
export * from './useAutoConnect';
export * from './useConnectorInfo';
-export * from './useConnectorMetamask';
export * from './useConnectors';
export * from './useConnectorStorage';
export * from './useDisconnect';
diff --git a/packages/web3-react/src/hooks/useConnectorMetamask.ts b/packages/web3-react/src/hooks/useConnectorMetamask.ts
deleted file mode 100644
index 09b71b05..00000000
--- a/packages/web3-react/src/hooks/useConnectorMetamask.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import invariant from 'tiny-invariant';
-import warning from 'tiny-warning';
-import { useCallback } from 'react';
-import { InjectedConnector } from '@web3-react/injected-connector';
-import { useConnectors } from './useConnectors';
-import { useWeb3 } from './useWeb3';
-import {
- hasInjected,
- isBraveWalletProvider,
- checkIfBraveBrowser,
- openWindow,
-} from '../helpers';
-import { useForceDisconnect } from './useDisconnect';
-import { ConnectorHookArgs } from './types';
-
-type ConnectorHookResult = {
- connect: () => Promise;
- connector: InjectedConnector;
-};
-
-const WALLET_URL = 'https://metamask.app.link/dapp/';
-
-export const useConnectorMetamask = (
- args?: ConnectorHookArgs,
-): ConnectorHookResult => {
- const { injected } = useConnectors();
- const { activate } = useWeb3();
- const { disconnect } = useForceDisconnect();
- const onConnect = args?.onConnect;
-
- const openInWallet = useCallback(() => {
- try {
- const { host, pathname, search } = window.location;
- const pageUrlWithoutProtocol = encodeURI(host + pathname + search);
- openWindow(`${WALLET_URL}${pageUrlWithoutProtocol}`);
- } catch (error) {
- warning(false, 'Failed to open the link');
- }
- }, []);
-
- const connect = useCallback(async () => {
- invariant(injected, 'Connector is required');
-
- // Brave Wallet mimics MetaMask.
- // If a user has the Brave Browser without the MetaMask extension we want
- // to redirect the user to the MetaMask website.
- // If MetaMask is installed, the isBraveWallet property will be false.
- if ((await checkIfBraveBrowser()) && isBraveWalletProvider()) {
- openInWallet();
- return;
- }
-
- // Do not check for isMetamaskProvider here,
- // it will break an ability to connect with other EIP-1193 wallets,
- // which do not have their branded connection button
- // and recommend to click on MetaMask button in such case.
- if (hasInjected()) {
- await disconnect();
- await activate(injected);
- onConnect?.();
- } else {
- openInWallet();
- }
- }, [injected, openInWallet, disconnect, activate, onConnect]);
-
- return { connect, connector: injected };
-};
diff --git a/packages/web3-react/test/hooks/useConnectorCoinbase.test.ts b/packages/web3-react/test/hooks/useConnectorCoinbase.test.ts
deleted file mode 100644
index 3085a4ab..00000000
--- a/packages/web3-react/test/hooks/useConnectorCoinbase.test.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-jest.mock('../../src/hooks/useWeb3');
-jest.mock('../../src/hooks/useConnectors');
-jest.mock('wagmi');
-
-import { useDisconnect } from 'wagmi';
-import { renderHook, act } from '@testing-library/react-hooks';
-import { useWeb3 } from '../../src/hooks/useWeb3';
-import { useConnectorCoinbase } from '../../src/hooks/useConnectorCoinbase';
-import { useConnectors } from '../../src/hooks/useConnectors';
-
-const mockUseWeb3 = useWeb3 as jest.MockedFunction;
-const mockUseConnectors = useConnectors as jest.MockedFunction<
- typeof useConnectors
->;
-const mockUseDisconnect = useDisconnect as jest.MockedFunction;
-
-describe('useConnectorCoinbase', () => {
- test('should connect', async () => {
- const mockActivate = jest.fn(async () => true);
- const mockDeactivate = jest.fn(async () => true);
- const mockDisconnect = jest.fn(async () => true);
- const coinbase = {};
-
- mockUseWeb3.mockReturnValue({ activate: mockActivate, deactivate: mockDeactivate } as any);
- mockUseDisconnect.mockReturnValue({ disconnectAsync: mockDisconnect });
- mockUseConnectors.mockReturnValue({ coinbase } as any);
-
- const { result } = renderHook(() => useConnectorCoinbase());
- const { connect } = result.current;
-
- await act(() => connect());
- expect(mockActivate).toHaveBeenCalledWith(coinbase);
- expect(mockActivate).toHaveBeenCalledTimes(1);
- });
-});
diff --git a/packages/web3-react/test/hooks/useConnectorLedger.test.ts b/packages/web3-react/test/hooks/useConnectorLedger.test.ts
deleted file mode 100644
index d44e815e..00000000
--- a/packages/web3-react/test/hooks/useConnectorLedger.test.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-jest.mock('../../src/hooks/useWeb3');
-jest.mock('../../src/hooks/useConnectors');
-jest.mock('wagmi');
-
-import { useDisconnect } from 'wagmi';
-import { renderHook, act } from '@testing-library/react-hooks';
-import { useWeb3 } from '../../src/hooks/useWeb3';
-import { useConnectorLedger } from '../../src/hooks/useConnectorLedger';
-import { useConnectors } from '../../src/hooks/useConnectors';
-
-const mockUseWeb3 = useWeb3 as jest.MockedFunction;
-const mockUseConnectors = useConnectors as jest.MockedFunction<
- typeof useConnectors
->;
-const mockUseDisconnect = useDisconnect as jest.MockedFunction;
-
-describe('useConnectorLedger', () => {
- test('should connect', async () => {
- const mockActivate = jest.fn(async () => true);
- const mockDeactivate = jest.fn(async () => true);
- const mockDisconnect = jest.fn(async () => true);
- const ledger = { isSupported: () => true };
-
- mockUseWeb3.mockReturnValue({ activate: mockActivate, deactivate: mockDeactivate } as any);
- mockUseDisconnect.mockReturnValue({ disconnectAsync: mockDisconnect });
- mockUseConnectors.mockReturnValue({ ledger } as any);
-
- const { result } = renderHook(() => useConnectorLedger());
- const { connect } = result.current;
-
- await act(async () => await connect?.());
- expect(mockActivate).toHaveBeenCalledWith(ledger);
- expect(mockActivate).toHaveBeenCalledTimes(1);
- });
-});
diff --git a/packages/web3-react/test/hooks/useConnectorMetamask.test.ts b/packages/web3-react/test/hooks/useConnectorMetamask.test.ts
deleted file mode 100644
index 2e9155dd..00000000
--- a/packages/web3-react/test/hooks/useConnectorMetamask.test.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-jest.mock('tiny-warning');
-jest.mock('../../src/helpers/openWindow');
-jest.mock('../../src/hooks/useWeb3');
-jest.mock('../../src/hooks/useConnectors');
-jest.mock('wagmi');
-
-import { useDisconnect } from 'wagmi';
-import warning from 'tiny-warning';
-import { renderHook, act } from '@testing-library/react-hooks';
-import { openWindow } from '../../src/helpers/openWindow';
-import { useConnectorMetamask } from '../../src/hooks/useConnectorMetamask';
-import { useWeb3 } from '../../src/hooks/useWeb3';
-import { useConnectors } from '../../src/hooks/useConnectors';
-
-const mockUseWeb3 = useWeb3 as jest.MockedFunction;
-const mockUseConnectors = useConnectors as jest.MockedFunction<
- typeof useConnectors
->;
-const mockOpenWindow = openWindow as jest.MockedFunction;
-const mockWarning = warning as jest.MockedFunction;
-const mockUseDisconnect = useDisconnect as jest.MockedFunction;
-
-beforeEach(() => {
- const mockDisconnect = jest.fn(async () => true);
- delete window.ethereum;
- mockUseWeb3.mockReturnValue({} as any);
- mockUseConnectors.mockReturnValue({ injected: {} } as any);
- mockUseDisconnect.mockReturnValue({ disconnectAsync: mockDisconnect });
- mockOpenWindow.mockReset();
- mockWarning.mockReset();
-});
-
-describe('useConnectorMetamask', () => {
- test('should connect if ethereum and MetaMask are presented', async () => {
- const mockActivate = jest.fn(async () => true);
- const mockDeactivate = jest.fn(async () => true);
- const injected = {};
-
- window.ethereum = {};
- window.ethereum.isMetaMask = true;
- mockUseWeb3.mockReturnValue({ activate: mockActivate, deactivate: mockDeactivate } as any);
- mockUseConnectors.mockReturnValue({ injected } as any);
-
- const { result } = renderHook(() => useConnectorMetamask());
- const { connect } = result.current;
-
- await act(() => connect());
- expect(mockActivate).toHaveBeenCalledWith(injected);
- expect(mockActivate).toHaveBeenCalledTimes(1);
- });
-
- test('should open window if ethereum is not presented', async () => {
- const { result } = renderHook(() => useConnectorMetamask());
- const { connect } = result.current;
-
- await act(() => connect());
- expect(mockOpenWindow).toHaveBeenCalledTimes(1);
- });
-
- test('should show warning if link is not opened', async () => {
- const locationSpy = jest.spyOn(window, 'location', 'get');
- locationSpy.mockReturnValueOnce(undefined as any);
-
- const { result } = renderHook(() => useConnectorMetamask());
- const { connect } = result.current;
-
- await act(() => connect());
- expect(mockWarning).toHaveBeenCalledTimes(1);
- });
-});
diff --git a/yarn.lock b/yarn.lock
index e8468e4b..540999fc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2801,6 +2801,13 @@
"@motionone/dom" "^10.16.2"
tslib "^2.3.1"
+"@next/bundle-analyzer@^14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-14.0.4.tgz#12672238b8ee48dd7cfa253f024374690bde6991"
+ integrity sha512-Nn2PiCkFBJBlVmpSGVNItpISws0fuc9E8AkCafBz/moRv1cfASOpFBBVzSRfWLP9BPdAhfDkb6TafN0rvs2IJQ==
+ dependencies:
+ webpack-bundle-analyzer "4.7.0"
+
"@next/env@12.3.4":
version "12.3.4"
resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.4.tgz#c787837d36fcad75d72ff8df6b57482027d64a47"
@@ -2928,6 +2935,11 @@
picocolors "^1.0.0"
tslib "^2.6.0"
+"@polka/url@^1.0.0-next.20":
+ version "1.0.0-next.24"
+ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3"
+ integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==
+
"@rollup/plugin-babel@5.3.1":
version "5.3.1"
resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
@@ -4440,6 +4452,11 @@ acorn-jsx@^5.3.2:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+acorn-walk@^8.0.0:
+ version "8.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43"
+ integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==
+
acorn-walk@^8.0.2:
version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
@@ -4450,16 +4467,16 @@ acorn-walk@^8.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f"
integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==
+acorn@^8.0.4, acorn@^8.4.1:
+ version "8.11.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
+ integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
+
acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0:
version "8.10.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
-acorn@^8.4.1:
- version "8.11.2"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
- integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
-
aes-js@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
@@ -5907,6 +5924,11 @@ dotenv@16.0.3:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
+duplexer@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
duplexify@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0"
@@ -7026,6 +7048,13 @@ graphemer@^1.4.0:
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+gzip-size@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+ integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+ dependencies:
+ duplexer "^0.1.2"
+
handlebars@^4.4.3:
version "4.7.8"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9"
@@ -8437,7 +8466,7 @@ lodash.startcase@^4.4.0:
resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8"
integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==
-lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21:
+lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -8707,6 +8736,11 @@ motion@10.16.2:
"@motionone/utils" "^10.15.1"
"@motionone/vue" "^10.16.2"
+mrmime@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27"
+ integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==
+
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
@@ -8992,6 +9026,11 @@ open@^9.1.0:
is-inside-container "^1.0.0"
is-wsl "^2.2.0"
+opener@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+ integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
optionator@^0.9.3:
version "0.9.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
@@ -9517,14 +9556,6 @@ react-dom@^17.0.2:
object-assign "^4.1.1"
scheduler "^0.20.2"
-react-dom@^18.2.0:
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
- integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
- dependencies:
- loose-envify "^1.1.0"
- scheduler "^0.23.0"
-
react-error-boundary@^3.1.0:
version "3.1.4"
resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0"
@@ -9571,7 +9602,7 @@ react-transition-group@4:
loose-envify "^1.4.0"
prop-types "^15.6.2"
-react@18.2.0:
+react@18.2.0, react@^18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
@@ -9586,13 +9617,6 @@ react@^17.0.2:
loose-envify "^1.1.0"
object-assign "^4.1.1"
-react@^18.2.0:
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
- integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
- dependencies:
- loose-envify "^1.1.0"
-
read-pkg-up@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
@@ -10078,6 +10102,15 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+sirv@^1.0.7:
+ version "1.0.19"
+ resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"
+ integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==
+ dependencies:
+ "@polka/url" "^1.0.0-next.20"
+ mrmime "^1.0.0"
+ totalist "^1.0.0"
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -10607,6 +10640,11 @@ toggle-selection@^1.0.6:
resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==
+totalist@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
+ integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
+
tough-cookie@^4.1.2:
version "4.1.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
@@ -11110,6 +11148,21 @@ webidl-conversions@^7.0.0:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+webpack-bundle-analyzer@4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66"
+ integrity sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==
+ dependencies:
+ acorn "^8.0.4"
+ acorn-walk "^8.0.0"
+ chalk "^4.1.0"
+ commander "^7.2.0"
+ gzip-size "^6.0.0"
+ lodash "^4.17.20"
+ opener "^1.5.2"
+ sirv "^1.0.7"
+ ws "^7.3.1"
+
whatwg-encoding@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
@@ -11264,7 +11317,7 @@ ws@7.4.6:
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
-ws@^7.4.5, ws@^7.5.1:
+ws@^7.3.1, ws@^7.4.5, ws@^7.5.1:
version "7.5.9"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==