viem 0.0.0-main.20230810T045448 → 0.0.0-main.20230810T045918

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.
@@ -2,7 +2,8 @@ import { getAbiItem, } from '../../utils/abi/getAbiItem.js';
2
2
  import { observe } from '../../utils/observe.js';
3
3
  import { poll } from '../../utils/poll.js';
4
4
  import { stringify } from '../../utils/stringify.js';
5
- import { InvalidInputRpcError } from '../../index.js';
5
+ import { DecodeLogDataMismatch } from '../../errors/abi.js';
6
+ import { DecodeLogTopicsMismatch, InvalidInputRpcError, decodeEventLog, encodeEventTopics, formatLog, } from '../../index.js';
6
7
  import { createContractEventFilter, } from './createContractEventFilter.js';
7
8
  import { getBlockNumber } from './getBlockNumber.js';
8
9
  import { getFilterChanges } from './getFilterChanges.js';
@@ -38,89 +39,157 @@ import { uninstallFilter } from './uninstallFilter.js';
38
39
  * onLogs: (logs) => console.log(logs),
39
40
  * })
40
41
  */
41
- export function watchContractEvent(client, { abi, address, args, batch = true, eventName, onError, onLogs, pollingInterval = client.pollingInterval, strict: strict_, }) {
42
- const observerId = stringify([
43
- 'watchContractEvent',
44
- address,
45
- args,
46
- batch,
47
- client.uid,
48
- eventName,
49
- pollingInterval,
50
- ]);
51
- const strict = strict_ ?? false;
52
- return observe(observerId, { onLogs, onError }, (emit) => {
53
- let previousBlockNumber;
54
- let filter;
55
- let initialized = false;
56
- const unwatch = poll(async () => {
57
- if (!initialized) {
58
- try {
59
- filter = (await createContractEventFilter(client, {
60
- abi,
61
- address,
62
- args,
63
- eventName,
64
- strict,
65
- }));
66
- }
67
- catch { }
68
- initialized = true;
69
- return;
70
- }
71
- try {
72
- let logs;
73
- if (filter) {
74
- logs = await getFilterChanges(client, { filter });
75
- }
76
- else {
77
- // If the filter doesn't exist, we will fall back to use `getLogs`.
78
- // The fall back exists because some RPC Providers do not support filters.
79
- // Fetch the block number to use for `getLogs`.
80
- const blockNumber = await getBlockNumber(client);
81
- // If the block number has changed, we will need to fetch the logs.
82
- // If the block number doesn't exist, we are yet to reach the first poll interval,
83
- // so do not emit any logs.
84
- if (previousBlockNumber && previousBlockNumber !== blockNumber) {
85
- logs = await getLogs(client, {
42
+ export function watchContractEvent(client, { abi, address, args, batch = true, eventName, onError, onLogs, poll: poll_, pollingInterval = client.pollingInterval, strict: strict_, }) {
43
+ const enablePolling = typeof poll_ !== 'undefined' ? poll_ : client.transport.type !== 'webSocket';
44
+ const pollContractEvent = () => {
45
+ const observerId = stringify([
46
+ 'watchContractEvent',
47
+ address,
48
+ args,
49
+ batch,
50
+ client.uid,
51
+ eventName,
52
+ pollingInterval,
53
+ ]);
54
+ const strict = strict_ ?? false;
55
+ return observe(observerId, { onLogs, onError }, (emit) => {
56
+ let previousBlockNumber;
57
+ let filter;
58
+ let initialized = false;
59
+ const unwatch = poll(async () => {
60
+ if (!initialized) {
61
+ try {
62
+ filter = (await createContractEventFilter(client, {
63
+ abi,
86
64
  address,
87
65
  args,
88
- fromBlock: previousBlockNumber + 1n,
89
- toBlock: blockNumber,
90
- event: getAbiItem({
91
- abi,
92
- name: eventName,
93
- }),
94
- });
66
+ eventName,
67
+ strict,
68
+ }));
69
+ }
70
+ catch { }
71
+ initialized = true;
72
+ return;
73
+ }
74
+ try {
75
+ let logs;
76
+ if (filter) {
77
+ logs = await getFilterChanges(client, { filter });
95
78
  }
96
79
  else {
97
- logs = [];
80
+ // If the filter doesn't exist, we will fall back to use `getLogs`.
81
+ // The fall back exists because some RPC Providers do not support filters.
82
+ // Fetch the block number to use for `getLogs`.
83
+ const blockNumber = await getBlockNumber(client);
84
+ // If the block number has changed, we will need to fetch the logs.
85
+ // If the block number doesn't exist, we are yet to reach the first poll interval,
86
+ // so do not emit any logs.
87
+ if (previousBlockNumber && previousBlockNumber !== blockNumber) {
88
+ logs = await getLogs(client, {
89
+ address,
90
+ args,
91
+ fromBlock: previousBlockNumber + 1n,
92
+ toBlock: blockNumber,
93
+ event: getAbiItem({
94
+ abi,
95
+ name: eventName,
96
+ }),
97
+ });
98
+ }
99
+ else {
100
+ logs = [];
101
+ }
102
+ previousBlockNumber = blockNumber;
98
103
  }
99
- previousBlockNumber = blockNumber;
104
+ if (logs.length === 0)
105
+ return;
106
+ if (batch)
107
+ emit.onLogs(logs);
108
+ else
109
+ logs.forEach((log) => emit.onLogs([log]));
100
110
  }
101
- if (logs.length === 0)
102
- return;
103
- if (batch)
104
- emit.onLogs(logs);
105
- else
106
- logs.forEach((log) => emit.onLogs([log]));
111
+ catch (err) {
112
+ // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.
113
+ // Reinitalize the filter when this occurs
114
+ if (filter && err instanceof InvalidInputRpcError)
115
+ initialized = false;
116
+ emit.onError?.(err);
117
+ }
118
+ }, {
119
+ emitOnBegin: true,
120
+ interval: pollingInterval,
121
+ });
122
+ return async () => {
123
+ if (filter)
124
+ await uninstallFilter(client, { filter });
125
+ unwatch();
126
+ };
127
+ });
128
+ };
129
+ const subscribeContractEvent = () => {
130
+ let active = true;
131
+ let unsubscribe = () => (active = false);
132
+ (async () => {
133
+ try {
134
+ const topics = eventName
135
+ ? encodeEventTopics({
136
+ abi: abi,
137
+ eventName: eventName,
138
+ args,
139
+ })
140
+ : [];
141
+ const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({
142
+ params: ['logs', { address, topics }],
143
+ onData(data) {
144
+ if (!active)
145
+ return;
146
+ const log = data.result;
147
+ try {
148
+ const { eventName, args } = decodeEventLog({
149
+ abi: abi,
150
+ data: log.data,
151
+ topics: log.topics,
152
+ strict: strict_,
153
+ });
154
+ const formatted = formatLog(log, {
155
+ args,
156
+ eventName: eventName,
157
+ });
158
+ onLogs([formatted]);
159
+ }
160
+ catch (err) {
161
+ let eventName;
162
+ let isUnnamed;
163
+ if (err instanceof DecodeLogDataMismatch ||
164
+ err instanceof DecodeLogTopicsMismatch) {
165
+ // If strict mode is on, and log data/topics do not match event definition, skip.
166
+ if (strict_)
167
+ return;
168
+ eventName = err.abiItem.name;
169
+ isUnnamed = err.abiItem.inputs?.some((x) => !('name' in x && x.name));
170
+ }
171
+ // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).
172
+ const formatted = formatLog(log, {
173
+ args: isUnnamed ? [] : {},
174
+ eventName,
175
+ });
176
+ onLogs([formatted]);
177
+ }
178
+ },
179
+ onError(error) {
180
+ onError?.(error);
181
+ },
182
+ });
183
+ unsubscribe = unsubscribe_;
184
+ if (!active)
185
+ unsubscribe();
107
186
  }
108
187
  catch (err) {
109
- // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.
110
- // Reinitalize the filter when this occurs
111
- if (filter && err instanceof InvalidInputRpcError)
112
- initialized = false;
113
- emit.onError?.(err);
188
+ onError?.(err);
114
189
  }
115
- }, {
116
- emitOnBegin: true,
117
- interval: pollingInterval,
118
- });
119
- return async () => {
120
- if (filter)
121
- await uninstallFilter(client, { filter });
122
- unwatch();
123
- };
124
- });
190
+ })();
191
+ return unsubscribe;
192
+ };
193
+ return enablePolling ? pollContractEvent() : subscribeContractEvent();
125
194
  }
126
195
  //# sourceMappingURL=watchContractEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watchContractEvent.js","sourceRoot":"","sources":["../../../../src/actions/public/watchContractEvent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watchContractEvent.js","sourceRoot":"","sources":["../../../../src/actions/public/watchContractEvent.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { observe } from '../../utils/observe.js';
2
2
  import { poll } from '../../utils/poll.js';
3
3
  import { stringify } from '../../utils/stringify.js';
4
+ import { DecodeLogDataMismatch, DecodeLogTopicsMismatch, } from '../../errors/abi.js';
4
5
  import { InvalidInputRpcError } from '../../errors/rpc.js';
6
+ import { decodeEventLog, encodeEventTopics, formatLog, } from '../../utils/index.js';
5
7
  import { createEventFilter, } from './createEventFilter.js';
6
8
  import { getBlockNumber } from './getBlockNumber.js';
7
9
  import { getFilterChanges } from './getFilterChanges.js';
@@ -39,87 +41,161 @@ import { uninstallFilter } from './uninstallFilter.js';
39
41
  * onLogs: (logs) => console.log(logs),
40
42
  * })
41
43
  */
42
- export function watchEvent(client, { address, args, batch = true, event, events, onError, onLogs, pollingInterval = client.pollingInterval, strict: strict_, }) {
43
- const observerId = stringify([
44
- 'watchEvent',
45
- address,
46
- args,
47
- batch,
48
- client.uid,
49
- event,
50
- pollingInterval,
51
- ]);
44
+ export function watchEvent(client, { address, args, batch = true, event, events, onError, onLogs, poll: poll_, pollingInterval = client.pollingInterval, strict: strict_, }) {
45
+ const enablePolling = typeof poll_ !== 'undefined' ? poll_ : client.transport.type !== 'webSocket';
52
46
  const strict = strict_ ?? false;
53
- return observe(observerId, { onLogs, onError }, (emit) => {
54
- let previousBlockNumber;
55
- let filter;
56
- let initialized = false;
57
- const unwatch = poll(async () => {
58
- if (!initialized) {
59
- try {
60
- filter = (await createEventFilter(client, {
61
- address,
62
- args,
63
- event: event,
64
- events,
65
- strict,
66
- }));
67
- }
68
- catch { }
69
- initialized = true;
70
- return;
71
- }
72
- try {
73
- let logs;
74
- if (filter) {
75
- logs = await getFilterChanges(client, { filter });
76
- }
77
- else {
78
- // If the filter doesn't exist, we will fall back to use `getLogs`.
79
- // The fall back exists because some RPC Providers do not support filters.
80
- // Fetch the block number to use for `getLogs`.
81
- const blockNumber = await getBlockNumber(client);
82
- // If the block number has changed, we will need to fetch the logs.
83
- // If the block number doesn't exist, we are yet to reach the first poll interval,
84
- // so do not emit any logs.
85
- if (previousBlockNumber && previousBlockNumber !== blockNumber) {
86
- logs = await getLogs(client, {
47
+ const pollEvent = () => {
48
+ const observerId = stringify([
49
+ 'watchEvent',
50
+ address,
51
+ args,
52
+ batch,
53
+ client.uid,
54
+ event,
55
+ pollingInterval,
56
+ ]);
57
+ return observe(observerId, { onLogs, onError }, (emit) => {
58
+ let previousBlockNumber;
59
+ let filter;
60
+ let initialized = false;
61
+ const unwatch = poll(async () => {
62
+ if (!initialized) {
63
+ try {
64
+ filter = (await createEventFilter(client, {
87
65
  address,
88
66
  args,
89
67
  event: event,
90
68
  events,
91
- fromBlock: previousBlockNumber + 1n,
92
- toBlock: blockNumber,
93
- });
69
+ strict,
70
+ }));
71
+ }
72
+ catch { }
73
+ initialized = true;
74
+ return;
75
+ }
76
+ try {
77
+ let logs;
78
+ if (filter) {
79
+ logs = await getFilterChanges(client, { filter });
94
80
  }
95
81
  else {
96
- logs = [];
82
+ // If the filter doesn't exist, we will fall back to use `getLogs`.
83
+ // The fall back exists because some RPC Providers do not support filters.
84
+ // Fetch the block number to use for `getLogs`.
85
+ const blockNumber = await getBlockNumber(client);
86
+ // If the block number has changed, we will need to fetch the logs.
87
+ // If the block number doesn't exist, we are yet to reach the first poll interval,
88
+ // so do not emit any logs.
89
+ if (previousBlockNumber && previousBlockNumber !== blockNumber) {
90
+ logs = await getLogs(client, {
91
+ address,
92
+ args,
93
+ event: event,
94
+ events,
95
+ fromBlock: previousBlockNumber + 1n,
96
+ toBlock: blockNumber,
97
+ });
98
+ }
99
+ else {
100
+ logs = [];
101
+ }
102
+ previousBlockNumber = blockNumber;
97
103
  }
98
- previousBlockNumber = blockNumber;
104
+ if (logs.length === 0)
105
+ return;
106
+ if (batch)
107
+ emit.onLogs(logs);
108
+ else
109
+ logs.forEach((log) => emit.onLogs([log]));
99
110
  }
100
- if (logs.length === 0)
101
- return;
102
- if (batch)
103
- emit.onLogs(logs);
104
- else
105
- logs.forEach((log) => emit.onLogs([log]));
111
+ catch (err) {
112
+ // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.
113
+ // Reinitalize the filter when this occurs
114
+ if (filter && err instanceof InvalidInputRpcError)
115
+ initialized = false;
116
+ emit.onError?.(err);
117
+ }
118
+ }, {
119
+ emitOnBegin: true,
120
+ interval: pollingInterval,
121
+ });
122
+ return async () => {
123
+ if (filter)
124
+ await uninstallFilter(client, { filter });
125
+ unwatch();
126
+ };
127
+ });
128
+ };
129
+ const subscribeEvent = () => {
130
+ let active = true;
131
+ let unsubscribe = () => (active = false);
132
+ (async () => {
133
+ try {
134
+ const events_ = events ?? (event ? [event] : undefined);
135
+ let topics = [];
136
+ if (events_) {
137
+ topics = [
138
+ events_.flatMap((event) => encodeEventTopics({
139
+ abi: [event],
140
+ eventName: event.name,
141
+ args,
142
+ })),
143
+ ];
144
+ if (event)
145
+ topics = topics[0];
146
+ }
147
+ const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({
148
+ params: ['logs', { address, topics }],
149
+ onData(data) {
150
+ if (!active)
151
+ return;
152
+ const log = data.result;
153
+ try {
154
+ const { eventName, args } = decodeEventLog({
155
+ abi: events_,
156
+ data: log.data,
157
+ topics: log.topics,
158
+ strict,
159
+ });
160
+ const formatted = formatLog(log, {
161
+ args,
162
+ eventName: eventName,
163
+ });
164
+ onLogs([formatted]);
165
+ }
166
+ catch (err) {
167
+ let eventName;
168
+ let isUnnamed;
169
+ if (err instanceof DecodeLogDataMismatch ||
170
+ err instanceof DecodeLogTopicsMismatch) {
171
+ // If strict mode is on, and log data/topics do not match event definition, skip.
172
+ if (strict_)
173
+ return;
174
+ eventName = err.abiItem.name;
175
+ isUnnamed = err.abiItem.inputs?.some((x) => !('name' in x && x.name));
176
+ }
177
+ // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).
178
+ const formatted = formatLog(log, {
179
+ args: isUnnamed ? [] : {},
180
+ eventName,
181
+ });
182
+ onLogs([formatted]);
183
+ }
184
+ },
185
+ onError(error) {
186
+ onError?.(error);
187
+ },
188
+ });
189
+ unsubscribe = unsubscribe_;
190
+ if (!active)
191
+ unsubscribe();
106
192
  }
107
193
  catch (err) {
108
- // If a filter has been set and gets uninstalled, providers will throw an InvalidInput error.
109
- // Reinitalize the filter when this occurs
110
- if (filter && err instanceof InvalidInputRpcError)
111
- initialized = false;
112
- emit.onError?.(err);
194
+ onError?.(err);
113
195
  }
114
- }, {
115
- emitOnBegin: true,
116
- interval: pollingInterval,
117
- });
118
- return async () => {
119
- if (filter)
120
- await uninstallFilter(client, { filter });
121
- unwatch();
122
- };
123
- });
196
+ })();
197
+ return unsubscribe;
198
+ };
199
+ return enablePolling ? pollEvent() : subscribeEvent();
124
200
  }
125
201
  //# sourceMappingURL=watchEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watchEvent.js","sourceRoot":"","sources":["../../../../src/actions/public/watchEvent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watchEvent.js","sourceRoot":"","sources":["../../../../src/actions/public/watchEvent.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,SAAS,GACV,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,iBAAiB,GAClB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAA0B,OAAO,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAuGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,UAAU,CAUxB,MAAiC,EACjC,EACE,OAAO,EACP,IAAI,EACJ,KAAK,GAAG,IAAI,EACZ,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,IAAI,EAAE,KAAK,EACX,eAAe,GAAG,MAAM,CAAC,eAAe,EACxC,MAAM,EAAE,OAAO,GACsC;IAEvD,MAAM,aAAa,GACjB,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,CAAA;IAC9E,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,CAAA;IAE/B,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,UAAU,GAAG,SAAS,CAAC;YAC3B,YAAY;YACZ,OAAO;YACP,IAAI;YACJ,KAAK;YACL,MAAM,CAAC,GAAG;YACV,KAAK;YACL,eAAe;SAChB,CAAC,CAAA;QAEF,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;YACvD,IAAI,mBAA2B,CAAA;YAC/B,IAAI,MAAoD,CAAA;YACxD,IAAI,WAAW,GAAG,KAAK,CAAA;YAEvB,MAAM,OAAO,GAAG,IAAI,CAClB,KAAK,IAAI,EAAE;gBACT,IAAI,CAAC,WAAW,EAAE;oBAChB,IAAI;wBACF,MAAM,GAAG,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE;4BACxC,OAAO;4BACP,IAAI;4BACJ,KAAK,EAAE,KAAM;4BACb,MAAM;4BACN,MAAM;yBACmC,CAAC,CAI3C,CAAA;qBACF;oBAAC,MAAM,GAAE;oBACV,WAAW,GAAG,IAAI,CAAA;oBAClB,OAAM;iBACP;gBAED,IAAI;oBACF,IAAI,IAAW,CAAA;oBACf,IAAI,MAAM,EAAE;wBACV,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;qBAClD;yBAAM;wBACL,mEAAmE;wBACnE,0EAA0E;wBAE1E,+CAA+C;wBAC/C,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAA;wBAEhD,mEAAmE;wBACnE,kFAAkF;wBAClF,2BAA2B;wBAC3B,IAAI,mBAAmB,IAAI,mBAAmB,KAAK,WAAW,EAAE;4BAC9D,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE;gCAC3B,OAAO;gCACP,IAAI;gCACJ,KAAK,EAAE,KAAM;gCACb,MAAM;gCACN,SAAS,EAAE,mBAAmB,GAAG,EAAE;gCACnC,OAAO,EAAE,WAAW;6BACW,CAAC,CAAA;yBACnC;6BAAM;4BACL,IAAI,GAAG,EAAE,CAAA;yBACV;wBACD,mBAAmB,GAAG,WAAW,CAAA;qBAClC;oBAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAM;oBAC7B,IAAI,KAAK;wBAAE,IAAI,CAAC,MAAM,CAAC,IAAW,CAAC,CAAA;;wBAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAQ,CAAC,CAAC,CAAA;iBACtD;gBAAC,OAAO,GAAG,EAAE;oBACZ,6FAA6F;oBAC7F,0CAA0C;oBAC1C,IAAI,MAAM,IAAI,GAAG,YAAY,oBAAoB;wBAC/C,WAAW,GAAG,KAAK,CAAA;oBACrB,IAAI,CAAC,OAAO,EAAE,CAAC,GAAY,CAAC,CAAA;iBAC7B;YACH,CAAC,EACD;gBACE,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,eAAe;aAC1B,CACF,CAAA;YAED,OAAO,KAAK,IAAI,EAAE;gBAChB,IAAI,MAAM;oBAAE,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBACrD,OAAO,EAAE,CAAA;YACX,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CACvC;QAAA,CAAC,KAAK,IAAI,EAAE;YACX,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;gBACvD,IAAI,MAAM,GAAe,EAAE,CAAA;gBAC3B,IAAI,OAAO,EAAE;oBACX,MAAM,GAAG;wBACN,OAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACxC,iBAAiB,CAAC;4BAChB,GAAG,EAAE,CAAC,KAAK,CAAC;4BACZ,SAAS,EAAG,KAAkB,CAAC,IAAI;4BACnC,IAAI;yBAC0B,CAAC,CAClC;qBACF,CAAA;oBACD,IAAI,KAAK;wBAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAe,CAAA;iBAC5C;gBAED,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;oBACrE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;oBACrC,MAAM,CAAC,IAAS;wBACd,IAAI,CAAC,MAAM;4BAAE,OAAM;wBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;wBACvB,IAAI;4BACF,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC;gCACzC,GAAG,EAAE,OAAc;gCACnB,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,MAAM,EAAE,GAAG,CAAC,MAAa;gCACzB,MAAM;6BACP,CAAC,CAAA;4BACF,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE;gCAC/B,IAAI;gCACJ,SAAS,EAAE,SAAmB;6BAC/B,CAAC,CAAA;4BACF,MAAM,CAAC,CAAC,SAAS,CAAQ,CAAC,CAAA;yBAC3B;wBAAC,OAAO,GAAG,EAAE;4BACZ,IAAI,SAAS,CAAA;4BACb,IAAI,SAAS,CAAA;4BACb,IACE,GAAG,YAAY,qBAAqB;gCACpC,GAAG,YAAY,uBAAuB,EACtC;gCACA,iFAAiF;gCACjF,IAAI,OAAO;oCAAE,OAAM;gCACnB,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAA;gCAC5B,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAChC,CAAA;6BACF;4BAED,8FAA8F;4BAC9F,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE;gCAC/B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gCACzB,SAAS;6BACV,CAAC,CAAA;4BACF,MAAM,CAAC,CAAC,SAAS,CAAQ,CAAC,CAAA;yBAC3B;oBACH,CAAC;oBACD,OAAO,CAAC,KAAY;wBAClB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;oBAClB,CAAC;iBACF,CAAC,CAAA;gBACF,WAAW,GAAG,YAAY,CAAA;gBAC1B,IAAI,CAAC,MAAM;oBAAE,WAAW,EAAE,CAAA;aAC3B;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,EAAE,CAAC,GAAY,CAAC,CAAA;aACxB;QACH,CAAC,CAAC,EAAE,CAAA;QACJ,OAAO,WAAW,CAAA;IACpB,CAAC,CAAA;IAED,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAA;AACvD,CAAC"}
@@ -1,2 +1,2 @@
1
- export const version = '0.0.0-main.20230810T045448';
1
+ export const version = '0.0.0-main.20230810T045918';
2
2
  //# sourceMappingURL=version.js.map
@@ -4,6 +4,19 @@ import type { Transport } from '../../clients/transports/createTransport.js';
4
4
  import type { Chain } from '../../types/chain.js';
5
5
  import type { GetEventArgs, InferEventName } from '../../types/contract.js';
6
6
  import type { Log } from '../../types/log.js';
7
+ import type { GetTransportConfig } from '../../types/transport.js';
8
+ type PollOptions = {
9
+ /**
10
+ * Whether or not the transaction hashes should be batched on each invocation.
11
+ * @default true
12
+ */
13
+ batch?: boolean;
14
+ /**
15
+ * Polling frequency (in ms). Defaults to Client's pollingInterval config.
16
+ * @default client.pollingInterval
17
+ */
18
+ pollingInterval?: number;
19
+ };
7
20
  export type WatchContractEventOnLogsParameter<TAbi extends Abi | readonly unknown[] = readonly unknown[], TEventName extends string = string, TStrict extends boolean | undefined = undefined> = TAbi extends Abi ? Log<bigint, number, false, ExtractAbiEvent<TAbi, TEventName>, TStrict>[] : Log[];
8
21
  export type WatchContractEventOnLogsFn<TAbi extends Abi | readonly unknown[] = readonly unknown[], TEventName extends string = string, TStrict extends boolean | undefined = undefined> = (logs: WatchContractEventOnLogsParameter<TAbi, TEventName, TStrict>) => void;
9
22
  export type WatchContractEventParameters<TAbi extends Abi | readonly unknown[] = readonly unknown[], TEventName extends string = string, TStrict extends boolean | undefined = undefined> = {
@@ -12,22 +25,34 @@ export type WatchContractEventParameters<TAbi extends Abi | readonly unknown[] =
12
25
  /** Contract ABI. */
13
26
  abi: Narrow<TAbi>;
14
27
  args?: GetEventArgs<TAbi, TEventName>;
15
- /** Whether or not the event logs should be batched on each invocation. */
16
- batch?: boolean;
17
28
  /** Contract event. */
18
29
  eventName?: InferEventName<TAbi, TEventName>;
19
30
  /** The callback to call when an error occurred when trying to get for a new block. */
20
31
  onError?: (error: Error) => void;
21
32
  /** The callback to call when new event logs are received. */
22
33
  onLogs: WatchContractEventOnLogsFn<TAbi, TEventName, TStrict>;
23
- /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */
24
- pollingInterval?: number;
25
34
  /**
26
35
  * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
27
36
  * @default false
28
37
  */
29
38
  strict?: TStrict;
30
- };
39
+ } & (GetTransportConfig<Transport>['type'] extends 'webSocket' ? {
40
+ batch?: never;
41
+ /**
42
+ * Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`.
43
+ * @default false
44
+ */
45
+ poll?: false;
46
+ pollingInterval?: never;
47
+ } | (PollOptions & {
48
+ /**
49
+ * Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`.
50
+ * @default true
51
+ */
52
+ poll?: true;
53
+ }) : PollOptions & {
54
+ poll?: true;
55
+ });
31
56
  export type WatchContractEventReturnType = () => void;
32
57
  /**
33
58
  * Watches and returns emitted contract event logs.
@@ -59,5 +84,6 @@ export type WatchContractEventReturnType = () => void;
59
84
  * onLogs: (logs) => console.log(logs),
60
85
  * })
61
86
  */
62
- export declare function watchContractEvent<TChain extends Chain | undefined, TAbi extends Abi | readonly unknown[], TEventName extends string, TStrict extends boolean | undefined = undefined>(client: Client<Transport, TChain>, { abi, address, args, batch, eventName, onError, onLogs, pollingInterval, strict: strict_, }: WatchContractEventParameters<TAbi, TEventName, TStrict>): WatchContractEventReturnType;
87
+ export declare function watchContractEvent<TChain extends Chain | undefined, TAbi extends Abi | readonly unknown[], TEventName extends string, TStrict extends boolean | undefined = undefined>(client: Client<Transport, TChain>, { abi, address, args, batch, eventName, onError, onLogs, poll: poll_, pollingInterval, strict: strict_, }: WatchContractEventParameters<TAbi, TEventName, TStrict>): WatchContractEventReturnType;
88
+ export {};
63
89
  //# sourceMappingURL=watchContractEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watchContractEvent.d.ts","sourceRoot":"","sources":["../../../../src/actions/public/watchContractEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAY,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAE9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE3E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAmB7C,MAAM,MAAM,iCAAiC,CAC3C,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,EAC1D,UAAU,SAAS,MAAM,GAAG,MAAM,EAClC,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,IAC7C,IAAI,SAAS,GAAG,GAChB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,GACxE,GAAG,EAAE,CAAA;AACT,MAAM,MAAM,0BAA0B,CACpC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,EAC1D,UAAU,SAAS,MAAM,GAAG,MAAM,EAClC,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,IAC7C,CAAC,IAAI,EAAE,iCAAiC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAEhF,MAAM,MAAM,4BAA4B,CACtC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,EAC1D,UAAU,SAAS,MAAM,GAAG,MAAM,EAClC,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,IAC7C;IACF,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAAA;IAC7B,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACjB,IAAI,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACrC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,sBAAsB;IACtB,SAAS,CAAC,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC5C,sFAAsF;IACtF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,6DAA6D;IAC7D,MAAM,EAAE,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAC7D,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG,MAAM,IAAI,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,SAAS,KAAK,GAAG,SAAS,EAChC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACrC,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAE/C,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EACjC,EACE,GAAG,EACH,OAAO,EACP,IAAI,EACJ,KAAY,EACZ,SAAS,EACT,OAAO,EACP,MAAM,EACN,eAAwC,EACxC,MAAM,EAAE,OAAO,GAChB,EAAE,4BAA4B,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,GACzD,4BAA4B,CAyF9B"}
1
+ {"version":3,"file":"watchContractEvent.d.ts","sourceRoot":"","sources":["../../../../src/actions/public/watchContractEvent.ts"],"names":[],"mappings":"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"}