@dynamic-labs/ethereum 0.19.0-alpha.0 → 0.19.0-alpha.10

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