@wagmi/core 0.4.0-test.2 → 0.4.2

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 (83) hide show
  1. package/chains/dist/wagmi-core-chains.cjs.dev.js +2 -2
  2. package/chains/dist/wagmi-core-chains.cjs.prod.js +2 -2
  3. package/chains/dist/wagmi-core-chains.esm.js +2 -2
  4. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +9 -7
  5. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +9 -7
  6. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +9 -7
  7. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.dev.js +7 -5
  8. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.prod.js +7 -5
  9. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.esm.js +7 -5
  10. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +12 -8
  11. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +12 -8
  12. package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +7 -7
  13. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +19 -18
  14. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +19 -18
  15. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +19 -18
  16. package/dist/base-2d484f6c.cjs.prod.js +329 -0
  17. package/dist/base-e66f9622.esm.js +303 -0
  18. package/dist/base-e71ae4b2.cjs.dev.js +329 -0
  19. package/dist/{chains-7e369752.cjs.dev.js → chains-865492ea.cjs.prod.js} +79 -16
  20. package/dist/{chains-fa406563.esm.js → chains-c389721d.esm.js} +79 -16
  21. package/dist/{chains-d045862c.cjs.prod.js → chains-d970ee8d.cjs.dev.js} +79 -16
  22. package/dist/{client-42cf11b7.cjs.dev.js → client-1feb9121.cjs.prod.js} +29 -46
  23. package/dist/{client-ed3aaa6a.cjs.prod.js → client-53f2119c.cjs.dev.js} +29 -46
  24. package/dist/{client-60ee0298.esm.js → client-ffba0e25.esm.js} +29 -46
  25. package/dist/declarations/src/actions/accounts/getAccount.d.ts +31 -2
  26. package/dist/declarations/src/actions/accounts/getNetwork.d.ts +1 -2
  27. package/dist/declarations/src/actions/accounts/signTypedData.d.ts +17 -15
  28. package/dist/declarations/src/actions/accounts/watchAccount.d.ts +9 -1
  29. package/dist/declarations/src/actions/accounts/watchNetwork.d.ts +8 -1
  30. package/dist/declarations/src/actions/contracts/index.d.ts +5 -3
  31. package/dist/declarations/src/actions/contracts/multicall.d.ts +21 -0
  32. package/dist/declarations/src/actions/contracts/readContract.d.ts +7 -4
  33. package/dist/declarations/src/actions/contracts/readContracts.d.ts +19 -0
  34. package/dist/declarations/src/actions/contracts/watchContractEvent.d.ts +3 -3
  35. package/dist/declarations/src/actions/contracts/watchReadContract.d.ts +2 -3
  36. package/dist/declarations/src/actions/contracts/watchReadContracts.d.ts +6 -0
  37. package/dist/declarations/src/actions/contracts/writeContract.d.ts +10 -4
  38. package/dist/declarations/src/actions/index.d.ts +1 -1
  39. package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +6 -1
  40. package/dist/declarations/src/client.d.ts +6 -11
  41. package/dist/declarations/src/connectors/base.d.ts +4 -3
  42. package/dist/declarations/src/connectors/mock/connector.d.ts +2 -9
  43. package/dist/declarations/src/connectors/mock/provider.d.ts +2 -1
  44. package/dist/declarations/src/connectors/walletConnect.d.ts +5 -4
  45. package/dist/declarations/src/constants/index.d.ts +2 -1
  46. package/dist/declarations/src/constants/multicall.d.ts +25 -0
  47. package/dist/declarations/src/constants/rpcs.d.ts +3 -1
  48. package/dist/declarations/src/errors.d.ts +27 -5
  49. package/dist/declarations/src/index.d.ts +5 -5
  50. package/dist/declarations/src/providers/alchemy.d.ts +2 -2
  51. package/dist/declarations/src/providers/infura.d.ts +2 -2
  52. package/dist/declarations/src/providers/jsonRpc.d.ts +2 -2
  53. package/dist/declarations/src/providers/public.d.ts +2 -2
  54. package/dist/declarations/src/types/index.d.ts +17 -5
  55. package/dist/declarations/src/utils/configureChains.d.ts +10 -4
  56. package/dist/declarations/src/utils/normalizeChainId.d.ts +1 -1
  57. package/dist/{rpcs-9c4eb960.cjs.dev.js → rpcs-1fd0a12f.cjs.prod.js} +14 -0
  58. package/dist/{rpcs-7cfbd91c.esm.js → rpcs-b73a8f60.esm.js} +14 -1
  59. package/dist/{rpcs-b3c52116.cjs.prod.js → rpcs-f1d24f0e.cjs.dev.js} +14 -0
  60. package/dist/wagmi-core.cjs.dev.js +611 -234
  61. package/dist/wagmi-core.cjs.prod.js +611 -234
  62. package/dist/wagmi-core.esm.js +608 -242
  63. package/package.json +15 -3
  64. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.dev.js +1 -1
  65. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.prod.js +1 -1
  66. package/providers/alchemy/dist/wagmi-core-providers-alchemy.esm.js +1 -1
  67. package/providers/infura/dist/wagmi-core-providers-infura.cjs.dev.js +1 -1
  68. package/providers/infura/dist/wagmi-core-providers-infura.cjs.prod.js +1 -1
  69. package/providers/infura/dist/wagmi-core-providers-infura.esm.js +1 -1
  70. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.dev.js +3 -1
  71. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.prod.js +3 -1
  72. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.esm.js +3 -1
  73. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.d.ts +0 -1
  74. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.dev.js +0 -200
  75. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.js +0 -7
  76. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.prod.js +0 -200
  77. package/connectors/injected/dist/wagmi-core-connectors-injected.esm.js +0 -196
  78. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.d.ts +0 -11
  79. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.js +0 -16
  80. package/dist/base-7f682723.cjs.prod.js +0 -623
  81. package/dist/base-ae774f26.cjs.dev.js +0 -623
  82. package/dist/base-c546f171.esm.js +0 -603
  83. package/dist/declarations/src/utils/eventemitter.d.ts +0 -135
@@ -2,23 +2,21 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var client = require('./client-42cf11b7.cjs.dev.js');
6
- var base = require('./base-ae774f26.cjs.dev.js');
5
+ var client = require('./client-53f2119c.cjs.dev.js');
6
+ var base = require('./base-e71ae4b2.cjs.dev.js');
7
7
  var ethers$1 = require('ethers/lib/ethers');
8
8
  var utils = require('ethers/lib/utils');
9
- var chains = require('./chains-7e369752.cjs.dev.js');
10
9
  var ethers = require('ethers');
11
- var rpcs = require('./rpcs-9c4eb960.cjs.dev.js');
10
+ var shallow = require('zustand/shallow');
11
+ var rpcs = require('./rpcs-f1d24f0e.cjs.dev.js');
12
+ var chains = require('./chains-d970ee8d.cjs.dev.js');
12
13
  require('zustand/vanilla');
13
14
  require('zustand/middleware');
15
+ require('eventemitter3');
14
16
 
15
- // https://ethereum.org/en/developers/docs/standards/tokens/erc-20
16
- const erc20ABI = ['event Approval(address indexed _owner, address indexed _spender, uint256 _value)', 'event Transfer(address indexed _from, address indexed _to, uint256 _value)', 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', 'function approve(address _spender, uint256 _value) public returns (bool success)', 'function balanceOf(address _owner) public view returns (uint256 balance)', 'function decimals() public view returns (uint8)', 'function name() public view returns (string)', 'function symbol() public view returns (string)', 'function totalSupply() public view returns (uint256)', 'function transfer(address _to, uint256 _value) public returns (bool success)', 'function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)']; // https://ethereum.org/en/developers/docs/standards/tokens/erc-721
17
-
18
- const erc721ABI = ['event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)', 'event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)', 'event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)', 'function approve(address _approved, uint256 _tokenId) external payable', 'function balanceOf(address _owner) external view returns (uint256)', 'function getApproved(uint256 _tokenId) external view returns (address)', 'function isApprovedForAll(address _owner, address _operator) external view returns (bool)', 'function name() view returns (string memory)', 'function ownerOf(uint256 _tokenId) external view returns (address)', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable', 'function setApprovalForAll(address _operator, bool _approved) external', 'function symbol() view returns (string memory)', 'function tokenByIndex(uint256 _index) view returns (uint256)', 'function tokenOfOwnerByIndex(address _owner, uint256 _index) view returns (uint256 tokenId)', 'function tokenURI(uint256 _tokenId) view returns (string memory)', 'function totalSupply() view returns (uint256)', 'function transferFrom(address _from, address _to, uint256 _tokenId) external payable'];
17
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
19
18
 
20
- // https://github.com/ethers-io/ethers.js/blob/master/packages/units/src.ts/index.ts#L10-L18
21
- const units = ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether'];
19
+ var shallow__default = /*#__PURE__*/_interopDefault(shallow);
22
20
 
23
21
  function configureChains(defaultChains, providers) {
24
22
  let {
@@ -76,24 +74,29 @@ function configureChains(defaultChains, providers) {
76
74
  const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$ = defaultChains[0]) === null || _defaultChains$ === void 0 ? void 0 : _defaultChains$.id;
77
75
  const chainProviders = providers_[activeChainId];
78
76
  if (!chainProviders) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
79
- if (chainProviders.length === 1) return (_chainProviders$ = chainProviders[0]) === null || _chainProviders$ === void 0 ? void 0 : _chainProviders$.call(chainProviders);
80
- return fallbackProvider(targetQuorum, minQuorum, chainProviders, {
77
+ if (chainProviders.length === 1) return Object.assign(((_chainProviders$ = chainProviders[0]) === null || _chainProviders$ === void 0 ? void 0 : _chainProviders$.call(chainProviders)) || {}, {
78
+ chains
79
+ });
80
+ return Object.assign(fallbackProvider(targetQuorum, minQuorum, chainProviders, {
81
81
  stallTimeout
82
+ }), {
83
+ chains
82
84
  });
83
85
  },
84
86
  webSocketProvider: _ref3 => {
85
- var _defaultChains$2, _chainWebSocketProvid, _chainWebSocketProvid2;
87
+ var _defaultChains$2, _chainWebSocketProvid;
86
88
 
87
89
  let {
88
90
  chainId
89
91
  } = _ref3;
90
92
  const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$2 = defaultChains[0]) === null || _defaultChains$2 === void 0 ? void 0 : _defaultChains$2.id;
91
93
  const chainWebSocketProviders = webSocketProviders_[activeChainId];
92
- if (!chainWebSocketProviders) return undefined;
93
- if (chainWebSocketProviders.length === 1) return (_chainWebSocketProvid = chainWebSocketProviders[0]) === null || _chainWebSocketProvid === void 0 ? void 0 : _chainWebSocketProvid.call(chainWebSocketProviders); // WebSockets do not work with `fallbackProvider`
94
+ if (!chainWebSocketProviders) return undefined; // WebSockets do not work with `fallbackProvider`
94
95
  // Default to first available
95
96
 
96
- return (_chainWebSocketProvid2 = chainWebSocketProviders[0]) === null || _chainWebSocketProvid2 === void 0 ? void 0 : _chainWebSocketProvid2.call(chainWebSocketProviders);
97
+ return Object.assign(((_chainWebSocketProvid = chainWebSocketProviders[0]) === null || _chainWebSocketProvid === void 0 ? void 0 : _chainWebSocketProvid.call(chainWebSocketProviders)) || {}, {
98
+ chains
99
+ });
97
100
  }
98
101
  };
99
102
  }
@@ -129,6 +132,52 @@ function fallbackProvider(targetQuorum, minQuorum, providers_, _ref4) {
129
132
  }
130
133
  }
131
134
 
135
+ // https://ethereum.org/en/developers/docs/standards/tokens/erc-20
136
+ const erc20ABI = ['event Approval(address indexed _owner, address indexed _spender, uint256 _value)', 'event Transfer(address indexed _from, address indexed _to, uint256 _value)', 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', 'function approve(address _spender, uint256 _value) public returns (bool success)', 'function balanceOf(address _owner) public view returns (uint256 balance)', 'function decimals() public view returns (uint8)', 'function name() public view returns (string)', 'function symbol() public view returns (string)', 'function totalSupply() public view returns (uint256)', 'function transfer(address _to, uint256 _value) public returns (bool success)', 'function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)']; // https://ethereum.org/en/developers/docs/standards/tokens/erc-721
137
+
138
+ const erc721ABI = ['event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)', 'event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)', 'event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)', 'function approve(address _approved, uint256 _tokenId) external payable', 'function balanceOf(address _owner) external view returns (uint256)', 'function getApproved(uint256 _tokenId) external view returns (address)', 'function isApprovedForAll(address _owner, address _operator) external view returns (bool)', 'function name() view returns (string memory)', 'function ownerOf(uint256 _tokenId) external view returns (address)', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable', 'function setApprovalForAll(address _operator, bool _approved) external', 'function symbol() view returns (string memory)', 'function tokenByIndex(uint256 _index) view returns (uint256)', 'function tokenOfOwnerByIndex(address _owner, uint256 _index) view returns (uint256 tokenId)', 'function tokenURI(uint256 _tokenId) view returns (string memory)', 'function totalSupply() view returns (uint256)', 'function transferFrom(address _from, address _to, uint256 _tokenId) external payable'];
139
+
140
+ const multicallInterface = [{
141
+ inputs: [{
142
+ components: [{
143
+ internalType: 'address',
144
+ name: 'target',
145
+ type: 'address'
146
+ }, {
147
+ internalType: 'bool',
148
+ name: 'allowFailure',
149
+ type: 'bool'
150
+ }, {
151
+ internalType: 'bytes',
152
+ name: 'callData',
153
+ type: 'bytes'
154
+ }],
155
+ internalType: 'struct Multicall3.Call3[]',
156
+ name: 'calls',
157
+ type: 'tuple[]'
158
+ }],
159
+ name: 'aggregate3',
160
+ outputs: [{
161
+ components: [{
162
+ internalType: 'bool',
163
+ name: 'success',
164
+ type: 'bool'
165
+ }, {
166
+ internalType: 'bytes',
167
+ name: 'returnData',
168
+ type: 'bytes'
169
+ }],
170
+ internalType: 'struct Multicall3.Result[]',
171
+ name: 'returnData',
172
+ type: 'tuple[]'
173
+ }],
174
+ stateMutability: 'view',
175
+ type: 'function'
176
+ }];
177
+
178
+ // https://github.com/ethers-io/ethers.js/blob/master/packages/units/src.ts/index.ts#L10-L18
179
+ const units = ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether'];
180
+
132
181
  async function connect(_ref) {
133
182
  let {
134
183
  chainId,
@@ -136,19 +185,31 @@ async function connect(_ref) {
136
185
  } = _ref;
137
186
  const activeConnector = client.client.connector;
138
187
  if (connector.id === (activeConnector === null || activeConnector === void 0 ? void 0 : activeConnector.id)) throw new base.ConnectorAlreadyConnectedError();
139
- const data = await connector.connect({
140
- chainId
141
- });
142
- client.client.setLastUsedConnector(connector.id);
143
- client.client.setState(x => ({ ...x,
144
- connector,
145
- chains: connector === null || connector === void 0 ? void 0 : connector.chains,
146
- data
147
- }));
148
- client.client.storage.setItem('connected', true);
149
- return { ...data,
150
- connector
151
- };
188
+
189
+ try {
190
+ client.client.setState(x => ({ ...x,
191
+ status: 'connecting'
192
+ }));
193
+ const data = await connector.connect({
194
+ chainId
195
+ });
196
+ client.client.setLastUsedConnector(connector.id);
197
+ client.client.setState(x => ({ ...x,
198
+ connector,
199
+ chains: connector === null || connector === void 0 ? void 0 : connector.chains,
200
+ data,
201
+ status: 'connected'
202
+ }));
203
+ client.client.storage.setItem('connected', true);
204
+ return { ...data,
205
+ connector
206
+ };
207
+ } catch (err) {
208
+ client.client.setState(x => ({ ...x,
209
+ status: 'disconnected'
210
+ }));
211
+ throw err;
212
+ }
152
213
  }
153
214
 
154
215
  async function disconnect() {
@@ -158,6 +219,15 @@ async function disconnect() {
158
219
  client$1.storage.removeItem('connected');
159
220
  }
160
221
 
222
+ function getContract(_ref) {
223
+ let {
224
+ addressOrName,
225
+ contractInterface,
226
+ signerOrProvider
227
+ } = _ref;
228
+ return new ethers.Contract(addressOrName, contractInterface, signerOrProvider);
229
+ }
230
+
161
231
  function getProvider() {
162
232
  let {
163
233
  chainId
@@ -208,213 +278,152 @@ function watchWebSocketProvider(args, callback) {
208
278
  return unsubscribe;
209
279
  }
210
280
 
211
- async function fetchBalance(_ref) {
212
- var _client$connector$cha, _client$connector, _chain$nativeCurrency, _chain$nativeCurrency2, _chain$nativeCurrency3, _chain$nativeCurrency4;
213
-
281
+ async function readContract(_ref) {
214
282
  let {
215
283
  addressOrName,
284
+ args,
216
285
  chainId,
217
- formatUnits: unit = 'ether',
218
- token
286
+ contractInterface,
287
+ functionName,
288
+ overrides
219
289
  } = _ref;
220
- const client$1 = client.getClient();
221
290
  const provider = getProvider({
222
291
  chainId
223
292
  });
224
-
225
- if (token) {
226
- const contract = new ethers$1.Contract(token, erc20ABI, provider);
227
- const [value, decimals, symbol] = await Promise.all([contract.balanceOf(addressOrName), contract.decimals(), contract.symbol()]);
228
- return {
229
- decimals,
230
- formatted: utils.formatUnits(value, unit),
231
- symbol,
232
- unit,
233
- value
234
- };
235
- }
236
-
237
- const chains$1 = [...((_client$connector$cha = (_client$connector = client$1.connector) === null || _client$connector === void 0 ? void 0 : _client$connector.chains) !== null && _client$connector$cha !== void 0 ? _client$connector$cha : []), ...chains.allChains];
238
- const value = await provider.getBalance(addressOrName);
239
- const chain = chains$1.find(x => x.id === provider.network.chainId);
240
- return {
241
- decimals: (_chain$nativeCurrency = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency2 = chain.nativeCurrency) === null || _chain$nativeCurrency2 === void 0 ? void 0 : _chain$nativeCurrency2.decimals) !== null && _chain$nativeCurrency !== void 0 ? _chain$nativeCurrency : 18,
242
- formatted: utils.formatUnits(value, unit),
243
- symbol: (_chain$nativeCurrency3 = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency4 = chain.nativeCurrency) === null || _chain$nativeCurrency4 === void 0 ? void 0 : _chain$nativeCurrency4.symbol) !== null && _chain$nativeCurrency3 !== void 0 ? _chain$nativeCurrency3 : 'ETH',
244
- unit,
245
- value
246
- };
247
- }
248
-
249
- async function fetchSigner() {
250
- var _client$connector, _client$connector$get;
251
-
252
- const client$1 = client.getClient();
253
- const signer = (await ((_client$connector = client$1.connector) === null || _client$connector === void 0 ? void 0 : (_client$connector$get = _client$connector.getSigner) === null || _client$connector$get === void 0 ? void 0 : _client$connector$get.call(_client$connector))) || null;
254
- return signer;
255
- }
256
-
257
- function getAccount() {
258
- const {
259
- data,
260
- connector
261
- } = client.getClient();
262
- return {
263
- address: data === null || data === void 0 ? void 0 : data.account,
264
- connector
265
- };
266
- }
267
-
268
- function getNetwork() {
269
- var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
270
-
271
- const client$1 = client.getClient();
272
- const chainId = (_client$data = client$1.data) === null || _client$data === void 0 ? void 0 : (_client$data$chain = _client$data.chain) === null || _client$data$chain === void 0 ? void 0 : _client$data$chain.id;
273
- const activeChains = (_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
274
- const activeChain = (_find = [...activeChains, ...chains.allChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
275
- id: chainId,
276
- name: "Chain ".concat(chainId),
277
- network: "".concat(chainId),
278
- rpcUrls: {
279
- default: ''
280
- }
281
- };
282
- return {
283
- chain: chainId ? { ...activeChain,
284
- ...((_client$data2 = client$1.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
285
- id: chainId
286
- } : undefined,
287
- chains: activeChains
288
- };
289
- }
290
-
291
- async function signMessage(args) {
292
- try {
293
- const signer = await fetchSigner();
294
- if (!signer) throw new base.ConnectorNotFoundError();
295
- return await signer.signMessage(args.message);
296
- } catch (error) {
297
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
298
- throw error;
299
- }
300
- }
301
-
302
- async function signTypedData(args) {
303
- try {
304
- const signer = await fetchSigner();
305
- if (!signer) throw new base.ConnectorNotFoundError(); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
306
-
307
- return await signer._signTypedData(args.domain, args.types, args.value);
308
- } catch (error) {
309
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
310
- throw error;
311
- }
293
+ const contract = getContract({
294
+ addressOrName,
295
+ contractInterface,
296
+ signerOrProvider: provider
297
+ });
298
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
299
+ const contractFunction = contract[functionName];
300
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" is not in the interface for contract \"").concat(addressOrName, "\""));
301
+ const response = await (contractFunction === null || contractFunction === void 0 ? void 0 : contractFunction(...params));
302
+ return response;
312
303
  }
313
304
 
314
- async function switchNetwork(_ref) {
315
- var _client$connector;
316
-
305
+ async function multicall(_ref) {
317
306
  let {
318
- chainId
307
+ allowFailure = true,
308
+ chainId,
309
+ contracts,
310
+ overrides
319
311
  } = _ref;
320
- const client$1 = client.getClient();
321
- if (!((_client$connector = client$1.connector) !== null && _client$connector !== void 0 && _client$connector.switchChain)) throw new base.SwitchChainNotSupportedError();
322
- const chain = await client$1.connector.switchChain(chainId);
323
- return chain;
324
- }
325
-
326
- function watchAccount(callback) {
327
- const client$1 = client.getClient();
328
-
329
- const handleChange = () => callback(getAccount());
330
-
331
- const unsubscribe = client$1.subscribe(_ref => {
312
+ const provider = getProvider({
313
+ chainId
314
+ });
315
+ if (!provider.chains) throw new base.ProviderChainsNotFound();
316
+ const chain = provider.chains.find(chain => chain.id === chainId) || provider.chains[0];
317
+ if (!chain) throw new base.ProviderChainsNotFound();
318
+ if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new base.ChainDoesNotSupportMulticallError({
319
+ chain
320
+ });
321
+ if (typeof (overrides === null || overrides === void 0 ? void 0 : overrides.blockTag) === 'number' && (overrides === null || overrides === void 0 ? void 0 : overrides.blockTag) < chain.multicall.blockCreated) throw new base.ChainDoesNotSupportMulticallError({
322
+ blockNumber: overrides === null || overrides === void 0 ? void 0 : overrides.blockTag,
323
+ chain
324
+ });
325
+ const multicallContract = getContract({
326
+ addressOrName: chain.multicall.address,
327
+ contractInterface: multicallInterface,
328
+ signerOrProvider: provider
329
+ });
330
+ const calls = contracts.map(_ref2 => {
332
331
  let {
333
- data,
334
- connector
335
- } = _ref;
332
+ addressOrName,
333
+ contractInterface,
334
+ functionName,
335
+ ...config
336
+ } = _ref2;
337
+ const {
338
+ args
339
+ } = config || {};
340
+ const contract = getContract({
341
+ addressOrName,
342
+ contractInterface
343
+ });
344
+ const params = Array.isArray(args) ? args : args ? [args] : [];
345
+ const callData = contract.interface.encodeFunctionData(functionName, params);
346
+ if (!contract[functionName]) console.warn("\"".concat(functionName, "\" is not in the interface for contract \"").concat(addressOrName, "\""));
336
347
  return {
337
- account: data === null || data === void 0 ? void 0 : data.account,
338
- connector
348
+ target: addressOrName,
349
+ allowFailure: allowFailure,
350
+ callData
339
351
  };
340
- }, handleChange, {
341
- equalityFn: (selected, previous) => selected.account === previous.account && selected.connector === previous.connector
342
352
  });
343
- return unsubscribe;
353
+ const params = [...[calls], ...(overrides ? [overrides] : [])];
354
+ const results = await multicallContract.aggregate3(...params);
355
+ return results.map((_ref3, i) => {
356
+ let {
357
+ returnData,
358
+ success
359
+ } = _ref3;
360
+ if (!success) return undefined;
361
+ const {
362
+ addressOrName,
363
+ contractInterface,
364
+ functionName
365
+ } = contracts[i];
366
+ const contract = getContract({
367
+ addressOrName,
368
+ contractInterface
369
+ });
370
+ const result = contract.interface.decodeFunctionResult(functionName, returnData);
371
+ return Array.isArray(result) && result.length === 1 ? result[0] : result;
372
+ });
344
373
  }
345
374
 
346
- function watchNetwork(callback) {
347
- const client$1 = client.getClient();
348
-
349
- const handleChange = () => callback(getNetwork());
375
+ async function readContracts(_ref) {
376
+ let {
377
+ allowFailure = true,
378
+ contracts,
379
+ overrides
380
+ } = _ref;
350
381
 
351
- const unsubscribe = client$1.subscribe(_ref => {
352
- var _data$chain;
382
+ try {
383
+ const provider = getProvider();
384
+ const contractsByChainId = contracts.reduce((contracts, contract) => {
385
+ var _contract$chainId;
353
386
 
354
- let {
355
- data,
356
- chains
357
- } = _ref;
358
- return {
359
- chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
360
- chains
361
- };
362
- }, handleChange, {
363
- equalityFn: (selected, previous) => selected.chainId === previous.chainId && selected.chains === previous.chains
364
- });
365
- return unsubscribe;
366
- }
387
+ const chainId = (_contract$chainId = contract.chainId) !== null && _contract$chainId !== void 0 ? _contract$chainId : provider.network.chainId;
388
+ return { ...contracts,
389
+ [chainId]: [...(contracts[chainId] || []), contract]
390
+ };
391
+ }, {});
392
+ const promises = Object.entries(contractsByChainId).map(_ref2 => {
393
+ let [chainId, contracts] = _ref2;
394
+ return multicall({
395
+ allowFailure,
396
+ chainId: parseInt(chainId),
397
+ contracts,
398
+ overrides
399
+ });
400
+ });
367
401
 
368
- function watchSigner(callback) {
369
- const client$1 = client.getClient();
402
+ if (allowFailure) {
403
+ return (await Promise.allSettled(promises)).map(result => {
404
+ if (result.status === 'fulfilled') return result.value;
370
405
 
371
- const handleChange = async () => callback(await fetchSigner());
406
+ if (result.reason instanceof base.ChainDoesNotSupportMulticallError) {
407
+ console.warn(result.reason.message);
408
+ throw result.reason;
409
+ }
372
410
 
373
- const unsubscribe = client$1.subscribe(_ref => {
374
- var _data$chain;
411
+ return null;
412
+ }).flat();
413
+ }
375
414
 
376
- let {
377
- data,
378
- connector
379
- } = _ref;
380
- return {
381
- account: data === null || data === void 0 ? void 0 : data.account,
382
- chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
383
- connector
384
- };
385
- }, handleChange, {
386
- equalityFn: (selected, previous) => selected.account === previous.account && selected.chainId === previous.chainId && selected.connector === previous.connector
387
- });
388
- return unsubscribe;
389
- }
415
+ return (await Promise.all(promises)).flat();
416
+ } catch (err) {
417
+ const promises = contracts.map(contract => readContract({ ...contract,
418
+ overrides
419
+ }));
390
420
 
391
- function getContract(_ref) {
392
- let {
393
- addressOrName,
394
- contractInterface,
395
- signerOrProvider
396
- } = _ref;
397
- return new ethers.Contract(addressOrName, contractInterface, signerOrProvider);
398
- }
421
+ if (allowFailure) {
422
+ return (await Promise.allSettled(promises)).map(result => result.status === 'fulfilled' ? result.value : null);
423
+ }
399
424
 
400
- async function readContract(contractConfig, functionName) {
401
- let {
402
- args,
403
- chainId,
404
- overrides
405
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
406
- const provider = getProvider({
407
- chainId
408
- });
409
- const contract = getContract({
410
- signerOrProvider: provider,
411
- ...contractConfig
412
- });
413
- const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
414
- const contractFunction = contract[functionName];
415
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(contractConfig.addressOrName, "\""));
416
- const response = await (contractFunction === null || contractFunction === void 0 ? void 0 : contractFunction(...params));
417
- return response;
425
+ return Promise.all(promises);
426
+ }
418
427
  }
419
428
 
420
429
  function watchContractEvent(
@@ -458,7 +467,7 @@ eventName, callback) {
458
467
  webSocketProvider
459
468
  };
460
469
  }, watchEvent, {
461
- equalityFn: (selected, previous) => selected.provider === previous.provider && selected.webSocketProvider === previous.webSocketProvider
470
+ equalityFn: shallow__default["default"]
462
471
  });
463
472
  return () => {
464
473
  var _contract2;
@@ -520,7 +529,7 @@ function watchBlockNumber(args, callback) {
520
529
 
521
530
  callback(await fetchBlockNumber());
522
531
  }, {
523
- equalityFn: (selected, previous) => selected.provider === previous.provider && selected.webSocketProvider === previous.webSocketProvider
532
+ equalityFn: shallow__default["default"]
524
533
  });
525
534
  return () => {
526
535
  unsubscribe();
@@ -528,12 +537,30 @@ function watchBlockNumber(args, callback) {
528
537
  };
529
538
  }
530
539
 
531
- function watchReadContract(contractConfig, functionName) {
532
- let config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
533
- let callback = arguments.length > 3 ? arguments[3] : undefined;
540
+ function watchReadContract(config, callback) {
541
+ const client$1 = client.getClient();
542
+
543
+ const handleChange = async () => callback(await readContract(config));
544
+
545
+ const unwatch = config.listenToBlock ? watchBlockNumber({
546
+ listen: true
547
+ }, handleChange) : undefined;
548
+ const unsubscribe = client$1.subscribe(_ref => {
549
+ let {
550
+ provider
551
+ } = _ref;
552
+ return provider;
553
+ }, handleChange);
554
+ return () => {
555
+ unsubscribe();
556
+ unwatch === null || unwatch === void 0 ? void 0 : unwatch();
557
+ };
558
+ }
559
+
560
+ function watchReadContracts(config, callback) {
534
561
  const client$1 = client.getClient();
535
562
 
536
- const handleChange = async () => callback(await readContract(contractConfig, functionName, config));
563
+ const handleChange = async () => callback(await readContracts(config));
537
564
 
538
565
  const unwatch = config.listenToBlock ? watchBlockNumber({
539
566
  listen: true
@@ -550,29 +577,347 @@ function watchReadContract(contractConfig, functionName) {
550
577
  };
551
578
  }
552
579
 
553
- async function writeContract(contractConfig, functionName) {
580
+ async function writeContract(_ref) {
554
581
  let {
582
+ addressOrName,
555
583
  args,
556
- overrides
557
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
558
- const client$1 = client.getClient();
559
- if (!client$1.connector) throw new base.ConnectorNotFoundError();
584
+ chainId,
585
+ contractInterface,
586
+ functionName,
587
+ overrides,
588
+ signerOrProvider
589
+ } = _ref;
590
+ const {
591
+ connector
592
+ } = client.getClient();
593
+ if (!connector) throw new base.ConnectorNotFoundError();
560
594
  const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
561
595
 
562
596
  try {
563
- const signer = await client$1.connector.getSigner();
564
- const contract = getContract(contractConfig);
597
+ var _chain;
598
+
599
+ let chain;
600
+
601
+ if (chainId) {
602
+ const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
603
+
604
+ if (chainId !== activeChainId) {
605
+ var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
606
+
607
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
608
+ activeChain: (_connector$chains$fin = (_connector$chains$fin2 = connector.chains.find(x => x.id === activeChainId)) === null || _connector$chains$fin2 === void 0 ? void 0 : _connector$chains$fin2.name) !== null && _connector$chains$fin !== void 0 ? _connector$chains$fin : "Chain ".concat(activeChainId),
609
+ targetChain: (_connector$chains$fin3 = (_connector$chains$fin4 = connector.chains.find(x => x.id === chainId)) === null || _connector$chains$fin4 === void 0 ? void 0 : _connector$chains$fin4.name) !== null && _connector$chains$fin3 !== void 0 ? _connector$chains$fin3 : "Chain ".concat(chainId)
610
+ });
611
+ }
612
+ }
613
+
614
+ const signer = await connector.getSigner({
615
+ chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
616
+ });
617
+ const contract = getContract({
618
+ addressOrName,
619
+ contractInterface,
620
+ signerOrProvider
621
+ });
565
622
  const contractWithSigner = contract.connect(signer);
566
623
  const contractFunction = contractWithSigner[functionName];
567
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(contractConfig.addressOrName, "\""));
568
- const response = await contractFunction(...params);
569
- return response;
624
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
625
+ return await contractFunction(...params);
570
626
  } catch (error) {
571
627
  if (error.code === 4001) throw new base.UserRejectedRequestError(error);
572
628
  throw error;
573
629
  }
574
630
  }
575
631
 
632
+ async function fetchBalance(_ref) {
633
+ var _client$chains, _chain$nativeCurrency, _chain$nativeCurrency2, _chain$nativeCurrency3, _chain$nativeCurrency4;
634
+
635
+ let {
636
+ addressOrName,
637
+ chainId,
638
+ formatUnits: unit = 'ether',
639
+ token
640
+ } = _ref;
641
+ const client$1 = client.getClient();
642
+ const provider = getProvider({
643
+ chainId
644
+ });
645
+
646
+ if (token) {
647
+ const erc20Config = {
648
+ addressOrName: token,
649
+ contractInterface: erc20ABI,
650
+ chainId
651
+ }; // Convert ENS name to address if required
652
+
653
+ let resolvedAddress;
654
+ if (utils.isAddress(addressOrName)) resolvedAddress = addressOrName;else {
655
+ const address = await provider.resolveName(addressOrName); // Same error `provider.getBalance` throws for invalid ENS name
656
+
657
+ if (!address) ethers$1.logger.throwError('ENS name not configured', utils.Logger.errors.UNSUPPORTED_OPERATION, {
658
+ operation: "resolveName(".concat(JSON.stringify(addressOrName), ")")
659
+ });
660
+ resolvedAddress = address;
661
+ }
662
+ const [value, decimals, symbol] = await readContracts({
663
+ allowFailure: false,
664
+ contracts: [{ ...erc20Config,
665
+ functionName: 'balanceOf',
666
+ args: resolvedAddress
667
+ }, { ...erc20Config,
668
+ functionName: 'decimals'
669
+ }, { ...erc20Config,
670
+ functionName: 'symbol'
671
+ }]
672
+ });
673
+ return {
674
+ decimals,
675
+ formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit),
676
+ symbol,
677
+ unit,
678
+ value
679
+ };
680
+ }
681
+
682
+ const chains = [...(client$1.provider.chains || []), ...((_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
683
+ const value = await provider.getBalance(addressOrName);
684
+ const chain = chains.find(x => x.id === provider.network.chainId);
685
+ return {
686
+ decimals: (_chain$nativeCurrency = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency2 = chain.nativeCurrency) === null || _chain$nativeCurrency2 === void 0 ? void 0 : _chain$nativeCurrency2.decimals) !== null && _chain$nativeCurrency !== void 0 ? _chain$nativeCurrency : 18,
687
+ formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit),
688
+ symbol: (_chain$nativeCurrency3 = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency4 = chain.nativeCurrency) === null || _chain$nativeCurrency4 === void 0 ? void 0 : _chain$nativeCurrency4.symbol) !== null && _chain$nativeCurrency3 !== void 0 ? _chain$nativeCurrency3 : 'ETH',
689
+ unit,
690
+ value
691
+ };
692
+ }
693
+
694
+ async function fetchSigner() {
695
+ var _client$connector, _client$connector$get;
696
+
697
+ const client$1 = client.getClient();
698
+ const signer = (await ((_client$connector = client$1.connector) === null || _client$connector === void 0 ? void 0 : (_client$connector$get = _client$connector.getSigner) === null || _client$connector$get === void 0 ? void 0 : _client$connector$get.call(_client$connector))) || null;
699
+ return signer;
700
+ }
701
+
702
+ function getAccount() {
703
+ const {
704
+ data,
705
+ connector,
706
+ status
707
+ } = client.getClient();
708
+
709
+ switch (status) {
710
+ case 'connected':
711
+ return {
712
+ address: data === null || data === void 0 ? void 0 : data.account,
713
+ connector: connector,
714
+ isConnected: true,
715
+ isConnecting: false,
716
+ isDisconnected: false,
717
+ isReconnecting: false,
718
+ status
719
+ };
720
+
721
+ case 'reconnecting':
722
+ return {
723
+ address: data === null || data === void 0 ? void 0 : data.account,
724
+ connector,
725
+ isConnected: !!(data !== null && data !== void 0 && data.account),
726
+ isConnecting: false,
727
+ isDisconnected: false,
728
+ isReconnecting: true,
729
+ status
730
+ };
731
+
732
+ case 'connecting':
733
+ return {
734
+ address: undefined,
735
+ connector: undefined,
736
+ isConnected: false,
737
+ isConnecting: true,
738
+ isDisconnected: false,
739
+ isReconnecting: false,
740
+ status
741
+ };
742
+
743
+ case 'disconnected':
744
+ return {
745
+ address: undefined,
746
+ connector: undefined,
747
+ isConnected: false,
748
+ isConnecting: false,
749
+ isDisconnected: true,
750
+ isReconnecting: false,
751
+ status
752
+ };
753
+ }
754
+ }
755
+
756
+ function getNetwork() {
757
+ var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
758
+
759
+ const client$1 = client.getClient();
760
+ const chainId = (_client$data = client$1.data) === null || _client$data === void 0 ? void 0 : (_client$data$chain = _client$data.chain) === null || _client$data$chain === void 0 ? void 0 : _client$data$chain.id;
761
+ const activeChains = (_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
762
+ const activeChain = (_find = [...(client$1.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
763
+ id: chainId,
764
+ name: "Chain ".concat(chainId),
765
+ network: "".concat(chainId),
766
+ rpcUrls: {
767
+ default: ''
768
+ }
769
+ };
770
+ return {
771
+ chain: chainId ? { ...activeChain,
772
+ ...((_client$data2 = client$1.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
773
+ id: chainId
774
+ } : undefined,
775
+ chains: activeChains
776
+ };
777
+ }
778
+
779
+ async function signMessage(args) {
780
+ try {
781
+ const signer = await fetchSigner();
782
+ if (!signer) throw new base.ConnectorNotFoundError();
783
+ return await signer.signMessage(args.message);
784
+ } catch (error) {
785
+ if (error.code === 4001) throw new base.UserRejectedRequestError(error);
786
+ throw error;
787
+ }
788
+ }
789
+
790
+ async function signTypedData(_ref) {
791
+ let {
792
+ domain,
793
+ types,
794
+ value
795
+ } = _ref;
796
+ const {
797
+ connector
798
+ } = client.getClient();
799
+ if (!connector) throw new base.ConnectorNotFoundError();
800
+
801
+ try {
802
+ var _chain;
803
+
804
+ const {
805
+ chainId
806
+ } = domain;
807
+ let chain;
808
+
809
+ if (chainId) {
810
+ const chainId_ = base.normalizeChainId(chainId);
811
+ const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
812
+
813
+ if (chainId !== activeChainId) {
814
+ var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
815
+
816
+ if (connector.switchChain) chain = await connector.switchChain(chainId_);else throw new base.ChainMismatchError({
817
+ activeChain: (_connector$chains$fin = (_connector$chains$fin2 = connector.chains.find(x => x.id === activeChainId)) === null || _connector$chains$fin2 === void 0 ? void 0 : _connector$chains$fin2.name) !== null && _connector$chains$fin !== void 0 ? _connector$chains$fin : "Chain ".concat(activeChainId),
818
+ targetChain: (_connector$chains$fin3 = (_connector$chains$fin4 = connector.chains.find(x => x.id === chainId_)) === null || _connector$chains$fin4 === void 0 ? void 0 : _connector$chains$fin4.name) !== null && _connector$chains$fin3 !== void 0 ? _connector$chains$fin3 : "Chain ".concat(chainId_)
819
+ });
820
+ }
821
+ }
822
+
823
+ const signer = await connector.getSigner({
824
+ chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
825
+ }); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
826
+
827
+ return await signer._signTypedData(domain, types, value);
828
+ } catch (error) {
829
+ if (error.code === 4001) throw new base.UserRejectedRequestError(error);
830
+ throw error;
831
+ }
832
+ }
833
+
834
+ async function switchNetwork(_ref) {
835
+ let {
836
+ chainId
837
+ } = _ref;
838
+ const {
839
+ connector
840
+ } = client.getClient();
841
+ if (!connector) throw new base.ConnectorNotFoundError();
842
+ if (!connector.switchChain) throw new base.SwitchChainNotSupportedError({
843
+ connector
844
+ });
845
+ return await connector.switchChain(chainId);
846
+ }
847
+
848
+ function watchAccount(callback) {
849
+ let {
850
+ selector = x => x
851
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
852
+ const client$1 = client.getClient();
853
+
854
+ const handleChange = () => callback(getAccount());
855
+
856
+ const unsubscribe = client$1.subscribe(_ref => {
857
+ let {
858
+ data,
859
+ connector,
860
+ status
861
+ } = _ref;
862
+ return selector({
863
+ address: data === null || data === void 0 ? void 0 : data.account,
864
+ connector,
865
+ status
866
+ });
867
+ }, handleChange, {
868
+ equalityFn: shallow__default["default"]
869
+ });
870
+ return unsubscribe;
871
+ }
872
+
873
+ function watchNetwork(callback) {
874
+ let {
875
+ selector = x => x
876
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
877
+ const client$1 = client.getClient();
878
+
879
+ const handleChange = () => callback(getNetwork());
880
+
881
+ const unsubscribe = client$1.subscribe(_ref => {
882
+ var _data$chain;
883
+
884
+ let {
885
+ data,
886
+ chains
887
+ } = _ref;
888
+ return selector({
889
+ chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
890
+ chains
891
+ });
892
+ }, handleChange, {
893
+ equalityFn: shallow__default["default"]
894
+ });
895
+ return unsubscribe;
896
+ }
897
+
898
+ function watchSigner(callback) {
899
+ const client$1 = client.getClient();
900
+
901
+ const handleChange = async () => callback(await fetchSigner());
902
+
903
+ const unsubscribe = client$1.subscribe(_ref => {
904
+ var _data$chain;
905
+
906
+ let {
907
+ data,
908
+ connector
909
+ } = _ref;
910
+ return {
911
+ account: data === null || data === void 0 ? void 0 : data.account,
912
+ chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
913
+ connector
914
+ };
915
+ }, handleChange, {
916
+ equalityFn: shallow__default["default"]
917
+ });
918
+ return unsubscribe;
919
+ }
920
+
576
921
  async function fetchEnsAddress(_ref) {
577
922
  let {
578
923
  chainId,
@@ -669,12 +1014,38 @@ async function fetchToken(_ref) {
669
1014
  return token;
670
1015
  }
671
1016
 
672
- async function sendTransaction(args) {
1017
+ async function sendTransaction(_ref) {
1018
+ let {
1019
+ chainId,
1020
+ request
1021
+ } = _ref;
1022
+ const {
1023
+ connector
1024
+ } = client.getClient();
1025
+ if (!connector) throw new base.ConnectorNotFoundError();
1026
+
673
1027
  try {
674
- const signer = await fetchSigner();
675
- if (!signer) throw new base.ConnectorNotFoundError();
676
- const transaction = await signer.sendTransaction(args.request);
677
- return transaction;
1028
+ var _chain;
1029
+
1030
+ let chain;
1031
+
1032
+ if (chainId) {
1033
+ const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1034
+
1035
+ if (chainId !== activeChainId) {
1036
+ var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1037
+
1038
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
1039
+ activeChain: (_connector$chains$fin = (_connector$chains$fin2 = connector.chains.find(x => x.id === activeChainId)) === null || _connector$chains$fin2 === void 0 ? void 0 : _connector$chains$fin2.name) !== null && _connector$chains$fin !== void 0 ? _connector$chains$fin : "Chain ".concat(activeChainId),
1040
+ targetChain: (_connector$chains$fin3 = (_connector$chains$fin4 = connector.chains.find(x => x.id === chainId)) === null || _connector$chains$fin4 === void 0 ? void 0 : _connector$chains$fin4.name) !== null && _connector$chains$fin3 !== void 0 ? _connector$chains$fin3 : "Chain ".concat(chainId)
1041
+ });
1042
+ }
1043
+ }
1044
+
1045
+ const signer = await connector.getSigner({
1046
+ chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
1047
+ });
1048
+ return await signer.sendTransaction(request);
678
1049
  } catch (error) {
679
1050
  if (error.code === 4001) throw new base.UserRejectedRequestError(error);
680
1051
  throw error;
@@ -707,10 +1078,13 @@ exports.createClient = client.createClient;
707
1078
  exports.createStorage = client.createStorage;
708
1079
  exports.noopStorage = client.noopStorage;
709
1080
  exports.AddChainError = base.AddChainError;
1081
+ exports.ChainDoesNotSupportMulticallError = base.ChainDoesNotSupportMulticallError;
1082
+ exports.ChainMismatchError = base.ChainMismatchError;
710
1083
  exports.ChainNotConfiguredError = base.ChainNotConfiguredError;
711
1084
  exports.Connector = base.Connector;
712
1085
  exports.ConnectorAlreadyConnectedError = base.ConnectorAlreadyConnectedError;
713
1086
  exports.ConnectorNotFoundError = base.ConnectorNotFoundError;
1087
+ exports.ProviderChainsNotFound = base.ProviderChainsNotFound;
714
1088
  exports.ProviderRpcError = base.ProviderRpcError;
715
1089
  exports.ResourceUnavailableError = base.ResourceUnavailableError;
716
1090
  exports.RpcError = base.RpcError;
@@ -718,14 +1092,15 @@ exports.SwitchChainError = base.SwitchChainError;
718
1092
  exports.SwitchChainNotSupportedError = base.SwitchChainNotSupportedError;
719
1093
  exports.UserRejectedRequestError = base.UserRejectedRequestError;
720
1094
  exports.normalizeChainId = base.normalizeChainId;
1095
+ exports.alchemyRpcUrls = rpcs.alchemyRpcUrls;
1096
+ exports.infuraRpcUrls = rpcs.infuraRpcUrls;
1097
+ exports.publicRpcUrls = rpcs.publicRpcUrls;
721
1098
  exports.allChains = chains.allChains;
722
1099
  exports.chain = chains.chain;
723
1100
  exports.chainId = chains.chainId;
724
1101
  exports.defaultChains = chains.defaultChains;
725
1102
  exports.defaultL2Chains = chains.defaultL2Chains;
726
1103
  exports.etherscanBlockExplorers = chains.etherscanBlockExplorers;
727
- exports.alchemyRpcUrls = rpcs.alchemyRpcUrls;
728
- exports.infuraRpcUrls = rpcs.infuraRpcUrls;
729
1104
  exports.configureChains = configureChains;
730
1105
  exports.connect = connect;
731
1106
  exports.disconnect = disconnect;
@@ -746,6 +1121,7 @@ exports.getNetwork = getNetwork;
746
1121
  exports.getProvider = getProvider;
747
1122
  exports.getWebSocketProvider = getWebSocketProvider;
748
1123
  exports.readContract = readContract;
1124
+ exports.readContracts = readContracts;
749
1125
  exports.sendTransaction = sendTransaction;
750
1126
  exports.signMessage = signMessage;
751
1127
  exports.signTypedData = signTypedData;
@@ -758,6 +1134,7 @@ exports.watchContractEvent = watchContractEvent;
758
1134
  exports.watchNetwork = watchNetwork;
759
1135
  exports.watchProvider = watchProvider;
760
1136
  exports.watchReadContract = watchReadContract;
1137
+ exports.watchReadContracts = watchReadContracts;
761
1138
  exports.watchSigner = watchSigner;
762
1139
  exports.watchWebSocketProvider = watchWebSocketProvider;
763
1140
  exports.writeContract = writeContract;