@wagmi/core 0.4.8 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +5 -5
  2. package/chains/dist/wagmi-core-chains.cjs.dev.js +2 -2
  3. package/chains/dist/wagmi-core-chains.cjs.prod.js +2 -2
  4. package/chains/dist/wagmi-core-chains.esm.js +2 -2
  5. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +28 -26
  6. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +28 -26
  7. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +5 -3
  8. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.dev.js +22 -23
  9. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.prod.js +22 -23
  10. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.esm.js +7 -8
  11. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +33 -31
  12. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +33 -31
  13. package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +6 -4
  14. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +24 -25
  15. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +24 -25
  16. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +5 -6
  17. package/dist/{chains-7e6dc59c.cjs.dev.js → chains-13baf029.cjs.prod.js} +4 -4
  18. package/dist/{chains-fd2c546c.esm.js → chains-4b1a6cf8.esm.js} +4 -4
  19. package/dist/{chains-f7bb3211.cjs.prod.js → chains-a1aae67e.cjs.dev.js} +4 -4
  20. package/dist/declarations/src/actions/accounts/fetchBalance.d.ts +0 -1
  21. package/dist/declarations/src/actions/accounts/fetchSigner.d.ts +3 -3
  22. package/dist/declarations/src/actions/contracts/deprecatedWriteContract.d.ts +16 -0
  23. package/dist/declarations/src/actions/{tokens → contracts}/fetchToken.d.ts +1 -0
  24. package/dist/declarations/src/actions/contracts/index.d.ts +4 -1
  25. package/dist/declarations/src/actions/contracts/prepareWriteContract.d.ts +37 -0
  26. package/dist/declarations/src/actions/contracts/writeContract.d.ts +44 -8
  27. package/dist/declarations/src/actions/ens/fetchEnsAddress.d.ts +2 -1
  28. package/dist/declarations/src/actions/index.d.ts +2 -3
  29. package/dist/declarations/src/actions/transactions/deprecatedSendTransaction.d.ts +12 -0
  30. package/dist/declarations/src/actions/transactions/fetchTransaction.d.ts +21 -0
  31. package/dist/declarations/src/actions/transactions/index.d.ts +4 -1
  32. package/dist/declarations/src/actions/transactions/prepareSendTransaction.d.ts +36 -0
  33. package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +43 -8
  34. package/dist/declarations/src/client.d.ts +3 -3
  35. package/dist/declarations/src/connectors/base.d.ts +1 -2
  36. package/dist/declarations/src/connectors/coinbaseWallet.d.ts +2 -2
  37. package/dist/declarations/src/connectors/index.d.ts +1 -1
  38. package/dist/declarations/src/connectors/injected.d.ts +4 -4
  39. package/dist/declarations/src/connectors/metaMask.d.ts +1 -1
  40. package/dist/declarations/src/connectors/mock/provider.d.ts +3 -2
  41. package/dist/declarations/src/connectors/walletConnect.d.ts +3 -2
  42. package/dist/declarations/src/constants/index.d.ts +1 -1
  43. package/dist/declarations/src/constants/rpcs.d.ts +2 -2
  44. package/dist/declarations/src/errors.d.ts +10 -3
  45. package/dist/declarations/src/index.d.ts +5 -5
  46. package/dist/declarations/src/providers/alchemy.d.ts +2 -3
  47. package/dist/declarations/src/providers/infura.d.ts +2 -3
  48. package/dist/declarations/src/providers/jsonRpc.d.ts +1 -2
  49. package/dist/declarations/src/providers/public.d.ts +2 -4
  50. package/dist/declarations/src/types/index.d.ts +133 -129
  51. package/dist/declarations/src/utils/configureChains.d.ts +3 -1
  52. package/dist/declarations/src/utils/getInjectedName.d.ts +2 -1
  53. package/dist/{client-a6e61429.cjs.prod.js → getProvider-5b369460.cjs.prod.js} +449 -56
  54. package/dist/{client-a05fd511.esm.js → getProvider-dda5b21b.esm.js} +383 -14
  55. package/dist/{client-71ece661.cjs.dev.js → getProvider-e4848469.cjs.dev.js} +449 -56
  56. package/dist/{rpcs-1fd0a12f.cjs.prod.js → rpcs-3d4e8104.cjs.dev.js} +9 -9
  57. package/dist/{rpcs-f1d24f0e.cjs.dev.js → rpcs-4b3a7778.cjs.prod.js} +9 -9
  58. package/dist/{rpcs-b73a8f60.esm.js → rpcs-5dc0ea1f.esm.js} +8 -8
  59. package/dist/wagmi-core.cjs.dev.js +591 -298
  60. package/dist/wagmi-core.cjs.prod.js +591 -298
  61. package/dist/wagmi-core.esm.js +499 -213
  62. package/package.json +8 -4
  63. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.dev.js +5 -7
  64. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.prod.js +5 -7
  65. package/providers/alchemy/dist/wagmi-core-providers-alchemy.esm.js +5 -7
  66. package/providers/infura/dist/wagmi-core-providers-infura.cjs.dev.js +5 -7
  67. package/providers/infura/dist/wagmi-core-providers-infura.cjs.prod.js +5 -7
  68. package/providers/infura/dist/wagmi-core-providers-infura.esm.js +5 -7
  69. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.dev.js +0 -2
  70. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.prod.js +0 -2
  71. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.esm.js +0 -2
  72. package/providers/public/dist/wagmi-core-providers-public.cjs.dev.js +0 -2
  73. package/providers/public/dist/wagmi-core-providers-public.cjs.prod.js +0 -2
  74. package/providers/public/dist/wagmi-core-providers-public.esm.js +0 -2
  75. package/dist/base-797ad073.cjs.prod.js +0 -343
  76. package/dist/base-90b7f3e4.cjs.dev.js +0 -343
  77. package/dist/base-b565d5d4.esm.js +0 -316
  78. package/dist/declarations/src/actions/tokens/index.d.ts +0 -1
@@ -2,16 +2,15 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var client = require('./client-a6e61429.cjs.prod.js');
6
- var base = require('./base-797ad073.cjs.prod.js');
5
+ var getProvider = require('./getProvider-5b369460.cjs.prod.js');
6
+ var ethers = require('ethers');
7
7
  var ethers$1 = require('ethers/lib/ethers');
8
8
  var utils = require('ethers/lib/utils');
9
- var ethers = require('ethers');
10
9
  var shallow = require('zustand/shallow');
11
- var rpcs = require('./rpcs-1fd0a12f.cjs.prod.js');
12
- var chains = require('./chains-f7bb3211.cjs.prod.js');
13
- require('zustand/vanilla');
10
+ var rpcs = require('./rpcs-4b3a7778.cjs.prod.js');
11
+ var chains = require('./chains-13baf029.cjs.prod.js');
14
12
  require('zustand/middleware');
13
+ require('zustand/vanilla');
15
14
  require('eventemitter3');
16
15
 
17
16
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
@@ -21,6 +20,7 @@ var shallow__default = /*#__PURE__*/_interopDefault(shallow);
21
20
  function configureChains(defaultChains, providers) {
22
21
  let {
23
22
  minQuorum = 1,
23
+ pollingInterval = 4000,
24
24
  targetQuorum = 1,
25
25
  stallTimeout
26
26
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -66,21 +66,27 @@ function configureChains(defaultChains, providers) {
66
66
  return {
67
67
  chains,
68
68
  provider: _ref2 => {
69
- var _defaultChains$, _chainProviders$;
69
+ var _defaultChains$;
70
70
 
71
71
  let {
72
72
  chainId
73
73
  } = _ref2;
74
74
  const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$ = defaultChains[0]) === null || _defaultChains$ === void 0 ? void 0 : _defaultChains$.id;
75
75
  const chainProviders = providers_[activeChainId];
76
- if (!chainProviders) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
77
- if (chainProviders.length === 1) return Object.assign(((_chainProviders$ = chainProviders[0]) === null || _chainProviders$ === void 0 ? void 0 : _chainProviders$.call(chainProviders)) || {}, {
78
- chains
79
- });
76
+ if (!chainProviders || !chainProviders[0]) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
77
+
78
+ if (chainProviders.length === 1) {
79
+ return Object.assign(chainProviders[0](), {
80
+ chains,
81
+ pollingInterval
82
+ });
83
+ }
84
+
80
85
  return Object.assign(fallbackProvider(targetQuorum, minQuorum, chainProviders, {
81
86
  stallTimeout
82
87
  }), {
83
- chains
88
+ chains,
89
+ pollingInterval
84
90
  });
85
91
  },
86
92
  webSocketProvider: _ref3 => {
@@ -247,41 +253,44 @@ async function connect(_ref) {
247
253
  chainId,
248
254
  connector
249
255
  } = _ref;
250
- const client$1 = client.getClient();
251
- const activeConnector = client$1.connector;
252
- if (connector.id === (activeConnector === null || activeConnector === void 0 ? void 0 : activeConnector.id)) throw new base.ConnectorAlreadyConnectedError();
256
+ const client = getProvider.getClient();
257
+ const activeConnector = client.connector;
258
+ if (connector.id === (activeConnector === null || activeConnector === void 0 ? void 0 : activeConnector.id)) throw new getProvider.ConnectorAlreadyConnectedError();
253
259
 
254
260
  try {
255
- client$1.setState(x => ({ ...x,
261
+ client.setState(x => ({ ...x,
256
262
  status: 'connecting'
257
263
  }));
258
264
  const data = await connector.connect({
259
265
  chainId
260
266
  });
261
- client$1.setLastUsedConnector(connector.id);
262
- client$1.setState(x => ({ ...x,
267
+ client.setLastUsedConnector(connector.id);
268
+ client.setState(x => ({ ...x,
263
269
  connector,
264
270
  chains: connector === null || connector === void 0 ? void 0 : connector.chains,
265
271
  data,
266
272
  status: 'connected'
267
273
  }));
268
- client$1.storage.setItem('connected', true);
274
+ client.storage.setItem('connected', true);
269
275
  return { ...data,
270
276
  connector
271
277
  };
272
278
  } catch (err) {
273
- client$1.setState(x => ({ ...x,
274
- status: 'disconnected'
275
- }));
279
+ client.setState(x => {
280
+ return { ...x,
281
+ // Keep existing connector connected in case of error
282
+ status: x.connector ? 'connected' : 'disconnected'
283
+ };
284
+ });
276
285
  throw err;
277
286
  }
278
287
  }
279
288
 
280
289
  async function disconnect() {
281
- const client$1 = client.getClient();
282
- if (client$1.connector) await client$1.connector.disconnect();
283
- client$1.clearState();
284
- client$1.storage.removeItem('connected');
290
+ const client = getProvider.getClient();
291
+ if (client.connector) await client.connector.disconnect();
292
+ client.clearState();
293
+ client.storage.removeItem('connected');
285
294
  }
286
295
 
287
296
  function getContract(_ref) {
@@ -293,34 +302,170 @@ function getContract(_ref) {
293
302
  return new ethers.Contract(addressOrName, contractInterface, signerOrProvider);
294
303
  }
295
304
 
296
- function getProvider() {
305
+ async function deprecatedWriteContract(_ref) {
297
306
  let {
307
+ addressOrName,
308
+ args,
309
+ chainId,
310
+ contractInterface,
311
+ functionName,
312
+ overrides,
313
+ signerOrProvider
314
+ } = _ref;
315
+ const {
316
+ connector
317
+ } = getProvider.getClient();
318
+ if (!connector) throw new getProvider.ConnectorNotFoundError();
319
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
320
+
321
+ try {
322
+ var _chain;
323
+
324
+ let chain;
325
+
326
+ if (chainId) {
327
+ const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
328
+
329
+ if (chainId !== activeChainId) {
330
+ var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
331
+
332
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new getProvider.ChainMismatchError({
333
+ 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),
334
+ 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)
335
+ });
336
+ }
337
+ }
338
+
339
+ const signer = await connector.getSigner({
340
+ chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
341
+ });
342
+ const contract = getContract({
343
+ addressOrName,
344
+ contractInterface,
345
+ signerOrProvider
346
+ });
347
+ const contractWithSigner = contract.connect(signer);
348
+ const contractFunction = contractWithSigner[functionName];
349
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
350
+ return await contractFunction(...params);
351
+ } catch (error) {
352
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
353
+ throw error;
354
+ }
355
+ }
356
+
357
+ async function fetchToken(_ref) {
358
+ let {
359
+ address,
360
+ chainId,
361
+ formatUnits: units = 'ether'
362
+ } = _ref;
363
+ const erc20Config = {
364
+ addressOrName: address,
365
+ contractInterface: erc20ABI,
298
366
  chainId
299
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
300
- const client$1 = client.getClient();
301
- if (chainId && typeof client$1.config.provider === 'function') return client$1.config.provider({
302
- chainId
367
+ };
368
+ const [decimals, name, symbol, totalSupply] = await readContracts({
369
+ allowFailure: false,
370
+ contracts: [{ ...erc20Config,
371
+ functionName: 'decimals'
372
+ }, { ...erc20Config,
373
+ functionName: 'name'
374
+ }, { ...erc20Config,
375
+ functionName: 'symbol'
376
+ }, { ...erc20Config,
377
+ functionName: 'totalSupply'
378
+ }]
379
+ });
380
+ return {
381
+ address,
382
+ decimals,
383
+ name,
384
+ symbol,
385
+ totalSupply: {
386
+ formatted: utils.formatUnits(totalSupply, units),
387
+ value: totalSupply
388
+ }
389
+ };
390
+ }
391
+
392
+ /**
393
+ * @description Prepares the parameters required for a contract write transaction.
394
+ *
395
+ * Returns config to be passed through to `writeContract`.
396
+ *
397
+ * @example
398
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
399
+ *
400
+ * const config = await prepareWriteContract({
401
+ * addressOrName: '0x...',
402
+ * contractInterface: wagmiAbi,
403
+ * functionName: 'mint',
404
+ * })
405
+ * const result = await writeContract(config)
406
+ */
407
+ async function prepareWriteContract(_ref) {
408
+ let {
409
+ addressOrName,
410
+ args,
411
+ chainId,
412
+ contractInterface,
413
+ functionName,
414
+ overrides,
415
+ signer: signer_
416
+ } = _ref;
417
+ const signer = signer_ !== null && signer_ !== void 0 ? signer_ : await fetchSigner();
418
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
419
+ const contract = getContract({
420
+ addressOrName,
421
+ contractInterface,
422
+ signerOrProvider: signer
303
423
  });
304
- return client$1.provider;
424
+ const populateTransactionFn = contract.populateTransaction[functionName];
425
+
426
+ if (!populateTransactionFn) {
427
+ throw new getProvider.ContractMethodDoesNotExistError({
428
+ addressOrName,
429
+ functionName
430
+ });
431
+ }
432
+
433
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
434
+ const unsignedTransaction = await populateTransactionFn(...params);
435
+ const gasLimit = unsignedTransaction.gasLimit || (await signer.estimateGas(unsignedTransaction));
436
+ return {
437
+ addressOrName,
438
+ args,
439
+ ...(chainId ? {
440
+ chainId
441
+ } : {}),
442
+ contractInterface,
443
+ functionName,
444
+ overrides,
445
+ request: { ...unsignedTransaction,
446
+ gasLimit
447
+ },
448
+ mode: 'prepared'
449
+ };
305
450
  }
306
451
 
307
452
  function getWebSocketProvider() {
308
453
  let {
309
454
  chainId
310
455
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
311
- const client$1 = client.getClient();
312
- if (chainId && typeof client$1.config.webSocketProvider === 'function') return client$1.config.webSocketProvider({
456
+ const client = getProvider.getClient();
457
+ if (chainId && typeof client.config.webSocketProvider === 'function') return client.config.webSocketProvider({
313
458
  chainId
314
459
  });
315
- return client$1.webSocketProvider;
460
+ return client.webSocketProvider;
316
461
  }
317
462
 
318
463
  function watchProvider(args, callback) {
319
- const client$1 = client.getClient();
464
+ const client = getProvider.getClient();
320
465
 
321
- const handleChange = async () => callback(getProvider(args));
466
+ const handleChange = async () => callback(getProvider.getProvider(args));
322
467
 
323
- const unsubscribe = client$1.subscribe(_ref => {
468
+ const unsubscribe = client.subscribe(_ref => {
324
469
  let {
325
470
  provider
326
471
  } = _ref;
@@ -330,11 +475,11 @@ function watchProvider(args, callback) {
330
475
  }
331
476
 
332
477
  function watchWebSocketProvider(args, callback) {
333
- const client$1 = client.getClient();
478
+ const client = getProvider.getClient();
334
479
 
335
480
  const handleChange = async () => callback(getWebSocketProvider(args));
336
481
 
337
- const unsubscribe = client$1.subscribe(_ref => {
482
+ const unsubscribe = client.subscribe(_ref => {
338
483
  let {
339
484
  webSocketProvider
340
485
  } = _ref;
@@ -352,7 +497,7 @@ async function readContract(_ref) {
352
497
  functionName,
353
498
  overrides
354
499
  } = _ref;
355
- const provider = getProvider({
500
+ const provider = getProvider.getProvider({
356
501
  chainId
357
502
  });
358
503
  const contract = getContract({
@@ -374,16 +519,16 @@ async function multicall(_ref) {
374
519
  contracts,
375
520
  overrides
376
521
  } = _ref;
377
- const provider = getProvider({
522
+ const provider = getProvider.getProvider({
378
523
  chainId
379
524
  });
380
- if (!provider.chains) throw new base.ProviderChainsNotFound();
525
+ if (!provider.chains) throw new getProvider.ProviderChainsNotFound();
381
526
  const chain = provider.chains.find(chain => chain.id === chainId) || provider.chains[0];
382
- if (!chain) throw new base.ProviderChainsNotFound();
383
- if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new base.ChainDoesNotSupportMulticallError({
527
+ if (!chain) throw new getProvider.ProviderChainsNotFound();
528
+ if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new getProvider.ChainDoesNotSupportMulticallError({
384
529
  chain
385
530
  });
386
- 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({
531
+ 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 getProvider.ChainDoesNotSupportMulticallError({
387
532
  blockNumber: overrides === null || overrides === void 0 ? void 0 : overrides.blockTag,
388
533
  chain
389
534
  });
@@ -430,11 +575,9 @@ async function multicall(_ref) {
430
575
  } = contracts[i];
431
576
 
432
577
  if (returnData === '0x') {
433
- var _chain$blockExplorers;
434
-
435
- const err = new base.ContractMethodNoResultError({
578
+ const err = new getProvider.ContractMethodNoResultError({
436
579
  addressOrName,
437
- blockExplorer: (_chain$blockExplorers = chain.blockExplorers) === null || _chain$blockExplorers === void 0 ? void 0 : _chain$blockExplorers.default,
580
+ chainId: chain.id,
438
581
  functionName
439
582
  });
440
583
  if (!allowFailure) throw err;
@@ -465,7 +608,7 @@ async function readContracts(_ref) {
465
608
  } = _ref;
466
609
 
467
610
  try {
468
- const provider = getProvider();
611
+ const provider = getProvider.getProvider();
469
612
  const contractsByChainId = contracts.reduce((contracts, contract) => {
470
613
  var _contract$chainId;
471
614
 
@@ -488,7 +631,7 @@ async function readContracts(_ref) {
488
631
  return (await Promise.allSettled(promises)).map(result => {
489
632
  if (result.status === 'fulfilled') return result.value;
490
633
 
491
- if (result.reason instanceof base.ChainDoesNotSupportMulticallError) {
634
+ if (result.reason instanceof getProvider.ChainDoesNotSupportMulticallError) {
492
635
  console.warn(result.reason.message);
493
636
  throw result.reason;
494
637
  }
@@ -499,7 +642,7 @@ async function readContracts(_ref) {
499
642
 
500
643
  return (await Promise.all(promises)).flat();
501
644
  } catch (err) {
502
- if (err instanceof base.ContractMethodNoResultError) throw err;
645
+ if (err instanceof getProvider.ContractMethodNoResultError) throw err;
503
646
  const promises = contracts.map(contract => readContract({ ...contract,
504
647
  overrides
505
648
  }));
@@ -533,7 +676,7 @@ eventName, callback) {
533
676
  contract = getContract({
534
677
  signerOrProvider: getWebSocketProvider({
535
678
  chainId
536
- }) || getProvider({
679
+ }) || getProvider.getProvider({
537
680
  chainId
538
681
  }),
539
682
  ...contractArgs
@@ -542,8 +685,8 @@ eventName, callback) {
542
685
  };
543
686
 
544
687
  watchEvent();
545
- const client$1 = client.getClient();
546
- const unsubscribe = client$1.subscribe(_ref => {
688
+ const client = getProvider.getClient();
689
+ const unsubscribe = client.subscribe(_ref => {
547
690
  let {
548
691
  provider,
549
692
  webSocketProvider
@@ -567,7 +710,7 @@ async function fetchBlockNumber() {
567
710
  let {
568
711
  chainId
569
712
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
570
- const provider = getProvider({
713
+ const provider = getProvider.getProvider({
571
714
  chainId
572
715
  });
573
716
  const blockNumber = await provider.getBlockNumber();
@@ -590,10 +733,10 @@ function watchBlockNumber(args, callback) {
590
733
  previousProvider = provider;
591
734
  };
592
735
 
593
- const client$1 = client.getClient();
594
- const provider_ = (_client$webSocketProv = client$1.webSocketProvider) !== null && _client$webSocketProv !== void 0 ? _client$webSocketProv : client$1.provider;
736
+ const client = getProvider.getClient();
737
+ const provider_ = (_client$webSocketProv = client.webSocketProvider) !== null && _client$webSocketProv !== void 0 ? _client$webSocketProv : client.provider;
595
738
  if (args.listen) createListener(provider_);
596
- const unsubscribe = client$1.subscribe(_ref => {
739
+ const unsubscribe = client.subscribe(_ref => {
597
740
  let {
598
741
  provider,
599
742
  webSocketProvider
@@ -624,14 +767,14 @@ function watchBlockNumber(args, callback) {
624
767
  }
625
768
 
626
769
  function watchReadContract(config, callback) {
627
- const client$1 = client.getClient();
770
+ const client = getProvider.getClient();
628
771
 
629
772
  const handleChange = async () => callback(await readContract(config));
630
773
 
631
774
  const unwatch = config.listenToBlock ? watchBlockNumber({
632
775
  listen: true
633
776
  }, handleChange) : undefined;
634
- const unsubscribe = client$1.subscribe(_ref => {
777
+ const unsubscribe = client.subscribe(_ref => {
635
778
  let {
636
779
  provider
637
780
  } = _ref;
@@ -644,14 +787,14 @@ function watchReadContract(config, callback) {
644
787
  }
645
788
 
646
789
  function watchReadContracts(config, callback) {
647
- const client$1 = client.getClient();
790
+ const client = getProvider.getClient();
648
791
 
649
792
  const handleChange = async () => callback(await readContracts(config));
650
793
 
651
794
  const unwatch = config.listenToBlock ? watchBlockNumber({
652
795
  listen: true
653
796
  }, handleChange) : undefined;
654
- const unsubscribe = client$1.subscribe(_ref => {
797
+ const unsubscribe = client.subscribe(_ref => {
655
798
  let {
656
799
  provider
657
800
  } = _ref;
@@ -663,21 +806,15 @@ function watchReadContracts(config, callback) {
663
806
  };
664
807
  }
665
808
 
666
- async function writeContract(_ref) {
809
+ async function deprecatedSendTransaction(_ref) {
667
810
  let {
668
- addressOrName,
669
- args,
670
811
  chainId,
671
- contractInterface,
672
- functionName,
673
- overrides,
674
- signerOrProvider
812
+ request
675
813
  } = _ref;
676
814
  const {
677
815
  connector
678
- } = client.getClient();
679
- if (!connector) throw new base.ConnectorNotFoundError();
680
- const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
816
+ } = getProvider.getClient();
817
+ if (!connector) throw new getProvider.ConnectorNotFoundError();
681
818
 
682
819
  try {
683
820
  var _chain;
@@ -690,7 +827,7 @@ async function writeContract(_ref) {
690
827
  if (chainId !== activeChainId) {
691
828
  var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
692
829
 
693
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
830
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new getProvider.ChainMismatchError({
694
831
  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),
695
832
  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)
696
833
  });
@@ -700,32 +837,329 @@ async function writeContract(_ref) {
700
837
  const signer = await connector.getSigner({
701
838
  chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
702
839
  });
703
- const contract = getContract({
704
- addressOrName,
705
- contractInterface,
706
- signerOrProvider
840
+ return await signer.sendTransaction(request);
841
+ } catch (error) {
842
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
843
+ throw error;
844
+ }
845
+ }
846
+
847
+ /**
848
+ * @description Fetches transaction for hash
849
+ *
850
+ * @example
851
+ * import { fetchTransaction } from '@wagmi/core'
852
+ *
853
+ * const transaction = await fetchTransaction({
854
+ * chainId: 1,
855
+ * hash: '0x...',
856
+ * })
857
+ */
858
+ async function fetchTransaction(_ref) {
859
+ let {
860
+ chainId,
861
+ hash
862
+ } = _ref;
863
+ const provider = getProvider.getProvider({
864
+ chainId
865
+ });
866
+ return await provider.getTransaction(hash);
867
+ }
868
+
869
+ async function fetchEnsAddress(_ref) {
870
+ let {
871
+ chainId,
872
+ name
873
+ } = _ref;
874
+ const provider = getProvider.getProvider({
875
+ chainId
876
+ });
877
+ const address = await provider.resolveName(name);
878
+
879
+ try {
880
+ return address ? utils.getAddress(address) : null;
881
+ } catch (_error) {
882
+ return null;
883
+ }
884
+ }
885
+
886
+ async function fetchEnsAvatar(_ref) {
887
+ let {
888
+ addressOrName,
889
+ chainId
890
+ } = _ref;
891
+ const provider = getProvider.getProvider({
892
+ chainId
893
+ }); // TODO: Update with more advanced logic
894
+ // https://github.com/ensdomains/ens-avatar
895
+
896
+ const avatar = await provider.getAvatar(addressOrName);
897
+ return avatar;
898
+ }
899
+
900
+ async function fetchEnsName(_ref) {
901
+ let {
902
+ address,
903
+ chainId
904
+ } = _ref;
905
+ const provider = getProvider.getProvider({
906
+ chainId
907
+ });
908
+ return await provider.lookupAddress(address);
909
+ }
910
+
911
+ async function fetchEnsResolver(_ref) {
912
+ let {
913
+ chainId,
914
+ name
915
+ } = _ref;
916
+ const provider = getProvider.getProvider({
917
+ chainId
918
+ });
919
+ const resolver = await provider.getResolver(name);
920
+ return resolver;
921
+ }
922
+
923
+ /**
924
+ * @description Prepares the parameters required for sending a transaction.
925
+ *
926
+ * Returns config to be passed through to `sendTransaction`.
927
+ *
928
+ * @example
929
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
930
+ *
931
+ * const config = await prepareSendTransaction({
932
+ * request: {
933
+ * to: 'moxey.eth',
934
+ * value: parseEther('1'),
935
+ * }
936
+ * })
937
+ * const result = await sendTransaction(config)
938
+ */
939
+ async function prepareSendTransaction(_ref) {
940
+ let {
941
+ chainId,
942
+ request,
943
+ signerOrProvider = getProvider.getProvider({
944
+ chainId
945
+ })
946
+ } = _ref;
947
+ const [to, gasLimit] = await Promise.all([utils.isAddress(request.to) ? Promise.resolve(request.to) : fetchEnsAddress({
948
+ name: request.to
949
+ }), request.gasLimit ? Promise.resolve(request.gasLimit) : signerOrProvider.estimateGas(request)]);
950
+ if (!to) throw new Error('Could not resolve ENS name');
951
+ return { ...(chainId ? {
952
+ chainId
953
+ } : {}),
954
+ request: { ...request,
955
+ gasLimit,
956
+ to
957
+ },
958
+ mode: 'prepared'
959
+ };
960
+ }
961
+
962
+ /**
963
+ * @description Function to send a transaction.
964
+ *
965
+ * It is recommended to pair this with the `prepareSendTransaction` function to avoid
966
+ * [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
967
+ *
968
+ * @example
969
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
970
+ *
971
+ * const config = await prepareSendTransaction({
972
+ * to: 'moxey.eth',
973
+ * value: parseEther('1'),
974
+ * })
975
+ * const result = await sendTransaction(config)
976
+ */
977
+ async function sendTransaction(_ref) {
978
+ let {
979
+ chainId,
980
+ mode,
981
+ request
982
+ } = _ref;
983
+
984
+ /********************************************************************/
985
+
986
+ /** START: iOS App Link cautious code. */
987
+
988
+ /** Do not perform any async operations in this block. */
989
+
990
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
991
+
992
+ /********************************************************************/
993
+ // `fetchSigner` isn't really "asynchronous" as we have already
994
+ // initialized the provider upon user connection, so it will return
995
+ // immediately.
996
+ const signer = await fetchSigner();
997
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
998
+
999
+ if (mode === 'prepared') {
1000
+ if (!request.gasLimit) throw new Error('`gasLimit` is required');
1001
+ if (!request.to) throw new Error('`to` is required');
1002
+ }
1003
+
1004
+ const {
1005
+ chain: activeChain,
1006
+ chains
1007
+ } = getNetwork();
1008
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
1009
+
1010
+ if (chainId && chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
1011
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
1012
+
1013
+ throw new getProvider.ChainMismatchError({
1014
+ activeChain: (_chains$find$name = (_chains$find = chains.find(x => x.id === activeChainId)) === null || _chains$find === void 0 ? void 0 : _chains$find.name) !== null && _chains$find$name !== void 0 ? _chains$find$name : "Chain ".concat(activeChainId),
1015
+ targetChain: (_chains$find$name2 = (_chains$find2 = chains.find(x => x.id === chainId)) === null || _chains$find2 === void 0 ? void 0 : _chains$find2.name) !== null && _chains$find$name2 !== void 0 ? _chains$find$name2 : "Chain ".concat(chainId)
707
1016
  });
708
- const contractWithSigner = contract.connect(signer);
709
- const contractFunction = contractWithSigner[functionName];
710
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
711
- return await contractFunction(...params);
1017
+ }
1018
+
1019
+ try {
1020
+ var _connectUnchecked, _ref2;
1021
+
1022
+ // Why don't we just use `signer.sendTransaction`?
1023
+ // The `signer.sendTransaction` method performs async
1024
+ // heavy operations (such as fetching block number)
1025
+ // which is not really needed for our case.
1026
+ // Having async heavy operations has side effects
1027
+ // when using it in a click handler (iOS deep linking issues,
1028
+ // delay to open wallet, etc).
1029
+ const uncheckedSigner = (_connectUnchecked = (_ref2 = signer).connectUnchecked) === null || _connectUnchecked === void 0 ? void 0 : _connectUnchecked.call(_ref2);
1030
+ const {
1031
+ hash,
1032
+ wait
1033
+ } = await (uncheckedSigner !== null && uncheckedSigner !== void 0 ? uncheckedSigner : signer).sendTransaction(request);
1034
+ /********************************************************************/
1035
+
1036
+ /** END: iOS App Link cautious code. */
1037
+
1038
+ /** Go nuts! */
1039
+
1040
+ /********************************************************************/
1041
+
1042
+ return {
1043
+ hash,
1044
+ wait
1045
+ };
712
1046
  } catch (error) {
713
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1047
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
714
1048
  throw error;
715
1049
  }
716
1050
  }
717
1051
 
1052
+ async function waitForTransaction(_ref) {
1053
+ let {
1054
+ chainId,
1055
+ confirmations,
1056
+ hash,
1057
+ timeout,
1058
+ wait: wait_
1059
+ } = _ref;
1060
+ let promise;
1061
+
1062
+ if (hash) {
1063
+ const provider = getProvider.getProvider({
1064
+ chainId
1065
+ });
1066
+ promise = provider.waitForTransaction(hash, confirmations, timeout);
1067
+ } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
1068
+
1069
+ return await promise;
1070
+ }
1071
+
1072
+ /**
1073
+ * @description Function to call a contract write method.
1074
+ *
1075
+ * It is recommended to pair this with the {@link prepareWriteContract} function
1076
+ * to avoid [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
1077
+ *
1078
+ * @example
1079
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
1080
+ *
1081
+ * const config = await prepareWriteContract({
1082
+ * addressOrName: '0x...',
1083
+ * contractInterface: wagmiAbi,
1084
+ * functionName: 'mint',
1085
+ * })
1086
+ * const result = await writeContract(config)
1087
+ */
1088
+ async function writeContract(_ref) {
1089
+ let {
1090
+ addressOrName,
1091
+ args,
1092
+ chainId,
1093
+ contractInterface,
1094
+ functionName,
1095
+ mode,
1096
+ overrides,
1097
+ request: request_
1098
+ } = _ref;
1099
+
1100
+ /********************************************************************/
1101
+
1102
+ /** START: iOS App Link cautious code. */
1103
+
1104
+ /** Do not perform any async operations in this block. */
1105
+
1106
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
1107
+
1108
+ /********************************************************************/
1109
+ const signer = await fetchSigner();
1110
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
1111
+ const {
1112
+ chain: activeChain,
1113
+ chains
1114
+ } = getNetwork();
1115
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
1116
+
1117
+ if (chainId && chainId !== activeChainId) {
1118
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
1119
+
1120
+ throw new getProvider.ChainMismatchError({
1121
+ activeChain: (_chains$find$name = (_chains$find = chains.find(x => x.id === activeChainId)) === null || _chains$find === void 0 ? void 0 : _chains$find.name) !== null && _chains$find$name !== void 0 ? _chains$find$name : "Chain ".concat(activeChainId),
1122
+ targetChain: (_chains$find$name2 = (_chains$find2 = chains.find(x => x.id === chainId)) === null || _chains$find2 === void 0 ? void 0 : _chains$find2.name) !== null && _chains$find$name2 !== void 0 ? _chains$find$name2 : "Chain ".concat(chainId)
1123
+ });
1124
+ }
1125
+
1126
+ if (mode === 'prepared') {
1127
+ if (!request_) throw new Error('`request` is required');
1128
+ }
1129
+
1130
+ const request = mode === 'recklesslyUnprepared' ? (await prepareWriteContract({
1131
+ addressOrName,
1132
+ args,
1133
+ contractInterface,
1134
+ functionName,
1135
+ overrides
1136
+ })).request : request_;
1137
+ const transaction = await sendTransaction({
1138
+ request,
1139
+ mode: 'prepared'
1140
+ });
1141
+ /********************************************************************/
1142
+
1143
+ /** END: iOS App Link cautious code. */
1144
+
1145
+ /** Go nuts! */
1146
+
1147
+ /********************************************************************/
1148
+
1149
+ return transaction;
1150
+ }
1151
+
718
1152
  async function fetchBalance(_ref) {
719
1153
  var _client$chains, _chain$nativeCurrency, _chain$nativeCurrency2, _chain$nativeCurrency3, _chain$nativeCurrency4;
720
1154
 
721
1155
  let {
722
1156
  addressOrName,
723
1157
  chainId,
724
- formatUnits: unit = 'ether',
1158
+ formatUnits: unit,
725
1159
  token
726
1160
  } = _ref;
727
- const client$1 = client.getClient();
728
- const provider = getProvider({
1161
+ const client = getProvider.getClient();
1162
+ const provider = getProvider.getProvider({
729
1163
  chainId
730
1164
  });
731
1165
 
@@ -758,21 +1192,19 @@ async function fetchBalance(_ref) {
758
1192
  });
759
1193
  return {
760
1194
  decimals,
761
- formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit),
1195
+ formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit !== null && unit !== void 0 ? unit : decimals),
762
1196
  symbol,
763
- unit,
764
1197
  value
765
1198
  };
766
1199
  }
767
1200
 
768
- const chains = [...(client$1.provider.chains || []), ...((_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
1201
+ const chains = [...(client.provider.chains || []), ...((_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
769
1202
  const value = await provider.getBalance(addressOrName);
770
1203
  const chain = chains.find(x => x.id === provider.network.chainId);
771
1204
  return {
772
1205
  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,
773
- formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit),
1206
+ formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit !== null && unit !== void 0 ? unit : 'ether'),
774
1207
  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',
775
- unit,
776
1208
  value
777
1209
  };
778
1210
  }
@@ -780,8 +1212,8 @@ async function fetchBalance(_ref) {
780
1212
  async function fetchSigner() {
781
1213
  var _client$connector, _client$connector$get;
782
1214
 
783
- const client$1 = client.getClient();
784
- 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;
1215
+ const client = getProvider.getClient();
1216
+ const signer = (await ((_client$connector = client.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;
785
1217
  return signer;
786
1218
  }
787
1219
 
@@ -790,7 +1222,7 @@ function getAccount() {
790
1222
  data,
791
1223
  connector,
792
1224
  status
793
- } = client.getClient();
1225
+ } = getProvider.getClient();
794
1226
 
795
1227
  switch (status) {
796
1228
  case 'connected':
@@ -842,10 +1274,10 @@ function getAccount() {
842
1274
  function getNetwork() {
843
1275
  var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
844
1276
 
845
- const client$1 = client.getClient();
846
- 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;
847
- const activeChains = (_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
848
- const activeChain = (_find = [...(client$1.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
1277
+ const client = getProvider.getClient();
1278
+ const chainId = (_client$data = client.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;
1279
+ const activeChains = (_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
1280
+ const activeChain = (_find = [...(client.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
849
1281
  id: chainId,
850
1282
  name: "Chain ".concat(chainId),
851
1283
  network: "".concat(chainId),
@@ -855,7 +1287,7 @@ function getNetwork() {
855
1287
  };
856
1288
  return {
857
1289
  chain: chainId ? { ...activeChain,
858
- ...((_client$data2 = client$1.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
1290
+ ...((_client$data2 = client.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
859
1291
  id: chainId
860
1292
  } : undefined,
861
1293
  chains: activeChains
@@ -865,10 +1297,10 @@ function getNetwork() {
865
1297
  async function signMessage(args) {
866
1298
  try {
867
1299
  const signer = await fetchSigner();
868
- if (!signer) throw new base.ConnectorNotFoundError();
1300
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
869
1301
  return await signer.signMessage(args.message);
870
1302
  } catch (error) {
871
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1303
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
872
1304
  throw error;
873
1305
  }
874
1306
  }
@@ -879,42 +1311,32 @@ async function signTypedData(_ref) {
879
1311
  types,
880
1312
  value
881
1313
  } = _ref;
1314
+ const signer = await fetchSigner();
1315
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
882
1316
  const {
883
- connector
884
- } = client.getClient();
885
- if (!connector) throw new base.ConnectorNotFoundError();
886
-
887
- try {
888
- var _chain;
889
-
890
- const {
891
- chainId
892
- } = domain;
893
- let chain;
1317
+ chain: activeChain,
1318
+ chains
1319
+ } = getNetwork();
1320
+ const {
1321
+ chainId: chainId_
1322
+ } = domain;
894
1323
 
895
- if (chainId) {
896
- const chainId_ = base.normalizeChainId(chainId);
897
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1324
+ if (chainId_) {
1325
+ const chainId = getProvider.normalizeChainId(chainId_);
1326
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
898
1327
 
899
- if (chainId !== activeChainId) {
900
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1328
+ if (chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
1329
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
901
1330
 
902
- if (connector.switchChain) chain = await connector.switchChain(chainId_);else throw new base.ChainMismatchError({
903
- 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),
904
- 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_)
905
- });
906
- }
1331
+ throw new getProvider.ChainMismatchError({
1332
+ activeChain: (_chains$find$name = (_chains$find = chains.find(x => x.id === activeChainId)) === null || _chains$find === void 0 ? void 0 : _chains$find.name) !== null && _chains$find$name !== void 0 ? _chains$find$name : "Chain ".concat(activeChainId),
1333
+ targetChain: (_chains$find$name2 = (_chains$find2 = chains.find(x => x.id === chainId)) === null || _chains$find2 === void 0 ? void 0 : _chains$find2.name) !== null && _chains$find$name2 !== void 0 ? _chains$find$name2 : "Chain ".concat(chainId)
1334
+ });
907
1335
  }
1336
+ } // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
908
1337
 
909
- const signer = await connector.getSigner({
910
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
911
- }); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
912
1338
 
913
- return await signer._signTypedData(domain, types, value);
914
- } catch (error) {
915
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
916
- throw error;
917
- }
1339
+ return await signer._signTypedData(domain, types, value);
918
1340
  }
919
1341
 
920
1342
  async function switchNetwork(_ref) {
@@ -923,9 +1345,9 @@ async function switchNetwork(_ref) {
923
1345
  } = _ref;
924
1346
  const {
925
1347
  connector
926
- } = client.getClient();
927
- if (!connector) throw new base.ConnectorNotFoundError();
928
- if (!connector.switchChain) throw new base.SwitchChainNotSupportedError({
1348
+ } = getProvider.getClient();
1349
+ if (!connector) throw new getProvider.ConnectorNotFoundError();
1350
+ if (!connector.switchChain) throw new getProvider.SwitchChainNotSupportedError({
929
1351
  connector
930
1352
  });
931
1353
  return await connector.switchChain(chainId);
@@ -935,11 +1357,11 @@ function watchAccount(callback) {
935
1357
  let {
936
1358
  selector = x => x
937
1359
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
938
- const client$1 = client.getClient();
1360
+ const client = getProvider.getClient();
939
1361
 
940
1362
  const handleChange = () => callback(getAccount());
941
1363
 
942
- const unsubscribe = client$1.subscribe(_ref => {
1364
+ const unsubscribe = client.subscribe(_ref => {
943
1365
  let {
944
1366
  data,
945
1367
  connector,
@@ -960,11 +1382,11 @@ function watchNetwork(callback) {
960
1382
  let {
961
1383
  selector = x => x
962
1384
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
963
- const client$1 = client.getClient();
1385
+ const client = getProvider.getClient();
964
1386
 
965
1387
  const handleChange = () => callback(getNetwork());
966
1388
 
967
- const unsubscribe = client$1.subscribe(_ref => {
1389
+ const unsubscribe = client.subscribe(_ref => {
968
1390
  var _data$chain;
969
1391
 
970
1392
  let {
@@ -982,11 +1404,11 @@ function watchNetwork(callback) {
982
1404
  }
983
1405
 
984
1406
  function watchSigner(callback) {
985
- const client$1 = client.getClient();
1407
+ const client = getProvider.getClient();
986
1408
 
987
1409
  const handleChange = async () => callback(await fetchSigner());
988
1410
 
989
- const unsubscribe = client$1.subscribe(_ref => {
1411
+ const unsubscribe = client.subscribe(_ref => {
990
1412
  var _data$chain;
991
1413
 
992
1414
  let {
@@ -1004,66 +1426,12 @@ function watchSigner(callback) {
1004
1426
  return unsubscribe;
1005
1427
  }
1006
1428
 
1007
- async function fetchEnsAddress(_ref) {
1008
- let {
1009
- chainId,
1010
- name
1011
- } = _ref;
1012
- const provider = getProvider({
1013
- chainId
1014
- });
1015
- const address = await provider.resolveName(name);
1016
-
1017
- try {
1018
- return address ? utils.getAddress(address) : null;
1019
- } catch (_error) {
1020
- return null;
1021
- }
1022
- }
1023
-
1024
- async function fetchEnsAvatar(_ref) {
1025
- let {
1026
- addressOrName,
1027
- chainId
1028
- } = _ref;
1029
- const provider = getProvider({
1030
- chainId
1031
- }); // TODO: Update with more advanced logic
1032
- // https://github.com/ensdomains/ens-avatar
1033
-
1034
- const avatar = await provider.getAvatar(addressOrName);
1035
- return avatar;
1036
- }
1037
-
1038
- async function fetchEnsName(_ref) {
1039
- let {
1040
- address,
1041
- chainId
1042
- } = _ref;
1043
- const provider = getProvider({
1044
- chainId
1045
- });
1046
- return await provider.lookupAddress(address);
1047
- }
1048
-
1049
- async function fetchEnsResolver(_ref) {
1050
- let {
1051
- chainId,
1052
- name
1053
- } = _ref;
1054
- const provider = getProvider({
1055
- chainId
1056
- });
1057
- const resolver = await provider.getResolver(name);
1058
- return resolver;
1059
- }
1060
-
1061
1429
  async function fetchFeeData() {
1062
1430
  let {
1063
1431
  chainId,
1064
1432
  formatUnits: units = 'wei'
1065
1433
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1066
- const provider = getProvider({
1434
+ const provider = getProvider.getProvider({
1067
1435
  chainId
1068
1436
  });
1069
1437
  const feeData = await provider.getFeeData();
@@ -1077,108 +1445,29 @@ async function fetchFeeData() {
1077
1445
  };
1078
1446
  }
1079
1447
 
1080
- async function fetchToken(_ref) {
1081
- let {
1082
- address,
1083
- chainId,
1084
- formatUnits: units = 'ether'
1085
- } = _ref;
1086
- const provider = getProvider({
1087
- chainId
1088
- });
1089
- const contract = new ethers$1.Contract(address, erc20ABI, provider);
1090
- const [symbol, decimals, totalSupply] = await Promise.all([contract.symbol(), contract.decimals(), contract.totalSupply()]);
1091
- const token = {
1092
- address,
1093
- decimals,
1094
- symbol,
1095
- totalSupply: {
1096
- formatted: utils.formatUnits(totalSupply, units),
1097
- value: totalSupply
1098
- }
1099
- };
1100
- return token;
1101
- }
1102
-
1103
- async function sendTransaction(_ref) {
1104
- let {
1105
- chainId,
1106
- request
1107
- } = _ref;
1108
- const {
1109
- connector
1110
- } = client.getClient();
1111
- if (!connector) throw new base.ConnectorNotFoundError();
1112
-
1113
- try {
1114
- var _chain;
1115
-
1116
- let chain;
1117
-
1118
- if (chainId) {
1119
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1120
-
1121
- if (chainId !== activeChainId) {
1122
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1123
-
1124
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
1125
- 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),
1126
- 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)
1127
- });
1128
- }
1129
- }
1130
-
1131
- const signer = await connector.getSigner({
1132
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
1133
- });
1134
- return await signer.sendTransaction(request);
1135
- } catch (error) {
1136
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1137
- throw error;
1138
- }
1139
- }
1140
-
1141
- async function waitForTransaction(_ref) {
1142
- let {
1143
- chainId,
1144
- confirmations,
1145
- hash,
1146
- timeout,
1147
- wait: wait_
1148
- } = _ref;
1149
- let promise;
1150
-
1151
- if (hash) {
1152
- const provider = getProvider({
1153
- chainId
1154
- });
1155
- promise = provider.waitForTransaction(hash, confirmations, timeout);
1156
- } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
1157
-
1158
- return await promise;
1159
- }
1160
-
1161
- exports.Client = client.Client;
1162
- exports.InjectedConnector = client.InjectedConnector;
1163
- exports.createClient = client.createClient;
1164
- exports.createStorage = client.createStorage;
1165
- exports.noopStorage = client.noopStorage;
1166
- exports.AddChainError = base.AddChainError;
1167
- exports.ChainDoesNotSupportMulticallError = base.ChainDoesNotSupportMulticallError;
1168
- exports.ChainMismatchError = base.ChainMismatchError;
1169
- exports.ChainNotConfiguredError = base.ChainNotConfiguredError;
1170
- exports.Connector = base.Connector;
1171
- exports.ConnectorAlreadyConnectedError = base.ConnectorAlreadyConnectedError;
1172
- exports.ConnectorNotFoundError = base.ConnectorNotFoundError;
1173
- exports.ContractMethodNoResultError = base.ContractMethodNoResultError;
1174
- exports.ProviderChainsNotFound = base.ProviderChainsNotFound;
1175
- exports.ProviderRpcError = base.ProviderRpcError;
1176
- exports.ResourceUnavailableError = base.ResourceUnavailableError;
1177
- exports.RpcError = base.RpcError;
1178
- exports.SwitchChainError = base.SwitchChainError;
1179
- exports.SwitchChainNotSupportedError = base.SwitchChainNotSupportedError;
1180
- exports.UserRejectedRequestError = base.UserRejectedRequestError;
1181
- exports.normalizeChainId = base.normalizeChainId;
1448
+ exports.AddChainError = getProvider.AddChainError;
1449
+ exports.ChainDoesNotSupportMulticallError = getProvider.ChainDoesNotSupportMulticallError;
1450
+ exports.ChainMismatchError = getProvider.ChainMismatchError;
1451
+ exports.ChainNotConfiguredError = getProvider.ChainNotConfiguredError;
1452
+ exports.Client = getProvider.Client;
1453
+ exports.Connector = getProvider.Connector;
1454
+ exports.ConnectorAlreadyConnectedError = getProvider.ConnectorAlreadyConnectedError;
1455
+ exports.ConnectorNotFoundError = getProvider.ConnectorNotFoundError;
1456
+ exports.ContractMethodDoesNotExistError = getProvider.ContractMethodDoesNotExistError;
1457
+ exports.ContractMethodNoResultError = getProvider.ContractMethodNoResultError;
1458
+ exports.InjectedConnector = getProvider.InjectedConnector;
1459
+ exports.ProviderChainsNotFound = getProvider.ProviderChainsNotFound;
1460
+ exports.ProviderRpcError = getProvider.ProviderRpcError;
1461
+ exports.ResourceUnavailableError = getProvider.ResourceUnavailableError;
1462
+ exports.RpcError = getProvider.RpcError;
1463
+ exports.SwitchChainError = getProvider.SwitchChainError;
1464
+ exports.SwitchChainNotSupportedError = getProvider.SwitchChainNotSupportedError;
1465
+ exports.UserRejectedRequestError = getProvider.UserRejectedRequestError;
1466
+ exports.createClient = getProvider.createClient;
1467
+ exports.createStorage = getProvider.createStorage;
1468
+ exports.getProvider = getProvider.getProvider;
1469
+ exports.noopStorage = getProvider.noopStorage;
1470
+ exports.normalizeChainId = getProvider.normalizeChainId;
1182
1471
  exports.alchemyRpcUrls = rpcs.alchemyRpcUrls;
1183
1472
  exports.infuraRpcUrls = rpcs.infuraRpcUrls;
1184
1473
  exports.publicRpcUrls = rpcs.publicRpcUrls;
@@ -1191,6 +1480,8 @@ exports.etherscanBlockExplorers = chains.etherscanBlockExplorers;
1191
1480
  exports.configureChains = configureChains;
1192
1481
  exports.connect = connect;
1193
1482
  exports.deepEqual = deepEqual;
1483
+ exports.deprecatedSendTransaction = deprecatedSendTransaction;
1484
+ exports.deprecatedWriteContract = deprecatedWriteContract;
1194
1485
  exports.disconnect = disconnect;
1195
1486
  exports.erc20ABI = erc20ABI;
1196
1487
  exports.erc721ABI = erc721ABI;
@@ -1203,12 +1494,14 @@ exports.fetchEnsResolver = fetchEnsResolver;
1203
1494
  exports.fetchFeeData = fetchFeeData;
1204
1495
  exports.fetchSigner = fetchSigner;
1205
1496
  exports.fetchToken = fetchToken;
1497
+ exports.fetchTransaction = fetchTransaction;
1206
1498
  exports.getAccount = getAccount;
1207
1499
  exports.getContract = getContract;
1208
1500
  exports.getNetwork = getNetwork;
1209
- exports.getProvider = getProvider;
1210
1501
  exports.getWebSocketProvider = getWebSocketProvider;
1211
1502
  exports.parseContractResult = parseContractResult;
1503
+ exports.prepareSendTransaction = prepareSendTransaction;
1504
+ exports.prepareWriteContract = prepareWriteContract;
1212
1505
  exports.readContract = readContract;
1213
1506
  exports.readContracts = readContracts;
1214
1507
  exports.sendTransaction = sendTransaction;