@dynamic-labs/ethereum 0.19.0-alpha.2 → 0.19.0-alpha.20

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 (109) hide show
  1. package/CHANGELOG.md +279 -0
  2. package/package.json +11 -10
  3. package/src/EthWalletConnector.cjs +189 -193
  4. package/src/EthWalletConnector.d.ts +298 -41
  5. package/src/EthWalletConnector.js +190 -194
  6. package/src/constants.d.ts +1 -1
  7. package/src/ethProviderHelper.cjs +132 -209
  8. package/src/ethProviderHelper.d.ts +28 -36
  9. package/src/ethProviderHelper.js +133 -210
  10. package/src/index.cjs +26 -26
  11. package/src/index.d.ts +9 -8
  12. package/src/index.js +21 -20
  13. package/src/injected/BloctoInjected.cjs +6 -6
  14. package/src/injected/BloctoInjected.d.ts +4 -4
  15. package/src/injected/BloctoInjected.js +6 -6
  16. package/src/injected/BraveEvm.cjs +6 -6
  17. package/src/injected/BraveEvm.d.ts +4 -4
  18. package/src/injected/BraveEvm.js +6 -6
  19. package/src/injected/Dawn.cjs +6 -6
  20. package/src/injected/Dawn.d.ts +4 -4
  21. package/src/injected/Dawn.js +6 -6
  22. package/src/injected/ExodusEvm.cjs +8 -8
  23. package/src/injected/ExodusEvm.d.ts +5 -5
  24. package/src/injected/ExodusEvm.js +7 -7
  25. package/src/injected/Frame.cjs +6 -6
  26. package/src/injected/Frame.d.ts +4 -4
  27. package/src/injected/Frame.js +6 -6
  28. package/src/injected/GameStop.cjs +6 -6
  29. package/src/injected/GameStop.d.ts +4 -4
  30. package/src/injected/GameStop.js +6 -6
  31. package/src/injected/InjectedWalletBase.cjs +79 -65
  32. package/src/injected/InjectedWalletBase.d.ts +286 -24
  33. package/src/injected/InjectedWalletBase.js +79 -65
  34. package/src/injected/LegacyInjectedWalletBase.cjs +83 -0
  35. package/src/injected/LegacyInjectedWalletBase.d.ts +24 -0
  36. package/src/injected/LegacyInjectedWalletBase.js +81 -0
  37. package/src/injected/Opera.cjs +6 -6
  38. package/src/injected/Opera.d.ts +4 -4
  39. package/src/injected/Opera.js +6 -6
  40. package/src/injected/PhantomEvm.cjs +28 -28
  41. package/src/injected/PhantomEvm.d.ts +5 -5
  42. package/src/injected/PhantomEvm.js +28 -28
  43. package/src/injected/Rabby.cjs +8 -8
  44. package/src/injected/Rabby.d.ts +5 -5
  45. package/src/injected/Rabby.js +7 -7
  46. package/src/injected/Superb.cjs +6 -6
  47. package/src/injected/Superb.d.ts +4 -4
  48. package/src/injected/Superb.js +6 -6
  49. package/src/injected/Trust.cjs +8 -8
  50. package/src/injected/Trust.d.ts +5 -5
  51. package/src/injected/Trust.js +7 -7
  52. package/src/injected/Zerion.cjs +8 -8
  53. package/src/injected/Zerion.d.ts +5 -5
  54. package/src/injected/Zerion.js +7 -7
  55. package/src/injected/fetchInjectedWalletConnectors.cjs +33 -0
  56. package/src/injected/fetchInjectedWalletConnectors.d.ts +6 -0
  57. package/src/injected/fetchInjectedWalletConnectors.js +29 -0
  58. package/src/injected/index.d.ts +13 -16
  59. package/src/injected/legacyInjectedWallets.cjs +48 -0
  60. package/src/injected/legacyInjectedWallets.d.ts +3 -0
  61. package/src/injected/legacyInjectedWallets.js +43 -0
  62. package/src/legacyEthProviderHelper.cjs +187 -0
  63. package/src/legacyEthProviderHelper.d.ts +34 -0
  64. package/src/legacyEthProviderHelper.js +183 -0
  65. package/src/polyfills.cjs +11 -11
  66. package/src/polyfills.d.ts +1 -1
  67. package/src/polyfills.js +11 -11
  68. package/src/types.d.ts +37 -24
  69. package/src/utils/eventListenerHandlers.cjs +34 -0
  70. package/src/utils/eventListenerHandlers.d.ts +8 -0
  71. package/src/utils/eventListenerHandlers.js +30 -0
  72. package/src/utils/findEvmNetwork.cjs +13 -13
  73. package/src/utils/findEvmNetwork.d.ts +6 -6
  74. package/src/utils/findEvmNetwork.js +13 -13
  75. package/src/utils/isString.d.ts +1 -1
  76. package/src/utils/isUnsupportedProviderError/index.d.ts +1 -1
  77. package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.cjs +6 -6
  78. package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.d.ts +6 -6
  79. package/src/utils/isUnsupportedProviderError/isUnsupportedProviderError.js +6 -6
  80. package/src/utils/last.d.ts +1 -1
  81. package/src/utils/parseIntSafe.cjs +13 -13
  82. package/src/utils/parseIntSafe.d.ts +1 -1
  83. package/src/utils/parseIntSafe.js +13 -13
  84. package/src/walletConnect/client/client.cjs +179 -176
  85. package/src/walletConnect/client/client.d.ts +17 -17
  86. package/src/walletConnect/client/client.js +179 -176
  87. package/src/walletConnect/client/index.d.ts +1 -1
  88. package/src/walletConnect/client/types.d.ts +4 -4
  89. package/src/walletConnect/fetchWalletConnectWallets.cjs +37 -52
  90. package/src/walletConnect/fetchWalletConnectWallets.d.ts +9 -10
  91. package/src/walletConnect/fetchWalletConnectWallets.js +38 -52
  92. package/src/walletConnect/index.d.ts +3 -3
  93. package/src/walletConnect/walletConnect.cjs +131 -130
  94. package/src/walletConnect/walletConnect.d.ts +52 -50
  95. package/src/walletConnect/walletConnect.js +131 -130
  96. package/src/walletConnect/walletConnectV2.cjs +419 -374
  97. package/src/walletConnect/walletConnectV2.d.ts +326 -61
  98. package/src/walletConnect/walletConnectV2.js +420 -375
  99. package/src/injected/MetaMask.cjs +0 -15
  100. package/src/injected/MetaMask.d.ts +0 -5
  101. package/src/injected/MetaMask.js +0 -11
  102. package/src/injected/OKX.cjs +0 -15
  103. package/src/injected/OKX.d.ts +0 -5
  104. package/src/injected/OKX.js +0 -11
  105. package/src/injected/UnknownInjectedWallet.cjs +0 -14
  106. package/src/injected/UnknownInjectedWallet.d.ts +0 -4
  107. package/src/injected/UnknownInjectedWallet.js +0 -10
  108. package/src/injected/index.cjs +0 -53
  109. package/src/injected/index.js +0 -49
@@ -1,202 +1,198 @@
1
1
  import { __awaiter } from '../_virtual/_tslib.js';
2
- import { ethers } from 'ethers';
2
+ import { createPublicClient, http, formatEther } from 'viem';
3
3
  import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
4
- import { parseEvmNetworks, DynamicError } from '@dynamic-labs/utils';
4
+ import { parseEvmNetworks, getOrMapViemChain, retryableFn, FALLBACK_UNDEFINED, DynamicError } from '@dynamic-labs/utils';
5
5
  import { ProviderChain } from '@dynamic-labs/rpc-providers';
6
6
  import { findEvmNetwork } from './utils/findEvmNetwork.js';
7
7
 
8
- class EthWalletConnector extends WalletConnectorBase {
9
- getRpcProvider() {
10
- var _a, _b, _c;
11
- return __awaiter(this, void 0, void 0, function* () {
12
- const networkId = (_a = (yield this.getNetwork())) !== null && _a !== void 0 ? _a : 1;
13
- if (this.evmNetworks.length === 0) {
14
- return undefined;
15
- }
16
- const configurations = {
17
- cosmos: [],
18
- evm: this.evmNetworks,
19
- solana: [],
20
- starknet: undefined,
21
- };
22
- return (_c = (_b = this.chainRpcProviders) === null || _b === void 0 ? void 0 : _b.getEvmProviderByChainId(configurations, networkId)) === null || _c === void 0 ? void 0 : _c.provider;
23
- });
24
- }
25
- constructor(props) {
26
- var _a;
27
- super(props);
28
- this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
29
- var _a;
30
- [acc[network.chainId]] = ((_a = network === null || network === void 0 ? void 0 : network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a.length)
31
- ? network.privateCustomerRpcUrls
32
- : network.rpcUrls;
33
- return acc;
34
- }, {});
35
- this.evmNetworks = parseEvmNetworks(props.evmNetworks);
36
- this.chainRpcProviders = props.chainRpcProviders;
37
- (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(ProviderChain.EVM, (config) => {
38
- const rpcProviders = {};
39
- if (config === null || config === void 0 ? void 0 : config.evm) {
40
- rpcProviders.evm = parseEvmNetworks(config.evm).map((network) => {
41
- var _a;
42
- const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
43
- const provider = new ethers.providers.JsonRpcProvider(rpcUrl, network.chainId);
44
- return {
45
- chainId: network.chainId,
46
- chainName: network.name,
47
- provider,
48
- };
49
- });
50
- }
51
- return rpcProviders.evm;
52
- });
53
- }
54
- getNetwork() {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- const provider = this.getWeb3Provider();
57
- if (!this.supportsNetworkSwitching ||
58
- !provider ||
59
- !('getNetwork' in provider)) {
60
- return Promise.resolve(undefined);
61
- }
62
- const network = yield provider.getNetwork();
63
- return Promise.resolve(network === null || network === void 0 ? void 0 : network.chainId);
64
- });
65
- }
66
- getNameService() {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- const [[address], provider] = yield Promise.all([
69
- this.getConnectedAccounts(),
70
- this.getRpcProvider(),
71
- ]);
72
- if (!address || !provider || !('lookupAddress' in provider)) {
73
- return;
74
- }
75
- const [ensName, ensAvatar] = yield Promise.all([
76
- provider.lookupAddress(address),
77
- provider.getAvatar(address),
78
- ]);
79
- const ensData = {
80
- avatar: ensAvatar !== null && ensAvatar !== void 0 ? ensAvatar : undefined,
81
- name: ensName !== null && ensName !== void 0 ? ensName : undefined,
82
- };
83
- return ensData;
84
- });
85
- }
86
- getSigner() {
87
- var _a;
88
- return __awaiter(this, void 0, void 0, function* () {
89
- return (_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getSigner();
90
- });
91
- }
92
- getBalance() {
93
- var _a;
94
- return __awaiter(this, void 0, void 0, function* () {
95
- // This is equivalent to getSigner().getAddress() but does not crash
96
- // if the signer is not available
97
- const [address] = yield this.getConnectedAccounts();
98
- if (!address)
99
- return;
100
- const result = yield ((_a = this.getWeb3Provider()) === null || _a === void 0 ? void 0 : _a.getBalance(address));
101
- if (!result)
102
- return;
103
- return ethers.utils.formatEther(result);
104
- });
105
- }
106
- supportsNetworkSwitching() {
107
- return true;
108
- }
109
- switchNetwork({ networkName, networkChainId, }) {
110
- return __awaiter(this, void 0, void 0, function* () {
111
- const network = findEvmNetwork({
112
- chainId: networkChainId,
113
- name: networkName,
114
- networks: this.evmNetworks,
115
- });
116
- if (!network) {
117
- throw new DynamicError(`Could not find network mapping for chain ${networkName ? networkName : networkChainId}`);
118
- }
119
- if (!this.supportsNetworkSwitching()) {
120
- throw new DynamicError('Network switching is not supported');
121
- }
122
- const provider = this.getWeb3Provider();
123
- if (!provider) {
124
- throw new DynamicError('Provider not found');
125
- }
126
- return this.providerSwitchNetwork({ network, provider });
127
- });
128
- }
129
- getConnectedAccounts() {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- const provider = this.getWeb3Provider();
132
- if (!provider)
133
- return [];
134
- return provider.send('eth_accounts', []);
135
- });
136
- }
137
- providerSwitchNetwork({ network, provider, }) {
138
- var _a, _b, _c;
139
- return __awaiter(this, void 0, void 0, function* () {
140
- const { chainId } = network;
141
- const currentNetworkId = yield this.getNetwork();
142
- if (currentNetworkId && currentNetworkId === chainId) {
143
- return;
144
- }
145
- try {
146
- if (!this.supportsNetworkSwitching()) {
147
- throw new DynamicError('Network switching is not supported');
148
- }
149
- return yield provider.send('wallet_switchEthereumChain', [
150
- {
151
- chainId: `0x${chainId.toString(16)}`,
152
- },
153
- ]);
154
- }
155
- catch (error) {
156
- if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
157
- (typeof error === 'string' && error.includes('rejected'))) {
158
- throw new DynamicError("User rejected the wallet's request to switch network");
159
- }
160
- else if (error.code === 4902 ||
161
- error.message.includes('Unrecognized chain') ||
162
- // https://github.com/MetaMask/metamask-mobile/issues/3312#issuecomment-1065923294
163
- ((_c = (_b = error === null || error === void 0 ? void 0 : error.data) === null || _b === void 0 ? void 0 : _b.orginalError) === null || _c === void 0 ? void 0 : _c.code) === 4902) {
164
- // error code indicates the chain has not been added yet
165
- // https://docs.metamask.io/guide/rpc-api.html#usage-with-wallet-switchethereumchain
166
- return this.providerAddNetwork({ network, provider });
167
- }
168
- else {
169
- throw error;
170
- }
171
- }
172
- });
173
- }
174
- providerAddNetwork({ network, provider, }) {
175
- var _a;
176
- return __awaiter(this, void 0, void 0, function* () {
177
- const { blockExplorerUrls, chainId, nativeCurrency, rpcUrls, name } = network;
178
- try {
179
- return yield provider.send('wallet_addEthereumChain', [
180
- {
181
- blockExplorerUrls,
182
- chainId: `0x${chainId.toString(16)}`,
183
- chainName: name,
184
- nativeCurrency,
185
- rpcUrls,
186
- },
187
- ]);
188
- }
189
- catch (error) {
190
- if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
191
- (typeof error === 'string' && error.includes('rejected'))) {
192
- throw new DynamicError("User rejected the wallet's request to add network");
193
- }
194
- else {
195
- throw error;
196
- }
197
- }
198
- });
199
- }
8
+ class EthWalletConnector extends WalletConnectorBase {
9
+ getPublicClient() {
10
+ var _a, _b, _c;
11
+ return __awaiter(this, void 0, void 0, function* () {
12
+ const networkId = (_a = (yield this.getNetwork())) !== null && _a !== void 0 ? _a : 1;
13
+ if (this.evmNetworks.length === 0) {
14
+ return undefined;
15
+ }
16
+ const configurations = {
17
+ cosmos: [],
18
+ evm: this.evmNetworks,
19
+ solana: [],
20
+ starknet: undefined,
21
+ };
22
+ return (_c = (_b = this.chainRpcProviders) === null || _b === void 0 ? void 0 : _b.getEvmProviderByChainId(configurations, networkId)) === null || _c === void 0 ? void 0 : _c.provider;
23
+ });
24
+ }
25
+ constructor(props) {
26
+ var _a;
27
+ super(props);
28
+ this.evmNetworkRpcMap = () => this.evmNetworks.reduce((acc, network) => {
29
+ var _a;
30
+ [acc[network.chainId]] = ((_a = network === null || network === void 0 ? void 0 : network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a.length)
31
+ ? network.privateCustomerRpcUrls
32
+ : network.rpcUrls;
33
+ return acc;
34
+ }, {});
35
+ this.evmNetworks = parseEvmNetworks(props.evmNetworks);
36
+ this.chainRpcProviders = props.chainRpcProviders;
37
+ (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(ProviderChain.EVM, (config) => {
38
+ const rpcProviders = {};
39
+ if (config === null || config === void 0 ? void 0 : config.evm) {
40
+ rpcProviders.evm = parseEvmNetworks(config.evm).map((network) => {
41
+ var _a;
42
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
43
+ const provider = createPublicClient({
44
+ chain: getOrMapViemChain(network),
45
+ transport: http(rpcUrl),
46
+ });
47
+ return {
48
+ chainId: network.chainId,
49
+ chainName: network.name,
50
+ provider,
51
+ };
52
+ });
53
+ }
54
+ return rpcProviders.evm;
55
+ });
56
+ }
57
+ getNetwork() {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ const provider = this.getWalletClient();
60
+ if (!this.supportsNetworkSwitching || !provider) {
61
+ return Promise.resolve(undefined);
62
+ }
63
+ return retryableFn(provider.getChainId, {
64
+ fallbackValue: FALLBACK_UNDEFINED,
65
+ });
66
+ });
67
+ }
68
+ getNameService() {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const [[address], rpcProvider] = yield Promise.all([
71
+ this.getConnectedAccounts(),
72
+ this.getPublicClient(),
73
+ ]);
74
+ if (!address || !rpcProvider) {
75
+ return;
76
+ }
77
+ const ensName = yield rpcProvider.getEnsName({
78
+ address: address,
79
+ });
80
+ const ensAvatar = ensName
81
+ ? yield rpcProvider.getEnsAvatar({
82
+ name: ensName,
83
+ })
84
+ : undefined;
85
+ const ensData = {
86
+ avatar: ensAvatar !== null && ensAvatar !== void 0 ? ensAvatar : undefined,
87
+ name: ensName !== null && ensName !== void 0 ? ensName : undefined,
88
+ };
89
+ return ensData;
90
+ });
91
+ }
92
+ getSigner() {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ return this.getWalletClient();
95
+ });
96
+ }
97
+ getBalance() {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ // This is equivalent to getSigner().getAddress() but does not crash
100
+ // if the signer is not available
101
+ const [address] = yield this.getConnectedAccounts();
102
+ if (!address)
103
+ return;
104
+ const client = yield this.getPublicClient();
105
+ const result = yield (client === null || client === void 0 ? void 0 : client.getBalance({
106
+ address: address,
107
+ }));
108
+ if (!result && result !== BigInt(0))
109
+ return;
110
+ return formatEther(result);
111
+ });
112
+ }
113
+ supportsNetworkSwitching() {
114
+ return true;
115
+ }
116
+ switchNetwork({ networkName, networkChainId, }) {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ const network = findEvmNetwork({
119
+ chainId: networkChainId,
120
+ name: networkName,
121
+ networks: this.evmNetworks,
122
+ });
123
+ if (!network) {
124
+ throw new DynamicError(`Could not find network mapping for chain ${networkName ? networkName : networkChainId}`);
125
+ }
126
+ if (!this.supportsNetworkSwitching()) {
127
+ throw new DynamicError('Network switching is not supported');
128
+ }
129
+ const provider = this.getWalletClient();
130
+ if (!provider) {
131
+ throw new DynamicError('Provider not found');
132
+ }
133
+ return this.providerSwitchNetwork({ network, provider });
134
+ });
135
+ }
136
+ getConnectedAccounts() {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ const provider = this.getWalletClient();
139
+ if (!provider)
140
+ return [];
141
+ return retryableFn(provider.getAddresses, {
142
+ fallbackValue: [],
143
+ });
144
+ });
145
+ }
146
+ providerSwitchNetwork({ network, provider, }) {
147
+ var _a, _b, _c;
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ const { chainId } = network;
150
+ const currentNetworkId = yield this.getNetwork();
151
+ if (currentNetworkId && currentNetworkId === chainId) {
152
+ return;
153
+ }
154
+ try {
155
+ if (!this.supportsNetworkSwitching()) {
156
+ throw new DynamicError('Network switching is not supported');
157
+ }
158
+ return yield provider.switchChain(getOrMapViemChain(network));
159
+ }
160
+ catch (error) {
161
+ if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
162
+ (typeof error === 'string' && error.includes('rejected'))) {
163
+ throw new DynamicError("User rejected the wallet's request to switch network");
164
+ }
165
+ else if (error.code === 4902 ||
166
+ error.message.includes('Unrecognized chain') ||
167
+ // https://github.com/MetaMask/metamask-mobile/issues/3312#issuecomment-1065923294
168
+ ((_c = (_b = error === null || error === void 0 ? void 0 : error.data) === null || _b === void 0 ? void 0 : _b.orginalError) === null || _c === void 0 ? void 0 : _c.code) === 4902) {
169
+ // error code indicates the chain has not been added yet
170
+ // https://docs.metamask.io/guide/rpc-api.html#usage-with-wallet-switchethereumchain
171
+ return this.providerAddNetwork({ network, provider });
172
+ }
173
+ else {
174
+ throw error;
175
+ }
176
+ }
177
+ });
178
+ }
179
+ providerAddNetwork({ network, provider, }) {
180
+ var _a;
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ try {
183
+ return yield provider.addChain({ chain: getOrMapViemChain(network) });
184
+ }
185
+ catch (error) {
186
+ if (((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('rejected')) ||
187
+ (typeof error === 'string' && error.includes('rejected'))) {
188
+ throw new DynamicError("User rejected the wallet's request to add network");
189
+ }
190
+ else {
191
+ throw error;
192
+ }
193
+ }
194
+ });
195
+ }
200
196
  }
201
197
 
202
198
  export { EthWalletConnector };
@@ -1 +1 @@
1
- export declare const INFURA_ID: "87939db78f824920ada5c872db3e56b8";
1
+ export declare const INFURA_ID: "87939db78f824920ada5c872db3e56b8";