@dynamic-labs/multi-wallet 0.16.15 → 0.16.17-viem.0

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 (54) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +4 -4
  3. package/src/getOrMapViemChain.cjs +77 -0
  4. package/src/getOrMapViemChain.d.ts +11 -0
  5. package/src/getOrMapViemChain.js +51 -0
  6. package/src/multi-wallet.cjs +2 -3
  7. package/src/multi-wallet.js +2 -3
  8. package/src/rpcProviders.cjs +6 -2
  9. package/src/rpcProviders.js +6 -2
  10. package/src/types.d.ts +16 -8
  11. package/src/utils/message.cjs +2 -2
  12. package/src/utils/message.js +1 -1
  13. package/src/utils/shouldLowercaseAddress.cjs +1 -1
  14. package/src/utils/shouldLowercaseAddress.js +1 -1
  15. package/src/wallets/algorand/myalgo.d.ts +1 -2
  16. package/src/wallets/clients/coinbase/coinbase.cjs +2 -2
  17. package/src/wallets/clients/coinbase/coinbase.js +2 -2
  18. package/src/wallets/clients/walletConnect/walletConnect.cjs +9 -5
  19. package/src/wallets/clients/walletConnect/walletConnect.d.ts +2 -2
  20. package/src/wallets/clients/walletConnect/walletConnect.js +9 -5
  21. package/src/wallets/ethereum/BloctoEvm.d.ts +4 -2
  22. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.cjs +35 -14
  23. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.d.ts +4 -4
  24. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.js +35 -14
  25. package/src/wallets/ethereum/coinbase.cjs +18 -7
  26. package/src/wallets/ethereum/coinbase.d.ts +4 -2
  27. package/src/wallets/ethereum/coinbase.js +18 -7
  28. package/src/wallets/ethereum/ethProvider.cjs +13 -29
  29. package/src/wallets/ethereum/ethProvider.d.ts +7 -7
  30. package/src/wallets/ethereum/ethProvider.js +13 -29
  31. package/src/wallets/ethereum/ethProviderHelper.cjs +52 -34
  32. package/src/wallets/ethereum/ethProviderHelper.d.ts +20 -20
  33. package/src/wallets/ethereum/ethProviderHelper.js +52 -34
  34. package/src/wallets/ethereum/fortmatic.cjs +15 -7
  35. package/src/wallets/ethereum/fortmatic.d.ts +5 -3
  36. package/src/wallets/ethereum/fortmatic.js +15 -7
  37. package/src/wallets/ethereum/meta-mask.cjs +13 -2
  38. package/src/wallets/ethereum/meta-mask.d.ts +5 -3
  39. package/src/wallets/ethereum/meta-mask.js +13 -2
  40. package/src/wallets/walletConnect/walletConnect.cjs +8 -6
  41. package/src/wallets/walletConnect/walletConnect.d.ts +4 -4
  42. package/src/wallets/walletConnect/walletConnect.js +8 -6
  43. package/src/wallets/walletConnect/walletConnectV2.cjs +11 -7
  44. package/src/wallets/walletConnect/walletConnectV2.d.ts +4 -4
  45. package/src/wallets/walletConnect/walletConnectV2.js +11 -7
  46. package/src/wallets/window.d.ts +3 -1
  47. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs +0 -54
  48. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +0 -3
  49. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +0 -50
  50. package/src/utils/assignConfirmationScreenToProvider/index.d.ts +0 -1
  51. package/src/utils/isFunction/isFunction.cjs +0 -8
  52. package/src/utils/isFunction/isFunction.js +0 -4
  53. package/src/wallets/ethereum/BloctoEvm.cjs +0 -140
  54. package/src/wallets/ethereum/BloctoEvm.js +0 -134
@@ -1,5 +1,5 @@
1
1
  import { LoginWithMagicLinkEvents, MagicUserMetadata, PromiEvent } from 'magic-sdk';
2
- import { ethers } from 'ethers';
2
+ import { PublicClient, WalletClient } from 'viem';
3
3
  import { Chain, WalletConnector, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
4
4
  import { WalletUiUtils } from '../../../../types';
5
5
  import { CancellablePromise } from '../../../../utils/CancellablePromise';
@@ -39,9 +39,9 @@ export declare abstract class MagicWalletConnector extends MagicClientNetworkHan
39
39
  getBalance(): Promise<string | undefined>;
40
40
  getConnectedAccounts(): Promise<string[]>;
41
41
  getNetwork(): Promise<number | undefined>;
42
- getRpcProvider(): Promise<void | ethers.providers.JsonRpcProvider | undefined>;
43
- getSigner(): Promise<ethers.providers.JsonRpcSigner | undefined>;
44
- getWeb3Provider(): Promise<ethers.providers.Web3Provider>;
42
+ getRpcProvider(): Promise<void | PublicClient | undefined>;
43
+ getSigner(): Promise<WalletClient>;
44
+ getWeb3Provider(): Promise<PublicClient>;
45
45
  isInstalledOnBrowser(): boolean;
46
46
  proveOwnership(messageToSign: string): Promise<string | undefined>;
47
47
  setupEventListeners(listeners: WalletEventListeners): void;
@@ -1,8 +1,6 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { ethers } from 'ethers';
3
- import { DynamicError } from '../../../../errors.js';
2
+ import { formatEther, createWalletClient, custom, createPublicClient, fromHex } from 'viem';
4
3
  import { logger } from '../../../../utils/logger.js';
5
- import { assignConfirmationScreenToProvider } from '../../../../utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js';
6
4
  import { CancellablePromise } from '../../../../utils/CancellablePromise/CancellablePromise.js';
7
5
  import { MagicClientNetworkHandler } from '../MagicClientNetworkHandler/MagicClientNetworkHandler.js';
8
6
 
@@ -80,12 +78,10 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
80
78
  }
81
79
  getBalance() {
82
80
  return __awaiter(this, void 0, void 0, function* () {
81
+ const signer = yield this.getSigner();
83
82
  const provider = yield this.getWeb3Provider();
84
- if (!provider)
85
- throw new DynamicError('No provider');
86
- const signer = provider.getSigner();
87
- const userAddress = yield signer.getAddress();
88
- return ethers.utils.formatEther(yield provider.getBalance(userAddress));
83
+ const [userAddress] = yield signer.getAddresses();
84
+ return formatEther(yield provider.getBalance({ address: userAddress }));
89
85
  });
90
86
  }
91
87
  getConnectedAccounts() {
@@ -109,15 +105,37 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
109
105
  getSigner() {
110
106
  return __awaiter(this, void 0, void 0, function* () {
111
107
  const provider = yield this.getWeb3Provider();
112
- return provider.getSigner();
108
+ return createWalletClient({ transport: custom(provider) });
113
109
  });
114
110
  }
115
111
  getWeb3Provider() {
116
112
  return __awaiter(this, void 0, void 0, function* () {
117
113
  const client = this.getClient();
118
- const provider = new ethers.providers.Web3Provider(client.rpcProvider);
119
- assignConfirmationScreenToProvider(provider, this._walletUiUtils);
120
- return provider;
114
+ const publicClient = createPublicClient({
115
+ transport: custom({
116
+ request: (args) => __awaiter(this, void 0, void 0, function* () {
117
+ var _a, _b;
118
+ if (args.method === 'personal_sign') {
119
+ return this._walletUiUtils.signMessage({
120
+ handler: () => client.rpcProvider.request(args),
121
+ message: fromHex((_a = args.params) === null || _a === void 0 ? void 0 : _a[0], 'string'),
122
+ });
123
+ }
124
+ else if (args.method === 'eth_sendTransaction') {
125
+ return this._walletUiUtils.sendTransaction({
126
+ handler: () => client.rpcProvider.request(args),
127
+ transaction: (_b = args.params) === null || _b === void 0 ? void 0 : _b[0],
128
+ });
129
+ }
130
+ else {
131
+ return client.rpcProvider.request(args);
132
+ }
133
+ }),
134
+ }, {
135
+ retryCount: 0,
136
+ }),
137
+ });
138
+ return publicClient;
121
139
  });
122
140
  }
123
141
  isInstalledOnBrowser() {
@@ -136,8 +154,11 @@ class MagicWalletConnector extends MagicClientNetworkHandler {
136
154
  }
137
155
  signMessage(messageToSign) {
138
156
  return __awaiter(this, void 0, void 0, function* () {
139
- const provider = yield this.getWeb3Provider();
140
- return provider.getSigner().signMessage(messageToSign);
157
+ const signer = yield this.getSigner();
158
+ return signer.signMessage({
159
+ account: (yield this.fetchPublicAddress()),
160
+ message: messageToSign,
161
+ });
141
162
  });
142
163
  }
143
164
  supportsNetworkSwitching() {
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var tslib = require('tslib');
4
- var ethers = require('ethers');
4
+ var viem = require('viem');
5
5
  var coinbase = require('../clients/coinbase/coinbase.cjs');
6
6
  var normalizeWalletName = require('../../utils/normalizeWalletName/normalizeWalletName.cjs');
7
7
  var ethProviderHelper = require('./ethProviderHelper.cjs');
@@ -27,18 +27,29 @@ class Coinbase extends ethProvider.EthProvider {
27
27
  return normalizeWalletName.normalizeWalletName(this.name);
28
28
  }
29
29
  setupEventListeners(listeners) {
30
- return this.ethProviderHelper._setupEventListeners(listeners, this.getWeb3Provider());
30
+ const provider = this.ethProviderHelper.findProvider(this.name);
31
+ if (!provider) {
32
+ return () => { };
33
+ }
34
+ return this.ethProviderHelper._setupEventListeners(listeners, this.name, viem.createPublicClient({
35
+ transport: viem.custom(provider),
36
+ }));
31
37
  }
32
38
  teardownEventListeners() {
33
39
  return this.ethProviderHelper._teardownEventListeners(this.name);
34
40
  }
35
41
  getWeb3Provider() {
36
- if (this.isInstalledOnBrowser()) {
37
- return this.ethProviderHelper.findProvider(this.name);
42
+ const provider = this.ethProviderHelper.findProvider(this.name);
43
+ if (this.isInstalledOnBrowser() && provider) {
44
+ return viem.createWalletClient({
45
+ transport: viem.custom(provider),
46
+ });
38
47
  }
39
- return new ethers.ethers.providers.Web3Provider(coinbase.getCoinbaseProvider({
40
- opts: this.coinbaseProviderOpts,
41
- }), 'any');
48
+ return viem.createWalletClient({
49
+ transport: viem.custom(coinbase.getCoinbaseProvider({
50
+ opts: this.coinbaseProviderOpts,
51
+ })),
52
+ });
42
53
  }
43
54
  isInstalledOnBrowser() {
44
55
  return this.ethProviderHelper.isInstalledHelper(this.name);
@@ -1,4 +1,4 @@
1
- import { ethers } from 'ethers';
1
+ import { WalletClient } from 'viem';
2
2
  import { Chain, FetchPublicAddressOpts, WalletConnector, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
3
3
  import { EthProviderHelper } from './ethProviderHelper';
4
4
  import { EthProvider } from './ethProvider';
@@ -17,10 +17,12 @@ declare class Coinbase extends EthProvider implements WalletConnector {
17
17
  appName?: string;
18
18
  evmNetworks: EvmNetwork[];
19
19
  });
20
+ providerResources: string[] | undefined;
21
+ switchNetworkOnlyFromWallet: boolean | undefined;
20
22
  get key(): string;
21
23
  setupEventListeners(listeners: WalletEventListeners): () => void;
22
24
  teardownEventListeners(): void;
23
- getWeb3Provider(): ethers.providers.Web3Provider | undefined;
25
+ getWeb3Provider(): WalletClient;
24
26
  isInstalledOnBrowser(): boolean;
25
27
  connect(): Promise<void>;
26
28
  fetchPublicAddress(opts?: FetchPublicAddressOpts): Promise<string | undefined>;
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { ethers } from 'ethers';
2
+ import { createPublicClient, custom, createWalletClient } from 'viem';
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,18 +25,29 @@ class Coinbase extends EthProvider {
25
25
  return normalizeWalletName(this.name);
26
26
  }
27
27
  setupEventListeners(listeners) {
28
- return this.ethProviderHelper._setupEventListeners(listeners, this.getWeb3Provider());
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
+ }));
29
35
  }
30
36
  teardownEventListeners() {
31
37
  return this.ethProviderHelper._teardownEventListeners(this.name);
32
38
  }
33
39
  getWeb3Provider() {
34
- if (this.isInstalledOnBrowser()) {
35
- return this.ethProviderHelper.findProvider(this.name);
40
+ const provider = this.ethProviderHelper.findProvider(this.name);
41
+ if (this.isInstalledOnBrowser() && provider) {
42
+ return createWalletClient({
43
+ transport: custom(provider),
44
+ });
36
45
  }
37
- return new ethers.providers.Web3Provider(getCoinbaseProvider({
38
- opts: this.coinbaseProviderOpts,
39
- }), 'any');
46
+ return createWalletClient({
47
+ transport: custom(getCoinbaseProvider({
48
+ opts: this.coinbaseProviderOpts,
49
+ })),
50
+ });
40
51
  }
41
52
  isInstalledOnBrowser() {
42
53
  return this.ethProviderHelper.isInstalledHelper(this.name);
@@ -3,9 +3,10 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib = require('tslib');
6
- var ethers = require('ethers');
6
+ var viem = require('viem');
7
7
  var errors = require('../../errors.cjs');
8
8
  var rpcProviders = require('../../rpcProviders.cjs');
9
+ var getOrMapViemChain = require('../../getOrMapViemChain.cjs');
9
10
  var evmNetwork = require('./evm-network.cjs');
10
11
 
11
12
  class EthProvider {
@@ -33,16 +34,16 @@ class EthProvider {
33
34
  }
34
35
  constructor({ evmNetworks }) {
35
36
  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 result = yield ((_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getBalance(address));
43
- if (!result)
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))
44
45
  return;
45
- return ethers.ethers.utils.formatEther(result);
46
+ return viem.formatEther(result);
46
47
  });
47
48
  this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
48
49
  var _a;
@@ -55,20 +56,16 @@ class EthProvider {
55
56
  }
56
57
  getNetwork() {
57
58
  return tslib.__awaiter(this, void 0, void 0, function* () {
58
- const provider = this.getWeb3Provider();
59
- if (!this.supportsNetworkSwitching ||
60
- !provider ||
61
- !('getNetwork' in provider)) {
59
+ const walletClient = this.getWeb3Provider();
60
+ if (!this.supportsNetworkSwitching || !walletClient) {
62
61
  return Promise.resolve(undefined);
63
62
  }
64
- const network = yield provider.getNetwork();
65
- return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
63
+ return walletClient.getChainId();
66
64
  });
67
65
  }
68
66
  getSigner() {
69
- var _a;
70
67
  return tslib.__awaiter(this, void 0, void 0, function* () {
71
- return (_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getSigner();
68
+ return this.getWeb3Provider();
72
69
  });
73
70
  }
74
71
  supportsNetworkSwitching() {
@@ -99,7 +96,7 @@ class EthProvider {
99
96
  const provider = this.getWeb3Provider();
100
97
  if (!provider)
101
98
  return [];
102
- return provider.send('eth_accounts', []);
99
+ return provider.getAddresses();
103
100
  });
104
101
  }
105
102
  providerSwitchNetwork({ network, provider, }) {
@@ -114,11 +111,7 @@ class EthProvider {
114
111
  if (!this.supportsNetworkSwitching()) {
115
112
  throw new errors.DynamicError('Network switching is not supported');
116
113
  }
117
- return yield provider.send('wallet_switchEthereumChain', [
118
- {
119
- chainId: `0x${chainId.toString(16)}`,
120
- },
121
- ]);
114
+ return yield provider.switchChain(getOrMapViemChain.getOrMapViemChain(network));
122
115
  }
123
116
  catch (error) {
124
117
  if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
@@ -142,17 +135,8 @@ class EthProvider {
142
135
  providerAddNetwork({ network, provider, }) {
143
136
  var _a;
144
137
  return tslib.__awaiter(this, void 0, void 0, function* () {
145
- const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, chainName } = network;
146
138
  try {
147
- return yield provider.send('wallet_addEthereumChain', [
148
- {
149
- blockExplorerUrls,
150
- chainId: `0x${chainId.toString(16)}`,
151
- chainName,
152
- nativeCurrency,
153
- rpcUrls,
154
- },
155
- ]);
139
+ return yield provider.addChain({ chain: getOrMapViemChain.getOrMapViemChain(network) });
156
140
  }
157
141
  catch (error) {
158
142
  if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
@@ -1,4 +1,4 @@
1
- import { ethers } from 'ethers';
1
+ import { PublicClient, WalletClient } from 'viem';
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(): ethers.providers.Web3Provider | undefined;
12
+ abstract getWeb3Provider(): WalletClient | undefined;
13
13
  getDeepLink(): string | undefined;
14
- getRpcProvider(): Promise<ethers.providers.JsonRpcProvider | undefined>;
14
+ getRpcProvider(): Promise<PublicClient | undefined>;
15
15
  constructor({ evmNetworks }: {
16
16
  evmNetworks: EvmNetwork[];
17
17
  });
18
18
  getNetwork(): Promise<number | undefined>;
19
- getSigner(): Promise<ethers.providers.JsonRpcSigner | undefined>;
19
+ getSigner(): Promise<WalletClient | undefined>;
20
20
  getBalance: () => Promise<string | undefined>;
21
21
  supportsNetworkSwitching(): boolean;
22
22
  switchNetwork({ networkName, networkChainId, }: SwitchNetworkOps): Promise<void>;
23
- getConnectedAccounts(): Promise<string[]>;
23
+ getConnectedAccounts(): Promise<`0x${string}`[]>;
24
24
  protected providerSwitchNetwork({ network, provider, }: {
25
25
  network: EvmNetwork;
26
- provider: ethers.providers.Web3Provider;
26
+ provider: WalletClient;
27
27
  }): Promise<void>;
28
28
  protected providerAddNetwork({ network, provider, }: {
29
29
  network: EvmNetwork;
30
- provider: ethers.providers.Web3Provider;
30
+ provider: WalletClient;
31
31
  }): Promise<void>;
32
32
  protected evmNetworkRpcMap: () => EvmRpcMap;
33
33
  }
@@ -1,7 +1,8 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { ethers } from 'ethers';
2
+ import { formatEther } from 'viem';
3
3
  import { DynamicError } from '../../errors.js';
4
4
  import { getEvmDefaultRpcProvider, getEvmRpcProviderByChainId } from '../../rpcProviders.js';
5
+ import { getOrMapViemChain } from '../../getOrMapViemChain.js';
5
6
  import { findEvmNetwork } from './evm-network.js';
6
7
 
7
8
  class EthProvider {
@@ -29,16 +30,16 @@ class EthProvider {
29
30
  }
30
31
  constructor({ evmNetworks }) {
31
32
  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 result = yield ((_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getBalance(address));
39
- if (!result)
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))
40
41
  return;
41
- return ethers.utils.formatEther(result);
42
+ return formatEther(result);
42
43
  });
43
44
  this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
44
45
  var _a;
@@ -51,20 +52,16 @@ class EthProvider {
51
52
  }
52
53
  getNetwork() {
53
54
  return __awaiter(this, void 0, void 0, function* () {
54
- const provider = this.getWeb3Provider();
55
- if (!this.supportsNetworkSwitching ||
56
- !provider ||
57
- !('getNetwork' in provider)) {
55
+ const walletClient = this.getWeb3Provider();
56
+ if (!this.supportsNetworkSwitching || !walletClient) {
58
57
  return Promise.resolve(undefined);
59
58
  }
60
- const network = yield provider.getNetwork();
61
- return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
59
+ return walletClient.getChainId();
62
60
  });
63
61
  }
64
62
  getSigner() {
65
- var _a;
66
63
  return __awaiter(this, void 0, void 0, function* () {
67
- return (_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getSigner();
64
+ return this.getWeb3Provider();
68
65
  });
69
66
  }
70
67
  supportsNetworkSwitching() {
@@ -95,7 +92,7 @@ class EthProvider {
95
92
  const provider = this.getWeb3Provider();
96
93
  if (!provider)
97
94
  return [];
98
- return provider.send('eth_accounts', []);
95
+ return provider.getAddresses();
99
96
  });
100
97
  }
101
98
  providerSwitchNetwork({ network, provider, }) {
@@ -110,11 +107,7 @@ class EthProvider {
110
107
  if (!this.supportsNetworkSwitching()) {
111
108
  throw new DynamicError('Network switching is not supported');
112
109
  }
113
- return yield provider.send('wallet_switchEthereumChain', [
114
- {
115
- chainId: `0x${chainId.toString(16)}`,
116
- },
117
- ]);
110
+ return yield provider.switchChain(getOrMapViemChain(network));
118
111
  }
119
112
  catch (error) {
120
113
  if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
@@ -138,17 +131,8 @@ class EthProvider {
138
131
  providerAddNetwork({ network, provider, }) {
139
132
  var _a;
140
133
  return __awaiter(this, void 0, void 0, function* () {
141
- const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, chainName } = network;
142
134
  try {
143
- return yield provider.send('wallet_addEthereumChain', [
144
- {
145
- blockExplorerUrls,
146
- chainId: `0x${chainId.toString(16)}`,
147
- chainName,
148
- nativeCurrency,
149
- rpcUrls,
150
- },
151
- ]);
135
+ return yield provider.addChain({ chain: getOrMapViemChain(network) });
152
136
  }
153
137
  catch (error) {
154
138
  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 ethers = require('ethers');
6
+ var viem = require('viem');
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,16 +87,10 @@ class EthProviderHelper {
87
87
  }
88
88
  return ethereumProviders;
89
89
  }
90
- isInstalledHelper(walletName) {
91
- return this.findProvider(walletName) !== undefined;
92
- }
93
90
  findProvider(walletName) {
94
91
  var _a, _b;
95
92
  try {
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
93
+ return (_b = (_a = this.providers)[normalizeWalletName.normalizeWalletName(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
100
94
  }
101
95
  catch (err) {
102
96
  if (isUnsupportedProviderError.isUnsupportedProviderError(err)) {
@@ -107,20 +101,46 @@ class EthProviderHelper {
107
101
  return undefined;
108
102
  }
109
103
  }
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
+ }
110
130
  fetchPublicAddressWithName(name) {
111
131
  return tslib.__awaiter(this, void 0, void 0, function* () {
112
- const provider = this.findProvider(name);
113
- if (!provider) {
132
+ const walletClient = yield this.findWalletClient(name);
133
+ if (!walletClient) {
114
134
  return Promise.resolve(undefined);
115
135
  }
116
- return this.fetchPublicAddressWithProvider(provider);
136
+ return this.fetchPublicAddressWithWalletClient(walletClient);
117
137
  });
118
138
  }
119
- fetchPublicAddressWithProvider(provider) {
139
+ fetchPublicAddressWithWalletClient(walletClient) {
120
140
  return tslib.__awaiter(this, void 0, void 0, function* () {
121
141
  try {
122
- const [lowercaseAddress] = yield provider.send('eth_requestAccounts', []);
123
- const publicAddress = ethers.utils.getAddress(lowercaseAddress);
142
+ const [lowercaseAddress] = yield walletClient.requestAddresses();
143
+ const publicAddress = viem.getAddress(lowercaseAddress);
124
144
  return publicAddress;
125
145
  }
126
146
  catch (err) {
@@ -135,22 +155,24 @@ class EthProviderHelper {
135
155
  if (!walletAddress) {
136
156
  return Promise.resolve(undefined);
137
157
  }
138
- const provider = this.findProvider(name);
139
- if (!provider) {
158
+ const walletClient = yield this.findWalletClient(name);
159
+ if (!walletClient) {
140
160
  return Promise.resolve(undefined);
141
161
  }
142
- const signer = provider.getSigner();
143
- const signedMessage = yield signer.signMessage(messageToSign);
162
+ const signedMessage = yield walletClient.signMessage({
163
+ account: walletAddress,
164
+ message: messageToSign,
165
+ });
144
166
  return signedMessage;
145
167
  });
146
168
  }
147
- _setupEventListeners(listeners, web3Provider) {
148
- if (!web3Provider) {
169
+ _setupEventListeners(listeners, walletName, publicClient) {
170
+ const provider = this.findProvider(walletName);
171
+ if (!provider) {
149
172
  return () => {
150
173
  // nothing to teardown
151
174
  };
152
175
  }
153
- const externalProvider = web3Provider.provider;
154
176
  this.handleAccountChange = (accounts) => tslib.__awaiter(this, void 0, void 0, function* () {
155
177
  var _a, _b;
156
178
  if (accounts.length === 0) {
@@ -161,8 +183,8 @@ class EthProviderHelper {
161
183
  });
162
184
  this.handleChainChange = () => tslib.__awaiter(this, void 0, void 0, function* () {
163
185
  var _c;
164
- const network = yield web3Provider.getNetwork();
165
- yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners, network.chainId.toString()));
186
+ const chainId = yield publicClient.getChainId();
187
+ yield ((_c = listeners.onChainChange) === null || _c === void 0 ? void 0 : _c.call(listeners, chainId.toString()));
166
188
  });
167
189
  this.handleDisconnect = (error) => tslib.__awaiter(this, void 0, void 0, function* () {
168
190
  var _d;
@@ -171,25 +193,21 @@ class EthProviderHelper {
171
193
  }
172
194
  yield ((_d = listeners.onDisconnect) === null || _d === void 0 ? void 0 : _d.call(listeners));
173
195
  });
174
- externalProvider.on('accountsChanged', this.handleAccountChange);
175
- externalProvider.on('chainChanged', this.handleChainChange);
176
- externalProvider.on('disconnect', this.handleDisconnect);
196
+ provider.on('accountsChanged', this.handleAccountChange);
197
+ provider.on('chainChanged', this.handleChainChange);
198
+ provider.on('disconnect', this.handleDisconnect);
177
199
  return () => { };
178
200
  }
179
201
  _teardownEventListeners(name) {
180
- const web3Provider = this.findProvider(name);
181
- if (!web3Provider || !(web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.provider)) {
202
+ const provider = this.findProvider(name);
203
+ if (!provider) {
182
204
  return;
183
205
  }
184
- const externalProvider = web3Provider.provider;
185
- if (this.handleAccountChange) {
186
- externalProvider.removeListener('accountsChanged', this.handleAccountChange);
187
- }
188
206
  if (this.handleChainChange) {
189
- externalProvider.removeListener('chainChanged', this.handleChainChange);
207
+ provider.removeListener('chainChanged', this.handleChainChange);
190
208
  }
191
209
  if (this.handleDisconnect) {
192
- externalProvider.removeListener('disconnect', this.handleDisconnect);
210
+ provider.removeListener('disconnect', this.handleDisconnect);
193
211
  }
194
212
  }
195
213
  }
@@ -1,7 +1,6 @@
1
- import { ethers } from 'ethers';
1
+ import { PublicClient, WalletClient } from 'viem';
2
2
  import { WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
3
3
  import { ProviderCondition, IEthereum } from '../window';
4
- type Provider = () => ethers.providers.ExternalProvider | undefined;
5
4
  type AccountChangeEventHandler = (accounts: string[]) => Promise<void>;
6
5
  type ChainChangeEventHandler = (chainId: string | number) => Promise<void>;
7
6
  type DisconnectEventHandler = (error?: {
@@ -11,30 +10,31 @@ export declare class EthProviderHelper {
11
10
  handleAccountChange: AccountChangeEventHandler | undefined;
12
11
  handleChainChange: ChainChangeEventHandler | undefined;
13
12
  handleDisconnect: DisconnectEventHandler | 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;
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;
27
26
  providers: {
28
- [wallet: string]: Provider;
27
+ [wallet: string]: () => IEthereum | undefined;
29
28
  };
30
29
  installedProviderLookup(providerFlags: Array<ProviderCondition>): IEthereum | undefined;
31
30
  allInstalledProviders(): IEthereum[];
31
+ findProvider(walletName: string): IEthereum | undefined;
32
32
  isInstalledHelper(walletName: string): boolean;
33
- findProvider(walletName: string): ethers.providers.Web3Provider | undefined;
34
- fetchPublicAddressWithName(name: string): Promise<string | undefined>;
35
- fetchPublicAddressWithProvider(provider: ethers.providers.Web3Provider): Promise<string | undefined>;
33
+ findWalletClient(walletName: string): Promise<WalletClient | undefined>;
34
+ fetchPublicAddressWithName(name: string): Promise<`0x${string}` | undefined>;
35
+ fetchPublicAddressWithWalletClient(walletClient: WalletClient): Promise<`0x${string}` | undefined>;
36
36
  signMessageWithName(messageToSign: string, name: string): Promise<string | undefined>;
37
- _setupEventListeners(listeners: WalletEventListeners, web3Provider?: ethers.providers.Web3Provider): () => void;
37
+ _setupEventListeners(listeners: WalletEventListeners, walletName: string, publicClient: PublicClient): () => void;
38
38
  _teardownEventListeners(name: string): void;
39
39
  }
40
40
  export {};