@wagmi/core 2.0.0-alpha.1 → 2.0.0-alpha.3

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 (142) hide show
  1. package/dist/esm/actions/connect.js +7 -12
  2. package/dist/esm/actions/connect.js.map +1 -1
  3. package/dist/esm/actions/disconnect.js +2 -0
  4. package/dist/esm/actions/disconnect.js.map +1 -1
  5. package/dist/esm/actions/getBalance.js +11 -4
  6. package/dist/esm/actions/getBalance.js.map +1 -1
  7. package/dist/esm/actions/getConnectorClient.js.map +1 -1
  8. package/dist/esm/actions/getConnectors.js +11 -0
  9. package/dist/esm/actions/getConnectors.js.map +1 -0
  10. package/dist/esm/actions/readContracts.js.map +1 -1
  11. package/dist/esm/actions/reconnect.js +1 -1
  12. package/dist/esm/actions/reconnect.js.map +1 -1
  13. package/dist/esm/actions/signTypedData.js.map +1 -1
  14. package/dist/esm/actions/switchAccount.js.map +1 -1
  15. package/dist/esm/actions/waitForTransactionReceipt.js.map +1 -1
  16. package/dist/esm/actions/watchAccount.js.map +1 -1
  17. package/dist/esm/actions/watchBlockNumber.js.map +1 -1
  18. package/dist/esm/actions/watchBlocks.js.map +1 -1
  19. package/dist/esm/actions/watchConnectors.js +9 -0
  20. package/dist/esm/actions/watchConnectors.js.map +1 -0
  21. package/dist/esm/createConfig.js +22 -12
  22. package/dist/esm/createConfig.js.map +1 -1
  23. package/dist/esm/createConnector.js.map +1 -1
  24. package/dist/esm/createStorage.js +2 -2
  25. package/dist/esm/createStorage.js.map +1 -1
  26. package/dist/esm/exports/actions.js +2 -0
  27. package/dist/esm/exports/actions.js.map +1 -1
  28. package/dist/esm/exports/index.js +2 -0
  29. package/dist/esm/exports/index.js.map +1 -1
  30. package/dist/esm/exports/query.js +1 -0
  31. package/dist/esm/exports/query.js.map +1 -1
  32. package/dist/esm/query/estimateGas.js.map +1 -1
  33. package/dist/esm/query/getBalance.js +5 -4
  34. package/dist/esm/query/getBalance.js.map +1 -1
  35. package/dist/esm/query/getTransaction.js +3 -2
  36. package/dist/esm/query/getTransaction.js.map +1 -1
  37. package/dist/esm/query/infiniteReadContracts.js +21 -0
  38. package/dist/esm/query/infiniteReadContracts.js.map +1 -0
  39. package/dist/esm/query/readContract.js +2 -2
  40. package/dist/esm/query/readContract.js.map +1 -1
  41. package/dist/esm/query/readContracts.js +2 -2
  42. package/dist/esm/query/readContracts.js.map +1 -1
  43. package/dist/esm/query/simulateContract.js +5 -1
  44. package/dist/esm/query/simulateContract.js.map +1 -1
  45. package/dist/esm/query/utils.js +12 -0
  46. package/dist/esm/query/utils.js.map +1 -1
  47. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  48. package/dist/esm/version.js +1 -1
  49. package/dist/types/actions/connect.d.ts +2 -2
  50. package/dist/types/actions/connect.d.ts.map +1 -1
  51. package/dist/types/actions/disconnect.d.ts +3 -4
  52. package/dist/types/actions/disconnect.d.ts.map +1 -1
  53. package/dist/types/actions/getBalance.d.ts.map +1 -1
  54. package/dist/types/actions/getConnectors.d.ts +5 -0
  55. package/dist/types/actions/getConnectors.d.ts.map +1 -0
  56. package/dist/types/actions/getToken.d.ts +3 -3
  57. package/dist/types/actions/getToken.d.ts.map +1 -1
  58. package/dist/types/actions/multicall.d.ts +1 -1
  59. package/dist/types/actions/multicall.d.ts.map +1 -1
  60. package/dist/types/actions/signTypedData.d.ts +2 -1
  61. package/dist/types/actions/signTypedData.d.ts.map +1 -1
  62. package/dist/types/actions/switchAccount.d.ts.map +1 -1
  63. package/dist/types/actions/switchChain.d.ts +2 -2
  64. package/dist/types/actions/switchChain.d.ts.map +1 -1
  65. package/dist/types/actions/waitForTransactionReceipt.d.ts.map +1 -1
  66. package/dist/types/actions/watchAccount.d.ts.map +1 -1
  67. package/dist/types/actions/watchBlocks.d.ts.map +1 -1
  68. package/dist/types/actions/watchConnectors.d.ts +9 -0
  69. package/dist/types/actions/watchConnectors.d.ts.map +1 -0
  70. package/dist/types/createConfig.d.ts +12 -8
  71. package/dist/types/createConfig.d.ts.map +1 -1
  72. package/dist/types/createConnector.d.ts.map +1 -1
  73. package/dist/types/createStorage.d.ts +1 -1
  74. package/dist/types/createStorage.d.ts.map +1 -1
  75. package/dist/types/errors/base.d.ts +7 -7
  76. package/dist/types/errors/base.d.ts.map +1 -1
  77. package/dist/types/exports/actions.d.ts +2 -0
  78. package/dist/types/exports/actions.d.ts.map +1 -1
  79. package/dist/types/exports/index.d.ts +2 -0
  80. package/dist/types/exports/index.d.ts.map +1 -1
  81. package/dist/types/exports/query.d.ts +1 -0
  82. package/dist/types/exports/query.d.ts.map +1 -1
  83. package/dist/types/query/connect.d.ts +1 -1
  84. package/dist/types/query/getBalance.d.ts.map +1 -1
  85. package/dist/types/query/getToken.d.ts +3 -3
  86. package/dist/types/query/getTransaction.d.ts.map +1 -1
  87. package/dist/types/query/infiniteReadContracts.d.ts +61 -0
  88. package/dist/types/query/infiniteReadContracts.d.ts.map +1 -0
  89. package/dist/types/query/readContract.d.ts +3 -3
  90. package/dist/types/query/readContract.d.ts.map +1 -1
  91. package/dist/types/query/readContracts.d.ts +8 -8
  92. package/dist/types/query/readContracts.d.ts.map +1 -1
  93. package/dist/types/query/signTypedData.d.ts +219 -206
  94. package/dist/types/query/signTypedData.d.ts.map +1 -1
  95. package/dist/types/query/simulateContract.d.ts +3 -3
  96. package/dist/types/query/simulateContract.d.ts.map +1 -1
  97. package/dist/types/query/switchChain.d.ts +1 -1
  98. package/dist/types/query/types.d.ts +14 -4
  99. package/dist/types/query/types.d.ts.map +1 -1
  100. package/dist/types/query/utils.d.ts.map +1 -1
  101. package/dist/types/query/waitForTransactionReceipt.d.ts +1 -1
  102. package/dist/types/types/utils.d.ts +0 -9
  103. package/dist/types/types/utils.d.ts.map +1 -1
  104. package/dist/types/version.d.ts +1 -1
  105. package/package.json +4 -4
  106. package/src/actions/connect.ts +9 -15
  107. package/src/actions/disconnect.ts +4 -3
  108. package/src/actions/getBalance.ts +12 -4
  109. package/src/actions/getBlock.ts +1 -1
  110. package/src/actions/getConnectorClient.ts +1 -1
  111. package/src/actions/getConnectors.ts +14 -0
  112. package/src/actions/getToken.ts +3 -3
  113. package/src/actions/multicall.ts +1 -1
  114. package/src/actions/readContracts.ts +1 -1
  115. package/src/actions/reconnect.ts +1 -1
  116. package/src/actions/signTypedData.ts +5 -7
  117. package/src/actions/switchAccount.ts +1 -0
  118. package/src/actions/switchChain.ts +2 -2
  119. package/src/actions/waitForTransactionReceipt.ts +3 -1
  120. package/src/actions/watchAccount.ts +1 -0
  121. package/src/actions/watchBlockNumber.ts +2 -2
  122. package/src/actions/watchBlocks.ts +2 -5
  123. package/src/actions/watchConnectors.ts +22 -0
  124. package/src/createConfig.ts +75 -54
  125. package/src/createConnector.ts +2 -10
  126. package/src/createStorage.ts +3 -4
  127. package/src/errors/base.ts +5 -5
  128. package/src/exports/actions.ts +11 -0
  129. package/src/exports/index.ts +11 -0
  130. package/src/exports/query.ts +9 -0
  131. package/src/query/estimateGas.ts +1 -1
  132. package/src/query/getBalance.ts +5 -13
  133. package/src/query/getTransaction.ts +3 -9
  134. package/src/query/infiniteReadContracts.ts +126 -0
  135. package/src/query/readContract.ts +7 -7
  136. package/src/query/readContracts.ts +9 -9
  137. package/src/query/simulateContract.ts +8 -4
  138. package/src/query/types.ts +64 -33
  139. package/src/query/utils.ts +15 -0
  140. package/src/query/waitForTransactionReceipt.ts +1 -1
  141. package/src/types/utils.ts +0 -8
  142. package/src/version.ts +1 -1
@@ -55,47 +55,6 @@ export type CreateConfigParameters<
55
55
  >
56
56
  >
57
57
 
58
- export type Config<
59
- chains extends readonly [Chain, ...Chain[]] = readonly [Chain, ...Chain[]],
60
- transports extends Record<chains[number]['id'], Transport> = Record<
61
- chains[number]['id'],
62
- Transport
63
- >,
64
- > = {
65
- readonly chains: chains
66
- readonly connectors: readonly Connector[]
67
- readonly state: State<chains>
68
- readonly storage: Storage | null
69
-
70
- getClient<chainId extends chains[number]['id']>(parameters?: {
71
- chainId?: chainId | chains[number]['id'] | undefined
72
- }): Client<transports[chainId], Extract<chains[number], { id: chainId }>>
73
- setState<tchains extends readonly [Chain, ...Chain[]] = chains>(
74
- value: State<tchains> | ((state: State<tchains>) => State<tchains>),
75
- ): void
76
- subscribe<state>(
77
- selector: (state: State<chains>) => state,
78
- listener: (selectedState: state, previousSelectedState: state) => void,
79
- options?:
80
- | {
81
- equalityFn?: ((a: state, b: state) => boolean) | undefined
82
- fireImmediately?: boolean | undefined
83
- }
84
- | undefined,
85
- ): () => void
86
-
87
- _internal: {
88
- readonly reconnectOnMount: boolean
89
- readonly syncConnectedChain: boolean
90
- readonly transports: transports
91
-
92
- change(data: EventData<ConnectorEventMap, 'change'>): void
93
- connect(data: EventData<ConnectorEventMap, 'connect'>): void
94
- disconnect(data: EventData<ConnectorEventMap, 'disconnect'>): void
95
- setup(connectorFn: CreateConnectorFn): Connector
96
- }
97
- }
98
-
99
58
  export function createConfig<
100
59
  const chains extends readonly [Chain, ...Chain[]],
101
60
  transports extends Record<chains[number]['id'], Transport>,
@@ -120,7 +79,7 @@ export function createConfig<
120
79
  // Set up connectors, clients, etc.
121
80
  /////////////////////////////////////////////////////////////////////////////////////////////////
122
81
 
123
- const connectors = (rest.connectors ?? []).map(setup)
82
+ const connectors = createStore(() => (rest.connectors ?? []).map(setup))
124
83
  function setup(connectorFn: CreateConnectorFn) {
125
84
  // Set up emitter with uid and add to connector so they are "linked" together.
126
85
  const emitter = createEmitter<ConnectorEventMap>(uid())
@@ -205,12 +164,7 @@ export function createConfig<
205
164
  ? persist(() => initialState, {
206
165
  name: 'store',
207
166
  partialize(state) {
208
- return {
209
- chainId: state.chainId,
210
- connections: state.connections,
211
- current: state.current,
212
- status: state.status,
213
- } satisfies PartializedState
167
+ return state satisfies PartializedState
214
168
  },
215
169
  skipHydration: !reconnectOnMount,
216
170
  storage: storage as Storage<Record<string, unknown>>,
@@ -265,7 +219,7 @@ export function createConfig<
265
219
  if (store.getState().status === 'reconnecting') return
266
220
 
267
221
  store.setState((x) => {
268
- const connector = connectors.find((x) => x.uid === data.uid)
222
+ const connector = connectors.getState().find((x) => x.uid === data.uid)
269
223
  if (!connector) return x
270
224
  return {
271
225
  ...x,
@@ -309,13 +263,14 @@ export function createConfig<
309
263
 
310
264
  return {
311
265
  chains: chains as chains,
312
- connectors,
313
- get state() {
314
- return store.getState() as unknown as State<chains>
266
+ get connectors() {
267
+ return connectors.getState()
315
268
  },
316
269
  storage,
317
270
 
318
- getClient,
271
+ get state() {
272
+ return store.getState() as unknown as State<chains>
273
+ },
319
274
  setState(value) {
320
275
  let newState: State
321
276
  if (typeof value === 'function') newState = value(store.getState() as any)
@@ -336,6 +291,8 @@ export function createConfig<
336
291
  )
337
292
  },
338
293
 
294
+ getClient,
295
+
339
296
  _internal: {
340
297
  reconnectOnMount,
341
298
  syncConnectedChain,
@@ -343,7 +300,19 @@ export function createConfig<
343
300
  change,
344
301
  connect,
345
302
  disconnect,
346
- setup,
303
+ connectors: {
304
+ setup,
305
+ setState(value) {
306
+ let newState: Connector[]
307
+ if (typeof value === 'function')
308
+ newState = value(connectors.getState())
309
+ else newState = value
310
+ connectors.setState(newState, true)
311
+ },
312
+ subscribe(listener) {
313
+ return connectors.subscribe(listener)
314
+ },
315
+ },
347
316
  },
348
317
  }
349
318
  }
@@ -352,6 +321,58 @@ export function createConfig<
352
321
  // Types
353
322
  /////////////////////////////////////////////////////////////////////////////////////////////////
354
323
 
324
+ export type Config<
325
+ chains extends readonly [Chain, ...Chain[]] = readonly [Chain, ...Chain[]],
326
+ transports extends Record<chains[number]['id'], Transport> = Record<
327
+ chains[number]['id'],
328
+ Transport
329
+ >,
330
+ > = {
331
+ readonly chains: chains
332
+ readonly connectors: readonly Connector[]
333
+ readonly storage: Storage | null
334
+
335
+ readonly state: State<chains>
336
+ setState<tchains extends readonly [Chain, ...Chain[]] = chains>(
337
+ value: State<tchains> | ((state: State<tchains>) => State<tchains>),
338
+ ): void
339
+ subscribe<state>(
340
+ selector: (state: State<chains>) => state,
341
+ listener: (state: state, previousState: state) => void,
342
+ options?:
343
+ | {
344
+ equalityFn?: ((a: state, b: state) => boolean) | undefined
345
+ fireImmediately?: boolean | undefined
346
+ }
347
+ | undefined,
348
+ ): () => void
349
+
350
+ getClient<chainId extends chains[number]['id']>(parameters?: {
351
+ chainId?: chainId | chains[number]['id'] | undefined
352
+ }): Client<transports[chainId], Extract<chains[number], { id: chainId }>>
353
+
354
+ _internal: {
355
+ readonly reconnectOnMount: boolean
356
+ readonly syncConnectedChain: boolean
357
+ readonly transports: transports
358
+
359
+ change(data: EventData<ConnectorEventMap, 'change'>): void
360
+ connect(data: EventData<ConnectorEventMap, 'connect'>): void
361
+ disconnect(data: EventData<ConnectorEventMap, 'disconnect'>): void
362
+
363
+ connectors: {
364
+ setup(connectorFn: CreateConnectorFn): Connector
365
+ setState(value: Connector[] | ((state: Connector[]) => Connector[])): void
366
+ subscribe(
367
+ listener: (
368
+ state: readonly Connector[],
369
+ prevState: readonly Connector[],
370
+ ) => void,
371
+ ): () => void
372
+ }
373
+ }
374
+ }
375
+
355
376
  export type State<
356
377
  chains extends readonly [Chain, ...Chain[]] = readonly [Chain, ...Chain[]],
357
378
  > = {
@@ -45,18 +45,10 @@ export type CreateConnectorFn<
45
45
  getAccounts(): Promise<readonly Address[]>
46
46
  getChainId(): Promise<number>
47
47
  getProvider(
48
- parameters?:
49
- | {
50
- chainId?: number | undefined
51
- }
52
- | undefined,
48
+ parameters?: { chainId?: number | undefined } | undefined,
53
49
  ): Promise<provider>
54
50
  getClient?(
55
- parameters?:
56
- | {
57
- chainId?: number | undefined
58
- }
59
- | undefined,
51
+ parameters?: { chainId?: number | undefined } | undefined,
60
52
  ): Promise<Client>
61
53
  isAuthorized(): Promise<boolean>
62
54
  switchChain?(parameters: { chainId: number }): Promise<Chain>
@@ -43,7 +43,7 @@ export type CreateStorageParameters = {
43
43
  deserialize?: (<T>(value: string) => T) | undefined
44
44
  key?: string | undefined
45
45
  serialize?: (<T>(value: T) => string) | undefined
46
- storage: Evaluate<BaseStorage>
46
+ storage?: Evaluate<BaseStorage> | undefined
47
47
  }
48
48
 
49
49
  export function createStorage<
@@ -54,12 +54,11 @@ export function createStorage<
54
54
  deserialize = deserialize_,
55
55
  key: prefix = 'wagmi',
56
56
  serialize = serialize_,
57
- storage,
57
+ storage = noopStorage,
58
58
  } = parameters
59
59
 
60
60
  function unwrap<type>(value: type): type | Promise<type> {
61
- if (value instanceof Promise)
62
- return value.then((x) => x).catch(() => undefined)
61
+ if (value instanceof Promise) return value.then((x) => x).catch(() => null)
63
62
  return value
64
63
  }
65
64
 
@@ -2,11 +2,11 @@ import type { Evaluate, OneOf } from '../types/utils.js'
2
2
  import { getVersion } from '../utils/getVersion.js'
3
3
 
4
4
  type BaseErrorOptions = Evaluate<
5
- {
6
- docsPath?: string
7
- docsSlug?: string
8
- metaMessages?: string[]
9
- } & OneOf<{ details?: string } | { cause: BaseError | Error }>
5
+ OneOf<{ details?: string | undefined } | { cause: BaseError | Error }> & {
6
+ docsPath?: string | undefined
7
+ docsSlug?: string | undefined
8
+ metaMessages?: string[] | undefined
9
+ }
10
10
  >
11
11
 
12
12
  export class BaseError extends Error {
@@ -64,6 +64,11 @@ export {
64
64
  getConnections,
65
65
  } from '../actions/getConnections.js'
66
66
 
67
+ export {
68
+ type GetConnectorsReturnType,
69
+ getConnectors,
70
+ } from '../actions/getConnectors.js'
71
+
67
72
  export {
68
73
  type GetConnectorClientError,
69
74
  type GetConnectorClientParameters,
@@ -225,6 +230,12 @@ export {
225
230
  watchConnections,
226
231
  } from '../actions/watchConnections.js'
227
232
 
233
+ export {
234
+ type WatchConnectorsParameters,
235
+ type WatchConnectorsReturnType,
236
+ watchConnectors,
237
+ } from '../actions/watchConnectors.js'
238
+
228
239
  export {
229
240
  type WatchContractEventParameters,
230
241
  type WatchContractEventReturnType,
@@ -82,6 +82,11 @@ export {
82
82
  getConnections,
83
83
  } from '../actions/getConnections.js'
84
84
 
85
+ export {
86
+ type GetConnectorsReturnType,
87
+ getConnectors,
88
+ } from '../actions/getConnectors.js'
89
+
85
90
  export {
86
91
  type GetConnectorClientError,
87
92
  type GetConnectorClientParameters,
@@ -249,6 +254,12 @@ export {
249
254
  watchConnections,
250
255
  } from '../actions/watchConnections.js'
251
256
 
257
+ export {
258
+ type WatchConnectorsParameters,
259
+ type WatchConnectorsReturnType,
260
+ watchConnectors,
261
+ } from '../actions/watchConnectors.js'
262
+
252
263
  export {
253
264
  type WatchContractEventParameters,
254
265
  type WatchContractEventReturnType,
@@ -134,6 +134,15 @@ export {
134
134
  getWalletClientQueryOptions,
135
135
  } from '../query/getWalletClient.js'
136
136
 
137
+ export {
138
+ type InfiniteReadContractsData,
139
+ type InfiniteReadContractsOptions,
140
+ type InfiniteReadContractsQueryFnData,
141
+ type InfiniteReadContractsQueryKey,
142
+ infiniteReadContractsQueryKey,
143
+ infiniteReadContractsQueryOptions,
144
+ } from '../query/infiniteReadContracts.js'
145
+
137
146
  export {
138
147
  type ReadContractData,
139
148
  type ReadContractOptions,
@@ -26,7 +26,7 @@ export function estimateGasQueryOptions<
26
26
  const { account, scopeKey: _, ...parameters } = queryKey[1]
27
27
  if (!account && !connector)
28
28
  throw new Error('account or connector is required')
29
- return estimateGas(config, { account, connector, ...parameters } as any)
29
+ return estimateGas(config, { account, connector, ...(parameters as any) })
30
30
  },
31
31
  queryKey: estimateGasQueryKey(options),
32
32
  } as const satisfies QueryOptions<
@@ -21,20 +21,12 @@ export function getBalanceQueryOptions<config extends Config>(
21
21
  ) {
22
22
  return {
23
23
  async queryFn({ queryKey }) {
24
- const {
25
- address,
26
- blockNumber,
27
- blockTag,
28
- scopeKey: _,
29
- ...parameters
30
- } = queryKey[1]
24
+ const { address, scopeKey: _, ...parameters } = queryKey[1]
31
25
  if (!address) throw new Error('address is required')
32
- const balance = await getBalance(
33
- config,
34
- blockNumber
35
- ? { ...parameters, address, blockNumber }
36
- : { ...parameters, address, blockTag },
37
- )
26
+ const balance = await getBalance(config, {
27
+ ...(parameters as GetBalanceParameters),
28
+ address,
29
+ })
38
30
  return balance ?? null
39
31
  },
40
32
  queryKey: getBalanceQueryKey(options),
@@ -24,23 +24,17 @@ export function getTransactionQueryOptions<
24
24
  >(config: config, options: GetTransactionOptions<config, chainId> = {}) {
25
25
  return {
26
26
  async queryFn({ queryKey }) {
27
- const {
28
- blockHash,
29
- blockNumber,
30
- blockTag,
31
- hash,
32
- index,
33
- scopeKey: _,
34
- } = queryKey[1]
27
+ const { blockHash, blockNumber, blockTag, hash, index } = queryKey[1]
35
28
  if (!blockHash && !blockNumber && !blockTag && !hash)
36
29
  throw new Error('blockHash, blockNumber, blockTag, or hash is required')
37
30
  if (!hash && !index)
38
31
  throw new Error(
39
32
  'index is required for blockHash, blockNumber, or blockTag',
40
33
  )
34
+ const { scopeKey: _, ...rest } = queryKey[1]
41
35
  return getTransaction(
42
36
  config,
43
- queryKey[1] as GetTransactionParameters,
37
+ rest as GetTransactionParameters,
44
38
  ) as unknown as Promise<GetTransactionQueryFnData<config, chainId>>
45
39
  },
46
40
  queryKey: getTransactionQueryKey(options),
@@ -0,0 +1,126 @@
1
+ import type { ContractFunctionParameters } from 'viem'
2
+ import {
3
+ type ReadContractsError,
4
+ type ReadContractsParameters,
5
+ type ReadContractsReturnType,
6
+ readContracts,
7
+ } from '../actions/readContracts.js'
8
+ import type { Config } from '../createConfig.js'
9
+ import type { ChainIdParameter } from '../types/properties.js'
10
+ import type { Omit } from '../types/utils.js'
11
+ import type { InfiniteQueryOptions, ScopeKeyParameter } from './types.js'
12
+ import { filterQueryOptions } from './utils.js'
13
+
14
+ export type InfiniteReadContractsOptions<
15
+ contracts extends readonly unknown[],
16
+ allowFailure extends boolean,
17
+ pageParam,
18
+ config extends Config,
19
+ > = {
20
+ cacheKey: string
21
+ contracts(
22
+ pageParam: pageParam,
23
+ ): ReadContractsParameters<contracts, allowFailure, config>['contracts']
24
+ } & Omit<
25
+ ReadContractsParameters<contracts, allowFailure, config>,
26
+ 'contracts'
27
+ > &
28
+ ScopeKeyParameter
29
+
30
+ export function infiniteReadContractsQueryOptions<
31
+ config extends Config,
32
+ const contracts extends readonly ContractFunctionParameters[],
33
+ allowFailure extends boolean = true,
34
+ pageParam = unknown,
35
+ >(
36
+ config: config,
37
+ options: InfiniteReadContractsOptions<
38
+ contracts,
39
+ allowFailure,
40
+ pageParam,
41
+ config
42
+ > &
43
+ ChainIdParameter<config> &
44
+ RequiredPageParamsParameters<contracts, allowFailure, pageParam>,
45
+ ) {
46
+ return {
47
+ ...options.query,
48
+ async queryFn({ pageParam, queryKey }) {
49
+ const { contracts } = options
50
+ const { cacheKey: _, scopeKey: _s, ...parameters } = queryKey[1]
51
+ return (await readContracts(config, {
52
+ ...parameters,
53
+ contracts: contracts(
54
+ pageParam,
55
+ ) as readonly ContractFunctionParameters[],
56
+ })) as ReadContractsReturnType<contracts, allowFailure>
57
+ },
58
+ queryKey: infiniteReadContractsQueryKey(options),
59
+ } as const satisfies InfiniteQueryOptions<
60
+ InfiniteReadContractsQueryFnData<contracts, allowFailure>,
61
+ ReadContractsError,
62
+ InfiniteReadContractsData<contracts, allowFailure>,
63
+ InfiniteReadContractsData<contracts, allowFailure>,
64
+ InfiniteReadContractsQueryKey<contracts, allowFailure, pageParam, config>,
65
+ pageParam
66
+ >
67
+ }
68
+
69
+ type RequiredPageParamsParameters<
70
+ contracts extends readonly unknown[],
71
+ allowFailure extends boolean,
72
+ pageParam,
73
+ > = {
74
+ query: {
75
+ initialPageParam: pageParam
76
+ getNextPageParam(
77
+ lastPage: InfiniteReadContractsQueryFnData<contracts, allowFailure>,
78
+ allPages: InfiniteReadContractsQueryFnData<contracts, allowFailure>[],
79
+ lastPageParam: pageParam,
80
+ allPageParams: pageParam[],
81
+ ): pageParam | undefined | null
82
+ }
83
+ }
84
+
85
+ export type InfiniteReadContractsQueryFnData<
86
+ contracts extends readonly unknown[],
87
+ allowFailure extends boolean,
88
+ > = ReadContractsReturnType<contracts, allowFailure>
89
+
90
+ export type InfiniteReadContractsData<
91
+ contracts extends readonly unknown[],
92
+ allowFailure extends boolean,
93
+ > = InfiniteReadContractsQueryFnData<contracts, allowFailure>
94
+
95
+ export function infiniteReadContractsQueryKey<
96
+ config extends Config,
97
+ const contracts extends readonly unknown[],
98
+ allowFailure extends boolean,
99
+ pageParam,
100
+ >(
101
+ options: InfiniteReadContractsOptions<
102
+ contracts,
103
+ allowFailure,
104
+ pageParam,
105
+ config
106
+ > &
107
+ ChainIdParameter<config> &
108
+ RequiredPageParamsParameters<contracts, allowFailure, pageParam>,
109
+ ) {
110
+ const { contracts: _, query: _q, ...parameters } = options
111
+ return ['infiniteReadContracts', filterQueryOptions(parameters)] as const
112
+ }
113
+
114
+ export type InfiniteReadContractsQueryKey<
115
+ contracts extends readonly unknown[],
116
+ allowFailure extends boolean,
117
+ pageParam,
118
+ config extends Config,
119
+ > = ReturnType<
120
+ typeof infiniteReadContractsQueryKey<
121
+ config,
122
+ contracts,
123
+ allowFailure,
124
+ pageParam
125
+ >
126
+ >
@@ -30,7 +30,7 @@ export function readContractQueryOptions<
30
30
  functionName extends ContractFunctionName<abi, 'pure' | 'view'>,
31
31
  args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,
32
32
  >(
33
- config: Config,
33
+ config: config,
34
34
  options: ReadContractOptions<abi, functionName, args, config> = {} as any,
35
35
  ) {
36
36
  return {
@@ -41,20 +41,20 @@ export function readContractQueryOptions<
41
41
  if (!address) throw new Error('address is required')
42
42
  if (!functionName) throw new Error('functionName is required')
43
43
  const args = parameters.args as readonly unknown[]
44
- return (await readContract(config, {
44
+ return readContract(config, {
45
45
  abi,
46
46
  address,
47
47
  functionName,
48
48
  args,
49
49
  ...parameters,
50
- })) as ReadContractData<abi, functionName, args>
50
+ }) as Promise<ReadContractData<abi, functionName, args>>
51
51
  },
52
52
  queryKey: readContractQueryKey(options),
53
53
  } as const satisfies QueryOptions<
54
54
  ReadContractQueryFnData<abi, functionName, args>,
55
55
  ReadContractError,
56
56
  ReadContractData<abi, functionName, args>,
57
- ReadContractQueryKey<config, abi, functionName, args>
57
+ ReadContractQueryKey<abi, functionName, args, config>
58
58
  >
59
59
  }
60
60
 
@@ -71,18 +71,18 @@ export type ReadContractData<
71
71
  > = ReadContractQueryFnData<abi, functionName, args>
72
72
 
73
73
  export function readContractQueryKey<
74
+ config extends Config,
74
75
  const abi extends Abi | readonly unknown[],
75
76
  functionName extends ContractFunctionName<abi, 'pure' | 'view'>,
76
77
  args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,
77
- config extends Config,
78
78
  >(options: ReadContractOptions<abi, functionName, args, config> = {} as any) {
79
79
  const { abi: _, ...rest } = options
80
80
  return ['readContract', filterQueryOptions(rest)] as const
81
81
  }
82
82
 
83
83
  export type ReadContractQueryKey<
84
- config extends Config,
85
84
  abi extends Abi | readonly unknown[],
86
85
  functionName extends ContractFunctionName<abi, 'pure' | 'view'>,
87
86
  args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,
88
- > = ReturnType<typeof readContractQueryKey<abi, functionName, args, config>>
87
+ config extends Config,
88
+ > = ReturnType<typeof readContractQueryKey<config, abi, functionName, args>>
@@ -16,9 +16,9 @@ import type { ScopeKeyParameter } from './types.js'
16
16
  import { filterQueryOptions } from './utils.js'
17
17
 
18
18
  export type ReadContractsOptions<
19
- config extends Config,
20
19
  contracts extends readonly unknown[],
21
20
  allowFailure extends boolean,
21
+ config extends Config,
22
22
  > = ExactPartial<
23
23
  viem_MulticallParameters<
24
24
  contracts,
@@ -33,8 +33,8 @@ export function readContractsQueryOptions<
33
33
  const contracts extends readonly unknown[],
34
34
  allowFailure extends boolean = true,
35
35
  >(
36
- config: Config,
37
- options: ReadContractsOptions<config, contracts, allowFailure> &
36
+ config: config,
37
+ options: ReadContractsOptions<contracts, allowFailure, config> &
38
38
  ChainIdParameter<config> = {},
39
39
  ) {
40
40
  return {
@@ -47,17 +47,17 @@ export function readContractsQueryOptions<
47
47
  contracts.push({ ...contract, abi })
48
48
  }
49
49
  const { scopeKey: _, ...parameters } = queryKey[1]
50
- return (await readContracts(config, {
50
+ return readContracts(config, {
51
51
  ...parameters,
52
52
  contracts,
53
- })) as ReadContractsData<contracts, allowFailure>
53
+ }) as Promise<ReadContractsReturnType<contracts, allowFailure>>
54
54
  },
55
- queryKey: readContractsQueryKey(options as any),
55
+ queryKey: readContractsQueryKey(options),
56
56
  } as const satisfies QueryOptions<
57
57
  ReadContractsQueryFnData<contracts, allowFailure>,
58
58
  ReadContractsError,
59
59
  ReadContractsData<contracts, allowFailure>,
60
- ReadContractsQueryKey<config, contracts, allowFailure>
60
+ ReadContractsQueryKey<contracts, allowFailure, config>
61
61
  >
62
62
  }
63
63
 
@@ -76,7 +76,7 @@ export function readContractsQueryKey<
76
76
  const contracts extends readonly unknown[],
77
77
  allowFailure extends boolean,
78
78
  >(
79
- options: ReadContractsOptions<config, contracts, allowFailure> &
79
+ options: ReadContractsOptions<contracts, allowFailure, config> &
80
80
  ChainIdParameter<config> = {},
81
81
  ) {
82
82
  const contracts = []
@@ -92,7 +92,7 @@ export function readContractsQueryKey<
92
92
  }
93
93
 
94
94
  export type ReadContractsQueryKey<
95
- config extends Config,
96
95
  contracts extends readonly unknown[],
97
96
  allowFailure extends boolean,
97
+ config extends Config,
98
98
  > = ReturnType<typeof readContractsQueryKey<config, contracts, allowFailure>>
@@ -28,6 +28,7 @@ export type SimulateContractOptions<
28
28
  ScopeKeyParameter
29
29
 
30
30
  export function simulateContractQueryOptions<
31
+ config extends Config,
31
32
  const abi extends Abi | readonly unknown[],
32
33
  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,
33
34
  args extends ContractFunctionArgs<
@@ -35,7 +36,6 @@ export function simulateContractQueryOptions<
35
36
  'nonpayable' | 'payable',
36
37
  functionName
37
38
  >,
38
- config extends Config,
39
39
  chainId extends config['chains'][number]['id'] | undefined,
40
40
  >(
41
41
  config: config,
@@ -55,7 +55,11 @@ export function simulateContractQueryOptions<
55
55
  const { address, functionName } = parameters
56
56
  if (!address) throw new Error('address is required')
57
57
  if (!functionName) throw new Error('functionName is required')
58
- return simulateContract(config, { abi, connector, ...parameters } as any)
58
+ return simulateContract(config, {
59
+ abi,
60
+ connector,
61
+ ...(parameters as any),
62
+ })
59
63
  },
60
64
  queryKey: simulateContractQueryKey(options),
61
65
  } as const satisfies QueryOptions<
@@ -91,6 +95,7 @@ export type SimulateContractData<
91
95
  > = SimulateContractQueryFnData<abi, functionName, args, config, chainId>
92
96
 
93
97
  export function simulateContractQueryKey<
98
+ config extends Config,
94
99
  abi extends Abi | readonly unknown[],
95
100
  functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,
96
101
  args extends ContractFunctionArgs<
@@ -98,7 +103,6 @@ export function simulateContractQueryKey<
98
103
  'nonpayable' | 'payable',
99
104
  functionName
100
105
  >,
101
- config extends Config,
102
106
  chainId extends config['chains'][number]['id'] | undefined,
103
107
  >(
104
108
  options: SimulateContractOptions<
@@ -124,5 +128,5 @@ export type SimulateContractQueryKey<
124
128
  config extends Config,
125
129
  chainId extends config['chains'][number]['id'] | undefined,
126
130
  > = ReturnType<
127
- typeof simulateContractQueryKey<abi, functionName, args, config, chainId>
131
+ typeof simulateContractQueryKey<config, abi, functionName, args, chainId>
128
132
  >