Skip to content

Commit 70f30b7

Browse files
authored
indexer: add plugins:init hook and hooks support in vcr and useTestDrizzleStorage() (#191)
resolves #190
2 parents de60869 + 5b03c6a commit 70f30b7

14 files changed

Lines changed: 95 additions & 13 deletions
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "indexer: add hooks support to vcr and plugins:init hook",
4+
"packageName": "@apibara/indexer",
5+
"email": "jadejajaipal5@gmail.com",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "plugin-drizzle: add useTestDrizzleStorage and use `plugin:init` hook",
4+
"packageName": "@apibara/plugin-drizzle",
5+
"email": "jadejajaipal5@gmail.com",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "plugin-mongo: use `plugin:init` hook",
4+
"packageName": "@apibara/plugin-mongo",
5+
"email": "jadejajaipal5@gmail.com",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "plugin-sqlite: use `plugin:init` hook",
4+
"packageName": "@apibara/plugin-sqlite",
5+
"email": "jadejajaipal5@gmail.com",
6+
"dependentChangeType": "patch"
7+
}

examples/cli-drizzle/indexers/1-evm.indexer.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ export default function (runtimeConfig: ApibaraRuntimeConfig) {
4343
},
4444
],
4545
},
46+
hooks: {
47+
"run:before": () => {
48+
console.log("run:before hook called from indexer");
49+
},
50+
},
4651
plugins: [
4752
drizzleStorage({
4853
db: database,

examples/cli-drizzle/test/ethereum.test.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createVcr } from "apibara/testing";
22

33
import createIndexer from "@/indexers/1-evm.indexer";
44
import { ethereumUsdcTransfers } from "@/lib/schema";
5+
import { useTestDrizzleStorage } from "@apibara/plugin-drizzle";
56
import { getTestDatabase } from "@apibara/plugin-drizzle/testing";
67
import { describe, expect, it } from "vitest";
78

@@ -15,8 +16,20 @@ describe("Ethereum USDC Transfers indexer", () => {
1516
});
1617

1718
const testResult = await vcr.run("ethereum-usdc-transfers", indexer, {
18-
fromBlock: 10_000_000n,
19-
toBlock: 10_000_005n,
19+
range: {
20+
fromBlock: 10_000_000n,
21+
toBlock: 10_000_005n,
22+
},
23+
hooks: {
24+
"run:before": async () => {
25+
console.log("run:before hook called from test function");
26+
const db = useTestDrizzleStorage();
27+
await db.insert(ethereumUsdcTransfers).values({
28+
number: 1,
29+
hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
30+
});
31+
},
32+
},
2033
});
2134

2235
const database = getTestDatabase(testResult);
@@ -25,6 +38,10 @@ describe("Ethereum USDC Transfers indexer", () => {
2538

2639
expect(rows.map(({ _id, ...rest }) => rest)).toMatchInlineSnapshot(`
2740
[
41+
{
42+
"hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
43+
"number": 1,
44+
},
2845
{
2946
"hash": "0xfc80de5a3b766eece5c5a7f7858a9d537a8fefa8186c71fa7766a2bae939b816",
3047
"number": 10000001,

examples/cli-drizzle/test/starknet.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ describe("Starknet USDC Transfers indexer", () => {
1616
});
1717

1818
const testResult = await vcr.run("starknet-usdc-transfers", indexer, {
19-
fromBlock: 800_000n,
20-
toBlock: 800_005n,
19+
range: { fromBlock: 800_000n, toBlock: 800_005n },
2120
});
2221

2322
const database = getTestDatabase(testResult);

packages/indexer/src/indexer.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export type UseMiddlewareFunction = (
3939
) => void;
4040

4141
export interface IndexerHooks<TFilter, TBlock> {
42+
"plugins:init": () => void;
4243
"run:before": () => void;
4344
"run:after": () => void;
4445
"connect:before": ({
@@ -230,6 +231,8 @@ export async function run<TFilter, TBlock>(
230231
context.debug = true;
231232
}
232233

234+
await indexer.hooks.callHook("plugins:init");
235+
233236
const middleware = await registerMiddleware(indexer);
234237

235238
const indexerMetrics = createIndexerMetrics();

packages/indexer/src/plugins/context.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function internalContext<TFilter, TBlock, TTxnParams>(
77
values: Record<string, unknown>,
88
) {
99
return defineIndexerPlugin<TFilter, TBlock>((indexer) => {
10-
indexer.hooks.hook("run:before", () => {
10+
indexer.hooks.hook("plugins:init", () => {
1111
try {
1212
const ctx = useIndexerContext();
1313
ctx[INTERNAL_CONTEXT_PROPERTY] = {

packages/indexer/src/plugins/logger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export function logger<TFilter, TBlock, TTxnParams>({
1313
logger,
1414
}: { logger?: ConsolaReporter } = {}) {
1515
return defineIndexerPlugin<TFilter, TBlock>((indexer) => {
16-
indexer.hooks.hook("run:before", () => {
16+
indexer.hooks.hook("plugins:init", () => {
1717
const ctx = useIndexerContext();
1818

1919
if (logger) {

0 commit comments

Comments
 (0)