@apibara/starknet 2.1.0-beta.4 → 2.1.0-beta.41

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/src/filter.ts CHANGED
@@ -1,7 +1,14 @@
1
- import { Schema } from "@effect/schema";
2
-
3
- import { FieldElement, FieldElementProto } from "./common";
4
- import { tag } from "./helpers";
1
+ import {
2
+ ArrayCodec,
3
+ BooleanCodec,
4
+ type Codec,
5
+ type CodecType,
6
+ MessageCodec,
7
+ NumberCodec,
8
+ OneOfCodec,
9
+ OptionalCodec,
10
+ } from "@apibara/protocol/codec";
11
+ import { FieldElement } from "./common";
5
12
  import * as proto from "./proto";
6
13
 
7
14
  /** Header options.
@@ -10,90 +17,87 @@ import * as proto from "./proto";
10
17
  * - `on_data`: receive headers only if any other filter matches.
11
18
  * - `on_data_or_on_new_block`: receive headers only if any other filter matches and for "live" blocks.
12
19
  */
13
- export const HeaderFilter = Schema.transform(
14
- Schema.Enums(proto.filter.HeaderFilter),
15
- Schema.Literal("always", "on_data", "on_data_or_on_new_block", "unknown"),
16
- {
17
- decode(value) {
18
- const enumMap = {
19
- [proto.filter.HeaderFilter.ALWAYS]: "always",
20
- [proto.filter.HeaderFilter.ON_DATA]: "on_data",
21
- [proto.filter.HeaderFilter.ON_DATA_OR_ON_NEW_BLOCK]:
22
- "on_data_or_on_new_block",
23
- [proto.filter.HeaderFilter.UNSPECIFIED]: "unknown",
24
- [proto.filter.HeaderFilter.UNRECOGNIZED]: "unknown",
25
- } as const;
26
- return enumMap[value] ?? "unknown";
27
- },
28
- encode(value) {
29
- switch (value) {
30
- case "always":
31
- return proto.filter.HeaderFilter.ALWAYS;
32
- case "on_data":
33
- return proto.filter.HeaderFilter.ON_DATA;
34
- case "on_data_or_on_new_block":
35
- return proto.filter.HeaderFilter.ON_DATA_OR_ON_NEW_BLOCK;
36
- default:
37
- return proto.filter.HeaderFilter.UNSPECIFIED;
38
- }
39
- },
20
+ export const HeaderFilter: Codec<
21
+ "always" | "on_data" | "on_data_or_on_new_block" | "unknown",
22
+ proto.filter.HeaderFilter
23
+ > = {
24
+ encode(x) {
25
+ switch (x) {
26
+ case "always":
27
+ return proto.filter.HeaderFilter.ALWAYS;
28
+ case "on_data":
29
+ return proto.filter.HeaderFilter.ON_DATA;
30
+ case "on_data_or_on_new_block":
31
+ return proto.filter.HeaderFilter.ON_DATA_OR_ON_NEW_BLOCK;
32
+ default:
33
+ return proto.filter.HeaderFilter.UNSPECIFIED;
34
+ }
35
+ },
36
+ decode(p) {
37
+ const enumMap = {
38
+ [proto.filter.HeaderFilter.ALWAYS]: "always",
39
+ [proto.filter.HeaderFilter.ON_DATA]: "on_data",
40
+ [proto.filter.HeaderFilter.ON_DATA_OR_ON_NEW_BLOCK]:
41
+ "on_data_or_on_new_block",
42
+ [proto.filter.HeaderFilter.UNSPECIFIED]: "unknown",
43
+ [proto.filter.HeaderFilter.UNRECOGNIZED]: "unknown",
44
+ } as const;
45
+ return enumMap[p] ?? "unknown";
40
46
  },
41
- );
47
+ };
42
48
 
43
- export type HeaderFilter = typeof HeaderFilter.Type;
49
+ export type HeaderFilter = CodecType<typeof HeaderFilter>;
44
50
 
45
51
  /** An event key filter. Use `null` to match any event key. */
46
- export const Key = Schema.transform(
47
- Schema.Struct({ value: Schema.UndefinedOr(FieldElementProto) }),
48
- Schema.NullOr(FieldElement),
49
- {
50
- decode({ value }) {
51
- if (value === undefined) {
52
- return null;
53
- }
54
- return value;
55
- },
56
- encode(value) {
57
- if (value === null) {
58
- return { value: undefined };
59
- }
60
- return { value };
61
- },
52
+ export const Key: Codec<
53
+ FieldElement | null,
54
+ { value?: proto.common.FieldElement | undefined }
55
+ > = {
56
+ encode(x) {
57
+ if (x === null) {
58
+ return { value: undefined };
59
+ }
60
+ return { value: FieldElement.encode(x) };
61
+ },
62
+ decode(p) {
63
+ if (p.value === undefined) {
64
+ return null;
65
+ }
66
+ return FieldElement.decode(p.value);
62
67
  },
63
- );
64
-
65
- export type Key = typeof Key.Type;
66
-
67
- export const TransactionStatusFilter = Schema.transform(
68
- Schema.Enums(proto.filter.TransactionStatusFilter),
69
- Schema.Literal("succeeded", "reverted", "all", "unknown"),
70
- {
71
- decode(value) {
72
- const enumMap = {
73
- [proto.filter.TransactionStatusFilter.SUCCEEDED]: "succeeded",
74
- [proto.filter.TransactionStatusFilter.REVERTED]: "reverted",
75
- [proto.filter.TransactionStatusFilter.ALL]: "all",
76
- [proto.filter.TransactionStatusFilter.UNSPECIFIED]: "unknown",
77
- [proto.filter.TransactionStatusFilter.UNRECOGNIZED]: "unknown",
78
- } as const;
79
- return enumMap[value] ?? "unknown";
80
- },
81
- encode(value) {
82
- switch (value) {
83
- case "succeeded":
84
- return proto.filter.TransactionStatusFilter.SUCCEEDED;
85
- case "reverted":
86
- return proto.filter.TransactionStatusFilter.REVERTED;
87
- case "all":
88
- return proto.filter.TransactionStatusFilter.ALL;
89
- default:
90
- return proto.filter.TransactionStatusFilter.UNSPECIFIED;
91
- }
92
- },
68
+ };
69
+
70
+ export type Key = CodecType<typeof Key>;
71
+
72
+ export const TransactionStatusFilter: Codec<
73
+ "succeeded" | "reverted" | "all" | "unknown",
74
+ proto.filter.TransactionStatusFilter
75
+ > = {
76
+ encode(x) {
77
+ switch (x) {
78
+ case "succeeded":
79
+ return proto.filter.TransactionStatusFilter.SUCCEEDED;
80
+ case "reverted":
81
+ return proto.filter.TransactionStatusFilter.REVERTED;
82
+ case "all":
83
+ return proto.filter.TransactionStatusFilter.ALL;
84
+ default:
85
+ return proto.filter.TransactionStatusFilter.UNSPECIFIED;
86
+ }
93
87
  },
94
- );
88
+ decode(p) {
89
+ const enumMap = {
90
+ [proto.filter.TransactionStatusFilter.SUCCEEDED]: "succeeded",
91
+ [proto.filter.TransactionStatusFilter.REVERTED]: "reverted",
92
+ [proto.filter.TransactionStatusFilter.ALL]: "all",
93
+ [proto.filter.TransactionStatusFilter.UNSPECIFIED]: "unknown",
94
+ [proto.filter.TransactionStatusFilter.UNRECOGNIZED]: "unknown",
95
+ } as const;
96
+ return enumMap[p] ?? "unknown";
97
+ },
98
+ };
95
99
 
96
- export type TransactionStatusFilter = typeof TransactionStatusFilter.Type;
100
+ export type TransactionStatusFilter = CodecType<typeof TransactionStatusFilter>;
97
101
 
98
102
  /** Filter events.
99
103
  *
@@ -106,20 +110,22 @@ export type TransactionStatusFilter = typeof TransactionStatusFilter.Type;
106
110
  * @prop includeReceipt Include the transaction receipt.
107
111
  * @prop includeMessages Include the messages that were sent to L1 in the same transaction.
108
112
  * @prop includeSiblings Include the sibling events of the matched events.
113
+ * @prop includeTransactionTrace Include the trace of the transaction that emitted the event.
109
114
  */
110
- export const EventFilter = Schema.Struct({
111
- id: Schema.optional(Schema.Number),
112
- address: Schema.optional(FieldElement),
113
- keys: Schema.optional(Schema.Array(Key)),
114
- strict: Schema.optional(Schema.Boolean),
115
- transactionStatus: Schema.optional(TransactionStatusFilter),
116
- includeTransaction: Schema.optional(Schema.Boolean),
117
- includeReceipt: Schema.optional(Schema.Boolean),
118
- includeMessages: Schema.optional(Schema.Boolean),
119
- includeSiblings: Schema.optional(Schema.Boolean),
115
+ export const EventFilter = MessageCodec({
116
+ id: OptionalCodec(NumberCodec),
117
+ address: OptionalCodec(FieldElement),
118
+ keys: OptionalCodec(ArrayCodec(Key)),
119
+ strict: OptionalCodec(BooleanCodec),
120
+ transactionStatus: OptionalCodec(TransactionStatusFilter),
121
+ includeTransaction: OptionalCodec(BooleanCodec),
122
+ includeReceipt: OptionalCodec(BooleanCodec),
123
+ includeMessages: OptionalCodec(BooleanCodec),
124
+ includeSiblings: OptionalCodec(BooleanCodec),
125
+ includeTransactionTrace: OptionalCodec(BooleanCodec),
120
126
  });
121
127
 
122
- export type EventFilter = typeof EventFilter.Type;
128
+ export type EventFilter = Readonly<CodecType<typeof EventFilter>>;
123
129
 
124
130
  /** Filter messages to L1.
125
131
  *
@@ -129,73 +135,76 @@ export type EventFilter = typeof EventFilter.Type;
129
135
  * @prop includeTransaction Include the transaction that sent the message.
130
136
  * @prop includeReceipt Include the transaction receipt.
131
137
  * @prop includeEvents Include events from the same transaction.
138
+ * @prop includeTransactionTrace Include the trace of the transaction that sent the message.
132
139
  */
133
- export const MessageToL1Filter = Schema.Struct({
134
- id: Schema.optional(Schema.Number),
135
- fromAddress: Schema.optional(FieldElement),
136
- toAddress: Schema.optional(FieldElement),
137
- transactionStatus: Schema.optional(TransactionStatusFilter),
138
- includeTransaction: Schema.optional(Schema.Boolean),
139
- includeReceipt: Schema.optional(Schema.Boolean),
140
- includeEvents: Schema.optional(Schema.Boolean),
141
- });
142
-
143
- export type MessageToL1Filter = typeof MessageToL1Filter.Type;
144
-
145
- export const InvokeTransactionV0Filter = Schema.Struct({
146
- _tag: tag("invokeV0"),
147
- invokeV0: Schema.Struct({}),
140
+ export const MessageToL1Filter = MessageCodec({
141
+ id: OptionalCodec(NumberCodec),
142
+ fromAddress: OptionalCodec(FieldElement),
143
+ toAddress: OptionalCodec(FieldElement),
144
+ transactionStatus: OptionalCodec(TransactionStatusFilter),
145
+ includeTransaction: OptionalCodec(BooleanCodec),
146
+ includeReceipt: OptionalCodec(BooleanCodec),
147
+ includeEvents: OptionalCodec(BooleanCodec),
148
+ includeTransactionTrace: OptionalCodec(BooleanCodec),
148
149
  });
149
150
 
150
- export const InvokeTransactionV1Filter = Schema.Struct({
151
- _tag: tag("invokeV1"),
152
- invokeV1: Schema.Struct({}),
153
- });
154
-
155
- export const InvokeTransactionV3Filter = Schema.Struct({
156
- _tag: tag("invokeV3"),
157
- invokeV3: Schema.Struct({}),
158
- });
159
-
160
- export const DeployTransactionFilter = Schema.Struct({
161
- _tag: tag("deploy"),
162
- deploy: Schema.Struct({}),
163
- });
164
-
165
- export const DeclareV0TransactionFilter = Schema.Struct({
166
- _tag: tag("declareV0"),
167
- declareV0: Schema.Struct({}),
168
- });
169
-
170
- export const DeclareV1TransactionFilter = Schema.Struct({
171
- _tag: tag("declareV1"),
172
- declareV1: Schema.Struct({}),
173
- });
174
-
175
- export const DeclareV2TransactionFilter = Schema.Struct({
176
- _tag: tag("declareV2"),
177
- declareV2: Schema.Struct({}),
178
- });
179
-
180
- export const DeclareV3TransactionFilter = Schema.Struct({
181
- _tag: tag("declareV3"),
182
- declareV3: Schema.Struct({}),
183
- });
184
-
185
- export const L1HandlerTransactionFilter = Schema.Struct({
186
- _tag: tag("l1Handler"),
187
- l1Handler: Schema.Struct({}),
188
- });
189
-
190
- export const DeployAccountV1TransactionFilter = Schema.Struct({
191
- _tag: tag("deployAccountV1"),
192
- deployAccountV1: Schema.Struct({}),
193
- });
194
-
195
- export const DeployAccountV3TransactionFilter = Schema.Struct({
196
- _tag: tag("deployAccountV3"),
197
- deployAccountV3: Schema.Struct({}),
198
- });
151
+ export type MessageToL1Filter = Readonly<CodecType<typeof MessageToL1Filter>>;
152
+
153
+ // Transaction type filters
154
+ export const InvokeTransactionV0Filter = MessageCodec({});
155
+ export type InvokeTransactionV0Filter = Readonly<
156
+ CodecType<typeof InvokeTransactionV0Filter>
157
+ >;
158
+
159
+ export const InvokeTransactionV1Filter = MessageCodec({});
160
+ export type InvokeTransactionV1Filter = Readonly<
161
+ CodecType<typeof InvokeTransactionV1Filter>
162
+ >;
163
+
164
+ export const InvokeTransactionV3Filter = MessageCodec({});
165
+ export type InvokeTransactionV3Filter = Readonly<
166
+ CodecType<typeof InvokeTransactionV3Filter>
167
+ >;
168
+
169
+ export const DeployTransactionFilter = MessageCodec({});
170
+ export type DeployTransactionFilter = Readonly<
171
+ CodecType<typeof DeployTransactionFilter>
172
+ >;
173
+
174
+ export const DeclareV0TransactionFilter = MessageCodec({});
175
+ export type DeclareV0TransactionFilter = Readonly<
176
+ CodecType<typeof DeclareV0TransactionFilter>
177
+ >;
178
+
179
+ export const DeclareV1TransactionFilter = MessageCodec({});
180
+ export type DeclareV1TransactionFilter = Readonly<
181
+ CodecType<typeof DeclareV1TransactionFilter>
182
+ >;
183
+
184
+ export const DeclareV2TransactionFilter = MessageCodec({});
185
+ export type DeclareV2TransactionFilter = Readonly<
186
+ CodecType<typeof DeclareV2TransactionFilter>
187
+ >;
188
+
189
+ export const DeclareV3TransactionFilter = MessageCodec({});
190
+ export type DeclareV3TransactionFilter = Readonly<
191
+ CodecType<typeof DeclareV3TransactionFilter>
192
+ >;
193
+
194
+ export const L1HandlerTransactionFilter = MessageCodec({});
195
+ export type L1HandlerTransactionFilter = Readonly<
196
+ CodecType<typeof L1HandlerTransactionFilter>
197
+ >;
198
+
199
+ export const DeployAccountV1TransactionFilter = MessageCodec({});
200
+ export type DeployAccountV1TransactionFilter = Readonly<
201
+ CodecType<typeof DeployAccountV1TransactionFilter>
202
+ >;
203
+
204
+ export const DeployAccountV3TransactionFilter = MessageCodec({});
205
+ export type DeployAccountV3TransactionFilter = Readonly<
206
+ CodecType<typeof DeployAccountV3TransactionFilter>
207
+ >;
199
208
 
200
209
  /** Filter transactions.
201
210
  *
@@ -203,118 +212,110 @@ export const DeployAccountV3TransactionFilter = Schema.Struct({
203
212
  * @prop includeReceipt Include the transaction receipt.
204
213
  * @prop includeEvents Include events from the same transaction.
205
214
  * @prop includeMessages Include messages sent in the transaction.
215
+ * @prop includeTrace Include the transaction's trace.
206
216
  */
207
- export const TransactionFilter = Schema.Struct({
208
- id: Schema.optional(Schema.Number),
209
- transactionStatus: Schema.optional(TransactionStatusFilter),
210
- includeReceipt: Schema.optional(Schema.Boolean),
211
- includeMessages: Schema.optional(Schema.Boolean),
212
- includeEvents: Schema.optional(Schema.Boolean),
213
- transactionType: Schema.optional(
214
- Schema.Union(
215
- InvokeTransactionV0Filter,
216
- InvokeTransactionV1Filter,
217
- InvokeTransactionV3Filter,
218
- DeployTransactionFilter,
219
- DeclareV0TransactionFilter,
220
- DeclareV1TransactionFilter,
221
- DeclareV2TransactionFilter,
222
- DeclareV3TransactionFilter,
223
- DeclareV3TransactionFilter,
224
- L1HandlerTransactionFilter,
225
- DeployAccountV1TransactionFilter,
226
- DeployAccountV3TransactionFilter,
227
- ),
217
+ export const TransactionFilter = MessageCodec({
218
+ id: OptionalCodec(NumberCodec),
219
+ transactionStatus: OptionalCodec(TransactionStatusFilter),
220
+ includeReceipt: OptionalCodec(BooleanCodec),
221
+ includeMessages: OptionalCodec(BooleanCodec),
222
+ includeEvents: OptionalCodec(BooleanCodec),
223
+ includeTrace: OptionalCodec(BooleanCodec),
224
+ transactionType: OptionalCodec(
225
+ OneOfCodec({
226
+ invokeV0: InvokeTransactionV0Filter,
227
+ invokeV1: InvokeTransactionV1Filter,
228
+ invokeV3: InvokeTransactionV3Filter,
229
+ deploy: DeployTransactionFilter,
230
+ declareV0: DeclareV0TransactionFilter,
231
+ declareV1: DeclareV1TransactionFilter,
232
+ declareV2: DeclareV2TransactionFilter,
233
+ declareV3: DeclareV3TransactionFilter,
234
+ l1Handler: L1HandlerTransactionFilter,
235
+ deployAccountV1: DeployAccountV1TransactionFilter,
236
+ deployAccountV3: DeployAccountV3TransactionFilter,
237
+ }),
228
238
  ),
229
239
  });
230
240
 
231
- export type TransactionFilter = typeof TransactionFilter.Type;
241
+ export type TransactionFilter = Readonly<CodecType<typeof TransactionFilter>>;
232
242
 
233
243
  /** Filter storage diffs.
234
244
  *
235
245
  * @prop contractAddress Filter by contract address.
236
246
  */
237
- export const StorageDiffFilter = Schema.Struct({
238
- id: Schema.optional(Schema.Number),
239
- contractAddress: Schema.optional(FieldElement),
247
+ export const StorageDiffFilter = MessageCodec({
248
+ id: OptionalCodec(NumberCodec),
249
+ contractAddress: OptionalCodec(FieldElement),
240
250
  });
241
251
 
242
- export type StorageDiffFilter = typeof StorageDiffFilter.Type;
252
+ export type StorageDiffFilter = Readonly<CodecType<typeof StorageDiffFilter>>;
243
253
 
244
254
  /** Filter declared classes. */
245
- export const DeclaredClassFilter = Schema.Struct({
246
- _tag: tag("declaredClass"),
247
- declaredClass: Schema.Struct({}),
248
- });
249
-
250
- export type DeclaredClassFilter = typeof DeclaredClassFilter.Type;
255
+ export const DeclaredClassFilter = MessageCodec({});
256
+ export type DeclaredClassFilter = Readonly<
257
+ CodecType<typeof DeclaredClassFilter>
258
+ >;
251
259
 
252
- export const ReplacedClassFilter = Schema.Struct({
253
- _tag: tag("replacedClass"),
254
- replacedClass: Schema.Struct({}),
255
- });
256
-
257
- export type ReplacedClassFilter = typeof ReplacedClassFilter.Type;
260
+ export const ReplacedClassFilter = MessageCodec({});
261
+ export type ReplacedClassFilter = Readonly<
262
+ CodecType<typeof ReplacedClassFilter>
263
+ >;
258
264
 
259
- export const DeployedContractFilter = Schema.Struct({
260
- _tag: tag("deployedContract"),
261
- deployedContract: Schema.Struct({}),
262
- });
263
-
264
- export type DeployedContractFilter = typeof DeployedContractFilter.Type;
265
+ export const DeployedContractFilter = MessageCodec({});
266
+ export type DeployedContractFilter = Readonly<
267
+ CodecType<typeof DeployedContractFilter>
268
+ >;
265
269
 
266
270
  /** Filter contract changes. */
267
- export const ContractChangeFilter = Schema.Struct({
268
- id: Schema.optional(Schema.Number),
269
- change: Schema.optional(
270
- Schema.Union(
271
- DeclaredClassFilter,
272
- ReplacedClassFilter,
273
- DeployedContractFilter,
274
- ),
271
+ export const ContractChangeFilter = MessageCodec({
272
+ id: OptionalCodec(NumberCodec),
273
+ change: OptionalCodec(
274
+ OneOfCodec({
275
+ declaredClass: DeclaredClassFilter,
276
+ replacedClass: ReplacedClassFilter,
277
+ deployedContract: DeployedContractFilter,
278
+ }),
275
279
  ),
276
280
  });
277
281
 
282
+ export type ContractChangeFilter = Readonly<
283
+ CodecType<typeof ContractChangeFilter>
284
+ >;
285
+
278
286
  /** Filter updates to nonces.
279
287
  *
280
288
  * @prop contractAddress Filter by contract address.
281
289
  */
282
- export const NonceUpdateFilter = Schema.Struct({
283
- id: Schema.optional(Schema.Number),
284
- contractAddress: Schema.optional(FieldElement),
290
+ export const NonceUpdateFilter = MessageCodec({
291
+ id: OptionalCodec(NumberCodec),
292
+ contractAddress: OptionalCodec(FieldElement),
285
293
  });
286
294
 
287
- export const Filter = Schema.Struct({
288
- header: Schema.optional(HeaderFilter),
289
- transactions: Schema.optional(Schema.Array(TransactionFilter)),
290
- events: Schema.optional(Schema.Array(EventFilter)),
291
- messages: Schema.optional(Schema.Array(MessageToL1Filter)),
292
- storageDiffs: Schema.optional(Schema.Array(StorageDiffFilter)),
293
- contractChanges: Schema.optional(Schema.Array(ContractChangeFilter)),
294
- nonceUpdates: Schema.optional(Schema.Array(NonceUpdateFilter)),
295
+ export type NonceUpdateFilter = Readonly<CodecType<typeof NonceUpdateFilter>>;
296
+
297
+ export const Filter = MessageCodec({
298
+ header: OptionalCodec(HeaderFilter),
299
+ transactions: OptionalCodec(ArrayCodec(TransactionFilter)),
300
+ events: OptionalCodec(ArrayCodec(EventFilter)),
301
+ messages: OptionalCodec(ArrayCodec(MessageToL1Filter)),
302
+ storageDiffs: OptionalCodec(ArrayCodec(StorageDiffFilter)),
303
+ contractChanges: OptionalCodec(ArrayCodec(ContractChangeFilter)),
304
+ nonceUpdates: OptionalCodec(ArrayCodec(NonceUpdateFilter)),
295
305
  });
296
306
 
297
- export type Filter = typeof Filter.Type;
298
-
299
- export const filterToProto = Schema.encodeSync(Filter);
300
- export const filterFromProto = Schema.decodeSync(Filter);
301
-
302
- export const FilterFromBytes = Schema.transform(
303
- Schema.Uint8ArrayFromSelf,
304
- Filter,
305
- {
306
- strict: false,
307
- decode(value) {
308
- return proto.filter.Filter.decode(value);
309
- },
310
- encode(value) {
311
- return proto.filter.Filter.encode(value).finish();
312
- },
313
- },
314
- );
307
+ export type Filter = Readonly<CodecType<typeof Filter>>;
315
308
 
316
- export const filterToBytes = Schema.encodeSync(FilterFromBytes);
317
- export const filterFromBytes = Schema.decodeSync(FilterFromBytes);
309
+ export const FilterFromBytes: Codec<Filter, Uint8Array> = {
310
+ encode(x) {
311
+ const filter = Filter.encode(x);
312
+ return proto.filter.Filter.encode(filter).finish();
313
+ },
314
+ decode(p) {
315
+ const filter = proto.filter.Filter.decode(p);
316
+ return Filter.decode(filter);
317
+ },
318
+ };
318
319
 
319
320
  export function mergeFilter(a: Filter, b: Filter): Filter {
320
321
  const header = mergeHeaderFilter(a.header, b.header);
package/src/index.ts CHANGED
@@ -15,6 +15,8 @@ export { getBigIntSelector, getEventSelector, getSelector } from "./abi";
15
15
 
16
16
  declare module "abi-wan-kanabi" {
17
17
  interface Config {
18
+ AddressType: `0x${string}`;
19
+ ClassHashType: `0x${string}`;
18
20
  FeltType: bigint;
19
21
  BigIntType: bigint;
20
22
  U256Type: bigint;
@@ -25,4 +27,5 @@ export const StarknetStream = new StreamConfig(
25
27
  FilterFromBytes,
26
28
  BlockFromBytes,
27
29
  mergeFilter,
30
+ "starknet",
28
31
  );