@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.
- package/dist/esm/actions/estimateFeesPerGas.js.map +1 -1
- package/dist/esm/actions/estimateGas.js.map +1 -1
- package/dist/esm/actions/getAccount.js +5 -0
- package/dist/esm/actions/getAccount.js.map +1 -1
- package/dist/esm/actions/getBalance.js.map +1 -1
- package/dist/esm/actions/getBlock.js.map +1 -1
- package/dist/esm/actions/getBlockNumber.js.map +1 -1
- package/dist/esm/actions/getEnsAddress.js.map +1 -1
- package/dist/esm/actions/getEnsAvatar.js.map +1 -1
- package/dist/esm/actions/getEnsName.js.map +1 -1
- package/dist/esm/actions/getEnsResolver.js.map +1 -1
- package/dist/esm/actions/getToken.js.map +1 -1
- package/dist/esm/actions/getTransaction.js.map +1 -1
- package/dist/esm/actions/multicall.js.map +1 -1
- package/dist/esm/actions/readContract.js.map +1 -1
- package/dist/esm/actions/readContracts.js.map +1 -1
- package/dist/esm/actions/sendTransaction.js.map +1 -1
- package/dist/esm/actions/signMessage.js.map +1 -1
- package/dist/esm/actions/signTypedData.js.map +1 -1
- package/dist/esm/actions/simulateContract.js.map +1 -1
- package/dist/esm/actions/waitForTransactionReceipt.js.map +1 -1
- package/dist/esm/actions/watchBlockNumber.js +1 -3
- package/dist/esm/actions/watchBlockNumber.js.map +1 -1
- package/dist/esm/actions/watchBlocks.js +1 -3
- package/dist/esm/actions/watchBlocks.js.map +1 -1
- package/dist/esm/actions/watchContractEvent.js +1 -3
- package/dist/esm/actions/watchContractEvent.js.map +1 -1
- package/dist/esm/actions/watchPendingTransactions.js +1 -3
- package/dist/esm/actions/watchPendingTransactions.js.map +1 -1
- package/dist/esm/actions/writeContract.js +1 -1
- package/dist/esm/actions/writeContract.js.map +1 -1
- package/dist/esm/connectors/injected.js +20 -5
- package/dist/esm/connectors/injected.js.map +1 -1
- package/dist/esm/connectors/mock.js +129 -0
- package/dist/esm/connectors/mock.js.map +1 -0
- package/dist/esm/createConfig.js +1 -1
- package/dist/esm/createConfig.js.map +1 -1
- package/dist/esm/exports/actions.js +33 -11
- package/dist/esm/exports/actions.js.map +1 -1
- package/dist/esm/exports/index.js +31 -11
- package/dist/esm/exports/index.js.map +1 -1
- package/dist/esm/exports/internal.js +4 -0
- package/dist/esm/exports/internal.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/actions/connect.d.ts +1 -1
- package/dist/types/actions/connect.d.ts.map +1 -1
- package/dist/types/actions/disconnect.d.ts +1 -1
- package/dist/types/actions/disconnect.d.ts.map +1 -1
- package/dist/types/actions/estimateFeesPerGas.d.ts +2 -2
- package/dist/types/actions/estimateFeesPerGas.d.ts.map +1 -1
- package/dist/types/actions/estimateGas.d.ts +2 -2
- package/dist/types/actions/estimateGas.d.ts.map +1 -1
- package/dist/types/actions/getAccount.d.ts +5 -1
- package/dist/types/actions/getAccount.d.ts.map +1 -1
- package/dist/types/actions/getBalance.d.ts +2 -2
- package/dist/types/actions/getBalance.d.ts.map +1 -1
- package/dist/types/actions/getBlock.d.ts +2 -2
- package/dist/types/actions/getBlock.d.ts.map +1 -1
- package/dist/types/actions/getBlockNumber.d.ts +2 -2
- package/dist/types/actions/getBlockNumber.d.ts.map +1 -1
- package/dist/types/actions/getConnectorClient.d.ts +1 -1
- package/dist/types/actions/getConnectorClient.d.ts.map +1 -1
- package/dist/types/actions/getEnsAddress.d.ts +2 -2
- package/dist/types/actions/getEnsAddress.d.ts.map +1 -1
- package/dist/types/actions/getEnsAvatar.d.ts +2 -2
- package/dist/types/actions/getEnsAvatar.d.ts.map +1 -1
- package/dist/types/actions/getEnsName.d.ts +2 -2
- package/dist/types/actions/getEnsName.d.ts.map +1 -1
- package/dist/types/actions/getEnsResolver.d.ts +2 -2
- package/dist/types/actions/getEnsResolver.d.ts.map +1 -1
- package/dist/types/actions/getToken.d.ts +2 -1
- package/dist/types/actions/getToken.d.ts.map +1 -1
- package/dist/types/actions/getTransaction.d.ts +2 -2
- package/dist/types/actions/getTransaction.d.ts.map +1 -1
- package/dist/types/actions/getWalletClient.d.ts +2 -2
- package/dist/types/actions/getWalletClient.d.ts.map +1 -1
- package/dist/types/actions/multicall.d.ts +2 -1
- package/dist/types/actions/multicall.d.ts.map +1 -1
- package/dist/types/actions/readContract.d.ts +2 -2
- package/dist/types/actions/readContract.d.ts.map +1 -1
- package/dist/types/actions/readContracts.d.ts +3 -1
- package/dist/types/actions/readContracts.d.ts.map +1 -1
- package/dist/types/actions/reconnect.d.ts +1 -1
- package/dist/types/actions/reconnect.d.ts.map +1 -1
- package/dist/types/actions/sendTransaction.d.ts +2 -2
- package/dist/types/actions/sendTransaction.d.ts.map +1 -1
- package/dist/types/actions/signMessage.d.ts +2 -2
- package/dist/types/actions/signMessage.d.ts.map +1 -1
- package/dist/types/actions/signTypedData.d.ts +2 -2
- package/dist/types/actions/signTypedData.d.ts.map +1 -1
- package/dist/types/actions/simulateContract.d.ts +2 -2
- package/dist/types/actions/simulateContract.d.ts.map +1 -1
- package/dist/types/actions/switchAccount.d.ts +1 -1
- package/dist/types/actions/switchAccount.d.ts.map +1 -1
- package/dist/types/actions/switchChain.d.ts +1 -1
- package/dist/types/actions/switchChain.d.ts.map +1 -1
- package/dist/types/actions/waitForTransactionReceipt.d.ts +3 -2
- package/dist/types/actions/waitForTransactionReceipt.d.ts.map +1 -1
- package/dist/types/actions/watchBlockNumber.d.ts.map +1 -1
- package/dist/types/actions/watchBlocks.d.ts.map +1 -1
- package/dist/types/actions/watchContractEvent.d.ts.map +1 -1
- package/dist/types/actions/watchPendingTransactions.d.ts.map +1 -1
- package/dist/types/actions/writeContract.d.ts +6 -5
- package/dist/types/actions/writeContract.d.ts.map +1 -1
- package/dist/types/connectors/injected.d.ts +4 -4
- package/dist/types/connectors/injected.d.ts.map +1 -1
- package/dist/types/connectors/mock.d.ts +17 -0
- package/dist/types/connectors/mock.d.ts.map +1 -0
- package/dist/types/createConfig.d.ts +1 -1
- package/dist/types/createConfig.d.ts.map +1 -1
- package/dist/types/exports/actions.d.ts +47 -25
- package/dist/types/exports/actions.d.ts.map +1 -1
- package/dist/types/exports/index.d.ts +47 -27
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/exports/internal.d.ts +2 -0
- package/dist/types/exports/internal.d.ts.map +1 -1
- package/dist/types/query/connect.d.ts +3 -3
- package/dist/types/query/connect.d.ts.map +1 -1
- package/dist/types/query/disconnect.d.ts +3 -3
- package/dist/types/query/disconnect.d.ts.map +1 -1
- package/dist/types/query/reconnect.d.ts +3 -3
- package/dist/types/query/reconnect.d.ts.map +1 -1
- package/dist/types/query/sendTransaction.d.ts +3 -3
- package/dist/types/query/sendTransaction.d.ts.map +1 -1
- package/dist/types/query/signMessage.d.ts +3 -3
- package/dist/types/query/signMessage.d.ts.map +1 -1
- package/dist/types/query/signTypedData.d.ts +3 -3
- package/dist/types/query/signTypedData.d.ts.map +1 -1
- package/dist/types/query/switchAccount.d.ts +3 -3
- package/dist/types/query/switchAccount.d.ts.map +1 -1
- package/dist/types/query/switchChain.d.ts +3 -3
- package/dist/types/query/switchChain.d.ts.map +1 -1
- package/dist/types/query/writeContract.d.ts +54 -4
- package/dist/types/query/writeContract.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/actions/connect.ts +1 -1
- package/src/actions/disconnect.ts +1 -1
- package/src/actions/estimateFeesPerGas.ts +2 -1
- package/src/actions/estimateGas.ts +2 -1
- package/src/actions/getAccount.ts +10 -1
- package/src/actions/getBalance.ts +2 -1
- package/src/actions/getBlock.ts +2 -1
- package/src/actions/getBlockNumber.ts +2 -1
- package/src/actions/getConnectorClient.ts +1 -1
- package/src/actions/getEnsAddress.ts +2 -1
- package/src/actions/getEnsAvatar.ts +2 -1
- package/src/actions/getEnsName.ts +2 -1
- package/src/actions/getEnsResolver.ts +2 -1
- package/src/actions/getToken.ts +2 -2
- package/src/actions/getTransaction.ts +2 -1
- package/src/actions/getWalletClient.ts +2 -2
- package/src/actions/multicall.ts +3 -0
- package/src/actions/readContract.ts +2 -1
- package/src/actions/readContracts.ts +3 -3
- package/src/actions/reconnect.ts +1 -1
- package/src/actions/sendTransaction.ts +2 -1
- package/src/actions/signMessage.ts +2 -1
- package/src/actions/signTypedData.ts +2 -1
- package/src/actions/simulateContract.ts +2 -1
- package/src/actions/switchAccount.ts +1 -1
- package/src/actions/switchChain.ts +1 -1
- package/src/actions/waitForTransactionReceipt.ts +6 -7
- package/src/actions/watchBlockNumber.ts +1 -3
- package/src/actions/watchBlocks.ts +1 -3
- package/src/actions/watchContractEvent.ts +1 -3
- package/src/actions/watchPendingTransactions.ts +1 -3
- package/src/actions/writeContract.ts +27 -28
- package/src/connectors/injected.ts +27 -12
- package/src/connectors/mock.ts +174 -0
- package/src/createConfig.ts +2 -3
- package/src/exports/actions.ts +64 -31
- package/src/exports/index.ts +48 -31
- package/src/exports/internal.ts +13 -0
- package/src/query/connect.ts +4 -4
- package/src/query/disconnect.ts +4 -4
- package/src/query/estimateFeesPerGas.ts +2 -2
- package/src/query/estimateGas.ts +2 -2
- package/src/query/getBalance.ts +2 -2
- package/src/query/getBlock.ts +2 -2
- package/src/query/getBlockNumber.ts +2 -2
- package/src/query/getConnectorClient.ts +2 -2
- package/src/query/getEnsAddress.ts +2 -2
- package/src/query/getEnsAvatar.ts +2 -2
- package/src/query/getEnsName.ts +2 -2
- package/src/query/getEnsResolver.ts +2 -2
- package/src/query/getToken.ts +2 -2
- package/src/query/getTransaction.ts +2 -2
- package/src/query/getWalletClient.ts +2 -2
- package/src/query/infiniteReadContracts.ts +2 -2
- package/src/query/readContract.ts +2 -2
- package/src/query/readContracts.ts +2 -2
- package/src/query/reconnect.ts +4 -4
- package/src/query/sendTransaction.ts +4 -4
- package/src/query/signMessage.ts +4 -4
- package/src/query/signTypedData.ts +4 -4
- package/src/query/simulateContract.ts +2 -2
- package/src/query/switchAccount.ts +4 -4
- package/src/query/switchChain.ts +4 -4
- package/src/query/waitForTransactionReceipt.ts +2 -2
- package/src/query/writeContract.ts +4 -4
- 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
|
|
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
|
|
27
|
+
export type GetWalletClientErrorType = GetConnectorClientErrorType
|
|
28
28
|
|
|
29
29
|
export async function getWalletClient<
|
|
30
30
|
config extends Config,
|
package/src/actions/multicall.ts
CHANGED
|
@@ -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
|
|
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
|
|
28
|
+
export type ReadContractsErrorType = MulticallErrorType | ReadContractErrorType
|
|
29
29
|
|
|
30
30
|
export async function readContracts<
|
|
31
31
|
config extends Config,
|
package/src/actions/reconnect.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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>(
|
|
@@ -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
|
|
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 {
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
|
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
|
|
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<
|
|
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 = {
|
|
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
|
-
|
|
194
|
-
|
|
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
|
+
}
|
package/src/createConfig.ts
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
361
|
+
emitImmediately?: boolean | undefined
|
|
363
362
|
equalityFn?: ((a: state, b: state) => boolean) | undefined
|
|
364
363
|
}
|
|
365
364
|
| undefined,
|