@wagmi/core 0.4.9 → 0.5.0-prepare-hooks.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 (66) hide show
  1. package/README.md +4 -4
  2. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +26 -24
  3. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +26 -24
  4. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +3 -1
  5. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.d.ts +1 -0
  6. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.dev.js +200 -0
  7. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.js +7 -0
  8. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.prod.js +200 -0
  9. package/connectors/injected/dist/wagmi-core-connectors-injected.esm.js +196 -0
  10. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.dev.js +21 -22
  11. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.prod.js +21 -22
  12. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.esm.js +4 -5
  13. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +30 -28
  14. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +30 -28
  15. package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +3 -1
  16. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +22 -23
  17. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +22 -23
  18. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +3 -4
  19. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.d.ts +11 -0
  20. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.js +16 -0
  21. package/dist/declarations/src/actions/accounts/fetchSigner.d.ts +3 -3
  22. package/dist/declarations/src/actions/contracts/index.d.ts +2 -1
  23. package/dist/declarations/src/actions/contracts/prepareWriteContract.d.ts +37 -0
  24. package/dist/declarations/src/actions/contracts/writeContract.d.ts +44 -8
  25. package/dist/declarations/src/actions/ens/fetchEnsAddress.d.ts +2 -1
  26. package/dist/declarations/src/actions/index.d.ts +2 -2
  27. package/dist/declarations/src/actions/transactions/index.d.ts +2 -1
  28. package/dist/declarations/src/actions/transactions/prepareSendTransaction.d.ts +36 -0
  29. package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +43 -8
  30. package/dist/declarations/src/client.d.ts +2 -2
  31. package/dist/declarations/src/connectors/base.d.ts +1 -2
  32. package/dist/declarations/src/connectors/coinbaseWallet.d.ts +1 -1
  33. package/dist/declarations/src/connectors/injected.d.ts +1 -1
  34. package/dist/declarations/src/connectors/mock/connector.d.ts +1 -1
  35. package/dist/declarations/src/connectors/mock/provider.d.ts +3 -3
  36. package/dist/declarations/src/connectors/walletConnect.d.ts +2 -1
  37. package/dist/declarations/src/errors.d.ts +10 -3
  38. package/dist/declarations/src/index.d.ts +4 -4
  39. package/dist/declarations/src/providers/alchemy.d.ts +1 -2
  40. package/dist/declarations/src/providers/infura.d.ts +1 -2
  41. package/dist/declarations/src/providers/jsonRpc.d.ts +1 -2
  42. package/dist/declarations/src/providers/public.d.ts +2 -4
  43. package/dist/declarations/src/types/index.d.ts +3 -1
  44. package/dist/declarations/src/utils/configureChains.d.ts +3 -1
  45. package/dist/{client-fbdcbdb2.esm.js → getProvider-048a69c4.esm.js} +365 -2
  46. package/dist/{client-4983a639.cjs.dev.js → getProvider-27edfd38.cjs.prod.js} +432 -44
  47. package/dist/{client-dfad744f.cjs.prod.js → getProvider-ec251513.cjs.dev.js} +432 -44
  48. package/dist/wagmi-core.cjs.dev.js +439 -278
  49. package/dist/wagmi-core.cjs.prod.js +439 -278
  50. package/dist/wagmi-core.esm.js +353 -196
  51. package/package.json +2 -2
  52. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.dev.js +0 -2
  53. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.prod.js +0 -2
  54. package/providers/alchemy/dist/wagmi-core-providers-alchemy.esm.js +0 -2
  55. package/providers/infura/dist/wagmi-core-providers-infura.cjs.dev.js +0 -2
  56. package/providers/infura/dist/wagmi-core-providers-infura.cjs.prod.js +0 -2
  57. package/providers/infura/dist/wagmi-core-providers-infura.esm.js +0 -2
  58. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.dev.js +0 -2
  59. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.prod.js +0 -2
  60. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.esm.js +0 -2
  61. package/providers/public/dist/wagmi-core-providers-public.cjs.dev.js +0 -2
  62. package/providers/public/dist/wagmi-core-providers-public.cjs.prod.js +0 -2
  63. package/providers/public/dist/wagmi-core-providers-public.esm.js +0 -2
  64. package/dist/base-337e6424.cjs.prod.js +0 -343
  65. package/dist/base-bd337280.cjs.dev.js +0 -343
  66. package/dist/base-f1bbf263.esm.js +0 -316
@@ -1,9 +1,7 @@
1
- import { g as getClient } from './client-fbdcbdb2.esm.js';
2
- export { C as Client, I as InjectedConnector, c as createClient, a as createStorage, n as noopStorage } from './client-fbdcbdb2.esm.js';
3
- import { C as ConnectorAlreadyConnectedError, P as ProviderChainsNotFound, a as ChainDoesNotSupportMulticallError, b as ContractMethodNoResultError, c as ConnectorNotFoundError, d as ChainMismatchError, U as UserRejectedRequestError, n as normalizeChainId, S as SwitchChainNotSupportedError } from './base-f1bbf263.esm.js';
4
- export { A as AddChainError, a as ChainDoesNotSupportMulticallError, d as ChainMismatchError, f as ChainNotConfiguredError, e as Connector, C as ConnectorAlreadyConnectedError, c as ConnectorNotFoundError, b as ContractMethodNoResultError, P as ProviderChainsNotFound, g as ProviderRpcError, R as ResourceUnavailableError, h as RpcError, i as SwitchChainError, S as SwitchChainNotSupportedError, U as UserRejectedRequestError, n as normalizeChainId } from './base-f1bbf263.esm.js';
1
+ import { g as getClient, C as ConnectorAlreadyConnectedError, a as ConnectorNotFoundError, b as ContractMethodDoesNotExistError, c as getProvider, P as ProviderChainsNotFound, d as ChainDoesNotSupportMulticallError, e as ContractMethodNoResultError, f as ChainMismatchError, U as UserRejectedRequestError, n as normalizeChainId, S as SwitchChainNotSupportedError } from './getProvider-048a69c4.esm.js';
2
+ export { A as AddChainError, d as ChainDoesNotSupportMulticallError, f as ChainMismatchError, k as ChainNotConfiguredError, i as Client, j as Connector, C as ConnectorAlreadyConnectedError, a as ConnectorNotFoundError, b as ContractMethodDoesNotExistError, e as ContractMethodNoResultError, I as InjectedConnector, P as ProviderChainsNotFound, l as ProviderRpcError, R as ResourceUnavailableError, m as RpcError, o as SwitchChainError, S as SwitchChainNotSupportedError, U as UserRejectedRequestError, h as createClient, p as createStorage, c as getProvider, q as noopStorage, n as normalizeChainId } from './getProvider-048a69c4.esm.js';
5
3
  import { Contract, logger } from 'ethers/lib/ethers';
6
- import { isAddress, Logger, formatUnits, getAddress } from 'ethers/lib/utils';
4
+ import { getAddress, isAddress, Logger, formatUnits } from 'ethers/lib/utils';
7
5
  import { providers, Contract as Contract$1 } from 'ethers';
8
6
  import shallow from 'zustand/shallow';
9
7
  export { a as alchemyRpcUrls, i as infuraRpcUrls, p as publicRpcUrls } from './rpcs-b73a8f60.esm.js';
@@ -15,6 +13,7 @@ import 'eventemitter3';
15
13
  function configureChains(defaultChains, providers) {
16
14
  let {
17
15
  minQuorum = 1,
16
+ pollingInterval = 4000,
18
17
  targetQuorum = 1,
19
18
  stallTimeout
20
19
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -60,21 +59,27 @@ function configureChains(defaultChains, providers) {
60
59
  return {
61
60
  chains,
62
61
  provider: _ref2 => {
63
- var _defaultChains$, _chainProviders$;
62
+ var _defaultChains$;
64
63
 
65
64
  let {
66
65
  chainId
67
66
  } = _ref2;
68
67
  const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$ = defaultChains[0]) === null || _defaultChains$ === void 0 ? void 0 : _defaultChains$.id;
69
68
  const chainProviders = providers_[activeChainId];
70
- if (!chainProviders) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
71
- if (chainProviders.length === 1) return Object.assign(((_chainProviders$ = chainProviders[0]) === null || _chainProviders$ === void 0 ? void 0 : _chainProviders$.call(chainProviders)) || {}, {
72
- chains
73
- });
69
+ if (!chainProviders || !chainProviders[0]) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
70
+
71
+ if (chainProviders.length === 1) {
72
+ return Object.assign(chainProviders[0](), {
73
+ chains,
74
+ pollingInterval
75
+ });
76
+ }
77
+
74
78
  return Object.assign(fallbackProvider(targetQuorum, minQuorum, chainProviders, {
75
79
  stallTimeout
76
80
  }), {
77
- chains
81
+ chains,
82
+ pollingInterval
78
83
  });
79
84
  },
80
85
  webSocketProvider: _ref3 => {
@@ -290,15 +295,64 @@ function getContract(_ref) {
290
295
  return new Contract$1(addressOrName, contractInterface, signerOrProvider);
291
296
  }
292
297
 
293
- function getProvider() {
298
+ /**
299
+ * @description Prepares the parameters required for a contract write transaction.
300
+ *
301
+ * Returns config to be passed through to `writeContract`.
302
+ *
303
+ * @example
304
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
305
+ *
306
+ * const config = await prepareWriteContract({
307
+ * addressOrName: '0x...',
308
+ * contractInterface: wagmiAbi,
309
+ * functionName: 'mint',
310
+ * })
311
+ * const result = await writeContract(config)
312
+ */
313
+ async function prepareWriteContract(_ref) {
294
314
  let {
295
- chainId
296
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
297
- const client = getClient();
298
- if (chainId && typeof client.config.provider === 'function') return client.config.provider({
299
- chainId
315
+ addressOrName,
316
+ args,
317
+ chainId,
318
+ contractInterface,
319
+ functionName,
320
+ overrides,
321
+ signer: signer_
322
+ } = _ref;
323
+ const signer = signer_ !== null && signer_ !== void 0 ? signer_ : await fetchSigner();
324
+ if (!signer) throw new ConnectorNotFoundError();
325
+ const contract = getContract({
326
+ addressOrName,
327
+ contractInterface,
328
+ signerOrProvider: signer
300
329
  });
301
- return client.provider;
330
+ const populateTransactionFn = contract.populateTransaction[functionName];
331
+
332
+ if (!populateTransactionFn) {
333
+ throw new ContractMethodDoesNotExistError({
334
+ addressOrName,
335
+ functionName
336
+ });
337
+ }
338
+
339
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
340
+ const unsignedTransaction = await populateTransactionFn(...params);
341
+ const gasLimit = unsignedTransaction.gasLimit || (await signer.estimateGas(unsignedTransaction));
342
+ return {
343
+ addressOrName,
344
+ args,
345
+ ...(chainId ? {
346
+ chainId
347
+ } : {}),
348
+ contractInterface,
349
+ functionName,
350
+ overrides,
351
+ request: { ...unsignedTransaction,
352
+ gasLimit
353
+ },
354
+ mode: 'prepared'
355
+ };
302
356
  }
303
357
 
304
358
  function getWebSocketProvider() {
@@ -427,11 +481,9 @@ async function multicall(_ref) {
427
481
  } = contracts[i];
428
482
 
429
483
  if (returnData === '0x') {
430
- var _chain$blockExplorers;
431
-
432
484
  const err = new ContractMethodNoResultError({
433
485
  addressOrName,
434
- blockExplorer: (_chain$blockExplorers = chain.blockExplorers) === null || _chain$blockExplorers === void 0 ? void 0 : _chain$blockExplorers.default,
486
+ chainId: chain.id,
435
487
  functionName
436
488
  });
437
489
  if (!allowFailure) throw err;
@@ -660,6 +712,221 @@ function watchReadContracts(config, callback) {
660
712
  };
661
713
  }
662
714
 
715
+ async function fetchEnsAddress(_ref) {
716
+ let {
717
+ chainId,
718
+ name
719
+ } = _ref;
720
+ const provider = getProvider({
721
+ chainId
722
+ });
723
+ const address = await provider.resolveName(name);
724
+
725
+ try {
726
+ return address ? getAddress(address) : null;
727
+ } catch (_error) {
728
+ return null;
729
+ }
730
+ }
731
+
732
+ async function fetchEnsAvatar(_ref) {
733
+ let {
734
+ addressOrName,
735
+ chainId
736
+ } = _ref;
737
+ const provider = getProvider({
738
+ chainId
739
+ }); // TODO: Update with more advanced logic
740
+ // https://github.com/ensdomains/ens-avatar
741
+
742
+ const avatar = await provider.getAvatar(addressOrName);
743
+ return avatar;
744
+ }
745
+
746
+ async function fetchEnsName(_ref) {
747
+ let {
748
+ address,
749
+ chainId
750
+ } = _ref;
751
+ const provider = getProvider({
752
+ chainId
753
+ });
754
+ return await provider.lookupAddress(address);
755
+ }
756
+
757
+ async function fetchEnsResolver(_ref) {
758
+ let {
759
+ chainId,
760
+ name
761
+ } = _ref;
762
+ const provider = getProvider({
763
+ chainId
764
+ });
765
+ const resolver = await provider.getResolver(name);
766
+ return resolver;
767
+ }
768
+
769
+ /**
770
+ * @description Prepares the parameters required for sending a transaction.
771
+ *
772
+ * Returns config to be passed through to `sendTransaction`.
773
+ *
774
+ * @example
775
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
776
+ *
777
+ * const config = await prepareSendTransaction({
778
+ * request: {
779
+ * to: 'moxey.eth',
780
+ * value: parseEther('1'),
781
+ * }
782
+ * })
783
+ * const result = await sendTransaction(config)
784
+ */
785
+ async function prepareSendTransaction(_ref) {
786
+ let {
787
+ chainId,
788
+ request,
789
+ signerOrProvider = getProvider()
790
+ } = _ref;
791
+ const [to, gasLimit] = await Promise.all([isAddress(request.to) ? Promise.resolve(request.to) : fetchEnsAddress({
792
+ name: request.to
793
+ }), request.gasLimit ? Promise.resolve(request.gasLimit) : signerOrProvider.estimateGas(request)]);
794
+ if (!to) throw new Error('Could not resolve ENS name');
795
+ return { ...(chainId ? {
796
+ chainId
797
+ } : {}),
798
+ request: { ...request,
799
+ gasLimit,
800
+ to
801
+ },
802
+ mode: 'prepared'
803
+ };
804
+ }
805
+
806
+ /**
807
+ * @description Function to send a transaction.
808
+ *
809
+ * It is recommended to pair this with the `prepareSendTransaction` function to avoid
810
+ * [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
811
+ *
812
+ * @example
813
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
814
+ *
815
+ * const config = await prepareSendTransaction({
816
+ * to: 'moxey.eth',
817
+ * value: parseEther('1'),
818
+ * })
819
+ * const result = await sendTransaction(config)
820
+ */
821
+ async function sendTransaction(_ref) {
822
+ let {
823
+ chainId,
824
+ mode,
825
+ request
826
+ } = _ref;
827
+
828
+ /********************************************************************/
829
+
830
+ /** START: iOS App Link cautious code. */
831
+
832
+ /** Do not perform any async operations in this block. */
833
+
834
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
835
+
836
+ /********************************************************************/
837
+ // `fetchSigner` isn't really "asynchronous" as we have already
838
+ // initialized the provider upon user connection, so it will return
839
+ // immediately.
840
+ const signer = await fetchSigner();
841
+ if (!signer) throw new ConnectorNotFoundError();
842
+
843
+ if (mode === 'prepared') {
844
+ if (!request.gasLimit) throw new Error('`gasLimit` is required');
845
+ if (!request.to) throw new Error('`to` is required');
846
+ }
847
+
848
+ const {
849
+ chain: activeChain,
850
+ chains
851
+ } = getNetwork();
852
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
853
+
854
+ if (chainId && chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
855
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
856
+
857
+ throw new ChainMismatchError({
858
+ 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),
859
+ 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)
860
+ });
861
+ }
862
+
863
+ try {
864
+ // Why don't we just use `signer.sendTransaction`?
865
+ // The `signer.sendTransaction` method performs async
866
+ // heavy operations (such as fetching block number)
867
+ // which is not really needed for our case.
868
+ // Having async heavy operations has side effects
869
+ // when using it in a click handler (iOS deep linking issues,
870
+ // delay to open wallet, etc).
871
+ const uncheckedSigner = signer.connectUnchecked();
872
+ const {
873
+ hash,
874
+ wait
875
+ } = await uncheckedSigner.sendTransaction(request);
876
+ /********************************************************************/
877
+
878
+ /** END: iOS App Link cautious code. */
879
+
880
+ /** Go nuts! */
881
+
882
+ /********************************************************************/
883
+
884
+ return {
885
+ hash,
886
+ wait
887
+ };
888
+ } catch (error) {
889
+ if (error.code === 4001) throw new UserRejectedRequestError(error);
890
+ throw error;
891
+ }
892
+ }
893
+
894
+ async function waitForTransaction(_ref) {
895
+ let {
896
+ chainId,
897
+ confirmations,
898
+ hash,
899
+ timeout,
900
+ wait: wait_
901
+ } = _ref;
902
+ let promise;
903
+
904
+ if (hash) {
905
+ const provider = getProvider({
906
+ chainId
907
+ });
908
+ promise = provider.waitForTransaction(hash, confirmations, timeout);
909
+ } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
910
+
911
+ return await promise;
912
+ }
913
+
914
+ /**
915
+ * @description Function to call a contract write method.
916
+ *
917
+ * It is recommended to pair this with the {@link prepareWriteContract} function
918
+ * to avoid [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
919
+ *
920
+ * @example
921
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
922
+ *
923
+ * const config = await prepareWriteContract({
924
+ * addressOrName: '0x...',
925
+ * contractInterface: wagmiAbi,
926
+ * functionName: 'mint',
927
+ * })
928
+ * const result = await writeContract(config)
929
+ */
663
930
  async function writeContract(_ref) {
664
931
  let {
665
932
  addressOrName,
@@ -667,49 +934,61 @@ async function writeContract(_ref) {
667
934
  chainId,
668
935
  contractInterface,
669
936
  functionName,
937
+ mode,
670
938
  overrides,
671
- signerOrProvider
939
+ request: request_
672
940
  } = _ref;
673
- const {
674
- connector
675
- } = getClient();
676
- if (!connector) throw new ConnectorNotFoundError();
677
- const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
678
941
 
679
- try {
680
- var _chain;
942
+ /********************************************************************/
681
943
 
682
- let chain;
944
+ /** START: iOS App Link cautious code. */
683
945
 
684
- if (chainId) {
685
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
946
+ /** Do not perform any async operations in this block. */
686
947
 
687
- if (chainId !== activeChainId) {
688
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
948
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
689
949
 
690
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new ChainMismatchError({
691
- 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),
692
- 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)
693
- });
694
- }
695
- }
950
+ /********************************************************************/
951
+ const signer = await fetchSigner();
952
+ if (!signer) throw new ConnectorNotFoundError();
953
+ const {
954
+ chain: activeChain,
955
+ chains
956
+ } = getNetwork();
957
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
696
958
 
697
- const signer = await connector.getSigner({
698
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
699
- });
700
- const contract = getContract({
701
- addressOrName,
702
- contractInterface,
703
- signerOrProvider
959
+ if (chainId && chainId !== activeChainId) {
960
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
961
+
962
+ throw new ChainMismatchError({
963
+ 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),
964
+ 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)
704
965
  });
705
- const contractWithSigner = contract.connect(signer);
706
- const contractFunction = contractWithSigner[functionName];
707
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
708
- return await contractFunction(...params);
709
- } catch (error) {
710
- if (error.code === 4001) throw new UserRejectedRequestError(error);
711
- throw error;
712
966
  }
967
+
968
+ if (mode === 'prepared') {
969
+ if (!request_) throw new Error('`request` is required');
970
+ }
971
+
972
+ const request = mode === 'dangerouslyUnprepared' ? (await prepareWriteContract({
973
+ addressOrName,
974
+ args,
975
+ contractInterface,
976
+ functionName,
977
+ overrides
978
+ })).request : request_;
979
+ const transaction = await sendTransaction({
980
+ request,
981
+ mode: 'prepared'
982
+ });
983
+ /********************************************************************/
984
+
985
+ /** END: iOS App Link cautious code. */
986
+
987
+ /** Go nuts! */
988
+
989
+ /********************************************************************/
990
+
991
+ return transaction;
713
992
  }
714
993
 
715
994
  async function fetchBalance(_ref) {
@@ -876,42 +1155,32 @@ async function signTypedData(_ref) {
876
1155
  types,
877
1156
  value
878
1157
  } = _ref;
1158
+ const signer = await fetchSigner();
1159
+ if (!signer) throw new ConnectorNotFoundError();
879
1160
  const {
880
- connector
881
- } = getClient();
882
- if (!connector) throw new ConnectorNotFoundError();
883
-
884
- try {
885
- var _chain;
886
-
887
- const {
888
- chainId
889
- } = domain;
890
- let chain;
1161
+ chain: activeChain,
1162
+ chains
1163
+ } = getNetwork();
1164
+ const {
1165
+ chainId: chainId_
1166
+ } = domain;
891
1167
 
892
- if (chainId) {
893
- const chainId_ = normalizeChainId(chainId);
894
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1168
+ if (chainId_) {
1169
+ const chainId = normalizeChainId(chainId_);
1170
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
895
1171
 
896
- if (chainId !== activeChainId) {
897
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1172
+ if (chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
1173
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
898
1174
 
899
- if (connector.switchChain) chain = await connector.switchChain(chainId_);else throw new ChainMismatchError({
900
- 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),
901
- 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_)
902
- });
903
- }
1175
+ throw new ChainMismatchError({
1176
+ 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),
1177
+ 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)
1178
+ });
904
1179
  }
1180
+ } // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
905
1181
 
906
- const signer = await connector.getSigner({
907
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
908
- }); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
909
1182
 
910
- return await signer._signTypedData(domain, types, value);
911
- } catch (error) {
912
- if (error.code === 4001) throw new UserRejectedRequestError(error);
913
- throw error;
914
- }
1183
+ return await signer._signTypedData(domain, types, value);
915
1184
  }
916
1185
 
917
1186
  async function switchNetwork(_ref) {
@@ -1001,60 +1270,6 @@ function watchSigner(callback) {
1001
1270
  return unsubscribe;
1002
1271
  }
1003
1272
 
1004
- async function fetchEnsAddress(_ref) {
1005
- let {
1006
- chainId,
1007
- name
1008
- } = _ref;
1009
- const provider = getProvider({
1010
- chainId
1011
- });
1012
- const address = await provider.resolveName(name);
1013
-
1014
- try {
1015
- return address ? getAddress(address) : null;
1016
- } catch (_error) {
1017
- return null;
1018
- }
1019
- }
1020
-
1021
- async function fetchEnsAvatar(_ref) {
1022
- let {
1023
- addressOrName,
1024
- chainId
1025
- } = _ref;
1026
- const provider = getProvider({
1027
- chainId
1028
- }); // TODO: Update with more advanced logic
1029
- // https://github.com/ensdomains/ens-avatar
1030
-
1031
- const avatar = await provider.getAvatar(addressOrName);
1032
- return avatar;
1033
- }
1034
-
1035
- async function fetchEnsName(_ref) {
1036
- let {
1037
- address,
1038
- chainId
1039
- } = _ref;
1040
- const provider = getProvider({
1041
- chainId
1042
- });
1043
- return await provider.lookupAddress(address);
1044
- }
1045
-
1046
- async function fetchEnsResolver(_ref) {
1047
- let {
1048
- chainId,
1049
- name
1050
- } = _ref;
1051
- const provider = getProvider({
1052
- chainId
1053
- });
1054
- const resolver = await provider.getResolver(name);
1055
- return resolver;
1056
- }
1057
-
1058
1273
  async function fetchFeeData() {
1059
1274
  let {
1060
1275
  chainId,
@@ -1109,62 +1324,4 @@ async function fetchToken(_ref) {
1109
1324
  };
1110
1325
  }
1111
1326
 
1112
- async function sendTransaction(_ref) {
1113
- let {
1114
- chainId,
1115
- request
1116
- } = _ref;
1117
- const {
1118
- connector
1119
- } = getClient();
1120
- if (!connector) throw new ConnectorNotFoundError();
1121
-
1122
- try {
1123
- var _chain;
1124
-
1125
- let chain;
1126
-
1127
- if (chainId) {
1128
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1129
-
1130
- if (chainId !== activeChainId) {
1131
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1132
-
1133
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new ChainMismatchError({
1134
- 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),
1135
- 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)
1136
- });
1137
- }
1138
- }
1139
-
1140
- const signer = await connector.getSigner({
1141
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
1142
- });
1143
- return await signer.sendTransaction(request);
1144
- } catch (error) {
1145
- if (error.code === 4001) throw new UserRejectedRequestError(error);
1146
- throw error;
1147
- }
1148
- }
1149
-
1150
- async function waitForTransaction(_ref) {
1151
- let {
1152
- chainId,
1153
- confirmations,
1154
- hash,
1155
- timeout,
1156
- wait: wait_
1157
- } = _ref;
1158
- let promise;
1159
-
1160
- if (hash) {
1161
- const provider = getProvider({
1162
- chainId
1163
- });
1164
- promise = provider.waitForTransaction(hash, confirmations, timeout);
1165
- } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
1166
-
1167
- return await promise;
1168
- }
1169
-
1170
- export { configureChains, connect, deepEqual, disconnect, erc20ABI, erc721ABI, fetchBalance, fetchBlockNumber, fetchEnsAddress, fetchEnsAvatar, fetchEnsName, fetchEnsResolver, fetchFeeData, fetchSigner, fetchToken, getAccount, getContract, getNetwork, getProvider, getWebSocketProvider, parseContractResult, readContract, readContracts, sendTransaction, signMessage, signTypedData, switchNetwork, units, waitForTransaction, watchAccount, watchBlockNumber, watchContractEvent, watchNetwork, watchProvider, watchReadContract, watchReadContracts, watchSigner, watchWebSocketProvider, writeContract };
1327
+ export { configureChains, connect, deepEqual, disconnect, erc20ABI, erc721ABI, fetchBalance, fetchBlockNumber, fetchEnsAddress, fetchEnsAvatar, fetchEnsName, fetchEnsResolver, fetchFeeData, fetchSigner, fetchToken, getAccount, getContract, getNetwork, getWebSocketProvider, parseContractResult, prepareSendTransaction, prepareWriteContract, readContract, readContracts, sendTransaction, signMessage, signTypedData, switchNetwork, units, waitForTransaction, watchAccount, watchBlockNumber, watchContractEvent, watchNetwork, watchProvider, watchReadContract, watchReadContracts, watchSigner, watchWebSocketProvider, writeContract };
package/package.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "name": "@wagmi/core",
3
3
  "description": "Vanilla JS library for Ethereum",
4
4
  "license": "WAGMIT",
5
- "version": "0.4.9",
6
- "repository": "tmm/wagmi",
5
+ "version": "0.5.0-prepare-hooks.0",
6
+ "repository": "wagmi-dev/wagmi",
7
7
  "author": "awkweb.eth",
8
8
  "ethereum": "awkweb.eth",
9
9
  "funding": [
@@ -8,7 +8,6 @@ var rpcs = require('../../../dist/rpcs-f1d24f0e.cjs.dev.js');
8
8
  function alchemyProvider() {
9
9
  let {
10
10
  alchemyId = rpcs.defaultAlchemyId,
11
- pollingInterval,
12
11
  priority,
13
12
  stallTimeout,
14
13
  weight
@@ -23,7 +22,6 @@ function alchemyProvider() {
23
22
  },
24
23
  provider: () => {
25
24
  const provider = new ethers.providers.AlchemyProvider(chain.id, alchemyId);
26
- if (pollingInterval) provider.pollingInterval = pollingInterval;
27
25
  return Object.assign(provider, {
28
26
  priority,
29
27
  stallTimeout,
@@ -8,7 +8,6 @@ var rpcs = require('../../../dist/rpcs-1fd0a12f.cjs.prod.js');
8
8
  function alchemyProvider() {
9
9
  let {
10
10
  alchemyId = rpcs.defaultAlchemyId,
11
- pollingInterval,
12
11
  priority,
13
12
  stallTimeout,
14
13
  weight
@@ -23,7 +22,6 @@ function alchemyProvider() {
23
22
  },
24
23
  provider: () => {
25
24
  const provider = new ethers.providers.AlchemyProvider(chain.id, alchemyId);
26
- if (pollingInterval) provider.pollingInterval = pollingInterval;
27
25
  return Object.assign(provider, {
28
26
  priority,
29
27
  stallTimeout,