From 12ea8a1d6fc1a8cecc6456d3d8d28385e20f265c Mon Sep 17 00:00:00 2001 From: Alexander Khramov Date: Sun, 26 Nov 2023 21:25:38 +0300 Subject: [PATCH 1/5] chore: wallet generator: add icons/index.ts --- turbo/generators/wallet/templates/src/icons/index.ts.hbs | 1 + 1 file changed, 1 insertion(+) diff --git a/turbo/generators/wallet/templates/src/icons/index.ts.hbs b/turbo/generators/wallet/templates/src/icons/index.ts.hbs index e69de29b..d204ced6 100644 --- a/turbo/generators/wallet/templates/src/icons/index.ts.hbs +++ b/turbo/generators/wallet/templates/src/icons/index.ts.hbs @@ -0,0 +1 @@ +export { default as WalletIcon } from './{{camelCase walletId}}.svg'; From 4632ed0133481554ed32a6257d06a8a89c97863f Mon Sep 17 00:00:00 2001 From: Alexander Khramov Date: Sun, 26 Nov 2023 21:26:14 +0300 Subject: [PATCH 2/5] feat: add wallet adapters for imtoken, trust, xdefi --- packages/wallets-list/package.json | 5 +- packages/wallets-list/src/ethereum.ts | 6 ++ packages/wallets/imtoken/.eslintrc.json | 9 +++ packages/wallets/imtoken/package.json | 43 ++++++++++++++ packages/wallets/imtoken/rollup.config.js | 57 +++++++++++++++++++ packages/wallets/imtoken/src/custom.d.ts | 4 ++ .../wallets/imtoken/src/icons/imtoken.svg | 10 ++++ packages/wallets/imtoken/src/icons/index.ts | 1 + packages/wallets/imtoken/src/index.ts | 34 +++++++++++ packages/wallets/imtoken/tsconfig.json | 8 +++ packages/wallets/trust/.eslintrc.json | 9 +++ packages/wallets/trust/package.json | 43 ++++++++++++++ packages/wallets/trust/rollup.config.js | 57 +++++++++++++++++++ packages/wallets/trust/src/custom.d.ts | 4 ++ packages/wallets/trust/src/icons/index.ts | 1 + packages/wallets/trust/src/icons/trust.svg | 15 +++++ packages/wallets/trust/src/index.ts | 34 +++++++++++ packages/wallets/trust/tsconfig.json | 8 +++ packages/wallets/xdefi/.eslintrc.json | 9 +++ packages/wallets/xdefi/package.json | 43 ++++++++++++++ packages/wallets/xdefi/rollup.config.js | 57 +++++++++++++++++++ packages/wallets/xdefi/src/custom.d.ts | 4 ++ packages/wallets/xdefi/src/icons/index.ts | 1 + packages/wallets/xdefi/src/icons/xdefi.svg | 11 ++++ packages/wallets/xdefi/src/index.ts | 45 +++++++++++++++ packages/wallets/xdefi/tsconfig.json | 8 +++ 26 files changed, 525 insertions(+), 1 deletion(-) create mode 100644 packages/wallets/imtoken/.eslintrc.json create mode 100644 packages/wallets/imtoken/package.json create mode 100644 packages/wallets/imtoken/rollup.config.js create mode 100644 packages/wallets/imtoken/src/custom.d.ts create mode 100644 packages/wallets/imtoken/src/icons/imtoken.svg create mode 100644 packages/wallets/imtoken/src/icons/index.ts create mode 100644 packages/wallets/imtoken/src/index.ts create mode 100644 packages/wallets/imtoken/tsconfig.json create mode 100644 packages/wallets/trust/.eslintrc.json create mode 100644 packages/wallets/trust/package.json create mode 100644 packages/wallets/trust/rollup.config.js create mode 100644 packages/wallets/trust/src/custom.d.ts create mode 100644 packages/wallets/trust/src/icons/index.ts create mode 100644 packages/wallets/trust/src/icons/trust.svg create mode 100644 packages/wallets/trust/src/index.ts create mode 100644 packages/wallets/trust/tsconfig.json create mode 100644 packages/wallets/xdefi/.eslintrc.json create mode 100644 packages/wallets/xdefi/package.json create mode 100644 packages/wallets/xdefi/rollup.config.js create mode 100644 packages/wallets/xdefi/src/custom.d.ts create mode 100644 packages/wallets/xdefi/src/icons/index.ts create mode 100644 packages/wallets/xdefi/src/icons/xdefi.svg create mode 100644 packages/wallets/xdefi/src/index.ts create mode 100644 packages/wallets/xdefi/tsconfig.json diff --git a/packages/wallets-list/package.json b/packages/wallets-list/package.json index 401a7f03..2f863a02 100644 --- a/packages/wallets-list/package.json +++ b/packages/wallets-list/package.json @@ -48,7 +48,10 @@ "@reef-knot/wallet-adapter-ambire": "1.2.4", "@reef-knot/wallet-adapter-bitkeep": "1.1.1", "@reef-knot/wallet-adapter-coin98": "1.0.1", - "@reef-knot/wallet-adapter-brave": "1.0.1" + "@reef-knot/wallet-adapter-brave": "1.0.1", + "@reef-knot/wallet-adapter-imtoken": "1.0.0", + "@reef-knot/wallet-adapter-trust": "1.0.0", + "@reef-knot/wallet-adapter-xdefi": "1.0.0" }, "devDependencies": { "@reef-knot/types": "^1.3.0", diff --git a/packages/wallets-list/src/ethereum.ts b/packages/wallets-list/src/ethereum.ts index 29dcc628..b3d96042 100644 --- a/packages/wallets-list/src/ethereum.ts +++ b/packages/wallets-list/src/ethereum.ts @@ -6,6 +6,9 @@ import { Ambire } from '@reef-knot/wallet-adapter-ambire'; import { BitKeep } from '@reef-knot/wallet-adapter-bitkeep'; import { Coin98 } from '@reef-knot/wallet-adapter-coin98'; import { Brave } from '@reef-knot/wallet-adapter-brave'; +import { ImToken } from '@reef-knot/wallet-adapter-imtoken'; +import { Trust } from '@reef-knot/wallet-adapter-trust'; +import { Xdefi } from '@reef-knot/wallet-adapter-xdefi'; export const WalletsListEthereum: WalletsListType = { okx: Okx, @@ -15,4 +18,7 @@ export const WalletsListEthereum: WalletsListType = { bitkeep: BitKeep, coin98: Coin98, brave: Brave, + imtoken: ImToken, + trust: Trust, + xdefi: Xdefi, }; diff --git a/packages/wallets/imtoken/.eslintrc.json b/packages/wallets/imtoken/.eslintrc.json new file mode 100644 index 00000000..06342be5 --- /dev/null +++ b/packages/wallets/imtoken/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "root": true, + "extends": [ + "custom" + ], + "rules": { + "import/no-extraneous-dependencies": "warn" + } +} diff --git a/packages/wallets/imtoken/package.json b/packages/wallets/imtoken/package.json new file mode 100644 index 00000000..f9a2bfe3 --- /dev/null +++ b/packages/wallets/imtoken/package.json @@ -0,0 +1,43 @@ +{ + "name": "@reef-knot/wallet-adapter-imtoken", + "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/imtoken/rollup.config.js b/packages/wallets/imtoken/rollup.config.js new file mode 100644 index 00000000..a91f4d4a --- /dev/null +++ b/packages/wallets/imtoken/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/imtoken/src/custom.d.ts b/packages/wallets/imtoken/src/custom.d.ts new file mode 100644 index 00000000..006534e2 --- /dev/null +++ b/packages/wallets/imtoken/src/custom.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const content: React.FunctionComponent>; + export default content; +} diff --git a/packages/wallets/imtoken/src/icons/imtoken.svg b/packages/wallets/imtoken/src/icons/imtoken.svg new file mode 100644 index 00000000..3c19ea0d --- /dev/null +++ b/packages/wallets/imtoken/src/icons/imtoken.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/wallets/imtoken/src/icons/index.ts b/packages/wallets/imtoken/src/icons/index.ts new file mode 100644 index 00000000..d86ade0d --- /dev/null +++ b/packages/wallets/imtoken/src/icons/index.ts @@ -0,0 +1 @@ +export { default as WalletIcon } from './imtoken.svg'; diff --git a/packages/wallets/imtoken/src/index.ts b/packages/wallets/imtoken/src/index.ts new file mode 100644 index 00000000..bc0aa123 --- /dev/null +++ b/packages/wallets/imtoken/src/index.ts @@ -0,0 +1,34 @@ +import { WalletAdapterType } from '@reef-knot/types'; +import { WalletIcon } from './icons/index.js'; +import { InjectedConnector } from 'wagmi/connectors/injected'; +import { Chain } from '@wagmi/core'; + +declare module '@wagmi/core' { + interface Ethereum { + isImToken?: true; + } +} + +export class ImTokenConnector extends InjectedConnector { + readonly id = 'imToken'; + readonly name = 'imToken'; + constructor(chains: Chain[]) { + super({ + chains, + options: { + getProvider: () => globalThis.window?.ethereum, + }, + }); + } +} + +export const ImToken: WalletAdapterType = ({ chains }) => ({ + walletName: 'imToken', + walletId: 'imToken', + icon: WalletIcon, + detector: () => !!globalThis.window?.ethereum?.isImToken, + downloadURLs: { + default: 'https://token.im/download', + }, + connector: new ImTokenConnector(chains), +}); diff --git a/packages/wallets/imtoken/tsconfig.json b/packages/wallets/imtoken/tsconfig.json new file mode 100644 index 00000000..23709e73 --- /dev/null +++ b/packages/wallets/imtoken/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/trust/.eslintrc.json b/packages/wallets/trust/.eslintrc.json new file mode 100644 index 00000000..06342be5 --- /dev/null +++ b/packages/wallets/trust/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "root": true, + "extends": [ + "custom" + ], + "rules": { + "import/no-extraneous-dependencies": "warn" + } +} diff --git a/packages/wallets/trust/package.json b/packages/wallets/trust/package.json new file mode 100644 index 00000000..897f63c2 --- /dev/null +++ b/packages/wallets/trust/package.json @@ -0,0 +1,43 @@ +{ + "name": "@reef-knot/wallet-adapter-trust", + "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/trust/rollup.config.js b/packages/wallets/trust/rollup.config.js new file mode 100644 index 00000000..a91f4d4a --- /dev/null +++ b/packages/wallets/trust/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/trust/src/custom.d.ts b/packages/wallets/trust/src/custom.d.ts new file mode 100644 index 00000000..006534e2 --- /dev/null +++ b/packages/wallets/trust/src/custom.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const content: React.FunctionComponent>; + export default content; +} diff --git a/packages/wallets/trust/src/icons/index.ts b/packages/wallets/trust/src/icons/index.ts new file mode 100644 index 00000000..09b0ed3f --- /dev/null +++ b/packages/wallets/trust/src/icons/index.ts @@ -0,0 +1 @@ +export { default as WalletIcon } from './trust.svg'; diff --git a/packages/wallets/trust/src/icons/trust.svg b/packages/wallets/trust/src/icons/trust.svg new file mode 100644 index 00000000..f71c1aa5 --- /dev/null +++ b/packages/wallets/trust/src/icons/trust.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/wallets/trust/src/index.ts b/packages/wallets/trust/src/index.ts new file mode 100644 index 00000000..59a9bc61 --- /dev/null +++ b/packages/wallets/trust/src/index.ts @@ -0,0 +1,34 @@ +import { WalletAdapterType } from '@reef-knot/types'; +import { WalletIcon } from './icons/index.js'; +import { Chain } from '@wagmi/core'; +import { InjectedConnector } from 'wagmi/connectors/injected'; + +declare module '@wagmi/core' { + interface Ethereum { + isTrust?: true; + } +} + +export class TrustConnector extends InjectedConnector { + readonly id = 'trust'; + readonly name = 'Trust'; + constructor(chains: Chain[]) { + super({ + chains, + options: { + getProvider: () => globalThis.window?.ethereum, + }, + }); + } +} + +export const Trust: WalletAdapterType = ({ chains }) => ({ + walletName: 'Trust', + walletId: 'trust', + icon: WalletIcon, + detector: () => !!globalThis.window?.ethereum?.isTrust, + downloadURLs: { + default: 'https://trustwallet.com/browser-extension', + }, + connector: new TrustConnector(chains), +}); diff --git a/packages/wallets/trust/tsconfig.json b/packages/wallets/trust/tsconfig.json new file mode 100644 index 00000000..23709e73 --- /dev/null +++ b/packages/wallets/trust/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/xdefi/.eslintrc.json b/packages/wallets/xdefi/.eslintrc.json new file mode 100644 index 00000000..06342be5 --- /dev/null +++ b/packages/wallets/xdefi/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "root": true, + "extends": [ + "custom" + ], + "rules": { + "import/no-extraneous-dependencies": "warn" + } +} diff --git a/packages/wallets/xdefi/package.json b/packages/wallets/xdefi/package.json new file mode 100644 index 00000000..0d378a6c --- /dev/null +++ b/packages/wallets/xdefi/package.json @@ -0,0 +1,43 @@ +{ + "name": "@reef-knot/wallet-adapter-xdefi", + "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/xdefi/rollup.config.js b/packages/wallets/xdefi/rollup.config.js new file mode 100644 index 00000000..a91f4d4a --- /dev/null +++ b/packages/wallets/xdefi/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/xdefi/src/custom.d.ts b/packages/wallets/xdefi/src/custom.d.ts new file mode 100644 index 00000000..006534e2 --- /dev/null +++ b/packages/wallets/xdefi/src/custom.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const content: React.FunctionComponent>; + export default content; +} diff --git a/packages/wallets/xdefi/src/icons/index.ts b/packages/wallets/xdefi/src/icons/index.ts new file mode 100644 index 00000000..aa90abcb --- /dev/null +++ b/packages/wallets/xdefi/src/icons/index.ts @@ -0,0 +1 @@ +export { default as WalletIcon } from './xdefi.svg'; diff --git a/packages/wallets/xdefi/src/icons/xdefi.svg b/packages/wallets/xdefi/src/icons/xdefi.svg new file mode 100644 index 00000000..bf306e06 --- /dev/null +++ b/packages/wallets/xdefi/src/icons/xdefi.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/wallets/xdefi/src/index.ts b/packages/wallets/xdefi/src/index.ts new file mode 100644 index 00000000..b587b5f2 --- /dev/null +++ b/packages/wallets/xdefi/src/index.ts @@ -0,0 +1,45 @@ +import { WalletAdapterType } from '@reef-knot/types'; +import { Chain, Ethereum as EthereumTypeWagmi } from '@wagmi/core'; +import { InjectedConnector } from 'wagmi/connectors/injected'; +import { WalletIcon } from './icons/index.js'; + +declare module '@wagmi/core' { + interface Ethereum { + isXDEFI?: true; + } +} + +declare global { + interface Window { + xfi?: { + ethereum: EthereumTypeWagmi; + }; + } +} + +export class XdefiConnector extends InjectedConnector { + readonly id = 'xdefi'; + readonly name = 'XDEFI'; + constructor(chains: Chain[]) { + super({ + chains, + options: { + getProvider: () => + globalThis.window?.xfi?.ethereum || globalThis.window?.ethereum, + }, + }); + } +} + +export const Xdefi: WalletAdapterType = ({ chains }) => ({ + walletName: 'XDEFI', + walletId: 'xdefi', + icon: WalletIcon, + detector: () => + !!globalThis.window?.xfi?.ethereum || + !!globalThis.window?.ethereum?.isXDEFI, + downloadURLs: { + default: 'https://www.xdefi.io/', + }, + connector: new XdefiConnector(chains), +}); diff --git a/packages/wallets/xdefi/tsconfig.json b/packages/wallets/xdefi/tsconfig.json new file mode 100644 index 00000000..23709e73 --- /dev/null +++ b/packages/wallets/xdefi/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "tsconfig/react-library.json", + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "**/*.test.*"], + "compilerOptions": { + "rootDir": "src", + } +} From 3d1fa9befc86f8d4e1780b94d7b850a62ce2b28c Mon Sep 17 00:00:00 2001 From: Alexander Khramov Date: Mon, 27 Nov 2023 21:57:13 +0300 Subject: [PATCH 3/5] refactor: remove unused code --- .../WalletsModalForEth/WalletsModalForEth.tsx | 25 +----- .../src/connectButtons/connectImToken.tsx | 42 --------- .../src/connectButtons/connectTrust.tsx | 65 -------------- .../src/connectButtons/connectXdefi.tsx | 57 ------------ .../src/connectButtons/index.ts | 3 - .../src/constants/wallets.ts | 4 - packages/wallets-icons/src/react/index.ts | 3 - packages/wallets-icons/src/svg/imtoken.svg | 10 --- .../wallets-icons/src/svg/trust-circle.svg | 15 ---- .../wallets-icons/src/svg/xdefi-wallet.svg | 11 --- packages/web3-react/src/hooks/index.ts | 3 - .../src/hooks/useConnectorImToken.ts | 51 ----------- .../web3-react/src/hooks/useConnectorTrust.ts | 62 ------------- .../web3-react/src/hooks/useConnectorXdefi.ts | 47 ---------- .../test/hooks/useConnectorImToken.test.ts | 86 ------------------- .../test/hooks/useConnectorTrust.test.ts | 86 ------------------- .../test/hooks/useConnectorXdefi.test.ts | 58 ------------- 17 files changed, 4 insertions(+), 624 deletions(-) delete mode 100644 packages/connect-wallet-modal/src/connectButtons/connectImToken.tsx delete mode 100644 packages/connect-wallet-modal/src/connectButtons/connectTrust.tsx delete mode 100644 packages/connect-wallet-modal/src/connectButtons/connectXdefi.tsx delete mode 100644 packages/wallets-icons/src/svg/imtoken.svg delete mode 100644 packages/wallets-icons/src/svg/trust-circle.svg delete mode 100644 packages/wallets-icons/src/svg/xdefi-wallet.svg delete mode 100644 packages/web3-react/src/hooks/useConnectorImToken.ts delete mode 100644 packages/web3-react/src/hooks/useConnectorTrust.ts delete mode 100644 packages/web3-react/src/hooks/useConnectorXdefi.ts delete mode 100644 packages/web3-react/test/hooks/useConnectorImToken.test.ts delete mode 100644 packages/web3-react/test/hooks/useConnectorTrust.test.ts delete mode 100644 packages/web3-react/test/hooks/useConnectorXdefi.test.ts diff --git a/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx b/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx index 03a60c0a..768626ee 100644 --- a/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx +++ b/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx @@ -4,13 +4,10 @@ import { useReefKnotContext } from '@reef-knot/core-react'; import { WalletAdapterData } from '@reef-knot/types'; import { ConnectCoinbase, - ConnectImToken, ConnectInjected, ConnectLedger, ConnectMetamask, - ConnectTrust, ConnectWC, - ConnectXdefi, } from '../../connectButtons'; import { ButtonsCommonProps, WalletsModal } from '../WalletsModal'; import { WalletsModalForEthProps } from './types'; @@ -23,9 +20,6 @@ const walletsButtons: { [K in WalletId | string]: React.ComponentType } = { [WALLET_IDS.METAMASK]: ConnectMetamask, [WALLET_IDS.LEDGER]: ConnectLedger, [WALLET_IDS.COINBASE]: ConnectCoinbase, - [WALLET_IDS.TRUST]: ConnectTrust, - [WALLET_IDS.IM_TOKEN]: ConnectImToken, - [WALLET_IDS.XDEFI]: ConnectXdefi, }; function getWalletButton( @@ -61,26 +55,15 @@ function getWalletsButtons( ) { let wallets: WalletId[] = [WALLET_IDS.METAMASK]; - // Adding wallets using a new wallet adapter API - // TODO: migrate all wallets to use wallet adapter API walletDataList.forEach((walletData) => { const { walletId, detector } = walletData; addWalletTo(wallets, walletId, !!detector?.()); }); - wallets = [ - ...wallets, - WALLET_IDS.LEDGER, - WALLET_IDS.COINBASE, - WALLET_IDS.TRUST, - WALLET_IDS.IM_TOKEN, - ]; - - // Deprecated way of adding wallets with additional detection - addWalletTo(wallets, WALLET_IDS.XDEFI, helpers.isXdefiProvider()); - - // Filtering wallets marked as hidden - wallets = wallets.filter((wallet) => !hiddenWallets.includes(wallet)); + wallets = [...wallets, WALLET_IDS.LEDGER, WALLET_IDS.COINBASE].filter( + // Filtering wallets marked as hidden + (wallet) => !hiddenWallets.includes(wallet), + ); return wallets.map((walletId) => { // Handle new wallet adapters diff --git a/packages/connect-wallet-modal/src/connectButtons/connectImToken.tsx b/packages/connect-wallet-modal/src/connectButtons/connectImToken.tsx deleted file mode 100644 index f0249442..00000000 --- a/packages/connect-wallet-modal/src/connectButtons/connectImToken.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React, { FC, useCallback } from 'react'; -import { useConnectorImToken } from '@reef-knot/web3-react'; -import { ImToken as WalletIcon } from '@reef-knot/wallets-icons/react'; -import { ConnectWalletProps } from './types'; -import { ConnectButton } from '../components/ConnectButton'; -import { isIOS, isAndroid } from '../helpers'; - -const ConnectImToken: FC = (props) => { - const { onConnect, onBeforeConnect, setRequirements, metrics, ...rest } = - props; - const onConnectImToken = metrics?.events?.connect?.handlers.onConnectImToken; - const onClickImToken = metrics?.events?.click?.handlers.onClickImToken; - const { connect } = useConnectorImToken({ - onConnect: () => { - onConnect?.(); - onConnectImToken?.(); - }, - }); - - const handleConnect = useCallback(async () => { - onBeforeConnect?.(); - onClickImToken?.(); - - if (!connect || !(isIOS || isAndroid)) { - setRequirements(true, { - icon: , - title: "imToken couldn't connect", - text: 'It is available only on iOS and Android devices.', - }); - return; - } - await connect(); - }, [onBeforeConnect, onClickImToken, connect, setRequirements]); - - return ( - - imToken - - ); -}; - -export default ConnectImToken; diff --git a/packages/connect-wallet-modal/src/connectButtons/connectTrust.tsx b/packages/connect-wallet-modal/src/connectButtons/connectTrust.tsx deleted file mode 100644 index 965f61ba..00000000 --- a/packages/connect-wallet-modal/src/connectButtons/connectTrust.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React, { FC, useCallback } from 'react'; -import { useConnectorTrust } from '@reef-knot/web3-react'; -import { Trust as WalletIcon } from '@reef-knot/wallets-icons/react'; -import { ConnectWalletProps } from './types'; -import { ConnectButton } from '../components/ConnectButton'; -import checkConflicts from '../helpers/checkConflicts'; -import { CONFLICTS } from '../constants/conflictChecks'; - -const ConnectTrust: FC = (props) => { - const { onConnect, onBeforeConnect, setRequirements, metrics, ...rest } = - props; - const onConnectTrust = metrics?.events?.connect?.handlers.onConnectTrust; - const onClickTrust = metrics?.events?.click?.handlers.onClickTrust; - const { connect } = useConnectorTrust({ - onConnect: () => { - onConnect?.(); - onConnectTrust?.(); - }, - }); - - const handleConnect = useCallback(async () => { - onBeforeConnect?.(); - onClickTrust?.(); - - const { hasConflicts, conflictingApps, conflictingAppsArray } = - checkConflicts([CONFLICTS.Tally, CONFLICTS.Exodus]); - - if (hasConflicts) { - setRequirements(true, { - icon: , - title: "Trust Wallet 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 Trust Wallet. -
- ) : ( - `Your browser has a turned-on “${conflictingApps}” extension.` + - ' Please, turn off this extension and reload the page to enable Trust Wallet.' - ), - }); - return; - } - - if (!connect) { - setRequirements(true, { - icon: , - title: "Trust Wallet couldn't connect", - }); - return; - } - - await connect(); - }, [connect, onBeforeConnect, onClickTrust, setRequirements]); - - return ( - - Trust Wallet - - ); -}; - -export default ConnectTrust; diff --git a/packages/connect-wallet-modal/src/connectButtons/connectXdefi.tsx b/packages/connect-wallet-modal/src/connectButtons/connectXdefi.tsx deleted file mode 100644 index 28086f88..00000000 --- a/packages/connect-wallet-modal/src/connectButtons/connectXdefi.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { FC, useCallback } from 'react'; -import { useConnectorXdefi } from '@reef-knot/web3-react'; -import { XDEFI as WalletIcon } from '@reef-knot/wallets-icons/react'; -import { CONFLICTS } from '../constants/conflictChecks'; -import { ConnectWalletProps } from './types'; -import { ConnectButton } from '../components/ConnectButton'; -import checkConflicts from '../helpers/checkConflicts'; - -const ConnectXdefi: FC = (props: ConnectWalletProps) => { - const { onConnect, onBeforeConnect, setRequirements, metrics, ...rest } = - props; - const onConnectXdefi = metrics?.events?.connect?.handlers.onConnectXdefi; - const onClickXdefi = metrics?.events?.click?.handlers.onClickXdefi; - const { connect } = useConnectorXdefi({ - onConnect: () => { - onConnect?.(); - onConnectXdefi?.(); - }, - }); - - const handleConnect = useCallback(async () => { - onBeforeConnect?.(); - onClickXdefi?.(); - - const { hasConflicts, conflictingApps, conflictingAppsArray } = - checkConflicts([CONFLICTS.Exodus, CONFLICTS.Tally, CONFLICTS.Trust]); - - if (hasConflicts) { - setRequirements(true, { - icon: , - title: "XDEFI 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 XDEFI. -
- ) : ( - `Your browser has a turned-on “${conflictingApps}” extension.` + - ' Please, turn off this extension and reload the page to enable XDEFI.' - ), - }); - return; - } - - await connect(); - }, [connect, onBeforeConnect, onClickXdefi, setRequirements]); - - return ( - - XDEFI - - ); -}; - -export default ConnectXdefi; diff --git a/packages/connect-wallet-modal/src/connectButtons/index.ts b/packages/connect-wallet-modal/src/connectButtons/index.ts index ee1b3860..3a5e1c62 100644 --- a/packages/connect-wallet-modal/src/connectButtons/index.ts +++ b/packages/connect-wallet-modal/src/connectButtons/index.ts @@ -1,8 +1,5 @@ export { default as ConnectCoinbase } from './connectCoinbase'; -export { default as ConnectImToken } from './connectImToken'; export { default as ConnectLedger } from './connectLedger'; export { default as ConnectMetamask } from './connectMetamask'; -export { default as ConnectTrust } from './connectTrust'; -export { default as ConnectXdefi } from './connectXdefi'; export * from './ConnectInjected'; export * from './ConnectWC'; diff --git a/packages/connect-wallet-modal/src/constants/wallets.ts b/packages/connect-wallet-modal/src/constants/wallets.ts index 54966472..b7fb88dc 100644 --- a/packages/connect-wallet-modal/src/constants/wallets.ts +++ b/packages/connect-wallet-modal/src/constants/wallets.ts @@ -2,10 +2,6 @@ export const WALLET_IDS = { METAMASK: 'Metamask', LEDGER: 'Ledger', COINBASE: 'Coinbase', - TRUST: 'Trust', - IM_TOKEN: 'ImToken', - COIN98: 'Coin98', - XDEFI: 'Xdefi', } as const; export type WalletId = (typeof WALLET_IDS)[keyof typeof WALLET_IDS] | string; diff --git a/packages/wallets-icons/src/react/index.ts b/packages/wallets-icons/src/react/index.ts index 6bbfeaa3..facd057d 100644 --- a/packages/wallets-icons/src/react/index.ts +++ b/packages/wallets-icons/src/react/index.ts @@ -1,5 +1,4 @@ export { default as Coinbase } from '../svg/coinbase.svg'; -export { default as ImToken } from '../svg/imtoken.svg'; export { default as Ledger } from '../svg/ledger.svg'; export { default as LedgerInversion } from '../svg/ledger-inversion.svg'; export { default as LedgerConfirm } from '../svg/ledger-confirm.svg'; @@ -9,5 +8,3 @@ export { default as LedgerSuccess } from '../svg/ledger-success.svg'; export { default as MetaMask } from '../svg/metamask.svg'; export { default as MetaMaskCircle } from '../svg/metamask-circle.svg'; export { default as MetaMaskCircleInversion } from '../svg/metamask-circle-inversion.svg'; -export { default as Trust } from '../svg/trust-circle.svg'; -export { default as XDEFI } from '../svg/xdefi-wallet.svg'; diff --git a/packages/wallets-icons/src/svg/imtoken.svg b/packages/wallets-icons/src/svg/imtoken.svg deleted file mode 100644 index 3c19ea0d..00000000 --- a/packages/wallets-icons/src/svg/imtoken.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/packages/wallets-icons/src/svg/trust-circle.svg b/packages/wallets-icons/src/svg/trust-circle.svg deleted file mode 100644 index f71c1aa5..00000000 --- a/packages/wallets-icons/src/svg/trust-circle.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/packages/wallets-icons/src/svg/xdefi-wallet.svg b/packages/wallets-icons/src/svg/xdefi-wallet.svg deleted file mode 100644 index bf306e06..00000000 --- a/packages/wallets-icons/src/svg/xdefi-wallet.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/packages/web3-react/src/hooks/index.ts b/packages/web3-react/src/hooks/index.ts index 89cc462b..ea5537ee 100644 --- a/packages/web3-react/src/hooks/index.ts +++ b/packages/web3-react/src/hooks/index.ts @@ -1,13 +1,10 @@ export * from './useAutoConnect'; export * from './useConnectorCoinbase'; -export * from './useConnectorImToken'; export * from './useConnectorInfo'; export * from './useConnectorLedger'; export * from './useConnectorMetamask'; export * from './useConnectors'; export * from './useConnectorStorage'; -export * from './useConnectorTrust'; -export * from './useConnectorXdefi'; export * from './useDisconnect'; export * from './useSupportedChains'; export * from './useWeb3'; diff --git a/packages/web3-react/src/hooks/useConnectorImToken.ts b/packages/web3-react/src/hooks/useConnectorImToken.ts deleted file mode 100644 index 1b675ae1..00000000 --- a/packages/web3-react/src/hooks/useConnectorImToken.ts +++ /dev/null @@ -1,51 +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, isImTokenProvider, openWindow } from '../helpers'; -import { useForceDisconnect } from './useDisconnect'; -import { ConnectorHookArgs } from './types'; - -type ConnectorHookResult = { - connect: () => Promise; - connector: InjectedConnector; -}; - -const WALLET_URL = 'imtokenv2://navigate/DappView?url='; - -export const useConnectorImToken = ( - args?: ConnectorHookArgs, -): ConnectorHookResult => { - const { injected } = useConnectors(); - const { activate } = useWeb3(); - const { disconnect } = useForceDisconnect(); - const onConnect = args?.onConnect; - - const openInWallet = useCallback(() => { - try { - const pageUrl = encodeURIComponent(window.location.href); - openWindow(`${WALLET_URL}${pageUrl}`); - } catch (error) { - warning(false, 'Failed to open the link'); - } - }, []); - - const connect = useCallback(async () => { - invariant(injected, 'Connector is required'); - - if (hasInjected() && isImTokenProvider()) { - await disconnect(); - await activate(injected); - onConnect?.(); - } else { - openInWallet(); - } - }, [injected, disconnect, activate, onConnect, openInWallet]); - - return { - connect, - connector: injected, - }; -}; diff --git a/packages/web3-react/src/hooks/useConnectorTrust.ts b/packages/web3-react/src/hooks/useConnectorTrust.ts deleted file mode 100644 index 5dfa1481..00000000 --- a/packages/web3-react/src/hooks/useConnectorTrust.ts +++ /dev/null @@ -1,62 +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, - isTrustProvider, - isMobileOrTablet, - openWindow, -} from '../helpers'; -import { useForceDisconnect } from './useDisconnect'; -import { ConnectorHookArgs } from './types'; - -type ConnectorHookResult = { - connect: () => Promise; - connector: InjectedConnector; -}; - -const WALLET_URL_MOBILE = - 'https://link.trustwallet.com/open_url?coin_id=60&url='; -const WALLET_URL_BROWSER = 'https://trustwallet.com/browser-extension'; - -export const useConnectorTrust = ( - args?: ConnectorHookArgs, -): ConnectorHookResult => { - const { injected } = useConnectors(); - const { activate } = useWeb3(); - const { disconnect } = useForceDisconnect(); - const onConnect = args?.onConnect; - - const openInWallet = useCallback(() => { - try { - if (isMobileOrTablet) { - const pageUrl = encodeURIComponent(window.location.href); - openWindow(`${WALLET_URL_MOBILE}${pageUrl}`); - } else { - openWindow(WALLET_URL_BROWSER); - } - } catch (error) { - warning(false, 'Failed to open the link'); - } - }, []); - - const connect = useCallback(async () => { - invariant(injected, 'Connector is required'); - - if (hasInjected() && isTrustProvider()) { - await disconnect(); - await activate(injected); - onConnect?.(); - } else { - openInWallet(); - } - }, [injected, disconnect, activate, onConnect, openInWallet]); - - return { - connect, - connector: injected, - }; -}; diff --git a/packages/web3-react/src/hooks/useConnectorXdefi.ts b/packages/web3-react/src/hooks/useConnectorXdefi.ts deleted file mode 100644 index 85972bc5..00000000 --- a/packages/web3-react/src/hooks/useConnectorXdefi.ts +++ /dev/null @@ -1,47 +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, isXdefiProvider, openWindow } from '../helpers'; -import { useForceDisconnect } from './useDisconnect'; -import { ConnectorHookArgs } from './types'; - -type ConnectorHookResult = { - connect: () => Promise; - connector: InjectedConnector; -}; - -const WALLET_URL = 'https://www.xdefi.io/'; - -export const useConnectorXdefi = ( - args?: ConnectorHookArgs, -): ConnectorHookResult => { - const { injected } = useConnectors(); - const { activate } = useWeb3(); - const { disconnect } = useForceDisconnect(); - const onConnect = args?.onConnect; - - const suggestApp = useCallback(() => { - try { - openWindow(WALLET_URL); - } catch (error) { - warning(false, 'Failed to open the link'); - } - }, []); - - const connect = useCallback(async () => { - invariant(injected, 'Connector is required'); - - if (hasInjected() && isXdefiProvider()) { - await disconnect(); - await activate(injected); - onConnect?.(); - } else { - suggestApp(); - } - }, [injected, disconnect, activate, onConnect, suggestApp]); - - return { connect, connector: injected }; -}; diff --git a/packages/web3-react/test/hooks/useConnectorImToken.test.ts b/packages/web3-react/test/hooks/useConnectorImToken.test.ts deleted file mode 100644 index 26cac37b..00000000 --- a/packages/web3-react/test/hooks/useConnectorImToken.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -jest.mock('tiny-warning'); -jest.mock('../../src/helpers/openWindow'); -jest.mock('../../src/hooks/useWeb3'); -jest.mock('../../src/hooks/useConnectors'); -jest.mock('wagmi'); - -const mockIsMobileOrTablet = jest.fn(); -jest.mock('../../src/helpers/ua', () => ({ - get isMobileOrTablet() { - return mockIsMobileOrTablet(); - }, -})); - -import { useDisconnect } from 'wagmi'; -import warning from 'tiny-warning'; -import { renderHook, act } from '@testing-library/react-hooks'; -import { openWindow } from '../../src/helpers/openWindow'; -import { useConnectorImToken } from '../../src/hooks/useConnectorImToken'; -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(); - mockIsMobileOrTablet.mockReturnValue(true); -}); - -describe('useConnectorImToken', () => { - test('should not return connect if it’s mobile', async () => { - mockIsMobileOrTablet.mockReturnValue(true); - const { result } = renderHook(() => useConnectorImToken()); - const { connect } = result.current; - - expect(connect).toBeDefined; - }); - - test('should connect if ethereum and imToken are presented', async () => { - const mockActivate = jest.fn(async () => true); - const mockDeactivate = jest.fn(async () => true); - const injected = {}; - - window.ethereum = {}; - window.ethereum.isImToken = true; - mockUseWeb3.mockReturnValue({ activate: mockActivate, deactivate: mockDeactivate } as any); - mockUseConnectors.mockReturnValue({ injected } as any); - - const { result } = renderHook(() => useConnectorImToken()); - const { connect } = result.current; - - await act(async () => await connect?.()); - expect(mockActivate).toHaveBeenCalledWith(injected); - expect(mockActivate).toHaveBeenCalledTimes(1); - }); - - test('should open window if ethereum is not presented', async () => { - const { result } = renderHook(() => useConnectorImToken()); - const { connect } = result.current; - - await act(async () => await 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(() => useConnectorImToken()); - const { connect } = result.current; - - await act(async () => await connect?.()); - expect(mockWarning).toHaveBeenCalledTimes(1); - }); -}); diff --git a/packages/web3-react/test/hooks/useConnectorTrust.test.ts b/packages/web3-react/test/hooks/useConnectorTrust.test.ts deleted file mode 100644 index 9b2b2f7e..00000000 --- a/packages/web3-react/test/hooks/useConnectorTrust.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -jest.mock('tiny-warning'); -jest.mock('../../src/helpers/openWindow'); -jest.mock('../../src/hooks/useWeb3'); -jest.mock('../../src/hooks/useConnectors'); -jest.mock('wagmi'); - -const mockIsMobileOrTablet = jest.fn(); -jest.mock('../../src/helpers/ua', () => ({ - get isMobileOrTablet() { - return mockIsMobileOrTablet(); - }, -})); - -import { useDisconnect } from 'wagmi'; -import warning from 'tiny-warning'; -import { renderHook, act } from '@testing-library/react-hooks'; -import { openWindow } from '../../src/helpers/openWindow'; -import { useConnectorTrust } from '../../src/hooks/useConnectorTrust'; -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(); - mockIsMobileOrTablet.mockReturnValue(true); -}); - -describe('useConnectorTrust', () => { - test('should not return connect if it’s mobile', async () => { - mockIsMobileOrTablet.mockReturnValue(true); - const { result } = renderHook(() => useConnectorTrust()); - const { connect } = result.current; - - expect(connect).toBeDefined; - }); - - test('should connect if ethereum and Trust are presented', async () => { - const mockActivate = jest.fn(async () => true); - const mockDeactivate = jest.fn(async () => true); - const injected = {}; - - window.ethereum = {}; - window.ethereum.isTrust = true; - mockUseWeb3.mockReturnValue({ activate: mockActivate, deactivate: mockDeactivate } as any); - mockUseConnectors.mockReturnValue({ injected } as any); - - const { result } = renderHook(() => useConnectorTrust()); - const { connect } = result.current; - - await act(async () => await connect?.()); - expect(mockActivate).toHaveBeenCalledWith(injected); - expect(mockActivate).toHaveBeenCalledTimes(1); - }); - - test('should open window if ethereum is not presented', async () => { - const { result } = renderHook(() => useConnectorTrust()); - const { connect } = result.current; - - await act(async () => await 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(() => useConnectorTrust()); - const { connect } = result.current; - - await act(async () => await connect?.()); - expect(mockWarning).toHaveBeenCalledTimes(1); - }); -}); diff --git a/packages/web3-react/test/hooks/useConnectorXdefi.test.ts b/packages/web3-react/test/hooks/useConnectorXdefi.test.ts deleted file mode 100644 index 0fe2b117..00000000 --- a/packages/web3-react/test/hooks/useConnectorXdefi.test.ts +++ /dev/null @@ -1,58 +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 { useWeb3, useConnectors, useConnectorXdefi } from '../../src'; - -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('useConnectorXdefi', () => { - test('should connect if ethereum and Xdefi are presented', async () => { - const mockActivate = jest.fn(async () => true); - const mockDeactivate = jest.fn(async () => true); - const injected = {}; - - window.xfi = {}; - window.ethereum = {}; - window.ethereum.isXDEFI = true; - mockUseWeb3.mockReturnValue({ activate: mockActivate, deactivate: mockDeactivate } as any); - mockUseConnectors.mockReturnValue({ injected } as any); - - const { result } = renderHook(() => useConnectorXdefi()); - 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(() => useConnectorXdefi()); - const { connect } = result.current; - - await act(() => connect()); - expect(mockOpenWindow).toHaveBeenCalledTimes(1); - }); -}); From d0dd20bf803493fb7a2f2bfc0b79fa0d724e57d3 Mon Sep 17 00:00:00 2001 From: Alexander Khramov Date: Tue, 5 Dec 2023 14:29:51 +0300 Subject: [PATCH 4/5] fix: eslint error --- .../src/components/WalletsModalForEth/WalletsModalForEth.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx b/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx index 768626ee..db07c54f 100644 --- a/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx +++ b/packages/connect-wallet-modal/src/components/WalletsModalForEth/WalletsModalForEth.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { helpers } from '@reef-knot/web3-react'; import { useReefKnotContext } from '@reef-knot/core-react'; import { WalletAdapterData } from '@reef-knot/types'; import { From acbcd7518814005d7696cc2cdad69882fac4a575 Mon Sep 17 00:00:00 2001 From: Alexander Khramov Date: Wed, 6 Dec 2023 14:37:40 +0300 Subject: [PATCH 5/5] chore: reef-knot v1.12.0 --- packages/connect-wallet-modal/CHANGELOG.md | 6 ++++++ packages/connect-wallet-modal/package.json | 6 +++--- packages/reef-knot/CHANGELOG.md | 10 ++++++++++ packages/reef-knot/package.json | 10 +++++----- packages/wallets-icons/CHANGELOG.md | 6 ++++++ packages/wallets-icons/package.json | 2 +- packages/wallets-list/CHANGELOG.md | 6 ++++++ packages/wallets-list/package.json | 2 +- packages/web3-react/CHANGELOG.md | 6 ++++++ packages/web3-react/package.json | 2 +- 10 files changed, 45 insertions(+), 11 deletions(-) diff --git a/packages/connect-wallet-modal/CHANGELOG.md b/packages/connect-wallet-modal/CHANGELOG.md index 3696ca92..402653b6 100644 --- a/packages/connect-wallet-modal/CHANGELOG.md +++ b/packages/connect-wallet-modal/CHANGELOG.md @@ -1,5 +1,11 @@ # @reef-knot/connect-wallet-modal +## 1.12.0 + +### Minor Changes + +- Rework XDEFI, Trust, imToken to use Wallet Adapters and wagmi + ## 1.11.1 ### Patch Changes diff --git a/packages/connect-wallet-modal/package.json b/packages/connect-wallet-modal/package.json index 5f772df9..79ce381f 100644 --- a/packages/connect-wallet-modal/package.json +++ b/packages/connect-wallet-modal/package.json @@ -1,6 +1,6 @@ { "name": "@reef-knot/connect-wallet-modal", - "version": "1.11.1", + "version": "1.12.0", "main": "dist/index.js", "types": "dist/index.d.ts", "exports": { @@ -49,8 +49,8 @@ "@reef-knot/types": "^1.3.0", "@reef-knot/ui-react": "^1.0.7", "@reef-knot/wallets-helpers": "^1.1.5", - "@reef-knot/wallets-icons": "^1.3.0", - "@reef-knot/web3-react": "^1.9.0", + "@reef-knot/wallets-icons": "^1.4.0", + "@reef-knot/web3-react": "^1.10.0", "@reef-knot/ledger-connector": "^1.1.0", "@types/ua-parser-js": "^0.7.36", "eslint-config-custom": "*", diff --git a/packages/reef-knot/CHANGELOG.md b/packages/reef-knot/CHANGELOG.md index 4d7607e0..3fa977fc 100644 --- a/packages/reef-knot/CHANGELOG.md +++ b/packages/reef-knot/CHANGELOG.md @@ -1,5 +1,15 @@ # reef-knot +## 1.12.0 + +### Patch Changes + +- Updated dependencies + - @reef-knot/connect-wallet-modal@1.12.0 + - @reef-knot/wallets-list@1.8.0 + - @reef-knot/web3-react@1.10.0 + - @reef-knot/wallets-icons@1.4.0 + ## 1.11.2 ### Patch Changes diff --git a/packages/reef-knot/package.json b/packages/reef-knot/package.json index 471fbffd..86a2bc0a 100644 --- a/packages/reef-knot/package.json +++ b/packages/reef-knot/package.json @@ -1,6 +1,6 @@ { "name": "reef-knot", - "version": "1.11.2", + "version": "1.12.0", "main": "dist/index.js", "types": "dist/index.d.ts", "exports": { @@ -41,12 +41,12 @@ "lint": "eslint --ext ts,tsx,js,mjs ." }, "dependencies": { - "@reef-knot/connect-wallet-modal": "1.11.1", + "@reef-knot/connect-wallet-modal": "1.12.0", "@reef-knot/core-react": "1.7.0", - "@reef-knot/web3-react": "1.9.1", + "@reef-knot/web3-react": "1.10.0", "@reef-knot/ui-react": "1.0.7", - "@reef-knot/wallets-icons": "1.3.0", - "@reef-knot/wallets-list": "1.7.1", + "@reef-knot/wallets-icons": "1.4.0", + "@reef-knot/wallets-list": "1.8.0", "@reef-knot/wallets-helpers": "1.1.5", "@reef-knot/types": "1.3.0", "@reef-knot/ledger-connector": "1.1.1" diff --git a/packages/wallets-icons/CHANGELOG.md b/packages/wallets-icons/CHANGELOG.md index 3eced7a1..e3620551 100644 --- a/packages/wallets-icons/CHANGELOG.md +++ b/packages/wallets-icons/CHANGELOG.md @@ -1,5 +1,11 @@ # @reef-knot/wallets-icons +## 1.4.0 + +### Minor Changes + +- Remove XDEFI, Trust, imToken icons + ## 1.3.0 ### Minor Changes diff --git a/packages/wallets-icons/package.json b/packages/wallets-icons/package.json index 6d2dc985..0673a372 100644 --- a/packages/wallets-icons/package.json +++ b/packages/wallets-icons/package.json @@ -1,6 +1,6 @@ { "name": "@reef-knot/wallets-icons", - "version": "1.3.0", + "version": "1.4.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 8ab15b83..d7cf6ec0 100644 --- a/packages/wallets-list/CHANGELOG.md +++ b/packages/wallets-list/CHANGELOG.md @@ -1,5 +1,11 @@ # @reef-knot/wallets-list +## 1.8.0 + +### Minor Changes + +- Rework XDEFI, Trust, imToken to use Wallet Adapters and wagmi + ## 1.7.1 ### Patch Changes diff --git a/packages/wallets-list/package.json b/packages/wallets-list/package.json index 2f863a02..3e733c91 100644 --- a/packages/wallets-list/package.json +++ b/packages/wallets-list/package.json @@ -1,6 +1,6 @@ { "name": "@reef-knot/wallets-list", - "version": "1.7.1", + "version": "1.8.0", "main": "dist/index.js", "types": "dist/index.d.ts", "exports": { diff --git a/packages/web3-react/CHANGELOG.md b/packages/web3-react/CHANGELOG.md index 579c0ee5..48cab28b 100644 --- a/packages/web3-react/CHANGELOG.md +++ b/packages/web3-react/CHANGELOG.md @@ -1,5 +1,11 @@ # @reef-knot/web3-react +## 1.10.0 + +### Minor Changes + +- Remove XDEFI, Trust, imToken related code + ## 1.9.1 ### Patch Changes diff --git a/packages/web3-react/package.json b/packages/web3-react/package.json index 1b140ef8..ae12118b 100644 --- a/packages/web3-react/package.json +++ b/packages/web3-react/package.json @@ -1,6 +1,6 @@ { "name": "@reef-knot/web3-react", - "version": "1.9.1", + "version": "1.10.0", "main": "dist/index.js", "types": "dist/index.d.ts", "exports": {