@apibara/indexer 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +2 -2
- package/dist/config.test-d.d.ts +1 -0
- package/dist/config.test-d.js +38 -0
- package/dist/config.test-d.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/sink/console.d.ts +1 -1
- package/dist/sink/console.test-d.d.ts +1 -0
- package/dist/sink/console.test-d.js +12 -0
- package/dist/sink/console.test-d.js.map +1 -0
- package/dist/sink/mongo.d.ts +3 -1
- package/dist/sink/parquet.d.ts +1 -1
- package/dist/sink/postgres.d.ts +1 -1
- package/dist/sink/webhook.d.ts +1 -1
- package/dist/starknet/block.d.ts +1 -1
- package/dist/starknet/felt.d.ts +3 -0
- package/dist/starknet/felt.js +12 -0
- package/dist/starknet/felt.js.map +1 -0
- package/dist/starknet/felt.test.d.ts +1 -0
- package/dist/starknet/felt.test.js +14 -0
- package/dist/starknet/felt.test.js.map +1 -0
- package/dist/starknet/filter.d.ts +171 -1
- package/dist/starknet/filter.test-d.d.ts +1 -0
- package/dist/starknet/filter.test-d.js +166 -0
- package/dist/starknet/filter.test-d.js.map +1 -0
- package/dist/starknet/index.d.ts +4 -4
- package/dist/starknet/index.js +2 -2
- package/dist/starknet/index.js.map +1 -1
- package/package.json +13 -2
- package/src/config.test-d.ts +55 -0
- package/src/config.ts +20 -13
- package/src/index.ts +1 -1
- package/src/sink/console.test-d.ts +14 -0
- package/src/sink/console.ts +2 -2
- package/src/sink/mongo.ts +5 -3
- package/src/sink/parquet.ts +3 -3
- package/src/sink/postgres.ts +3 -3
- package/src/sink/webhook.ts +3 -4
- package/src/starknet/block.ts +50 -41
- package/src/starknet/felt.test.ts +19 -0
- package/src/starknet/felt.ts +16 -0
- package/src/starknet/filter.test-d.ts +197 -0
- package/src/starknet/filter.ts +200 -1
- package/src/starknet/index.ts +5 -5
package/dist/config.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare type NetworkOptions = {
|
|
|
13
13
|
filter: object;
|
|
14
14
|
};
|
|
15
15
|
/** Data finality. */
|
|
16
|
-
export declare type Finality =
|
|
16
|
+
export declare type Finality = "DATA_STATUS_FINALIZED" | "DATA_STATUS_ACCEPTED" | "DATA_STATUS_PENDING";
|
|
17
17
|
/** Stream-related options. */
|
|
18
18
|
export declare type StreamOptions = {
|
|
19
19
|
/** The Apibara DNA stream url, e.g. `mainnet.starknet.a5a.ch`. */
|
|
@@ -25,7 +25,7 @@ export declare type StreamOptions = {
|
|
|
25
25
|
/** The Apibara DNA stream auth token. */
|
|
26
26
|
authToken?: string;
|
|
27
27
|
};
|
|
28
|
-
export declare type Config<TNetworkOptions extends NetworkOptions, TSink extends SinkOptions> = TSink & TNetworkOptions & StreamOptions & {
|
|
28
|
+
export declare type Config<TNetworkOptions extends NetworkOptions = NetworkOptions, TSink extends SinkOptions = SinkOptions> = TSink & TNetworkOptions & StreamOptions & {
|
|
29
29
|
/** How many historical blocks to process in a single batch. */
|
|
30
30
|
batchSize?: number;
|
|
31
31
|
/** Finality of the data to process. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { assertType, describe, test } from "vitest";
|
|
2
|
+
describe("Config", () => {
|
|
3
|
+
test("without any network or sink type", () => {
|
|
4
|
+
assertType({
|
|
5
|
+
network: "test-network",
|
|
6
|
+
filter: {},
|
|
7
|
+
sinkType: "test-sink",
|
|
8
|
+
sinkOptions: {},
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
test("with restrictions on network and sink", () => {
|
|
12
|
+
assertType({
|
|
13
|
+
network: "test-network",
|
|
14
|
+
filter: {
|
|
15
|
+
a: 1,
|
|
16
|
+
},
|
|
17
|
+
sinkType: "test-sink",
|
|
18
|
+
sinkOptions: {
|
|
19
|
+
b: "test",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
test("network options are required", () => {
|
|
24
|
+
// @ts-expect-error - missing network options
|
|
25
|
+
assertType({
|
|
26
|
+
sinkType: "test-sink",
|
|
27
|
+
sinkOptions: {},
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
test("sink options are required", () => {
|
|
31
|
+
// @ts-expect-error - missing sink options
|
|
32
|
+
assertType({
|
|
33
|
+
network: "test-network",
|
|
34
|
+
filter: {},
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=config.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test-d.js","sourceRoot":"","sources":["../src/config.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAIpD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,UAAU,CAAS;YACjB,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,WAAW;YACrB,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAajD,UAAU,CAAwB;YAChC,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE;gBACN,CAAC,EAAE,CAAC;aACL;YACD,QAAQ,EAAE,WAAW;YACrB,WAAW,EAAE;gBACX,CAAC,EAAE,MAAM;aACV;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,6CAA6C;QAC7C,UAAU,CAAS;YACjB,QAAQ,EAAE,WAAW;YACrB,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACrC,0CAA0C;QAC1C,UAAU,CAAS;YACjB,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from "./config";
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from "./config";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
package/dist/sink/console.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { assertType, describe, test } from "vitest";
|
|
2
|
+
describe("Console", () => {
|
|
3
|
+
test("accepts any option", () => {
|
|
4
|
+
assertType({
|
|
5
|
+
sinkType: "console",
|
|
6
|
+
sinkOptions: {
|
|
7
|
+
hello: "world",
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=console.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.test-d.js","sourceRoot":"","sources":["../../src/sink/console.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAIpD,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,UAAU,CAAU;YAClB,QAAQ,EAAE,SAAS;YACnB,WAAW,EAAE;gBACX,KAAK,EAAE,OAAO;aACf;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/sink/mongo.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** MongoDB sink options */
|
|
2
2
|
export declare type Mongo = {
|
|
3
|
-
sinkType:
|
|
3
|
+
sinkType: "mongo";
|
|
4
4
|
sinkOptions: {
|
|
5
5
|
/** MongoDB connection string. */
|
|
6
6
|
connectionString?: string;
|
|
@@ -8,5 +8,7 @@ export declare type Mongo = {
|
|
|
8
8
|
database?: string;
|
|
9
9
|
/** Target collection name. */
|
|
10
10
|
collectionName?: string;
|
|
11
|
+
/** Enable entity mode. */
|
|
12
|
+
entityMode?: boolean;
|
|
11
13
|
};
|
|
12
14
|
};
|
package/dist/sink/parquet.d.ts
CHANGED
package/dist/sink/postgres.d.ts
CHANGED
package/dist/sink/webhook.d.ts
CHANGED
package/dist/starknet/block.d.ts
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const FieldElement = z.string().transform((value, ctx) => {
|
|
3
|
+
const regex = /^0x[0-9a-fA-F]{1,64}$/;
|
|
4
|
+
if (!regex.test(value)) {
|
|
5
|
+
ctx.addIssue({
|
|
6
|
+
code: z.ZodIssueCode.custom,
|
|
7
|
+
message: `FieldElement must be a hex string with a 0x prefix, got ${value}`,
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=felt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"felt.js","sourceRoot":"","sources":["../../src/starknet/felt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC9D,MAAM,KAAK,GAAG,uBAAuB,CAAC;IAEtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACtB,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,2DAA2D,KAAK,EAAE;SAC5E,CAAC,CAAC;KACJ;IAED,OAAO,KAAqB,CAAC;AAC/B,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { FieldElement } from "./felt";
|
|
3
|
+
describe("FieldElement", () => {
|
|
4
|
+
test("parse address", () => {
|
|
5
|
+
FieldElement.parse("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7");
|
|
6
|
+
});
|
|
7
|
+
test("parse value", () => {
|
|
8
|
+
FieldElement.parse("0x1");
|
|
9
|
+
});
|
|
10
|
+
test("parse invalid value", () => {
|
|
11
|
+
expect(() => FieldElement.parse("0x")).toThrowError();
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=felt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"felt.test.js","sourceRoot":"","sources":["../../src/starknet/felt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;QACzB,YAAY,CAAC,KAAK,CAChB,oEAAoE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;QACvB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1,171 @@
|
|
|
1
|
-
|
|
1
|
+
import { FieldElement } from "./felt";
|
|
2
|
+
export declare type Filter = {
|
|
3
|
+
/** Header information. */
|
|
4
|
+
header?: HeaderFilter;
|
|
5
|
+
/** Include transactions. */
|
|
6
|
+
transactions?: TransactionFilter[];
|
|
7
|
+
/** Include events. */
|
|
8
|
+
events?: EventFilter[];
|
|
9
|
+
/** Include messages from L2 to L1. */
|
|
10
|
+
messages?: L2ToL1MessageFilter[];
|
|
11
|
+
/** Include state updates. */
|
|
12
|
+
stateUpdate?: StateUpdateFilter;
|
|
13
|
+
};
|
|
14
|
+
export declare type HeaderFilter = {
|
|
15
|
+
weak?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare type TransactionFilterCommon = {
|
|
18
|
+
/*** Include reverted transactions. */
|
|
19
|
+
includeReverted?: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare type InvokeTransactionV0Filter = {
|
|
22
|
+
invokeV0?: {
|
|
23
|
+
/** Filter by contract address. */
|
|
24
|
+
contractAddress?: FieldElement;
|
|
25
|
+
/** Filter by function selector. */
|
|
26
|
+
entryPointSelector?: FieldElement;
|
|
27
|
+
/** Filter by function arguments. */
|
|
28
|
+
calldata?: FieldElement[];
|
|
29
|
+
};
|
|
30
|
+
invokeV1?: never;
|
|
31
|
+
deploy?: never;
|
|
32
|
+
declare?: never;
|
|
33
|
+
l1Handler?: never;
|
|
34
|
+
deployAccount?: never;
|
|
35
|
+
};
|
|
36
|
+
export declare type InvokeTransactionV1Filter = {
|
|
37
|
+
invokeV1?: {
|
|
38
|
+
/** Filter by sender address. */
|
|
39
|
+
senderAddress?: FieldElement;
|
|
40
|
+
/** Filter by function arguments. */
|
|
41
|
+
calldata?: FieldElement[];
|
|
42
|
+
};
|
|
43
|
+
invokeV0?: never;
|
|
44
|
+
deploy?: never;
|
|
45
|
+
declare?: never;
|
|
46
|
+
l1Handler?: never;
|
|
47
|
+
deployAccount?: never;
|
|
48
|
+
};
|
|
49
|
+
export declare type DeployTransactionFilter = {
|
|
50
|
+
deploy?: {
|
|
51
|
+
/** Filter by contract address salt. */
|
|
52
|
+
contractAddressSalt?: FieldElement;
|
|
53
|
+
/** Filter by class hash. */
|
|
54
|
+
classHash?: FieldElement;
|
|
55
|
+
/** Filter by constructor arguments. */
|
|
56
|
+
constructorCalldata?: FieldElement[];
|
|
57
|
+
};
|
|
58
|
+
invokeV0?: never;
|
|
59
|
+
invokeV1?: never;
|
|
60
|
+
declare?: never;
|
|
61
|
+
l1Handler?: never;
|
|
62
|
+
deployAccount?: never;
|
|
63
|
+
};
|
|
64
|
+
export declare type DeclareTransactionFilter = {
|
|
65
|
+
declare?: {
|
|
66
|
+
/** Filter by class hash. */
|
|
67
|
+
classHash?: FieldElement;
|
|
68
|
+
/** Filter by sender address. */
|
|
69
|
+
senderAddress?: FieldElement;
|
|
70
|
+
};
|
|
71
|
+
invokeV0?: never;
|
|
72
|
+
invokeV1?: never;
|
|
73
|
+
deploy?: never;
|
|
74
|
+
l1Handler?: never;
|
|
75
|
+
deployAccount?: never;
|
|
76
|
+
};
|
|
77
|
+
export declare type L1HandlerTransactionFilter = {
|
|
78
|
+
l1Handler?: {
|
|
79
|
+
/** Filter by contract address. */
|
|
80
|
+
contractAddress?: FieldElement;
|
|
81
|
+
/** Filter by function selector. */
|
|
82
|
+
entryPointSelector?: FieldElement;
|
|
83
|
+
/** Filter by function arguments. */
|
|
84
|
+
calldata?: FieldElement[];
|
|
85
|
+
};
|
|
86
|
+
invokeV0?: never;
|
|
87
|
+
invokeV1?: never;
|
|
88
|
+
deploy?: never;
|
|
89
|
+
declare?: never;
|
|
90
|
+
deployAccount?: never;
|
|
91
|
+
};
|
|
92
|
+
export declare type DeployAccountTransactionFilter = {
|
|
93
|
+
deployAccount?: {
|
|
94
|
+
/** Filter by contract address salt. */
|
|
95
|
+
contractAddressSalt?: FieldElement;
|
|
96
|
+
/** Filter by class hash. */
|
|
97
|
+
classHash?: FieldElement;
|
|
98
|
+
/** Filter by constructor arguments. */
|
|
99
|
+
constructorCalldata?: FieldElement[];
|
|
100
|
+
};
|
|
101
|
+
invokeV0?: never;
|
|
102
|
+
invokeV1?: never;
|
|
103
|
+
deploy?: never;
|
|
104
|
+
declare?: never;
|
|
105
|
+
l1Handler?: never;
|
|
106
|
+
};
|
|
107
|
+
export declare type TransactionFilter = TransactionFilterCommon & (InvokeTransactionV0Filter | InvokeTransactionV1Filter | DeployTransactionFilter | DeclareTransactionFilter | L1HandlerTransactionFilter | DeployAccountTransactionFilter);
|
|
108
|
+
export declare type EventFilter = {
|
|
109
|
+
/** Filter by contract address. */
|
|
110
|
+
fromAddress?: FieldElement;
|
|
111
|
+
/** Filter by event keys (selector). */
|
|
112
|
+
keys?: FieldElement[];
|
|
113
|
+
/** Filter by event data. */
|
|
114
|
+
data?: FieldElement[];
|
|
115
|
+
/** Include events from reverted transactions. */
|
|
116
|
+
includeReverted?: boolean;
|
|
117
|
+
};
|
|
118
|
+
export declare type L2ToL1MessageFilter = {
|
|
119
|
+
/** Filter by destination address. */
|
|
120
|
+
toAddress?: FieldElement;
|
|
121
|
+
/** Filter by payload. */
|
|
122
|
+
payload?: FieldElement[];
|
|
123
|
+
/** Include messages from reverted transactions. */
|
|
124
|
+
includeReverted?: boolean;
|
|
125
|
+
};
|
|
126
|
+
export declare type StateUpdateFilter = {
|
|
127
|
+
/** Filter storage diffs. */
|
|
128
|
+
storageDiffs?: StorageDiffFilter[];
|
|
129
|
+
/** Filter declared contracts. */
|
|
130
|
+
declaredContracts?: DeclaredContractFilter[];
|
|
131
|
+
/** Filter deployed contracts. */
|
|
132
|
+
deployedContracts?: DeployedContractFilter[];
|
|
133
|
+
/** Filter nonce updates. */
|
|
134
|
+
nonces?: NonceUpdateFilter[];
|
|
135
|
+
/** Filter declared classes. */
|
|
136
|
+
declaredClasses?: DeclaredClassFilter[];
|
|
137
|
+
/** Filter replaced classes. */
|
|
138
|
+
replacedClasses?: ReplacedClassFilter[];
|
|
139
|
+
};
|
|
140
|
+
export declare type StorageDiffFilter = {
|
|
141
|
+
/** Filter by contract address. */
|
|
142
|
+
contractAddress?: FieldElement;
|
|
143
|
+
};
|
|
144
|
+
export declare type DeclaredContractFilter = {
|
|
145
|
+
/** Filter by class hash. */
|
|
146
|
+
classHash?: FieldElement;
|
|
147
|
+
};
|
|
148
|
+
export declare type DeployedContractFilter = {
|
|
149
|
+
/** Filter by contract address. */
|
|
150
|
+
contractAddress?: FieldElement;
|
|
151
|
+
/** Filter by class hash. */
|
|
152
|
+
classHash?: FieldElement;
|
|
153
|
+
};
|
|
154
|
+
export declare type NonceUpdateFilter = {
|
|
155
|
+
/** Filter by contract address. */
|
|
156
|
+
contractAddress?: FieldElement;
|
|
157
|
+
/** Filter by nonce value. */
|
|
158
|
+
nonce?: FieldElement;
|
|
159
|
+
};
|
|
160
|
+
export declare type DeclaredClassFilter = {
|
|
161
|
+
/** Filter by class hash. */
|
|
162
|
+
classHash?: FieldElement;
|
|
163
|
+
/** Filter by compiled class hash. */
|
|
164
|
+
compiledClassHash?: FieldElement;
|
|
165
|
+
};
|
|
166
|
+
export declare type ReplacedClassFilter = {
|
|
167
|
+
/** Filter by contract address. */
|
|
168
|
+
contractAddress?: FieldElement;
|
|
169
|
+
/** Filter by class hash. */
|
|
170
|
+
classHash?: FieldElement;
|
|
171
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { assertType, describe, test } from "vitest";
|
|
2
|
+
import { FieldElement } from "./felt";
|
|
3
|
+
const address = "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
|
|
4
|
+
const entryPointSelector = "0x03943907ef0ef6f9d2e2408b05e520a66daaf74293dbf665e5a20b117676170e";
|
|
5
|
+
const calldata = [FieldElement.parse("0x01"), FieldElement.parse("0x02")];
|
|
6
|
+
describe("Filter", () => {
|
|
7
|
+
test("all optional", () => {
|
|
8
|
+
assertType({});
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
describe("TransactionFilter", () => {
|
|
12
|
+
test("all optional", () => {
|
|
13
|
+
assertType({});
|
|
14
|
+
});
|
|
15
|
+
test("includeReverted", () => {
|
|
16
|
+
assertType({ includeReverted: true });
|
|
17
|
+
});
|
|
18
|
+
test("only one inner filter", () => {
|
|
19
|
+
// @ts-expect-error - multiple inner filters
|
|
20
|
+
assertType({
|
|
21
|
+
invokeV0: {},
|
|
22
|
+
deployAccount: {},
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
test("filter invoke transaction v0", () => {
|
|
26
|
+
assertType({
|
|
27
|
+
invokeV0: {
|
|
28
|
+
contractAddress: address,
|
|
29
|
+
entryPointSelector,
|
|
30
|
+
calldata,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
test("filter invoke transaction v1", () => {
|
|
35
|
+
assertType({
|
|
36
|
+
invokeV1: {
|
|
37
|
+
senderAddress: address,
|
|
38
|
+
calldata,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
test("filter deploy transaction", () => {
|
|
43
|
+
assertType({
|
|
44
|
+
deploy: {
|
|
45
|
+
contractAddressSalt: address,
|
|
46
|
+
classHash: address,
|
|
47
|
+
constructorCalldata: calldata,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
test("filter declare transaction", () => {
|
|
52
|
+
assertType({
|
|
53
|
+
declare: {
|
|
54
|
+
senderAddress: address,
|
|
55
|
+
classHash: address,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
test("filter l1 handler transaction", () => {
|
|
60
|
+
assertType({
|
|
61
|
+
l1Handler: {
|
|
62
|
+
contractAddress: address,
|
|
63
|
+
entryPointSelector,
|
|
64
|
+
calldata,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
test("filter deploy account transaction", () => {
|
|
69
|
+
assertType({
|
|
70
|
+
deployAccount: {
|
|
71
|
+
contractAddressSalt: address,
|
|
72
|
+
classHash: address,
|
|
73
|
+
constructorCalldata: calldata,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("EventFilter", () => {
|
|
79
|
+
test("all optional", () => {
|
|
80
|
+
assertType({});
|
|
81
|
+
});
|
|
82
|
+
test("with properties", () => {
|
|
83
|
+
assertType({
|
|
84
|
+
fromAddress: address,
|
|
85
|
+
keys: [entryPointSelector],
|
|
86
|
+
includeReverted: true,
|
|
87
|
+
data: calldata,
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("L2ToL1MessageFilter", () => {
|
|
92
|
+
test("all optional", () => {
|
|
93
|
+
assertType({});
|
|
94
|
+
});
|
|
95
|
+
test("with properties", () => {
|
|
96
|
+
assertType({
|
|
97
|
+
toAddress: address,
|
|
98
|
+
includeReverted: true,
|
|
99
|
+
payload: calldata,
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe("StateUpdateFilter", () => {
|
|
104
|
+
test("all optional", () => {
|
|
105
|
+
assertType({});
|
|
106
|
+
});
|
|
107
|
+
test("with storage diffs", () => {
|
|
108
|
+
assertType({
|
|
109
|
+
storageDiffs: [
|
|
110
|
+
{
|
|
111
|
+
contractAddress: address,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
test("with declared contracts", () => {
|
|
117
|
+
assertType({
|
|
118
|
+
declaredContracts: [
|
|
119
|
+
{
|
|
120
|
+
classHash: address,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
test("with deployed contracts", () => {
|
|
126
|
+
assertType({
|
|
127
|
+
deployedContracts: [
|
|
128
|
+
{
|
|
129
|
+
classHash: address,
|
|
130
|
+
contractAddress: address,
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
test("with nonces", () => {
|
|
136
|
+
assertType({
|
|
137
|
+
nonces: [
|
|
138
|
+
{
|
|
139
|
+
contractAddress: address,
|
|
140
|
+
nonce: "0x1",
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
test("with declared classes", () => {
|
|
146
|
+
assertType({
|
|
147
|
+
declaredClasses: [
|
|
148
|
+
{
|
|
149
|
+
compiledClassHash: address,
|
|
150
|
+
classHash: address,
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
test("with replaced classes", () => {
|
|
156
|
+
assertType({
|
|
157
|
+
replacedClasses: [
|
|
158
|
+
{
|
|
159
|
+
contractAddress: address,
|
|
160
|
+
classHash: address,
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
//# sourceMappingURL=filter.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.test-d.js","sourceRoot":"","sources":["../../src/starknet/filter.test-d.ts"],"names":[],"mappings":"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"}
|
package/dist/starknet/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
import { Filter } from
|
|
1
|
+
export * from "./filter";
|
|
2
|
+
export * from "./block";
|
|
3
|
+
import { Filter } from "./filter";
|
|
4
4
|
/** Starknet network type and data filter. */
|
|
5
5
|
export declare type Starknet = {
|
|
6
|
-
network:
|
|
6
|
+
network: "starknet";
|
|
7
7
|
filter: Filter;
|
|
8
8
|
};
|
package/dist/starknet/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from "./filter";
|
|
2
|
+
export * from "./block";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/starknet/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/starknet/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apibara/indexer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -44,7 +44,18 @@
|
|
|
44
44
|
"src",
|
|
45
45
|
"README.md"
|
|
46
46
|
],
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"vitest": "^0.34.3"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"zod": "^3.22.2"
|
|
52
|
+
},
|
|
47
53
|
"scripts": {
|
|
48
|
-
"build": "tsc"
|
|
54
|
+
"build": "tsc",
|
|
55
|
+
"test": "vitest",
|
|
56
|
+
"test:typecheck": "vitest typecheck",
|
|
57
|
+
"lint": "biome check .",
|
|
58
|
+
"lint:fix": "pnpm lint --apply",
|
|
59
|
+
"format": "biome format . --write"
|
|
49
60
|
}
|
|
50
61
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { assertType, describe, test } from "vitest";
|
|
2
|
+
|
|
3
|
+
import { Config } from "./config";
|
|
4
|
+
|
|
5
|
+
describe("Config", () => {
|
|
6
|
+
test("without any network or sink type", () => {
|
|
7
|
+
assertType<Config>({
|
|
8
|
+
network: "test-network",
|
|
9
|
+
filter: {},
|
|
10
|
+
sinkType: "test-sink",
|
|
11
|
+
sinkOptions: {},
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test("with restrictions on network and sink", () => {
|
|
16
|
+
type Network = {
|
|
17
|
+
network: "test-network";
|
|
18
|
+
filter: { a: number };
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type Sink = {
|
|
22
|
+
sinkType: "test-sink";
|
|
23
|
+
sinkOptions: {
|
|
24
|
+
b: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
assertType<Config<Network, Sink>>({
|
|
29
|
+
network: "test-network",
|
|
30
|
+
filter: {
|
|
31
|
+
a: 1,
|
|
32
|
+
},
|
|
33
|
+
sinkType: "test-sink",
|
|
34
|
+
sinkOptions: {
|
|
35
|
+
b: "test",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("network options are required", () => {
|
|
41
|
+
// @ts-expect-error - missing network options
|
|
42
|
+
assertType<Config>({
|
|
43
|
+
sinkType: "test-sink",
|
|
44
|
+
sinkOptions: {},
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("sink options are required", () => {
|
|
49
|
+
// @ts-expect-error - missing sink options
|
|
50
|
+
assertType<Config>({
|
|
51
|
+
network: "test-network",
|
|
52
|
+
filter: {},
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|