viem 0.0.0-main.20230730T091111 → 0.0.0-main.20230731T042109

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 (60) hide show
  1. package/dist/cjs/actions/public/createEventFilter.js +14 -8
  2. package/dist/cjs/actions/public/createEventFilter.js.map +1 -1
  3. package/dist/cjs/actions/public/getLogs.js +16 -10
  4. package/dist/cjs/actions/public/getLogs.js.map +1 -1
  5. package/dist/cjs/actions/public/watchEvent.js +4 -2
  6. package/dist/cjs/actions/public/watchEvent.js.map +1 -1
  7. package/dist/cjs/clients/decorators/public.js.map +1 -1
  8. package/dist/cjs/constants/number.js +101 -0
  9. package/dist/cjs/constants/number.js.map +1 -0
  10. package/dist/cjs/errors/version.js +1 -1
  11. package/dist/cjs/index.js +106 -7
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/esm/actions/public/createEventFilter.js +14 -8
  14. package/dist/esm/actions/public/createEventFilter.js.map +1 -1
  15. package/dist/esm/actions/public/getLogs.js +16 -10
  16. package/dist/esm/actions/public/getLogs.js.map +1 -1
  17. package/dist/esm/actions/public/watchEvent.js +4 -2
  18. package/dist/esm/actions/public/watchEvent.js.map +1 -1
  19. package/dist/esm/clients/decorators/public.js.map +1 -1
  20. package/dist/esm/constants/number.js +97 -0
  21. package/dist/esm/constants/number.js.map +1 -0
  22. package/dist/esm/errors/version.js +1 -1
  23. package/dist/esm/index.js +2 -1
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/types/actions/public/createEventFilter.d.ts +18 -5
  26. package/dist/types/actions/public/createEventFilter.d.ts.map +1 -1
  27. package/dist/types/actions/public/getFilterChanges.d.ts +3 -3
  28. package/dist/types/actions/public/getFilterChanges.d.ts.map +1 -1
  29. package/dist/types/actions/public/getFilterLogs.d.ts +3 -3
  30. package/dist/types/actions/public/getFilterLogs.d.ts.map +1 -1
  31. package/dist/types/actions/public/getLogs.d.ts +15 -4
  32. package/dist/types/actions/public/getLogs.d.ts.map +1 -1
  33. package/dist/types/actions/public/watchEvent.d.ts +19 -8
  34. package/dist/types/actions/public/watchEvent.d.ts.map +1 -1
  35. package/dist/types/clients/decorators/public.d.ts +5 -5
  36. package/dist/types/clients/decorators/public.d.ts.map +1 -1
  37. package/dist/types/constants/number.d.ts +97 -0
  38. package/dist/types/constants/number.d.ts.map +1 -0
  39. package/dist/types/errors/version.d.ts +1 -1
  40. package/dist/types/index.d.ts +2 -1
  41. package/dist/types/index.d.ts.map +1 -1
  42. package/dist/types/types/contract.d.ts +1 -1
  43. package/dist/types/types/contract.d.ts.map +1 -1
  44. package/dist/types/types/filter.d.ts +1 -1
  45. package/dist/types/types/filter.d.ts.map +1 -1
  46. package/dist/types/types/log.d.ts +3 -3
  47. package/dist/types/types/log.d.ts.map +1 -1
  48. package/package.json +1 -1
  49. package/src/actions/public/createEventFilter.ts +52 -20
  50. package/src/actions/public/getFilterChanges.ts +5 -5
  51. package/src/actions/public/getFilterLogs.ts +5 -5
  52. package/src/actions/public/getLogs.ts +56 -15
  53. package/src/actions/public/watchEvent.ts +50 -17
  54. package/src/clients/decorators/public.ts +31 -12
  55. package/src/constants/number.ts +98 -0
  56. package/src/errors/version.ts +1 -1
  57. package/src/index.ts +99 -1
  58. package/src/types/contract.ts +7 -3
  59. package/src/types/filter.ts +1 -1
  60. package/src/types/log.ts +7 -3
@@ -1,4 +1,4 @@
1
- import type { Abi, AbiEvent, Address, Narrow } from 'abitype'
1
+ import type { AbiEvent, Address, Narrow } from 'abitype'
2
2
 
3
3
  import type { Client } from '../../clients/createClient.js'
4
4
  import type { Transport } from '../../clients/transports/createTransport.js'
@@ -20,20 +20,23 @@ import { createFilterRequestScope } from '../../utils/filters/createFilterReques
20
20
 
21
21
  export type CreateEventFilterParameters<
22
22
  TAbiEvent extends AbiEvent | undefined = undefined,
23
+ TAbiEvents extends
24
+ | readonly AbiEvent[]
25
+ | readonly unknown[]
26
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
23
27
  TStrict extends boolean | undefined = undefined,
24
28
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
25
29
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
26
- _Abi extends Abi | readonly unknown[] = [TAbiEvent],
27
30
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
28
31
  _Args extends
29
- | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
32
+ | MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
30
33
  | undefined = undefined,
31
34
  > = {
32
35
  address?: Address | Address[]
33
36
  fromBlock?: TFromBlock | BlockNumber | BlockTag
34
37
  toBlock?: TToBlock | BlockNumber | BlockTag
35
38
  } & (MaybeExtractEventArgsFromAbi<
36
- _Abi,
39
+ TAbiEvents,
37
40
  _EventName
38
41
  > extends infer TEventFilterArgs
39
42
  ?
@@ -42,6 +45,7 @@ export type CreateEventFilterParameters<
42
45
  | TEventFilterArgs
43
46
  | (_Args extends TEventFilterArgs ? _Args : never)
44
47
  event: Narrow<TAbiEvent>
48
+ events?: never
45
49
  /**
46
50
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
47
51
  * @default false
@@ -51,6 +55,7 @@ export type CreateEventFilterParameters<
51
55
  | {
52
56
  args?: never
53
57
  event?: Narrow<TAbiEvent>
58
+ events?: never
54
59
  /**
55
60
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
56
61
  * @default false
@@ -60,26 +65,41 @@ export type CreateEventFilterParameters<
60
65
  | {
61
66
  args?: never
62
67
  event?: never
68
+ events: Narrow<TAbiEvents>
69
+ /**
70
+ * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
71
+ * @default false
72
+ */
73
+ strict?: TStrict
74
+ }
75
+ | {
76
+ args?: never
77
+ event?: never
78
+ events?: never
63
79
  strict?: never
64
80
  }
65
81
  : {
66
82
  args?: never
67
83
  event?: never
84
+ events?: never
68
85
  strict?: never
69
86
  })
70
87
 
71
88
  export type CreateEventFilterReturnType<
72
89
  TAbiEvent extends AbiEvent | undefined = undefined,
90
+ TAbiEvents extends
91
+ | readonly AbiEvent[]
92
+ | readonly unknown[]
93
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
73
94
  TStrict extends boolean | undefined = undefined,
74
95
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
75
96
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
76
- _Abi extends Abi | readonly unknown[] = [TAbiEvent],
77
97
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
78
98
  _Args extends
79
- | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
99
+ | MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
80
100
  | undefined = undefined,
81
101
  > = Prettify<
82
- Filter<'event', _Abi, _EventName, _Args, TStrict, TFromBlock, TToBlock>
102
+ Filter<'event', TAbiEvents, _EventName, _Args, TStrict, TFromBlock, TToBlock>
83
103
  >
84
104
 
85
105
  /**
@@ -107,14 +127,17 @@ export type CreateEventFilterReturnType<
107
127
  */
108
128
  export async function createEventFilter<
109
129
  TChain extends Chain | undefined,
110
- TAbiEvent extends AbiEvent | undefined,
130
+ TAbiEvent extends AbiEvent | undefined = undefined,
131
+ TAbiEvents extends
132
+ | readonly AbiEvent[]
133
+ | readonly unknown[]
134
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
111
135
  TStrict extends boolean | undefined = undefined,
112
136
  TFromBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,
113
137
  TToBlock extends BlockNumber<bigint> | BlockTag | undefined = undefined,
114
- _Abi extends Abi | readonly unknown[] = [TAbiEvent],
115
138
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
116
139
  _Args extends
117
- | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
140
+ | MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
118
141
  | undefined = undefined,
119
142
  >(
120
143
  client: Client<Transport, TChain>,
@@ -122,40 +145,49 @@ export async function createEventFilter<
122
145
  address,
123
146
  args,
124
147
  event,
148
+ events: events_,
125
149
  fromBlock,
126
150
  strict,
127
151
  toBlock,
128
152
  }: CreateEventFilterParameters<
129
153
  TAbiEvent,
154
+ TAbiEvents,
130
155
  TStrict,
131
156
  TFromBlock,
132
157
  TToBlock,
133
- _Abi,
134
158
  _EventName,
135
159
  _Args
136
160
  > = {} as any,
137
161
  ): Promise<
138
162
  CreateEventFilterReturnType<
139
163
  TAbiEvent,
164
+ TAbiEvents,
140
165
  TStrict,
141
166
  TFromBlock,
142
167
  TToBlock,
143
- _Abi,
144
168
  _EventName,
145
169
  _Args
146
170
  >
147
171
  > {
172
+ const events = events_ ?? (event ? [event] : undefined)
173
+
148
174
  const getRequest = createFilterRequestScope(client, {
149
175
  method: 'eth_newFilter',
150
176
  })
151
177
 
152
178
  let topics: LogTopic[] = []
153
- if (event)
154
- topics = encodeEventTopics({
155
- abi: [event],
156
- eventName: (event as AbiEvent).name,
157
- args,
158
- } as EncodeEventTopicsParameters)
179
+ if (events) {
180
+ topics = [
181
+ (events as AbiEvent[]).flatMap((event) =>
182
+ encodeEventTopics({
183
+ abi: [event],
184
+ eventName: (event as AbiEvent).name,
185
+ args,
186
+ } as EncodeEventTopicsParameters),
187
+ ),
188
+ ]
189
+ if (event) topics = topics[0] as LogTopic[]
190
+ }
159
191
 
160
192
  const id: Hex = await client.request({
161
193
  method: 'eth_newFilter',
@@ -171,7 +203,7 @@ export async function createEventFilter<
171
203
  })
172
204
 
173
205
  return {
174
- abi: event ? [event] : undefined,
206
+ abi: events,
175
207
  args,
176
208
  eventName: event ? (event as AbiEvent).name : undefined,
177
209
  fromBlock,
@@ -182,10 +214,10 @@ export async function createEventFilter<
182
214
  type: 'event',
183
215
  } as unknown as CreateEventFilterReturnType<
184
216
  TAbiEvent,
217
+ TAbiEvents,
185
218
  TStrict,
186
219
  TFromBlock,
187
220
  TToBlock,
188
- _Abi,
189
221
  _EventName,
190
222
  _Args
191
223
  >
@@ -16,8 +16,8 @@ import { formatLog } from '../../utils/formatters/log.js'
16
16
 
17
17
  export type GetFilterChangesParameters<
18
18
  TFilterType extends FilterType = FilterType,
19
- TAbi extends Abi | readonly unknown[] = Abi,
20
- TEventName extends string | undefined = string,
19
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
20
+ TEventName extends string | undefined = undefined,
21
21
  TStrict extends boolean | undefined = undefined,
22
22
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
23
23
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -35,8 +35,8 @@ export type GetFilterChangesParameters<
35
35
 
36
36
  export type GetFilterChangesReturnType<
37
37
  TFilterType extends FilterType = FilterType,
38
- TAbi extends Abi | readonly unknown[] = Abi,
39
- TEventName extends string | undefined = string,
38
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
39
+ TEventName extends string | undefined = undefined,
40
40
  TStrict extends boolean | undefined = undefined,
41
41
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
42
42
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -138,7 +138,7 @@ export async function getFilterChanges<
138
138
  TTransport extends Transport,
139
139
  TChain extends Chain | undefined,
140
140
  TFilterType extends FilterType,
141
- TAbi extends Abi | readonly unknown[],
141
+ TAbi extends Abi | readonly unknown[] | undefined,
142
142
  TEventName extends string | undefined,
143
143
  TStrict extends boolean | undefined = undefined,
144
144
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -14,8 +14,8 @@ import { decodeEventLog } from '../../utils/abi/decodeEventLog.js'
14
14
  import { formatLog } from '../../utils/formatters/log.js'
15
15
 
16
16
  export type GetFilterLogsParameters<
17
- TAbi extends Abi | readonly unknown[] = Abi,
18
- TEventName extends string | undefined = string,
17
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
18
+ TEventName extends string | undefined = undefined,
19
19
  TStrict extends boolean | undefined = undefined,
20
20
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
21
21
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -23,8 +23,8 @@ export type GetFilterLogsParameters<
23
23
  filter: Filter<'event', TAbi, TEventName, any, TStrict, TFromBlock, TToBlock>
24
24
  }
25
25
  export type GetFilterLogsReturnType<
26
- TAbi extends Abi | readonly unknown[] = Abi,
27
- TEventName extends string | undefined = string,
26
+ TAbi extends Abi | readonly unknown[] | undefined = undefined,
27
+ TEventName extends string | undefined = undefined,
28
28
  TStrict extends boolean | undefined = undefined,
29
29
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
30
30
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -67,7 +67,7 @@ export type GetFilterLogsReturnType<
67
67
  */
68
68
  export async function getFilterLogs<
69
69
  TChain extends Chain | undefined,
70
- TAbi extends Abi | readonly unknown[],
70
+ TAbi extends Abi | readonly unknown[] | undefined,
71
71
  TEventName extends string | undefined,
72
72
  TStrict extends boolean | undefined = undefined,
73
73
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -1,4 +1,4 @@
1
- import type { AbiEvent, Address, Narrow } from 'abitype'
1
+ import type { Abi, AbiEvent, Address, Narrow } from 'abitype'
2
2
 
3
3
  import type { Client } from '../../clients/createClient.js'
4
4
  import type { Transport } from '../../clients/transports/createTransport.js'
@@ -25,6 +25,10 @@ import { formatLog } from '../../utils/formatters/log.js'
25
25
 
26
26
  export type GetLogsParameters<
27
27
  TAbiEvent extends AbiEvent | undefined = undefined,
28
+ TAbiEvents extends
29
+ | readonly AbiEvent[]
30
+ | readonly unknown[]
31
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
28
32
  TStrict extends boolean | undefined = undefined,
29
33
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
30
34
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -35,7 +39,8 @@ export type GetLogsParameters<
35
39
  } & (
36
40
  | {
37
41
  event: Narrow<TAbiEvent>
38
- args?: MaybeExtractEventArgsFromAbi<[TAbiEvent], _EventName>
42
+ events?: never
43
+ args?: MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
39
44
  /**
40
45
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
41
46
  * @default false
@@ -44,6 +49,17 @@ export type GetLogsParameters<
44
49
  }
45
50
  | {
46
51
  event?: never
52
+ events: Narrow<TAbiEvents>
53
+ args?: never
54
+ /**
55
+ * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
56
+ * @default false
57
+ */
58
+ strict?: TStrict
59
+ }
60
+ | {
61
+ event?: never
62
+ events?: never
47
63
  args?: never
48
64
  strict?: never
49
65
  }
@@ -66,6 +82,10 @@ export type GetLogsParameters<
66
82
 
67
83
  export type GetLogsReturnType<
68
84
  TAbiEvent extends AbiEvent | undefined = undefined,
85
+ TAbiEvents extends
86
+ | readonly AbiEvent[]
87
+ | readonly unknown[]
88
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
69
89
  TStrict extends boolean | undefined = undefined,
70
90
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
71
91
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -73,7 +93,7 @@ export type GetLogsReturnType<
73
93
  _Pending extends boolean =
74
94
  | (TFromBlock extends 'pending' ? true : false)
75
95
  | (TToBlock extends 'pending' ? true : false),
76
- > = Log<bigint, number, _Pending, TAbiEvent, TStrict, [TAbiEvent], _EventName>[]
96
+ > = Log<bigint, number, _Pending, TAbiEvent, TStrict, TAbiEvents, _EventName>[]
77
97
 
78
98
  /**
79
99
  * Returns a list of event logs matching the provided parameters.
@@ -99,7 +119,11 @@ export type GetLogsReturnType<
99
119
  */
100
120
  export async function getLogs<
101
121
  TChain extends Chain | undefined,
102
- TAbiEvent extends AbiEvent | undefined,
122
+ TAbiEvent extends AbiEvent | undefined = undefined,
123
+ TAbiEvents extends
124
+ | readonly AbiEvent[]
125
+ | readonly unknown[]
126
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
103
127
  TStrict extends boolean | undefined = undefined,
104
128
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
105
129
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -111,19 +135,35 @@ export async function getLogs<
111
135
  fromBlock,
112
136
  toBlock,
113
137
  event,
138
+ events: events_,
114
139
  args,
115
140
  strict: strict_,
116
- }: GetLogsParameters<TAbiEvent, TStrict, TFromBlock, TToBlock> = {},
117
- ): Promise<GetLogsReturnType<TAbiEvent, TStrict, TFromBlock, TToBlock>> {
141
+ }: GetLogsParameters<
142
+ TAbiEvent,
143
+ TAbiEvents,
144
+ TStrict,
145
+ TFromBlock,
146
+ TToBlock
147
+ > = {},
148
+ ): Promise<
149
+ GetLogsReturnType<TAbiEvent, TAbiEvents, TStrict, TFromBlock, TToBlock>
150
+ > {
118
151
  const strict = strict_ ?? false
152
+ const events = events_ ?? (event ? [event] : undefined)
119
153
 
120
154
  let topics: LogTopic[] = []
121
- if (event)
122
- topics = encodeEventTopics({
123
- abi: [event],
124
- eventName: (event as AbiEvent).name,
125
- args,
126
- } as EncodeEventTopicsParameters)
155
+ if (events) {
156
+ topics = [
157
+ (events as AbiEvent[]).flatMap((event) =>
158
+ encodeEventTopics({
159
+ abi: [event],
160
+ eventName: (event as AbiEvent).name,
161
+ args,
162
+ } as EncodeEventTopicsParameters),
163
+ ),
164
+ ]
165
+ if (event) topics = topics[0] as LogTopic[]
166
+ }
127
167
 
128
168
  let logs: RpcLog[]
129
169
  if (blockHash) {
@@ -149,15 +189,15 @@ export async function getLogs<
149
189
  return logs
150
190
  .map((log) => {
151
191
  try {
152
- const { eventName, args } = event
192
+ const { eventName, args } = events
153
193
  ? decodeEventLog({
154
- abi: [event] as [AbiEvent],
194
+ abi: events as Abi,
155
195
  data: log.data,
156
196
  topics: log.topics as any,
157
197
  strict,
158
198
  })
159
199
  : { eventName: undefined, args: undefined }
160
- return formatLog(log, { args, eventName })
200
+ return formatLog(log, { args, eventName: eventName as string })
161
201
  } catch (err) {
162
202
  let eventName
163
203
  let isUnnamed
@@ -177,6 +217,7 @@ export async function getLogs<
177
217
  })
178
218
  .filter(Boolean) as unknown as GetLogsReturnType<
179
219
  TAbiEvent,
220
+ TAbiEvents,
180
221
  TStrict,
181
222
  TFromBlock,
182
223
  TToBlock
@@ -1,4 +1,4 @@
1
- import type { AbiEvent, Address } from 'abitype'
1
+ import type { AbiEvent, Address, Narrow } from 'abitype'
2
2
 
3
3
  import type { Client } from '../../clients/createClient.js'
4
4
  import type { Transport } from '../../clients/transports/createTransport.js'
@@ -19,24 +19,38 @@ import {
19
19
  } from './createEventFilter.js'
20
20
  import { getBlockNumber } from './getBlockNumber.js'
21
21
  import { getFilterChanges } from './getFilterChanges.js'
22
- import { getLogs } from './getLogs.js'
22
+ import { type GetLogsParameters, getLogs } from './getLogs.js'
23
23
  import { uninstallFilter } from './uninstallFilter.js'
24
24
 
25
25
  export type WatchEventOnLogsParameter<
26
26
  TAbiEvent extends AbiEvent | undefined = undefined,
27
+ TAbiEvents extends
28
+ | readonly AbiEvent[]
29
+ | readonly unknown[]
30
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
27
31
  TStrict extends boolean | undefined = undefined,
28
32
  TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
29
- > = Log<bigint, number, false, TAbiEvent, TStrict, [TAbiEvent], TEventName>[]
33
+ > = Log<bigint, number, false, TAbiEvent, TStrict, TAbiEvents, TEventName>[]
30
34
  export type WatchEventOnLogsFn<
31
35
  TAbiEvent extends AbiEvent | undefined = undefined,
36
+ TAbiEvents extends
37
+ | readonly AbiEvent[]
38
+ | readonly unknown[]
39
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
32
40
  TStrict extends boolean | undefined = undefined,
33
- TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
34
- > = (logs: WatchEventOnLogsParameter<TAbiEvent, TStrict, TEventName>) => void
41
+ _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
42
+ > = (
43
+ logs: WatchEventOnLogsParameter<TAbiEvent, TAbiEvents, TStrict, _EventName>,
44
+ ) => void
35
45
 
36
46
  export type WatchEventParameters<
37
47
  TAbiEvent extends AbiEvent | undefined = undefined,
48
+ TAbiEvents extends
49
+ | readonly AbiEvent[]
50
+ | readonly unknown[]
51
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
38
52
  TStrict extends boolean | undefined = undefined,
39
- TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
53
+ _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
40
54
  > = {
41
55
  /** The address of the contract. */
42
56
  address?: Address | Address[]
@@ -48,13 +62,24 @@ export type WatchEventParameters<
48
62
  /** The callback to call when an error occurred when trying to get for a new block. */
49
63
  onError?: (error: Error) => void
50
64
  /** The callback to call when new event logs are received. */
51
- onLogs: WatchEventOnLogsFn<TAbiEvent, TStrict, TEventName>
65
+ onLogs: WatchEventOnLogsFn<TAbiEvent, TAbiEvents, TStrict, _EventName>
52
66
  /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */
53
67
  pollingInterval?: number
54
68
  } & (
55
69
  | {
56
- event: TAbiEvent
57
- args?: MaybeExtractEventArgsFromAbi<[TAbiEvent], TEventName>
70
+ event: Narrow<TAbiEvent>
71
+ events?: never
72
+ args?: MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
73
+ /**
74
+ * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
75
+ * @default false
76
+ */
77
+ strict?: TStrict
78
+ }
79
+ | {
80
+ event?: never
81
+ events?: Narrow<TAbiEvents>
82
+ args?: never
58
83
  /**
59
84
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
60
85
  * @default false
@@ -63,6 +88,7 @@ export type WatchEventParameters<
63
88
  }
64
89
  | {
65
90
  event?: never
91
+ events?: never
66
92
  args?: never
67
93
  strict?: never
68
94
  }
@@ -104,9 +130,13 @@ export type WatchEventReturnType = () => void
104
130
  */
105
131
  export function watchEvent<
106
132
  TChain extends Chain | undefined,
107
- TAbiEvent extends AbiEvent | undefined,
108
- TEventName extends string | undefined,
133
+ TAbiEvent extends AbiEvent | undefined = undefined,
134
+ TAbiEvents extends
135
+ | readonly AbiEvent[]
136
+ | readonly unknown[]
137
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
109
138
  TStrict extends boolean | undefined = undefined,
139
+ _EventName extends string | undefined = undefined,
110
140
  >(
111
141
  client: Client<Transport, TChain>,
112
142
  {
@@ -114,11 +144,12 @@ export function watchEvent<
114
144
  args,
115
145
  batch = true,
116
146
  event,
147
+ events,
117
148
  onError,
118
149
  onLogs,
119
150
  pollingInterval = client.pollingInterval,
120
151
  strict: strict_,
121
- }: WatchEventParameters<TAbiEvent, TStrict>,
152
+ }: WatchEventParameters<TAbiEvent, TAbiEvents, TStrict>,
122
153
  ): WatchEventReturnType {
123
154
  const observerId = stringify([
124
155
  'watchEvent',
@@ -133,7 +164,7 @@ export function watchEvent<
133
164
 
134
165
  return observe(observerId, { onLogs, onError }, (emit) => {
135
166
  let previousBlockNumber: bigint
136
- let filter: Filter<'event', [TAbiEvent], TEventName, any>
167
+ let filter: Filter<'event', TAbiEvents, _EventName, any>
137
168
  let initialized = false
138
169
 
139
170
  const unwatch = poll(
@@ -144,11 +175,12 @@ export function watchEvent<
144
175
  address,
145
176
  args,
146
177
  event: event!,
178
+ events,
147
179
  strict,
148
180
  } as unknown as CreateEventFilterParameters)) as unknown as Filter<
149
181
  'event',
150
- [TAbiEvent],
151
- TEventName
182
+ TAbiEvents,
183
+ _EventName
152
184
  >
153
185
  } catch {}
154
186
  initialized = true
@@ -173,10 +205,11 @@ export function watchEvent<
173
205
  logs = await getLogs(client, {
174
206
  address,
175
207
  args,
208
+ event: event!,
209
+ events,
176
210
  fromBlock: previousBlockNumber + 1n,
177
211
  toBlock: blockNumber,
178
- event: event!,
179
- })
212
+ } as unknown as GetLogsParameters)
180
213
  } else {
181
214
  logs = []
182
215
  }
@@ -325,32 +325,35 @@ export type PublicActions<
325
325
  * })
326
326
  */
327
327
  createEventFilter: <
328
- TAbiEvent extends AbiEvent | undefined,
328
+ TAbiEvent extends AbiEvent | undefined = undefined,
329
+ TAbiEvents extends
330
+ | readonly AbiEvent[]
331
+ | readonly unknown[]
332
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
329
333
  TStrict extends boolean | undefined = undefined,
330
334
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
331
335
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
332
- _Abi extends Abi | readonly unknown[] = [TAbiEvent],
333
336
  _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
334
337
  _Args extends
335
- | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
338
+ | MaybeExtractEventArgsFromAbi<TAbiEvents, _EventName>
336
339
  | undefined = undefined,
337
340
  >(
338
341
  args?: CreateEventFilterParameters<
339
342
  TAbiEvent,
343
+ TAbiEvents,
340
344
  TStrict,
341
345
  TFromBlock,
342
346
  TToBlock,
343
- _Abi,
344
347
  _EventName,
345
348
  _Args
346
349
  >,
347
350
  ) => Promise<
348
351
  CreateEventFilterReturnType<
349
352
  TAbiEvent,
353
+ TAbiEvents,
350
354
  TStrict,
351
355
  TFromBlock,
352
356
  TToBlock,
353
- _Abi,
354
357
  _EventName,
355
358
  _Args
356
359
  >
@@ -841,7 +844,7 @@ export type PublicActions<
841
844
  */
842
845
  getFilterChanges: <
843
846
  TFilterType extends FilterType,
844
- TAbi extends Abi | readonly unknown[],
847
+ TAbi extends Abi | readonly unknown[] | undefined,
845
848
  TEventName extends string | undefined,
846
849
  TStrict extends boolean | undefined = undefined,
847
850
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -892,7 +895,7 @@ export type PublicActions<
892
895
  * const logs = await client.getFilterLogs({ filter })
893
896
  */
894
897
  getFilterLogs: <
895
- TAbi extends Abi | readonly unknown[],
898
+ TAbi extends Abi | readonly unknown[] | undefined,
896
899
  TEventName extends string | undefined,
897
900
  TStrict extends boolean | undefined = undefined,
898
901
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
@@ -948,13 +951,25 @@ export type PublicActions<
948
951
  * const logs = await client.getLogs()
949
952
  */
950
953
  getLogs: <
951
- TAbiEvent extends AbiEvent | undefined,
954
+ TAbiEvent extends AbiEvent | undefined = undefined,
955
+ TAbiEvents extends
956
+ | readonly AbiEvent[]
957
+ | readonly unknown[]
958
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
952
959
  TStrict extends boolean | undefined = undefined,
953
960
  TFromBlock extends BlockNumber | BlockTag | undefined = undefined,
954
961
  TToBlock extends BlockNumber | BlockTag | undefined = undefined,
955
962
  >(
956
- args?: GetLogsParameters<TAbiEvent, TStrict, TFromBlock, TToBlock>,
957
- ) => Promise<GetLogsReturnType<TAbiEvent, TStrict, TFromBlock, TToBlock>>
963
+ args?: GetLogsParameters<
964
+ TAbiEvent,
965
+ TAbiEvents,
966
+ TStrict,
967
+ TFromBlock,
968
+ TToBlock
969
+ >,
970
+ ) => Promise<
971
+ GetLogsReturnType<TAbiEvent, TAbiEvents, TStrict, TFromBlock, TToBlock>
972
+ >
958
973
  /**
959
974
  * Returns the value from a storage slot at a given address.
960
975
  *
@@ -1406,10 +1421,14 @@ export type PublicActions<
1406
1421
  * })
1407
1422
  */
1408
1423
  watchEvent: <
1409
- TAbiEvent extends AbiEvent | undefined,
1424
+ TAbiEvent extends AbiEvent | undefined = undefined,
1425
+ TAbiEvents extends
1426
+ | readonly AbiEvent[]
1427
+ | readonly unknown[]
1428
+ | undefined = TAbiEvent extends AbiEvent ? [TAbiEvent] : undefined,
1410
1429
  TStrict extends boolean | undefined = undefined,
1411
1430
  >(
1412
- args: WatchEventParameters<TAbiEvent, TStrict>,
1431
+ args: WatchEventParameters<TAbiEvent, TAbiEvents, TStrict>,
1413
1432
  ) => WatchEventReturnType
1414
1433
  /**
1415
1434
  * Watches and returns pending transaction hashes.