@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.
Files changed (58) hide show
  1. package/CHANGELOG.md +13 -3
  2. package/package.json +4 -4
  3. package/src/errors.cjs +2 -1
  4. package/src/errors.d.ts +6 -2
  5. package/src/errors.js +2 -1
  6. package/src/multi-wallet.cjs +4 -3
  7. package/src/multi-wallet.js +4 -3
  8. package/src/rpcProviders.cjs +2 -6
  9. package/src/rpcProviders.js +2 -6
  10. package/src/types.d.ts +8 -16
  11. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs +54 -0
  12. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +3 -0
  13. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +50 -0
  14. package/src/utils/assignConfirmationScreenToProvider/index.d.ts +1 -0
  15. package/src/utils/isFunction/isFunction.cjs +8 -0
  16. package/src/utils/isFunction/isFunction.js +4 -0
  17. package/src/utils/message.cjs +2 -2
  18. package/src/utils/message.js +1 -1
  19. package/src/wallets/algorand/myalgo.d.ts +2 -1
  20. package/src/wallets/clients/coinbase/coinbase.cjs +2 -2
  21. package/src/wallets/clients/coinbase/coinbase.js +2 -2
  22. package/src/wallets/clients/walletConnect/walletConnect.cjs +5 -9
  23. package/src/wallets/clients/walletConnect/walletConnect.d.ts +2 -2
  24. package/src/wallets/clients/walletConnect/walletConnect.js +5 -9
  25. package/src/wallets/ethereum/BloctoEvm.cjs +140 -0
  26. package/src/wallets/ethereum/BloctoEvm.d.ts +2 -4
  27. package/src/wallets/ethereum/BloctoEvm.js +134 -0
  28. package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.cjs +37 -5
  29. package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.d.ts +3 -0
  30. package/src/wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.js +37 -5
  31. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.cjs +14 -35
  32. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.d.ts +4 -4
  33. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.js +14 -35
  34. package/src/wallets/ethereum/coinbase.cjs +7 -18
  35. package/src/wallets/ethereum/coinbase.d.ts +2 -750
  36. package/src/wallets/ethereum/coinbase.js +7 -18
  37. package/src/wallets/ethereum/ethProvider.cjs +29 -13
  38. package/src/wallets/ethereum/ethProvider.d.ts +7 -7
  39. package/src/wallets/ethereum/ethProvider.js +29 -13
  40. package/src/wallets/ethereum/ethProviderHelper.cjs +34 -52
  41. package/src/wallets/ethereum/ethProviderHelper.d.ts +20 -20
  42. package/src/wallets/ethereum/ethProviderHelper.js +34 -52
  43. package/src/wallets/ethereum/fortmatic.cjs +7 -15
  44. package/src/wallets/ethereum/fortmatic.d.ts +3 -5
  45. package/src/wallets/ethereum/fortmatic.js +7 -15
  46. package/src/wallets/ethereum/meta-mask.cjs +2 -13
  47. package/src/wallets/ethereum/meta-mask.d.ts +3 -752
  48. package/src/wallets/ethereum/meta-mask.js +2 -13
  49. package/src/wallets/walletConnect/walletConnect.cjs +6 -8
  50. package/src/wallets/walletConnect/walletConnect.d.ts +4 -751
  51. package/src/wallets/walletConnect/walletConnect.js +6 -8
  52. package/src/wallets/walletConnect/walletConnectV2.cjs +7 -11
  53. package/src/wallets/walletConnect/walletConnectV2.d.ts +4 -751
  54. package/src/wallets/walletConnect/walletConnectV2.js +7 -11
  55. package/src/wallets/window.d.ts +1 -3
  56. package/src/getOrMapViemChain.cjs +0 -77
  57. package/src/getOrMapViemChain.d.ts +0 -11
  58. package/src/getOrMapViemChain.js +0 -51
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { createPublicClient, custom, createWalletClient } from 'viem';
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
- const provider = this.ethProviderHelper.findProvider(this.name);
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
- const provider = this.ethProviderHelper.findProvider(this.name);
41
- if (this.isInstalledOnBrowser() && provider) {
42
- return createWalletClient({
43
- transport: custom(provider),
44
- });
34
+ if (this.isInstalledOnBrowser()) {
35
+ return this.ethProviderHelper.findProvider(this.name);
45
36
  }
46
- return createWalletClient({
47
- transport: custom(getCoinbaseProvider({
48
- opts: this.coinbaseProviderOpts,
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 viem = require('viem');
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 client = yield this.getRpcProvider();
43
- const result = yield (client === null || client === void 0 ? void 0 : client.getBalance({ address: address }));
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 viem.formatEther(result);
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 walletClient = this.getWeb3Provider();
60
- if (!this.supportsNetworkSwitching || !walletClient) {
58
+ const provider = this.getWeb3Provider();
59
+ if (!this.supportsNetworkSwitching ||
60
+ !provider ||
61
+ !('getNetwork' in provider)) {
61
62
  return Promise.resolve(undefined);
62
63
  }
63
- return walletClient.getChainId();
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.getAddresses();
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.switchChain(getOrMapViemChain.getOrMapViemChain(network));
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.addChain({ chain: getOrMapViemChain.getOrMapViemChain(network) });
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 { PublicClient, WalletClient } from 'viem';
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(): WalletClient | undefined;
12
+ abstract getWeb3Provider(): ethers.providers.Web3Provider | undefined;
13
13
  getDeepLink(): string | undefined;
14
- getRpcProvider(): Promise<PublicClient | undefined>;
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<WalletClient | undefined>;
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<`0x${string}`[]>;
23
+ getConnectedAccounts(): Promise<string[]>;
24
24
  protected providerSwitchNetwork({ network, provider, }: {
25
25
  network: EvmNetwork;
26
- provider: WalletClient;
26
+ provider: ethers.providers.Web3Provider;
27
27
  }): Promise<void>;
28
28
  protected providerAddNetwork({ network, provider, }: {
29
29
  network: EvmNetwork;
30
- provider: WalletClient;
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 { formatEther } from 'viem';
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 client = yield this.getRpcProvider();
39
- const result = yield (client === null || client === void 0 ? void 0 : client.getBalance({ address: address }));
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 walletClient = this.getWeb3Provider();
56
- if (!this.supportsNetworkSwitching || !walletClient) {
54
+ const provider = this.getWeb3Provider();
55
+ if (!this.supportsNetworkSwitching ||
56
+ !provider ||
57
+ !('getNetwork' in provider)) {
57
58
  return Promise.resolve(undefined);
58
59
  }
59
- return walletClient.getChainId();
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.getAddresses();
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.switchChain(getOrMapViemChain(network));
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.addChain({ chain: getOrMapViemChain(network) });
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 viem = require('viem');
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
- return (_b = (_a = this.providers)[normalizeWalletName.normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
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 walletClient = yield this.findWalletClient(name);
133
- if (!walletClient) {
112
+ const provider = this.findProvider(name);
113
+ if (!provider) {
134
114
  return Promise.resolve(undefined);
135
115
  }
136
- return this.fetchPublicAddressWithWalletClient(walletClient);
116
+ return this.fetchPublicAddressWithProvider(provider);
137
117
  });
138
118
  }
139
- fetchPublicAddressWithWalletClient(walletClient) {
119
+ fetchPublicAddressWithProvider(provider) {
140
120
  return tslib.__awaiter(this, void 0, void 0, function* () {
141
121
  try {
142
- const [lowercaseAddress] = yield walletClient.requestAddresses();
143
- const publicAddress = viem.getAddress(lowercaseAddress);
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 walletClient = yield this.findWalletClient(name);
159
- if (!walletClient) {
138
+ const provider = this.findProvider(name);
139
+ if (!provider) {
160
140
  return Promise.resolve(undefined);
161
141
  }
162
- const signedMessage = yield walletClient.signMessage({
163
- account: walletAddress,
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, walletName, publicClient) {
170
- const provider = this.findProvider(walletName);
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 chainId = yield publicClient.getChainId();
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
- provider.on('accountsChanged', this.handleAccountChange);
197
- provider.on('chainChanged', this.handleChainChange);
198
- provider.on('disconnect', this.handleDisconnect);
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 provider = this.findProvider(name);
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
- provider.removeListener('chainChanged', this.handleChainChange);
189
+ externalProvider.removeListener('chainChanged', this.handleChainChange);
208
190
  }
209
191
  if (this.handleDisconnect) {
210
- provider.removeListener('disconnect', this.handleDisconnect);
192
+ externalProvider.removeListener('disconnect', this.handleDisconnect);
211
193
  }
212
194
  }
213
195
  }
@@ -1,6 +1,7 @@
1
- import { PublicClient, WalletClient } from 'viem';
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: () => IEthereum | undefined;
14
- BraveProvider: () => IEthereum | undefined;
15
- DawnProvider: () => IEthereum | undefined;
16
- FrameProvider: () => IEthereum | undefined;
17
- CoinbaseProvider: () => IEthereum | undefined;
18
- OperaProvider: () => IEthereum | undefined;
19
- GameStopProvider: () => IEthereum | undefined;
20
- ExodusProvider: () => IEthereum | undefined;
21
- BloctoProvider: () => IEthereum | undefined;
22
- TrustWalletProvider: () => IEthereum | undefined;
23
- PhantomProvider: () => IEthereum | undefined;
24
- ZerionProvider: () => IEthereum | undefined;
25
- UnknownInjectedProvider: () => IEthereum | undefined;
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]: () => IEthereum | undefined;
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
- findWalletClient(walletName: string): Promise<WalletClient | undefined>;
34
- fetchPublicAddressWithName(name: string): Promise<`0x${string}` | undefined>;
35
- fetchPublicAddressWithWalletClient(walletClient: WalletClient): Promise<`0x${string}` | undefined>;
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, walletName: string, publicClient: PublicClient): () => void;
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 { createWalletClient, custom, getAddress } from 'viem';
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
- return (_b = (_a = this.providers)[normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
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 walletClient = yield this.findWalletClient(name);
129
- if (!walletClient) {
108
+ const provider = this.findProvider(name);
109
+ if (!provider) {
130
110
  return Promise.resolve(undefined);
131
111
  }
132
- return this.fetchPublicAddressWithWalletClient(walletClient);
112
+ return this.fetchPublicAddressWithProvider(provider);
133
113
  });
134
114
  }
135
- fetchPublicAddressWithWalletClient(walletClient) {
115
+ fetchPublicAddressWithProvider(provider) {
136
116
  return __awaiter(this, void 0, void 0, function* () {
137
117
  try {
138
- const [lowercaseAddress] = yield walletClient.requestAddresses();
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 walletClient = yield this.findWalletClient(name);
155
- if (!walletClient) {
134
+ const provider = this.findProvider(name);
135
+ if (!provider) {
156
136
  return Promise.resolve(undefined);
157
137
  }
158
- const signedMessage = yield walletClient.signMessage({
159
- account: walletAddress,
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, walletName, publicClient) {
166
- const provider = this.findProvider(walletName);
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 chainId = yield publicClient.getChainId();
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
- provider.on('accountsChanged', this.handleAccountChange);
193
- provider.on('chainChanged', this.handleChainChange);
194
- provider.on('disconnect', this.handleDisconnect);
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 provider = this.findProvider(name);
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
- provider.removeListener('chainChanged', this.handleChainChange);
185
+ externalProvider.removeListener('chainChanged', this.handleChainChange);
204
186
  }
205
187
  if (this.handleDisconnect) {
206
- provider.removeListener('disconnect', this.handleDisconnect);
188
+ externalProvider.removeListener('disconnect', this.handleDisconnect);
207
189
  }
208
190
  }
209
191
  }