@dynamic-labs/multi-wallet 0.16.12-viem.1 → 0.16.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -3
- package/package.json +4 -4
- package/src/errors.cjs +2 -1
- package/src/errors.d.ts +6 -2
- package/src/errors.js +2 -1
- package/src/multi-wallet.cjs +4 -3
- package/src/multi-wallet.js +4 -3
- package/src/rpcProviders.cjs +2 -6
- package/src/rpcProviders.js +2 -6
- package/src/types.d.ts +8 -16
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs +54 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +3 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +50 -0
- package/src/utils/assignConfirmationScreenToProvider/index.d.ts +1 -0
- package/src/utils/isFunction/isFunction.cjs +8 -0
- package/src/utils/isFunction/isFunction.js +4 -0
- package/src/utils/message.cjs +2 -2
- package/src/utils/message.js +1 -1
- package/src/wallets/algorand/myalgo.d.ts +2 -1
- package/src/wallets/clients/coinbase/coinbase.cjs +2 -2
- package/src/wallets/clients/coinbase/coinbase.js +2 -2
- package/src/wallets/clients/walletConnect/walletConnect.cjs +5 -9
- package/src/wallets/clients/walletConnect/walletConnect.d.ts +2 -2
- package/src/wallets/clients/walletConnect/walletConnect.js +5 -9
- package/src/wallets/ethereum/BloctoEvm.cjs +140 -0
- package/src/wallets/ethereum/BloctoEvm.d.ts +2 -4
- package/src/wallets/ethereum/BloctoEvm.js +134 -0
- package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.cjs +37 -5
- package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.d.ts +3 -0
- package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.js +37 -5
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.cjs +14 -35
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.d.ts +4 -4
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.js +14 -35
- package/src/wallets/ethereum/coinbase.cjs +7 -18
- package/src/wallets/ethereum/coinbase.d.ts +2 -750
- package/src/wallets/ethereum/coinbase.js +7 -18
- package/src/wallets/ethereum/ethProvider.cjs +29 -13
- package/src/wallets/ethereum/ethProvider.d.ts +7 -7
- package/src/wallets/ethereum/ethProvider.js +29 -13
- package/src/wallets/ethereum/ethProviderHelper.cjs +34 -52
- package/src/wallets/ethereum/ethProviderHelper.d.ts +20 -20
- package/src/wallets/ethereum/ethProviderHelper.js +34 -52
- package/src/wallets/ethereum/fortmatic.cjs +7 -15
- package/src/wallets/ethereum/fortmatic.d.ts +3 -5
- package/src/wallets/ethereum/fortmatic.js +7 -15
- package/src/wallets/ethereum/meta-mask.cjs +2 -13
- package/src/wallets/ethereum/meta-mask.d.ts +3 -752
- package/src/wallets/ethereum/meta-mask.js +2 -13
- package/src/wallets/walletConnect/walletConnect.cjs +6 -8
- package/src/wallets/walletConnect/walletConnect.d.ts +4 -751
- package/src/wallets/walletConnect/walletConnect.js +6 -8
- package/src/wallets/walletConnect/walletConnectV2.cjs +7 -11
- package/src/wallets/walletConnect/walletConnectV2.d.ts +4 -751
- package/src/wallets/walletConnect/walletConnectV2.js +7 -11
- package/src/wallets/window.d.ts +1 -3
- package/src/getOrMapViemChain.cjs +0 -77
- package/src/getOrMapViemChain.d.ts +0 -11
- package/src/getOrMapViemChain.js +0 -51
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import {
|
|
2
|
+
import { ethers } from 'ethers';
|
|
3
3
|
import { getCoinbaseProvider, fetchPublicAddress, signMessage, killCoinbaseSession } from '../clients/coinbase/coinbase.js';
|
|
4
4
|
import { normalizeWalletName } from '../../utils/normalizeWalletName/normalizeWalletName.js';
|
|
5
5
|
import { EthProviderHelper } from './ethProviderHelper.js';
|
|
@@ -25,29 +25,18 @@ class Coinbase extends EthProvider {
|
|
|
25
25
|
return normalizeWalletName(this.name);
|
|
26
26
|
}
|
|
27
27
|
setupEventListeners(listeners) {
|
|
28
|
-
|
|
29
|
-
if (!provider) {
|
|
30
|
-
return () => { };
|
|
31
|
-
}
|
|
32
|
-
return this.ethProviderHelper._setupEventListeners(listeners, this.name, createPublicClient({
|
|
33
|
-
transport: custom(provider),
|
|
34
|
-
}));
|
|
28
|
+
return this.ethProviderHelper._setupEventListeners(listeners, this.getWeb3Provider());
|
|
35
29
|
}
|
|
36
30
|
teardownEventListeners() {
|
|
37
31
|
return this.ethProviderHelper._teardownEventListeners(this.name);
|
|
38
32
|
}
|
|
39
33
|
getWeb3Provider() {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return createWalletClient({
|
|
43
|
-
transport: custom(provider),
|
|
44
|
-
});
|
|
34
|
+
if (this.isInstalledOnBrowser()) {
|
|
35
|
+
return this.ethProviderHelper.findProvider(this.name);
|
|
45
36
|
}
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
})),
|
|
50
|
-
});
|
|
37
|
+
return new ethers.providers.Web3Provider(getCoinbaseProvider({
|
|
38
|
+
opts: this.coinbaseProviderOpts,
|
|
39
|
+
}), 'any');
|
|
51
40
|
}
|
|
52
41
|
isInstalledOnBrowser() {
|
|
53
42
|
return this.ethProviderHelper.isInstalledHelper(this.name);
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
|
-
var
|
|
6
|
+
var ethers = require('ethers');
|
|
7
7
|
var errors = require('../../errors.cjs');
|
|
8
8
|
var rpcProviders = require('../../rpcProviders.cjs');
|
|
9
|
-
var getOrMapViemChain = require('../../getOrMapViemChain.cjs');
|
|
10
9
|
var evmNetwork = require('./evm-network.cjs');
|
|
11
10
|
|
|
12
11
|
class EthProvider {
|
|
@@ -34,16 +33,16 @@ class EthProvider {
|
|
|
34
33
|
}
|
|
35
34
|
constructor({ evmNetworks }) {
|
|
36
35
|
this.getBalance = () => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
var _a;
|
|
37
37
|
// This is equivalent to getSigner().getAddress() but does not crash
|
|
38
38
|
// if the signer is not available
|
|
39
39
|
const [address] = yield this.getConnectedAccounts();
|
|
40
40
|
if (!address)
|
|
41
41
|
return;
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
if (!result && result !== BigInt(0))
|
|
42
|
+
const result = yield ((_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getBalance(address));
|
|
43
|
+
if (!result)
|
|
45
44
|
return;
|
|
46
|
-
return
|
|
45
|
+
return ethers.ethers.utils.formatEther(result);
|
|
47
46
|
});
|
|
48
47
|
this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
|
|
49
48
|
var _a;
|
|
@@ -56,16 +55,20 @@ class EthProvider {
|
|
|
56
55
|
}
|
|
57
56
|
getNetwork() {
|
|
58
57
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
const
|
|
60
|
-
if (!this.supportsNetworkSwitching ||
|
|
58
|
+
const provider = this.getWeb3Provider();
|
|
59
|
+
if (!this.supportsNetworkSwitching ||
|
|
60
|
+
!provider ||
|
|
61
|
+
!('getNetwork' in provider)) {
|
|
61
62
|
return Promise.resolve(undefined);
|
|
62
63
|
}
|
|
63
|
-
|
|
64
|
+
const network = yield provider.getNetwork();
|
|
65
|
+
return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
|
|
64
66
|
});
|
|
65
67
|
}
|
|
66
68
|
getSigner() {
|
|
69
|
+
var _a;
|
|
67
70
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
68
|
-
return this.getWeb3Provider();
|
|
71
|
+
return (_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getSigner();
|
|
69
72
|
});
|
|
70
73
|
}
|
|
71
74
|
supportsNetworkSwitching() {
|
|
@@ -96,7 +99,7 @@ class EthProvider {
|
|
|
96
99
|
const provider = this.getWeb3Provider();
|
|
97
100
|
if (!provider)
|
|
98
101
|
return [];
|
|
99
|
-
return provider.
|
|
102
|
+
return provider.send('eth_accounts', []);
|
|
100
103
|
});
|
|
101
104
|
}
|
|
102
105
|
providerSwitchNetwork({ network, provider, }) {
|
|
@@ -111,7 +114,11 @@ class EthProvider {
|
|
|
111
114
|
if (!this.supportsNetworkSwitching()) {
|
|
112
115
|
throw new errors.DynamicError('Network switching is not supported');
|
|
113
116
|
}
|
|
114
|
-
return yield provider.
|
|
117
|
+
return yield provider.send('wallet_switchEthereumChain', [
|
|
118
|
+
{
|
|
119
|
+
chainId: `0x${chainId.toString(16)}`,
|
|
120
|
+
},
|
|
121
|
+
]);
|
|
115
122
|
}
|
|
116
123
|
catch (error) {
|
|
117
124
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -135,8 +142,17 @@ class EthProvider {
|
|
|
135
142
|
providerAddNetwork({ network, provider, }) {
|
|
136
143
|
var _a;
|
|
137
144
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, chainName } = network;
|
|
138
146
|
try {
|
|
139
|
-
return yield provider.
|
|
147
|
+
return yield provider.send('wallet_addEthereumChain', [
|
|
148
|
+
{
|
|
149
|
+
blockExplorerUrls,
|
|
150
|
+
chainId: `0x${chainId.toString(16)}`,
|
|
151
|
+
chainName,
|
|
152
|
+
nativeCurrency,
|
|
153
|
+
rpcUrls,
|
|
154
|
+
},
|
|
155
|
+
]);
|
|
140
156
|
}
|
|
141
157
|
catch (error) {
|
|
142
158
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
2
|
import { EvmNetwork } from './evm-network';
|
|
3
3
|
export type SwitchNetworkOps = {
|
|
4
4
|
networkChainId?: number;
|
|
@@ -9,25 +9,25 @@ type EvmRpcMap = {
|
|
|
9
9
|
};
|
|
10
10
|
export declare abstract class EthProvider {
|
|
11
11
|
evmNetworks: EvmNetwork[];
|
|
12
|
-
abstract getWeb3Provider():
|
|
12
|
+
abstract getWeb3Provider(): ethers.providers.Web3Provider | undefined;
|
|
13
13
|
getDeepLink(): string | undefined;
|
|
14
|
-
getRpcProvider(): Promise<
|
|
14
|
+
getRpcProvider(): Promise<ethers.providers.JsonRpcProvider | undefined>;
|
|
15
15
|
constructor({ evmNetworks }: {
|
|
16
16
|
evmNetworks: EvmNetwork[];
|
|
17
17
|
});
|
|
18
18
|
getNetwork(): Promise<number | undefined>;
|
|
19
|
-
getSigner(): Promise<
|
|
19
|
+
getSigner(): Promise<ethers.providers.JsonRpcSigner | undefined>;
|
|
20
20
|
getBalance: () => Promise<string | undefined>;
|
|
21
21
|
supportsNetworkSwitching(): boolean;
|
|
22
22
|
switchNetwork({ networkName, networkChainId, }: SwitchNetworkOps): Promise<void>;
|
|
23
|
-
getConnectedAccounts(): Promise
|
|
23
|
+
getConnectedAccounts(): Promise<string[]>;
|
|
24
24
|
protected providerSwitchNetwork({ network, provider, }: {
|
|
25
25
|
network: EvmNetwork;
|
|
26
|
-
provider:
|
|
26
|
+
provider: ethers.providers.Web3Provider;
|
|
27
27
|
}): Promise<void>;
|
|
28
28
|
protected providerAddNetwork({ network, provider, }: {
|
|
29
29
|
network: EvmNetwork;
|
|
30
|
-
provider:
|
|
30
|
+
provider: ethers.providers.Web3Provider;
|
|
31
31
|
}): Promise<void>;
|
|
32
32
|
protected evmNetworkRpcMap: () => EvmRpcMap;
|
|
33
33
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import {
|
|
2
|
+
import { ethers } from 'ethers';
|
|
3
3
|
import { DynamicError } from '../../errors.js';
|
|
4
4
|
import { getEvmDefaultRpcProvider, getEvmRpcProviderByChainId } from '../../rpcProviders.js';
|
|
5
|
-
import { getOrMapViemChain } from '../../getOrMapViemChain.js';
|
|
6
5
|
import { findEvmNetwork } from './evm-network.js';
|
|
7
6
|
|
|
8
7
|
class EthProvider {
|
|
@@ -30,16 +29,16 @@ class EthProvider {
|
|
|
30
29
|
}
|
|
31
30
|
constructor({ evmNetworks }) {
|
|
32
31
|
this.getBalance = () => __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
var _a;
|
|
33
33
|
// This is equivalent to getSigner().getAddress() but does not crash
|
|
34
34
|
// if the signer is not available
|
|
35
35
|
const [address] = yield this.getConnectedAccounts();
|
|
36
36
|
if (!address)
|
|
37
37
|
return;
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
if (!result && result !== BigInt(0))
|
|
38
|
+
const result = yield ((_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getBalance(address));
|
|
39
|
+
if (!result)
|
|
41
40
|
return;
|
|
42
|
-
return formatEther(result);
|
|
41
|
+
return ethers.utils.formatEther(result);
|
|
43
42
|
});
|
|
44
43
|
this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
|
|
45
44
|
var _a;
|
|
@@ -52,16 +51,20 @@ class EthProvider {
|
|
|
52
51
|
}
|
|
53
52
|
getNetwork() {
|
|
54
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
const
|
|
56
|
-
if (!this.supportsNetworkSwitching ||
|
|
54
|
+
const provider = this.getWeb3Provider();
|
|
55
|
+
if (!this.supportsNetworkSwitching ||
|
|
56
|
+
!provider ||
|
|
57
|
+
!('getNetwork' in provider)) {
|
|
57
58
|
return Promise.resolve(undefined);
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
+
const network = yield provider.getNetwork();
|
|
61
|
+
return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
|
|
60
62
|
});
|
|
61
63
|
}
|
|
62
64
|
getSigner() {
|
|
65
|
+
var _a;
|
|
63
66
|
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
return this.getWeb3Provider();
|
|
67
|
+
return (_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getSigner();
|
|
65
68
|
});
|
|
66
69
|
}
|
|
67
70
|
supportsNetworkSwitching() {
|
|
@@ -92,7 +95,7 @@ class EthProvider {
|
|
|
92
95
|
const provider = this.getWeb3Provider();
|
|
93
96
|
if (!provider)
|
|
94
97
|
return [];
|
|
95
|
-
return provider.
|
|
98
|
+
return provider.send('eth_accounts', []);
|
|
96
99
|
});
|
|
97
100
|
}
|
|
98
101
|
providerSwitchNetwork({ network, provider, }) {
|
|
@@ -107,7 +110,11 @@ class EthProvider {
|
|
|
107
110
|
if (!this.supportsNetworkSwitching()) {
|
|
108
111
|
throw new DynamicError('Network switching is not supported');
|
|
109
112
|
}
|
|
110
|
-
return yield provider.
|
|
113
|
+
return yield provider.send('wallet_switchEthereumChain', [
|
|
114
|
+
{
|
|
115
|
+
chainId: `0x${chainId.toString(16)}`,
|
|
116
|
+
},
|
|
117
|
+
]);
|
|
111
118
|
}
|
|
112
119
|
catch (error) {
|
|
113
120
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -131,8 +138,17 @@ class EthProvider {
|
|
|
131
138
|
providerAddNetwork({ network, provider, }) {
|
|
132
139
|
var _a;
|
|
133
140
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
+
const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, chainName } = network;
|
|
134
142
|
try {
|
|
135
|
-
return yield provider.
|
|
143
|
+
return yield provider.send('wallet_addEthereumChain', [
|
|
144
|
+
{
|
|
145
|
+
blockExplorerUrls,
|
|
146
|
+
chainId: `0x${chainId.toString(16)}`,
|
|
147
|
+
chainName,
|
|
148
|
+
nativeCurrency,
|
|
149
|
+
rpcUrls,
|
|
150
|
+
},
|
|
151
|
+
]);
|
|
136
152
|
}
|
|
137
153
|
catch (error) {
|
|
138
154
|
if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
|
-
var
|
|
6
|
+
var ethers = require('ethers');
|
|
7
7
|
var normalizeWalletName = require('../../utils/normalizeWalletName/normalizeWalletName.cjs');
|
|
8
8
|
var ProviderLookup = require('../ProviderLookup.cjs');
|
|
9
9
|
var isUnsupportedProviderError = require('../../utils/isUnsupportedProviderError/isUnsupportedProviderError.cjs');
|
|
@@ -87,10 +87,16 @@ class EthProviderHelper {
|
|
|
87
87
|
}
|
|
88
88
|
return ethereumProviders;
|
|
89
89
|
}
|
|
90
|
+
isInstalledHelper(walletName) {
|
|
91
|
+
return this.findProvider(walletName) !== undefined;
|
|
92
|
+
}
|
|
90
93
|
findProvider(walletName) {
|
|
91
94
|
var _a, _b;
|
|
92
95
|
try {
|
|
93
|
-
|
|
96
|
+
const provider = (_b = (_a = this.providers)[normalizeWalletName.normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
97
|
+
return provider === undefined
|
|
98
|
+
? undefined
|
|
99
|
+
: new ethers.ethers.providers.Web3Provider(provider, 'any'); // https://github.com/ethers-io/ethers.js/discussions/1480
|
|
94
100
|
}
|
|
95
101
|
catch (err) {
|
|
96
102
|
if (isUnsupportedProviderError.isUnsupportedProviderError(err)) {
|
|
@@ -101,46 +107,20 @@ class EthProviderHelper {
|
|
|
101
107
|
return undefined;
|
|
102
108
|
}
|
|
103
109
|
}
|
|
104
|
-
isInstalledHelper(walletName) {
|
|
105
|
-
return this.findProvider(walletName) !== undefined;
|
|
106
|
-
}
|
|
107
|
-
findWalletClient(walletName) {
|
|
108
|
-
var _a, _b;
|
|
109
|
-
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
110
|
-
try {
|
|
111
|
-
const provider = (_b = (_a = this.providers)[normalizeWalletName.normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
112
|
-
if (provider) {
|
|
113
|
-
const [account] = yield provider.request({
|
|
114
|
-
method: 'eth_requestAccounts',
|
|
115
|
-
});
|
|
116
|
-
return viem.createWalletClient({ account, transport: viem.custom(provider) });
|
|
117
|
-
}
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
if (isUnsupportedProviderError.isUnsupportedProviderError(err)) {
|
|
122
|
-
logger.logger.error(`ETH Provider is not supported ${err.value}`, err);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
logger.logger.error(`Could not find provider for ${walletName}`, err);
|
|
126
|
-
return undefined;
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
110
|
fetchPublicAddressWithName(name) {
|
|
131
111
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
132
|
-
const
|
|
133
|
-
if (!
|
|
112
|
+
const provider = this.findProvider(name);
|
|
113
|
+
if (!provider) {
|
|
134
114
|
return Promise.resolve(undefined);
|
|
135
115
|
}
|
|
136
|
-
return this.
|
|
116
|
+
return this.fetchPublicAddressWithProvider(provider);
|
|
137
117
|
});
|
|
138
118
|
}
|
|
139
|
-
|
|
119
|
+
fetchPublicAddressWithProvider(provider) {
|
|
140
120
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
141
121
|
try {
|
|
142
|
-
const [lowercaseAddress] = yield
|
|
143
|
-
const publicAddress =
|
|
122
|
+
const [lowercaseAddress] = yield provider.send('eth_requestAccounts', []);
|
|
123
|
+
const publicAddress = ethers.utils.getAddress(lowercaseAddress);
|
|
144
124
|
return publicAddress;
|
|
145
125
|
}
|
|
146
126
|
catch (err) {
|
|
@@ -155,24 +135,22 @@ class EthProviderHelper {
|
|
|
155
135
|
if (!walletAddress) {
|
|
156
136
|
return Promise.resolve(undefined);
|
|
157
137
|
}
|
|
158
|
-
const
|
|
159
|
-
if (!
|
|
138
|
+
const provider = this.findProvider(name);
|
|
139
|
+
if (!provider) {
|
|
160
140
|
return Promise.resolve(undefined);
|
|
161
141
|
}
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
message: messageToSign,
|
|
165
|
-
});
|
|
142
|
+
const signer = provider.getSigner();
|
|
143
|
+
const signedMessage = yield signer.signMessage(messageToSign);
|
|
166
144
|
return signedMessage;
|
|
167
145
|
});
|
|
168
146
|
}
|
|
169
|
-
_setupEventListeners(listeners,
|
|
170
|
-
|
|
171
|
-
if (!provider) {
|
|
147
|
+
_setupEventListeners(listeners, web3Provider) {
|
|
148
|
+
if (!web3Provider) {
|
|
172
149
|
return () => {
|
|
173
150
|
// nothing to teardown
|
|
174
151
|
};
|
|
175
152
|
}
|
|
153
|
+
const externalProvider = web3Provider.provider;
|
|
176
154
|
this.handleAccountChange = (accounts) => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
177
155
|
var _a, _b;
|
|
178
156
|
if (accounts.length === 0) {
|
|
@@ -183,8 +161,8 @@ class EthProviderHelper {
|
|
|
183
161
|
});
|
|
184
162
|
this.handleChainChange = () => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
185
163
|
var _c;
|
|
186
|
-
const
|
|
187
|
-
yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners, chainId.toString()));
|
|
164
|
+
const network = yield web3Provider.getNetwork();
|
|
165
|
+
yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners, network.chainId.toString()));
|
|
188
166
|
});
|
|
189
167
|
this.handleDisconnect = (error) => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
190
168
|
var _d;
|
|
@@ -193,21 +171,25 @@ class EthProviderHelper {
|
|
|
193
171
|
}
|
|
194
172
|
yield ((_d = listeners.onDisconnect) === null || _d === void 0 ? void 0 : _d.call(listeners));
|
|
195
173
|
});
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
174
|
+
externalProvider.on('accountsChanged', this.handleAccountChange);
|
|
175
|
+
externalProvider.on('chainChanged', this.handleChainChange);
|
|
176
|
+
externalProvider.on('disconnect', this.handleDisconnect);
|
|
199
177
|
return () => { };
|
|
200
178
|
}
|
|
201
179
|
_teardownEventListeners(name) {
|
|
202
|
-
const
|
|
203
|
-
if (!provider) {
|
|
180
|
+
const web3Provider = this.findProvider(name);
|
|
181
|
+
if (!web3Provider || !(web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.provider)) {
|
|
204
182
|
return;
|
|
205
183
|
}
|
|
184
|
+
const externalProvider = web3Provider.provider;
|
|
185
|
+
if (this.handleAccountChange) {
|
|
186
|
+
externalProvider.removeListener('accountsChanged', this.handleAccountChange);
|
|
187
|
+
}
|
|
206
188
|
if (this.handleChainChange) {
|
|
207
|
-
|
|
189
|
+
externalProvider.removeListener('chainChanged', this.handleChainChange);
|
|
208
190
|
}
|
|
209
191
|
if (this.handleDisconnect) {
|
|
210
|
-
|
|
192
|
+
externalProvider.removeListener('disconnect', this.handleDisconnect);
|
|
211
193
|
}
|
|
212
194
|
}
|
|
213
195
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
2
|
import { WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
3
3
|
import { ProviderCondition, IEthereum } from '../window';
|
|
4
|
+
type Provider = () => ethers.providers.ExternalProvider | undefined;
|
|
4
5
|
type AccountChangeEventHandler = (accounts: string[]) => Promise<void>;
|
|
5
6
|
type ChainChangeEventHandler = (chainId: string | number) => Promise<void>;
|
|
6
7
|
type DisconnectEventHandler = (error?: {
|
|
@@ -10,31 +11,30 @@ export declare class EthProviderHelper {
|
|
|
10
11
|
handleAccountChange: AccountChangeEventHandler | undefined;
|
|
11
12
|
handleChainChange: ChainChangeEventHandler | undefined;
|
|
12
13
|
handleDisconnect: DisconnectEventHandler | undefined;
|
|
13
|
-
MetamaskProvider:
|
|
14
|
-
BraveProvider:
|
|
15
|
-
DawnProvider:
|
|
16
|
-
FrameProvider:
|
|
17
|
-
CoinbaseProvider:
|
|
18
|
-
OperaProvider:
|
|
19
|
-
GameStopProvider:
|
|
20
|
-
ExodusProvider:
|
|
21
|
-
BloctoProvider:
|
|
22
|
-
TrustWalletProvider:
|
|
23
|
-
PhantomProvider:
|
|
24
|
-
ZerionProvider:
|
|
25
|
-
UnknownInjectedProvider:
|
|
14
|
+
MetamaskProvider: Provider;
|
|
15
|
+
BraveProvider: Provider;
|
|
16
|
+
DawnProvider: Provider;
|
|
17
|
+
FrameProvider: Provider;
|
|
18
|
+
CoinbaseProvider: Provider;
|
|
19
|
+
OperaProvider: Provider;
|
|
20
|
+
GameStopProvider: Provider;
|
|
21
|
+
ExodusProvider: Provider;
|
|
22
|
+
BloctoProvider: Provider;
|
|
23
|
+
TrustWalletProvider: Provider;
|
|
24
|
+
PhantomProvider: Provider;
|
|
25
|
+
ZerionProvider: Provider;
|
|
26
|
+
UnknownInjectedProvider: Provider;
|
|
26
27
|
providers: {
|
|
27
|
-
[wallet: string]:
|
|
28
|
+
[wallet: string]: Provider;
|
|
28
29
|
};
|
|
29
30
|
installedProviderLookup(providerFlags: Array<ProviderCondition>): IEthereum | undefined;
|
|
30
31
|
allInstalledProviders(): IEthereum[];
|
|
31
|
-
findProvider(walletName: string): IEthereum | undefined;
|
|
32
32
|
isInstalledHelper(walletName: string): boolean;
|
|
33
|
-
|
|
34
|
-
fetchPublicAddressWithName(name: string): Promise
|
|
35
|
-
|
|
33
|
+
findProvider(walletName: string): ethers.providers.Web3Provider | undefined;
|
|
34
|
+
fetchPublicAddressWithName(name: string): Promise<string | undefined>;
|
|
35
|
+
fetchPublicAddressWithProvider(provider: ethers.providers.Web3Provider): Promise<string | undefined>;
|
|
36
36
|
signMessageWithName(messageToSign: string, name: string): Promise<string | undefined>;
|
|
37
|
-
_setupEventListeners(listeners: WalletEventListeners,
|
|
37
|
+
_setupEventListeners(listeners: WalletEventListeners, web3Provider?: ethers.providers.Web3Provider): () => void;
|
|
38
38
|
_teardownEventListeners(name: string): void;
|
|
39
39
|
}
|
|
40
40
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import {
|
|
2
|
+
import { ethers, utils } from 'ethers';
|
|
3
3
|
import { normalizeWalletName } from '../../utils/normalizeWalletName/normalizeWalletName.js';
|
|
4
4
|
import { ProviderLookup } from '../ProviderLookup.js';
|
|
5
5
|
import { isUnsupportedProviderError } from '../../utils/isUnsupportedProviderError/isUnsupportedProviderError.js';
|
|
@@ -83,10 +83,16 @@ class EthProviderHelper {
|
|
|
83
83
|
}
|
|
84
84
|
return ethereumProviders;
|
|
85
85
|
}
|
|
86
|
+
isInstalledHelper(walletName) {
|
|
87
|
+
return this.findProvider(walletName) !== undefined;
|
|
88
|
+
}
|
|
86
89
|
findProvider(walletName) {
|
|
87
90
|
var _a, _b;
|
|
88
91
|
try {
|
|
89
|
-
|
|
92
|
+
const provider = (_b = (_a = this.providers)[normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
93
|
+
return provider === undefined
|
|
94
|
+
? undefined
|
|
95
|
+
: new ethers.providers.Web3Provider(provider, 'any'); // https://github.com/ethers-io/ethers.js/discussions/1480
|
|
90
96
|
}
|
|
91
97
|
catch (err) {
|
|
92
98
|
if (isUnsupportedProviderError(err)) {
|
|
@@ -97,46 +103,20 @@ class EthProviderHelper {
|
|
|
97
103
|
return undefined;
|
|
98
104
|
}
|
|
99
105
|
}
|
|
100
|
-
isInstalledHelper(walletName) {
|
|
101
|
-
return this.findProvider(walletName) !== undefined;
|
|
102
|
-
}
|
|
103
|
-
findWalletClient(walletName) {
|
|
104
|
-
var _a, _b;
|
|
105
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
try {
|
|
107
|
-
const provider = (_b = (_a = this.providers)[normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
108
|
-
if (provider) {
|
|
109
|
-
const [account] = yield provider.request({
|
|
110
|
-
method: 'eth_requestAccounts',
|
|
111
|
-
});
|
|
112
|
-
return createWalletClient({ account, transport: custom(provider) });
|
|
113
|
-
}
|
|
114
|
-
return undefined;
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
if (isUnsupportedProviderError(err)) {
|
|
118
|
-
logger.error(`ETH Provider is not supported ${err.value}`, err);
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
logger.error(`Could not find provider for ${walletName}`, err);
|
|
122
|
-
return undefined;
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
106
|
fetchPublicAddressWithName(name) {
|
|
127
107
|
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
-
const
|
|
129
|
-
if (!
|
|
108
|
+
const provider = this.findProvider(name);
|
|
109
|
+
if (!provider) {
|
|
130
110
|
return Promise.resolve(undefined);
|
|
131
111
|
}
|
|
132
|
-
return this.
|
|
112
|
+
return this.fetchPublicAddressWithProvider(provider);
|
|
133
113
|
});
|
|
134
114
|
}
|
|
135
|
-
|
|
115
|
+
fetchPublicAddressWithProvider(provider) {
|
|
136
116
|
return __awaiter(this, void 0, void 0, function* () {
|
|
137
117
|
try {
|
|
138
|
-
const [lowercaseAddress] = yield
|
|
139
|
-
const publicAddress = getAddress(lowercaseAddress);
|
|
118
|
+
const [lowercaseAddress] = yield provider.send('eth_requestAccounts', []);
|
|
119
|
+
const publicAddress = utils.getAddress(lowercaseAddress);
|
|
140
120
|
return publicAddress;
|
|
141
121
|
}
|
|
142
122
|
catch (err) {
|
|
@@ -151,24 +131,22 @@ class EthProviderHelper {
|
|
|
151
131
|
if (!walletAddress) {
|
|
152
132
|
return Promise.resolve(undefined);
|
|
153
133
|
}
|
|
154
|
-
const
|
|
155
|
-
if (!
|
|
134
|
+
const provider = this.findProvider(name);
|
|
135
|
+
if (!provider) {
|
|
156
136
|
return Promise.resolve(undefined);
|
|
157
137
|
}
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
message: messageToSign,
|
|
161
|
-
});
|
|
138
|
+
const signer = provider.getSigner();
|
|
139
|
+
const signedMessage = yield signer.signMessage(messageToSign);
|
|
162
140
|
return signedMessage;
|
|
163
141
|
});
|
|
164
142
|
}
|
|
165
|
-
_setupEventListeners(listeners,
|
|
166
|
-
|
|
167
|
-
if (!provider) {
|
|
143
|
+
_setupEventListeners(listeners, web3Provider) {
|
|
144
|
+
if (!web3Provider) {
|
|
168
145
|
return () => {
|
|
169
146
|
// nothing to teardown
|
|
170
147
|
};
|
|
171
148
|
}
|
|
149
|
+
const externalProvider = web3Provider.provider;
|
|
172
150
|
this.handleAccountChange = (accounts) => __awaiter(this, void 0, void 0, function* () {
|
|
173
151
|
var _a, _b;
|
|
174
152
|
if (accounts.length === 0) {
|
|
@@ -179,8 +157,8 @@ class EthProviderHelper {
|
|
|
179
157
|
});
|
|
180
158
|
this.handleChainChange = () => __awaiter(this, void 0, void 0, function* () {
|
|
181
159
|
var _c;
|
|
182
|
-
const
|
|
183
|
-
yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners, chainId.toString()));
|
|
160
|
+
const network = yield web3Provider.getNetwork();
|
|
161
|
+
yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners, network.chainId.toString()));
|
|
184
162
|
});
|
|
185
163
|
this.handleDisconnect = (error) => __awaiter(this, void 0, void 0, function* () {
|
|
186
164
|
var _d;
|
|
@@ -189,21 +167,25 @@ class EthProviderHelper {
|
|
|
189
167
|
}
|
|
190
168
|
yield ((_d = listeners.onDisconnect) === null || _d === void 0 ? void 0 : _d.call(listeners));
|
|
191
169
|
});
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
170
|
+
externalProvider.on('accountsChanged', this.handleAccountChange);
|
|
171
|
+
externalProvider.on('chainChanged', this.handleChainChange);
|
|
172
|
+
externalProvider.on('disconnect', this.handleDisconnect);
|
|
195
173
|
return () => { };
|
|
196
174
|
}
|
|
197
175
|
_teardownEventListeners(name) {
|
|
198
|
-
const
|
|
199
|
-
if (!provider) {
|
|
176
|
+
const web3Provider = this.findProvider(name);
|
|
177
|
+
if (!web3Provider || !(web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.provider)) {
|
|
200
178
|
return;
|
|
201
179
|
}
|
|
180
|
+
const externalProvider = web3Provider.provider;
|
|
181
|
+
if (this.handleAccountChange) {
|
|
182
|
+
externalProvider.removeListener('accountsChanged', this.handleAccountChange);
|
|
183
|
+
}
|
|
202
184
|
if (this.handleChainChange) {
|
|
203
|
-
|
|
185
|
+
externalProvider.removeListener('chainChanged', this.handleChainChange);
|
|
204
186
|
}
|
|
205
187
|
if (this.handleDisconnect) {
|
|
206
|
-
|
|
188
|
+
externalProvider.removeListener('disconnect', this.handleDisconnect);
|
|
207
189
|
}
|
|
208
190
|
}
|
|
209
191
|
}
|