@wagmi/core 2.0.0-alpha.4 → 2.0.0-alpha.6

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 (203) hide show
  1. package/dist/esm/actions/estimateFeesPerGas.js.map +1 -1
  2. package/dist/esm/actions/estimateGas.js.map +1 -1
  3. package/dist/esm/actions/getAccount.js +5 -0
  4. package/dist/esm/actions/getAccount.js.map +1 -1
  5. package/dist/esm/actions/getBalance.js.map +1 -1
  6. package/dist/esm/actions/getBlock.js.map +1 -1
  7. package/dist/esm/actions/getBlockNumber.js.map +1 -1
  8. package/dist/esm/actions/getEnsAddress.js.map +1 -1
  9. package/dist/esm/actions/getEnsAvatar.js.map +1 -1
  10. package/dist/esm/actions/getEnsName.js.map +1 -1
  11. package/dist/esm/actions/getEnsResolver.js.map +1 -1
  12. package/dist/esm/actions/getToken.js.map +1 -1
  13. package/dist/esm/actions/getTransaction.js.map +1 -1
  14. package/dist/esm/actions/multicall.js.map +1 -1
  15. package/dist/esm/actions/readContract.js.map +1 -1
  16. package/dist/esm/actions/readContracts.js.map +1 -1
  17. package/dist/esm/actions/sendTransaction.js.map +1 -1
  18. package/dist/esm/actions/signMessage.js.map +1 -1
  19. package/dist/esm/actions/signTypedData.js.map +1 -1
  20. package/dist/esm/actions/simulateContract.js.map +1 -1
  21. package/dist/esm/actions/waitForTransactionReceipt.js.map +1 -1
  22. package/dist/esm/actions/watchBlockNumber.js +1 -3
  23. package/dist/esm/actions/watchBlockNumber.js.map +1 -1
  24. package/dist/esm/actions/watchBlocks.js +1 -3
  25. package/dist/esm/actions/watchBlocks.js.map +1 -1
  26. package/dist/esm/actions/watchContractEvent.js +1 -3
  27. package/dist/esm/actions/watchContractEvent.js.map +1 -1
  28. package/dist/esm/actions/watchPendingTransactions.js +1 -3
  29. package/dist/esm/actions/watchPendingTransactions.js.map +1 -1
  30. package/dist/esm/actions/writeContract.js +1 -1
  31. package/dist/esm/actions/writeContract.js.map +1 -1
  32. package/dist/esm/connectors/injected.js +20 -5
  33. package/dist/esm/connectors/injected.js.map +1 -1
  34. package/dist/esm/connectors/mock.js +129 -0
  35. package/dist/esm/connectors/mock.js.map +1 -0
  36. package/dist/esm/createConfig.js +1 -1
  37. package/dist/esm/createConfig.js.map +1 -1
  38. package/dist/esm/exports/actions.js +33 -11
  39. package/dist/esm/exports/actions.js.map +1 -1
  40. package/dist/esm/exports/index.js +31 -11
  41. package/dist/esm/exports/index.js.map +1 -1
  42. package/dist/esm/exports/internal.js +4 -0
  43. package/dist/esm/exports/internal.js.map +1 -1
  44. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  45. package/dist/esm/version.js +1 -1
  46. package/dist/types/actions/connect.d.ts +1 -1
  47. package/dist/types/actions/connect.d.ts.map +1 -1
  48. package/dist/types/actions/disconnect.d.ts +1 -1
  49. package/dist/types/actions/disconnect.d.ts.map +1 -1
  50. package/dist/types/actions/estimateFeesPerGas.d.ts +2 -2
  51. package/dist/types/actions/estimateFeesPerGas.d.ts.map +1 -1
  52. package/dist/types/actions/estimateGas.d.ts +2 -2
  53. package/dist/types/actions/estimateGas.d.ts.map +1 -1
  54. package/dist/types/actions/getAccount.d.ts +5 -1
  55. package/dist/types/actions/getAccount.d.ts.map +1 -1
  56. package/dist/types/actions/getBalance.d.ts +2 -2
  57. package/dist/types/actions/getBalance.d.ts.map +1 -1
  58. package/dist/types/actions/getBlock.d.ts +2 -2
  59. package/dist/types/actions/getBlock.d.ts.map +1 -1
  60. package/dist/types/actions/getBlockNumber.d.ts +2 -2
  61. package/dist/types/actions/getBlockNumber.d.ts.map +1 -1
  62. package/dist/types/actions/getConnectorClient.d.ts +1 -1
  63. package/dist/types/actions/getConnectorClient.d.ts.map +1 -1
  64. package/dist/types/actions/getEnsAddress.d.ts +2 -2
  65. package/dist/types/actions/getEnsAddress.d.ts.map +1 -1
  66. package/dist/types/actions/getEnsAvatar.d.ts +2 -2
  67. package/dist/types/actions/getEnsAvatar.d.ts.map +1 -1
  68. package/dist/types/actions/getEnsName.d.ts +2 -2
  69. package/dist/types/actions/getEnsName.d.ts.map +1 -1
  70. package/dist/types/actions/getEnsResolver.d.ts +2 -2
  71. package/dist/types/actions/getEnsResolver.d.ts.map +1 -1
  72. package/dist/types/actions/getToken.d.ts +2 -1
  73. package/dist/types/actions/getToken.d.ts.map +1 -1
  74. package/dist/types/actions/getTransaction.d.ts +2 -2
  75. package/dist/types/actions/getTransaction.d.ts.map +1 -1
  76. package/dist/types/actions/getWalletClient.d.ts +2 -2
  77. package/dist/types/actions/getWalletClient.d.ts.map +1 -1
  78. package/dist/types/actions/multicall.d.ts +2 -1
  79. package/dist/types/actions/multicall.d.ts.map +1 -1
  80. package/dist/types/actions/readContract.d.ts +2 -2
  81. package/dist/types/actions/readContract.d.ts.map +1 -1
  82. package/dist/types/actions/readContracts.d.ts +3 -1
  83. package/dist/types/actions/readContracts.d.ts.map +1 -1
  84. package/dist/types/actions/reconnect.d.ts +1 -1
  85. package/dist/types/actions/reconnect.d.ts.map +1 -1
  86. package/dist/types/actions/sendTransaction.d.ts +2 -2
  87. package/dist/types/actions/sendTransaction.d.ts.map +1 -1
  88. package/dist/types/actions/signMessage.d.ts +2 -2
  89. package/dist/types/actions/signMessage.d.ts.map +1 -1
  90. package/dist/types/actions/signTypedData.d.ts +2 -2
  91. package/dist/types/actions/signTypedData.d.ts.map +1 -1
  92. package/dist/types/actions/simulateContract.d.ts +2 -2
  93. package/dist/types/actions/simulateContract.d.ts.map +1 -1
  94. package/dist/types/actions/switchAccount.d.ts +1 -1
  95. package/dist/types/actions/switchAccount.d.ts.map +1 -1
  96. package/dist/types/actions/switchChain.d.ts +1 -1
  97. package/dist/types/actions/switchChain.d.ts.map +1 -1
  98. package/dist/types/actions/waitForTransactionReceipt.d.ts +3 -2
  99. package/dist/types/actions/waitForTransactionReceipt.d.ts.map +1 -1
  100. package/dist/types/actions/watchBlockNumber.d.ts.map +1 -1
  101. package/dist/types/actions/watchBlocks.d.ts.map +1 -1
  102. package/dist/types/actions/watchContractEvent.d.ts.map +1 -1
  103. package/dist/types/actions/watchPendingTransactions.d.ts.map +1 -1
  104. package/dist/types/actions/writeContract.d.ts +6 -5
  105. package/dist/types/actions/writeContract.d.ts.map +1 -1
  106. package/dist/types/connectors/injected.d.ts +4 -4
  107. package/dist/types/connectors/injected.d.ts.map +1 -1
  108. package/dist/types/connectors/mock.d.ts +17 -0
  109. package/dist/types/connectors/mock.d.ts.map +1 -0
  110. package/dist/types/createConfig.d.ts +1 -1
  111. package/dist/types/createConfig.d.ts.map +1 -1
  112. package/dist/types/exports/actions.d.ts +47 -25
  113. package/dist/types/exports/actions.d.ts.map +1 -1
  114. package/dist/types/exports/index.d.ts +47 -27
  115. package/dist/types/exports/index.d.ts.map +1 -1
  116. package/dist/types/exports/internal.d.ts +2 -0
  117. package/dist/types/exports/internal.d.ts.map +1 -1
  118. package/dist/types/query/connect.d.ts +3 -3
  119. package/dist/types/query/connect.d.ts.map +1 -1
  120. package/dist/types/query/disconnect.d.ts +3 -3
  121. package/dist/types/query/disconnect.d.ts.map +1 -1
  122. package/dist/types/query/reconnect.d.ts +3 -3
  123. package/dist/types/query/reconnect.d.ts.map +1 -1
  124. package/dist/types/query/sendTransaction.d.ts +3 -3
  125. package/dist/types/query/sendTransaction.d.ts.map +1 -1
  126. package/dist/types/query/signMessage.d.ts +3 -3
  127. package/dist/types/query/signMessage.d.ts.map +1 -1
  128. package/dist/types/query/signTypedData.d.ts +3 -3
  129. package/dist/types/query/signTypedData.d.ts.map +1 -1
  130. package/dist/types/query/switchAccount.d.ts +3 -3
  131. package/dist/types/query/switchAccount.d.ts.map +1 -1
  132. package/dist/types/query/switchChain.d.ts +3 -3
  133. package/dist/types/query/switchChain.d.ts.map +1 -1
  134. package/dist/types/query/writeContract.d.ts +54 -4
  135. package/dist/types/query/writeContract.d.ts.map +1 -1
  136. package/dist/types/version.d.ts +1 -1
  137. package/package.json +2 -2
  138. package/src/actions/connect.ts +1 -1
  139. package/src/actions/disconnect.ts +1 -1
  140. package/src/actions/estimateFeesPerGas.ts +2 -1
  141. package/src/actions/estimateGas.ts +2 -1
  142. package/src/actions/getAccount.ts +10 -1
  143. package/src/actions/getBalance.ts +2 -1
  144. package/src/actions/getBlock.ts +2 -1
  145. package/src/actions/getBlockNumber.ts +2 -1
  146. package/src/actions/getConnectorClient.ts +1 -1
  147. package/src/actions/getEnsAddress.ts +2 -1
  148. package/src/actions/getEnsAvatar.ts +2 -1
  149. package/src/actions/getEnsName.ts +2 -1
  150. package/src/actions/getEnsResolver.ts +2 -1
  151. package/src/actions/getToken.ts +2 -2
  152. package/src/actions/getTransaction.ts +2 -1
  153. package/src/actions/getWalletClient.ts +2 -2
  154. package/src/actions/multicall.ts +3 -0
  155. package/src/actions/readContract.ts +2 -1
  156. package/src/actions/readContracts.ts +3 -3
  157. package/src/actions/reconnect.ts +1 -1
  158. package/src/actions/sendTransaction.ts +2 -1
  159. package/src/actions/signMessage.ts +2 -1
  160. package/src/actions/signTypedData.ts +2 -1
  161. package/src/actions/simulateContract.ts +2 -1
  162. package/src/actions/switchAccount.ts +1 -1
  163. package/src/actions/switchChain.ts +1 -1
  164. package/src/actions/waitForTransactionReceipt.ts +6 -7
  165. package/src/actions/watchBlockNumber.ts +1 -3
  166. package/src/actions/watchBlocks.ts +1 -3
  167. package/src/actions/watchContractEvent.ts +1 -3
  168. package/src/actions/watchPendingTransactions.ts +1 -3
  169. package/src/actions/writeContract.ts +27 -28
  170. package/src/connectors/injected.ts +27 -12
  171. package/src/connectors/mock.ts +174 -0
  172. package/src/createConfig.ts +2 -3
  173. package/src/exports/actions.ts +64 -31
  174. package/src/exports/index.ts +48 -31
  175. package/src/exports/internal.ts +13 -0
  176. package/src/query/connect.ts +4 -4
  177. package/src/query/disconnect.ts +4 -4
  178. package/src/query/estimateFeesPerGas.ts +2 -2
  179. package/src/query/estimateGas.ts +2 -2
  180. package/src/query/getBalance.ts +2 -2
  181. package/src/query/getBlock.ts +2 -2
  182. package/src/query/getBlockNumber.ts +2 -2
  183. package/src/query/getConnectorClient.ts +2 -2
  184. package/src/query/getEnsAddress.ts +2 -2
  185. package/src/query/getEnsAvatar.ts +2 -2
  186. package/src/query/getEnsName.ts +2 -2
  187. package/src/query/getEnsResolver.ts +2 -2
  188. package/src/query/getToken.ts +2 -2
  189. package/src/query/getTransaction.ts +2 -2
  190. package/src/query/getWalletClient.ts +2 -2
  191. package/src/query/infiniteReadContracts.ts +2 -2
  192. package/src/query/readContract.ts +2 -2
  193. package/src/query/readContracts.ts +2 -2
  194. package/src/query/reconnect.ts +4 -4
  195. package/src/query/sendTransaction.ts +4 -4
  196. package/src/query/signMessage.ts +4 -4
  197. package/src/query/signTypedData.ts +4 -4
  198. package/src/query/simulateContract.ts +2 -2
  199. package/src/query/switchAccount.ts +4 -4
  200. package/src/query/switchChain.ts +4 -4
  201. package/src/query/waitForTransactionReceipt.ts +2 -2
  202. package/src/query/writeContract.ts +4 -4
  203. package/src/version.ts +1 -1
@@ -3,7 +3,7 @@ import { type Account, type WalletClient, walletActions } from 'viem'
3
3
  import type { Config } from '../createConfig.js'
4
4
  import type { Evaluate } from '../types/utils.js'
5
5
  import {
6
- type GetConnectorClientError,
6
+ type GetConnectorClientErrorType,
7
7
  type GetConnectorClientParameters,
8
8
  getConnectorClient,
9
9
  } from './getConnectorClient.js'
@@ -24,7 +24,7 @@ export type GetWalletClientReturnType<
24
24
  >
25
25
  >
26
26
 
27
- export type GetWalletClientError = GetConnectorClientError
27
+ export type GetWalletClientErrorType = GetConnectorClientErrorType
28
28
 
29
29
  export async function getWalletClient<
30
30
  config extends Config,
@@ -1,5 +1,6 @@
1
1
  import type {
2
2
  ContractFunctionParameters,
3
+ MulticallErrorType as viem_MulticallErrorType,
3
4
  MulticallParameters as viem_MulticallParameters,
4
5
  MulticallReturnType as viem_MulticallReturnType,
5
6
  } from 'viem'
@@ -19,6 +20,8 @@ export type MulticallReturnType<
19
20
  allowFailure extends boolean = true,
20
21
  > = viem_MulticallReturnType<contracts, allowFailure>
21
22
 
23
+ export type MulticallErrorType = viem_MulticallErrorType
24
+
22
25
  export async function multicall<
23
26
  config extends Config,
24
27
  const contracts extends readonly ContractFunctionParameters[],
@@ -1,6 +1,7 @@
1
1
  import { type Abi } from 'viem'
2
2
  import type { ContractFunctionArgs, ContractFunctionName } from 'viem'
3
3
  import {
4
+ type ReadContractErrorType as viem_ReadContractErrorType,
4
5
  type ReadContractParameters as viem_ReadContractParameters,
5
6
  type ReadContractReturnType as viem_ReadContractReturnType,
6
7
  readContract as viem_readContract,
@@ -37,7 +38,7 @@ export type ReadContractReturnType<
37
38
  > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,
38
39
  > = viem_ReadContractReturnType<abi, functionName, args>
39
40
 
40
- export type ReadContractError = Error
41
+ export type ReadContractErrorType = viem_ReadContractErrorType
41
42
 
42
43
  /** https://alpha.wagmi.sh/core/api/actions/readContract */
43
44
  export function readContract<
@@ -7,8 +7,8 @@ import { ContractFunctionExecutionError } from 'viem'
7
7
 
8
8
  import { type Config } from '../createConfig.js'
9
9
  import { type ChainIdParameter } from '../types/properties.js'
10
- import { multicall } from './multicall.js'
11
- import { readContract } from './readContract.js'
10
+ import { type MulticallErrorType, multicall } from './multicall.js'
11
+ import { type ReadContractErrorType, readContract } from './readContract.js'
12
12
 
13
13
  export type ReadContractsParameters<
14
14
  contracts extends readonly unknown[] = readonly ContractFunctionParameters[],
@@ -25,7 +25,7 @@ export type ReadContractsReturnType<
25
25
  allowFailure extends boolean = true,
26
26
  > = viem_MulticallReturnType<contracts, allowFailure>
27
27
 
28
- export type ReadContractsError = Error
28
+ export type ReadContractsErrorType = MulticallErrorType | ReadContractErrorType
29
29
 
30
30
  export async function readContracts<
31
31
  config extends Config,
@@ -11,7 +11,7 @@ export type ReconnectParameters = {
11
11
 
12
12
  export type ReconnectReturnType = Evaluate<Connection>[]
13
13
 
14
- export type ReconnectError = Error
14
+ export type ReconnectErrorType = Error
15
15
 
16
16
  let isReconnecting = false
17
17
 
@@ -2,6 +2,7 @@ import type {
2
2
  Account,
3
3
  Address,
4
4
  Chain,
5
+ SendTransactionErrorType as viem_SendTransactionErrorType,
5
6
  SendTransactionParameters as viem_SendTransactionParameters,
6
7
  SendTransactionReturnType as viem_SendTransactionReturnType,
7
8
  } from 'viem'
@@ -37,7 +38,7 @@ export type SendTransactionParameters<
37
38
 
38
39
  export type SendTransactionReturnType = viem_SendTransactionReturnType
39
40
 
40
- export type SendTransactionError = Error
41
+ export type SendTransactionErrorType = viem_SendTransactionErrorType
41
42
 
42
43
  /** https://alpha.wagmi.sh/core/api/actions/sendTransaction */
43
44
  export async function sendTransaction<
@@ -1,5 +1,6 @@
1
1
  import type { Account } from 'viem'
2
2
  import {
3
+ type SignMessageErrorType as viem_SignMessageErrorType,
3
4
  type SignMessageParameters as viem_SignMessageParameters,
4
5
  type SignMessageReturnType as viem_SignMessageReturnType,
5
6
  signMessage as viem_signMessage,
@@ -16,7 +17,7 @@ export type SignMessageParameters = Evaluate<
16
17
 
17
18
  export type SignMessageReturnType = viem_SignMessageReturnType
18
19
 
19
- export type SignMessageError = Error
20
+ export type SignMessageErrorType = viem_SignMessageErrorType
20
21
 
21
22
  /** https://alpha.wagmi.sh/core/api/actions/signMessage */
22
23
  export async function signMessage(
@@ -1,5 +1,6 @@
1
1
  import type { Account, TypedData } from 'viem'
2
2
  import {
3
+ type SignMessageErrorType as viem_SignMessageErrorType,
3
4
  type SignTypedDataParameters as viem_SignTypedDataParameters,
4
5
  type SignTypedDataReturnType as viem_SignTypedDataReturnType,
5
6
  signTypedData as viem_signTypedData,
@@ -22,7 +23,7 @@ export type SignTypedDataParameters<
22
23
 
23
24
  export type SignTypedDataReturnType = viem_SignTypedDataReturnType
24
25
 
25
- export type SignTypedDataError = Error
26
+ export type SignTypedDataErrorType = viem_SignMessageErrorType
26
27
 
27
28
  /** https://alpha.wagmi.sh/core/api/actions/signTypedData */
28
29
  export async function signTypedData<
@@ -7,6 +7,7 @@ import type {
7
7
  ContractFunctionName,
8
8
  } from 'viem'
9
9
  import {
10
+ type SimulateContractErrorType as viem_SimulateContractErrorType,
10
11
  type SimulateContractParameters as viem_SimulateContractParameters,
11
12
  type SimulateContractReturnType as viem_SimulateContractReturnType,
12
13
  simulateContract as viem_simulateContract,
@@ -100,7 +101,7 @@ export type SimulateContractReturnType<
100
101
  : never
101
102
  }[number]
102
103
 
103
- export type SimulateContractError = Error
104
+ export type SimulateContractErrorType = viem_SimulateContractErrorType
104
105
 
105
106
  /** https://alpha.wagmi.sh/core/api/actions/simulateContract */
106
107
  export async function simulateContract<
@@ -14,7 +14,7 @@ export type SwitchAccountReturnType<config extends Config = Config> = {
14
14
  | (number extends config['chains'][number]['id'] ? number : number & {})
15
15
  }
16
16
 
17
- export type SwitchAccountError = ConnectorNotConnectedError | Error
17
+ export type SwitchAccountErrorType = ConnectorNotConnectedError | Error
18
18
 
19
19
  /** https://alpha.wagmi.sh/core/api/actions/switchAccount */
20
20
  export async function switchAccount<config extends Config>(
@@ -28,7 +28,7 @@ export type SwitchChainReturnType<
28
28
  { id: Config extends config ? number : chainId }
29
29
  >
30
30
 
31
- export type SwitchChainError =
31
+ export type SwitchChainErrorType =
32
32
  | ProviderNotFoundError
33
33
  | SwitchChainError_
34
34
  | UserRejectedRequestError
@@ -1,11 +1,9 @@
1
- import type {
2
- CallParameters,
3
- Chain,
4
- WaitForTransactionReceiptParameters as viem_WaitForTransactionReceiptParameters,
5
- WaitForTransactionReceiptReturnType as viem_WaitForTransactionReceiptReturnType,
6
- } from 'viem'
1
+ import type { CallParameters, Chain } from 'viem'
7
2
  import { hexToString } from 'viem'
8
3
  import {
4
+ type WaitForTransactionReceiptErrorType as viem_WaitForTransactionReceiptErrorType,
5
+ type WaitForTransactionReceiptParameters as viem_WaitForTransactionReceiptParameters,
6
+ type WaitForTransactionReceiptReturnType as viem_WaitForTransactionReceiptReturnType,
9
7
  call,
10
8
  getTransaction,
11
9
  waitForTransactionReceipt as viem_waitForTransactionReceipt,
@@ -34,7 +32,8 @@ export type WaitForTransactionReceiptReturnType<
34
32
  }[number]
35
33
  >
36
34
 
37
- export type WaitForTransactionReceiptError = Error
35
+ export type WaitForTransactionReceiptErrorType =
36
+ viem_WaitForTransactionReceiptErrorType
38
37
 
39
38
  export async function waitForTransactionReceipt<
40
39
  config extends Config,
@@ -66,9 +66,7 @@ export function watchBlockNumber<
66
66
  if (syncConnectedChain && !parameters.chainId)
67
67
  unsubscribe = config.subscribe(
68
68
  ({ chainId }) => chainId,
69
- async (chainId) => {
70
- return listener(chainId)
71
- },
69
+ async (chainId) => listener(chainId),
72
70
  )
73
71
 
74
72
  return () => {
@@ -75,9 +75,7 @@ export function watchBlocks<
75
75
  if (syncConnectedChain && !parameters.chainId)
76
76
  unsubscribe = config.subscribe(
77
77
  ({ chainId }) => chainId,
78
- async (chainId) => {
79
- return listener(chainId)
80
- },
78
+ async (chainId) => listener(chainId),
81
79
  )
82
80
 
83
81
  return () => {
@@ -86,9 +86,7 @@ export function watchContractEvent<
86
86
  if (syncConnectedChain && !parameters.chainId)
87
87
  unsubscribe = config.subscribe(
88
88
  ({ chainId }) => chainId,
89
- async (chainId) => {
90
- return listener(chainId)
91
- },
89
+ async (chainId) => listener(chainId),
92
90
  )
93
91
 
94
92
  return () => {
@@ -67,9 +67,7 @@ export function watchPendingTransactions<
67
67
  if (syncConnectedChain && !parameters.chainId)
68
68
  unsubscribe = config.subscribe(
69
69
  ({ chainId }) => chainId,
70
- async (chainId) => {
71
- return listener(chainId)
72
- },
70
+ async (chainId) => listener(chainId),
73
71
  )
74
72
 
75
73
  return () => {
@@ -4,10 +4,13 @@ import type {
4
4
  Chain,
5
5
  ContractFunctionArgs,
6
6
  ContractFunctionName,
7
- WriteContractParameters as viem_WriteContractParameters,
8
- WriteContractReturnType as viem_WriteContractReturnType,
9
7
  } from 'viem'
10
- import { writeContract as viem_writeContract } from 'viem/actions'
8
+ import {
9
+ type WriteContractErrorType as viem_WriteContractErrorType,
10
+ type WriteContractParameters as viem_WriteContractParameters,
11
+ type WriteContractReturnType as viem_WriteContractReturnType,
12
+ writeContract as viem_writeContract,
13
+ } from 'viem/actions'
11
14
 
12
15
  import type { Config } from '../createConfig.js'
13
16
  import type { SelectChains } from '../types/chain.js'
@@ -15,7 +18,7 @@ import type {
15
18
  ChainIdParameter,
16
19
  ConnectorParameter,
17
20
  } from '../types/properties.js'
18
- import type { Evaluate, UnionOmit } from '../types/utils.js'
21
+ import type { Evaluate, UnionEvaluate, UnionOmit } from '../types/utils.js'
19
22
  import { assertActiveChain } from '../utils/assertActiveChain.js'
20
23
  import { getConnectorClient } from './getConnectorClient.js'
21
24
  import {
@@ -39,26 +42,28 @@ export type WriteContractParameters<
39
42
  ///
40
43
  allFunctionNames = ContractFunctionName<abi, 'nonpayable' | 'payable'>,
41
44
  chains extends readonly Chain[] = SelectChains<config, chainId>,
42
- > = {
43
- [key in keyof chains]: UnionOmit<
44
- viem_WriteContractParameters<
45
- abi,
46
- functionName,
47
- args,
48
- chains[key],
49
- Account,
50
- chains[key],
51
- allFunctionNames
52
- >,
53
- 'chain'
54
- >
55
- }[number] &
56
- Evaluate<ChainIdParameter<config, chainId>> &
57
- ConnectorParameter & { __mode?: 'prepared' }
45
+ > = UnionEvaluate<
46
+ {
47
+ [key in keyof chains]: UnionOmit<
48
+ viem_WriteContractParameters<
49
+ abi,
50
+ functionName,
51
+ args,
52
+ chains[key],
53
+ Account,
54
+ chains[key],
55
+ allFunctionNames
56
+ >,
57
+ 'chain'
58
+ >
59
+ }[number] &
60
+ Evaluate<ChainIdParameter<config, chainId>> &
61
+ ConnectorParameter & { __mode?: 'prepared' }
62
+ >
58
63
 
59
64
  export type WriteContractReturnType = viem_WriteContractReturnType
60
65
 
61
- export type WriteContractError = Error
66
+ export type WriteContractErrorType = viem_WriteContractErrorType
62
67
 
63
68
  /** https://alpha.wagmi.sh/core/api/actions/writeContract */
64
69
  export async function writeContract<
@@ -91,13 +96,7 @@ export async function writeContract<
91
96
  } else {
92
97
  const { request: simulateRequest } = await simulateContract(
93
98
  config,
94
- rest as unknown as SimulateContractParameters<
95
- abi,
96
- functionName,
97
- args,
98
- config,
99
- chainId
100
- >,
99
+ rest as SimulateContractParameters,
101
100
  )
102
101
  request = simulateRequest
103
102
  }
@@ -28,11 +28,7 @@ export type InjectedParameters = {
28
28
  /**
29
29
  * [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) Ethereum Provider to target
30
30
  */
31
- target?:
32
- | TargetId
33
- | TargetMap[TargetId]
34
- | (() => TargetMap[TargetId] | undefined)
35
- | undefined
31
+ target?: TargetId | Target | (() => Target | undefined) | undefined
36
32
  }
37
33
 
38
34
  const targetMap = {
@@ -91,7 +87,7 @@ const targetMap = {
91
87
  export function injected(parameters: InjectedParameters = {}) {
92
88
  const { shimDisconnect = true, unstable_shimAsyncInject } = parameters
93
89
 
94
- function getTarget(): Evaluate<TargetMap[TargetId] & { id: string }> {
90
+ function getTarget(): Evaluate<Target & { id: string }> {
95
91
  const target = parameters.target
96
92
  if (typeof target === 'function') {
97
93
  const result = target()
@@ -122,7 +118,9 @@ export function injected(parameters: InjectedParameters = {}) {
122
118
  type Properties = {
123
119
  onConnect(connectInfo: ProviderConnectInfo): void
124
120
  }
125
- type StorageItem = { [_ in `${string}.disconnected`]: true }
121
+ type StorageItem = {
122
+ [_ in 'injected.connected' | `${string}.disconnected`]: true
123
+ }
126
124
 
127
125
  return createConnector<Provider, Properties, StorageItem>((config) => ({
128
126
  get icon() {
@@ -137,9 +135,8 @@ export function injected(parameters: InjectedParameters = {}) {
137
135
  async setup() {
138
136
  const provider = await this.getProvider()
139
137
  // Only start listening for events if `target` is set, otherwise `injected()` will also receive events
140
- if (provider && parameters.target) {
138
+ if (provider && parameters.target)
141
139
  provider.on('connect', this.onConnect.bind(this))
142
- }
143
140
  },
144
141
  async connect({ chainId, isReconnecting } = {}) {
145
142
  const provider = await this.getProvider()
@@ -190,9 +187,13 @@ export function injected(parameters: InjectedParameters = {}) {
190
187
  currentChainId = chain?.id ?? currentChainId
191
188
  }
192
189
 
193
- // Remove disconnected shim if it exists
194
- if (shimDisconnect)
190
+ if (shimDisconnect) {
191
+ // Remove disconnected shim if it exists
195
192
  await config.storage?.removeItem(`${this.id}.disconnected`)
193
+ // Add connected shim if no target exists
194
+ if (!parameters.target)
195
+ await config.storage?.setItem('injected.connected', true)
196
+ }
196
197
 
197
198
  return { accounts, chainId: currentChainId }
198
199
  } catch (err) {
@@ -217,8 +218,11 @@ export function injected(parameters: InjectedParameters = {}) {
217
218
  provider.on('connect', this.onConnect.bind(this))
218
219
 
219
220
  // Add shim signalling connector is disconnected
220
- if (shimDisconnect)
221
+ if (shimDisconnect) {
221
222
  await config.storage?.setItem(`${this.id}.disconnected`, true)
223
+ if (!parameters.target)
224
+ await config.storage?.removeItem('injected.connected')
225
+ }
222
226
  },
223
227
  async getAccounts() {
224
228
  const provider = await this.getProvider()
@@ -249,6 +253,15 @@ export function injected(parameters: InjectedParameters = {}) {
249
253
  (await config.storage?.getItem(`${this.id}.disconnected`))
250
254
  if (isDisconnected) return false
251
255
 
256
+ // Don't allow injected connector to connect if no target is set and it hasn't already connected
257
+ // (e.g. flag in storage is not set). This prevents a targetless injected connector from connecting
258
+ // automatically whenever there is a targeted connector configured.
259
+ if (!parameters.target) {
260
+ const connected = await config.storage?.getItem('injected.connected')
261
+ console.log({ connected })
262
+ if (!connected) return false
263
+ }
264
+
252
265
  const provider = await this.getProvider()
253
266
  if (!provider) {
254
267
  if (
@@ -442,6 +455,7 @@ type Target = {
442
455
  | ((window?: Window | undefined) => WalletProvider | undefined)
443
456
  }
444
457
 
458
+ /** @deprecated */
445
459
  export type TargetId = Evaluate<WalletProviderFlags> extends `is${infer name}`
446
460
  ? name extends `${infer char}${infer rest}`
447
461
  ? `${Lowercase<char>}${rest}`
@@ -450,6 +464,7 @@ export type TargetId = Evaluate<WalletProviderFlags> extends `is${infer name}`
450
464
 
451
465
  type TargetMap = { [_ in TargetId]?: Target | undefined }
452
466
 
467
+ /** @deprecated */
453
468
  type WalletProviderFlags =
454
469
  | 'isApexWallet'
455
470
  | 'isAvalanche'
@@ -0,0 +1,174 @@
1
+ import {
2
+ type Address,
3
+ type EIP1193RequestFn,
4
+ type Hex,
5
+ RpcRequestError,
6
+ SwitchChainError,
7
+ type Transport,
8
+ UserRejectedRequestError,
9
+ type WalletRpcSchema,
10
+ custom,
11
+ fromHex,
12
+ getAddress,
13
+ numberToHex,
14
+ } from 'viem'
15
+ import { rpc } from 'viem/utils'
16
+
17
+ import {
18
+ ChainNotConfiguredError,
19
+ ConnectorNotConnectedError,
20
+ } from '../errors/config.js'
21
+ import { normalizeChainId } from '../utils/normalizeChainId.js'
22
+ import { createConnector } from './createConnector.js'
23
+
24
+ export type MockParameters = {
25
+ accounts: readonly [Address, ...Address[]]
26
+ features?:
27
+ | {
28
+ connectError?: boolean | Error | undefined
29
+ switchChainError?: boolean | Error | undefined
30
+ signMessageError?: boolean | Error | undefined
31
+ signTypedDataError?: boolean | Error | undefined
32
+ reconnect?: boolean | undefined
33
+ }
34
+ | undefined
35
+ }
36
+
37
+ export function mock(parameters: MockParameters) {
38
+ const features = parameters.features ?? {}
39
+
40
+ type Provider = ReturnType<
41
+ Transport<'custom', {}, EIP1193RequestFn<WalletRpcSchema>>
42
+ >
43
+ let connected = false
44
+ let connectedChainId: number
45
+
46
+ return createConnector<Provider>((config) => ({
47
+ id: 'mock',
48
+ name: 'Mock Connector',
49
+ async setup() {
50
+ connectedChainId = config.chains[0].id
51
+ },
52
+ async connect({ chainId } = {}) {
53
+ if (features.connectError) {
54
+ if (typeof features.connectError === 'boolean')
55
+ throw new UserRejectedRequestError(new Error('Failed to connect.'))
56
+ throw features.connectError
57
+ }
58
+
59
+ const provider = await this.getProvider()
60
+ const accounts = await provider.request({
61
+ method: 'eth_requestAccounts',
62
+ })
63
+
64
+ let currentChainId = await this.getChainId()
65
+ if (chainId && currentChainId !== chainId) {
66
+ const chain = await this.switchChain!({ chainId })
67
+ currentChainId = chain.id
68
+ }
69
+
70
+ connected = true
71
+
72
+ return { accounts, chainId: currentChainId }
73
+ },
74
+ async disconnect() {
75
+ connected = false
76
+ },
77
+ async getAccounts() {
78
+ if (!connected) throw new ConnectorNotConnectedError()
79
+ const provider = await this.getProvider()
80
+ const accounts = await provider.request({ method: 'eth_accounts' })
81
+ return accounts.map(getAddress)
82
+ },
83
+ async getChainId() {
84
+ const provider = await this.getProvider()
85
+ const hexChainId = await provider.request({ method: 'eth_chainId' })
86
+ return fromHex(hexChainId, 'number')
87
+ },
88
+ async isAuthorized() {
89
+ if (!features.reconnect) return false
90
+ if (!connected) return false
91
+ const accounts = await this.getAccounts()
92
+ return !!accounts.length
93
+ },
94
+ async switchChain({ chainId }) {
95
+ const provider = await this.getProvider()
96
+ const chain = config.chains.find((x) => x.id === chainId)
97
+ if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
98
+
99
+ await provider.request({
100
+ method: 'wallet_switchEthereumChain',
101
+ params: [{ chainId: numberToHex(chainId) }],
102
+ })
103
+ return chain
104
+ },
105
+ onAccountsChanged(accounts) {
106
+ if (accounts.length === 0) this.onDisconnect()
107
+ else config.emitter.emit('change', { accounts: accounts.map(getAddress) })
108
+ },
109
+ onChainChanged(chain) {
110
+ const chainId = normalizeChainId(chain)
111
+ config.emitter.emit('change', { chainId })
112
+ },
113
+ async onDisconnect(_error) {
114
+ config.emitter.emit('disconnect')
115
+ connected = false
116
+ },
117
+ async getProvider({ chainId } = {}) {
118
+ const chain =
119
+ config.chains.find((x) => x.id === chainId) ?? config.chains[0]
120
+ const url = chain.rpcUrls.default.http[0]!
121
+
122
+ const request: EIP1193RequestFn = async ({ method, params }) => {
123
+ // eth methods
124
+ if (method === 'eth_chainId') return numberToHex(connectedChainId)
125
+ if (method === 'eth_requestAccounts') return parameters.accounts
126
+ if (method === 'eth_signTypedData_v4')
127
+ if (features.signTypedDataError) {
128
+ if (typeof features.signTypedDataError === 'boolean')
129
+ throw new UserRejectedRequestError(
130
+ new Error('Failed to sign typed data.'),
131
+ )
132
+ throw features.signTypedDataError
133
+ }
134
+
135
+ // wallet methods
136
+ if (method === 'wallet_switchEthereumChain') {
137
+ if (features.switchChainError) {
138
+ if (typeof features.switchChainError === 'boolean')
139
+ throw new UserRejectedRequestError(
140
+ new Error('Failed to switch chain.'),
141
+ )
142
+ throw features.switchChainError
143
+ }
144
+ type Params = [{ chainId: Hex }]
145
+ connectedChainId = fromHex((params as Params)[0].chainId, 'number')
146
+ this.onChainChanged(connectedChainId.toString())
147
+ return
148
+ }
149
+
150
+ // other methods
151
+ if (method === 'personal_sign') {
152
+ if (features.signMessageError) {
153
+ if (typeof features.signMessageError === 'boolean')
154
+ throw new UserRejectedRequestError(
155
+ new Error('Failed to sign message.'),
156
+ )
157
+ throw features.signMessageError
158
+ }
159
+ // Change `personal_sign` to `eth_sign` and swap params
160
+ method = 'eth_sign'
161
+ type Params = [data: Hex, address: Address]
162
+ params = [(params as Params)[1], (params as Params)[0]]
163
+ }
164
+
165
+ const body = { method, params }
166
+ const { error, result } = await rpc.http(url, { body })
167
+ if (error) throw new RpcRequestError({ body, error, url })
168
+
169
+ return result
170
+ }
171
+ return custom({ request })({ retryCount: 0 })
172
+ },
173
+ }))
174
+ }
@@ -115,7 +115,6 @@ export function createConfig<
115
115
  const chain = chains.find((x) => x.id === chainId)
116
116
 
117
117
  // If the target chain is not configured, use the client of the current chain.
118
- // TODO: should we error instead? idk. figure out later.
119
118
  type Return = Client<Transport, Extract<chains[number], { id: chainId }>>
120
119
  {
121
120
  const client = clients.get(store.getState().chainId)
@@ -313,7 +312,7 @@ export function createConfig<
313
312
  selector as unknown as (state: State) => any,
314
313
  listener,
315
314
  options
316
- ? { ...options, fireImmediately: options.emitOnBegin }
315
+ ? { ...options, fireImmediately: options.emitImmediately }
317
316
  : undefined,
318
317
  )
319
318
  },
@@ -359,7 +358,7 @@ export type Config<
359
358
  listener: (state: state, previousState: state) => void,
360
359
  options?:
361
360
  | {
362
- emitOnBegin?: boolean | undefined
361
+ emitImmediately?: boolean | undefined
363
362
  equalityFn?: ((a: state, b: state) => boolean) | undefined
364
363
  }
365
364
  | undefined,