Skip to content

Commit

Permalink
example: add drizzle persistence example
Browse files Browse the repository at this point in the history
  • Loading branch information
jaipaljadeja committed Nov 30, 2024
1 parent f2e6554 commit 76f1e94
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "indexer: add drizzle persistence plugin",
"packageName": "@apibara/indexer",
"email": "[email protected]",
"dependentChangeType": "patch"
}
46 changes: 45 additions & 1 deletion examples/cli/indexers/2-starknet.indexer.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,43 @@
import { defineIndexer, useSink } from "@apibara/indexer";
import { drizzlePersistence } from "@apibara/indexer/plugins/drizzle-persistence";
import { useLogger } from "@apibara/indexer/plugins/logger";
import { sqlite } from "@apibara/indexer/sinks/sqlite";
import { StarknetStream } from "@apibara/starknet";
import type { ApibaraRuntimeConfig } from "apibara/types";
import Database from "better-sqlite3";
import { sql } from "drizzle-orm";
import { drizzle } from "drizzle-orm/node-postgres";
import { Client } from "pg";
import { hash } from "starknet";

export default function (runtimeConfig: ApibaraRuntimeConfig) {
console.log("--> Starknet Indexer Runtime Config: ", runtimeConfig);
const database = new Database(runtimeConfig.databasePath);

// Sink Database
const database = new Database(runtimeConfig.databasePath);
database.exec("DROP TABLE IF EXISTS test");
database.exec(
"CREATE TABLE IF NOT EXISTS test (number TEXT, hash TEXT, _cursor BIGINT)",
);

// Persistence Database
const client = new Client({
connectionString: "postgres://postgres:postgres@localhost:5432/postgres",
});
const persistDatabase = drizzle(client);

return defineIndexer(StarknetStream)({
streamUrl: "https://starknet.preview.apibara.org",
finality: "accepted",
startingCursor: {
orderKey: 800_000n,
},
plugins: [
drizzlePersistence({
database: persistDatabase,
indexerName: "2-starknet",
}),
],
sink: sqlite({ database, tableName: "test" }),
filter: {
events: [
Expand All @@ -42,5 +59,32 @@ export default function (runtimeConfig: ApibaraRuntimeConfig) {
// hash: header?.blockHash,
// }])
},
hooks: {
async "run:before"() {
await client.connect();

// Normally user will do migrations of both tables, which are defined in
// ```
// import { checkpoints, filters } from "@apibara/indexer/plugins/drizzle-persistence"
// ```,
// but just for quick testing and example we create them here directly

await persistDatabase.execute(sql`
CREATE TABLE IF NOT EXISTS checkpoints (
id TEXT NOT NULL PRIMARY KEY,
order_key INTEGER NOT NULL,
unique_key TEXT
);
CREATE TABLE IF NOT EXISTS filters (
id TEXT NOT NULL,
filter TEXT NOT NULL,
from_block INTEGER NOT NULL,
to_block INTEGER,
PRIMARY KEY (id, from_block)
);
`);
},
},
});
}
4 changes: 4 additions & 0 deletions examples/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"devDependencies": {
"@types/better-sqlite3": "^7.6.11",
"@types/node": "^20.5.2",
"@types/pg": "^8.11.10",
"typescript": "^5.6.2",
"vitest": "^1.6.0"
},
Expand All @@ -25,8 +26,11 @@
"@apibara/indexer": "workspace:*",
"@apibara/protocol": "workspace:*",
"@apibara/starknet": "workspace:*",
"@electric-sql/pglite": "^0.2.14",
"apibara": "workspace:*",
"better-sqlite3": "^11.5.0",
"drizzle-orm": "^0.35.2",
"pg": "^8.12.0",
"starknet": "^6.11.0"
}
}
2 changes: 1 addition & 1 deletion packages/indexer/build.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export default defineBuildConfig({
"./src/plugins/kv.ts",
"./src/plugins/logger.ts",
"./src/plugins/persistence.ts",
"./src/plugins/dirzzle-persistence.ts",
"./src/plugins/drizzle-persistence.ts",
],
clean: true,
outDir: "./dist",
Expand Down
10 changes: 5 additions & 5 deletions packages/indexer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,11 @@
"require": "./dist/plugins/persistence.cjs",
"default": "./dist/plugins/persistence.mjs"
},
"./plugins/dirzzle-persistence": {
"types": "./dist/plugins/dirzzle-persistence.d.ts",
"import": "./dist/plugins/dirzzle-persistence.mjs",
"require": "./dist/plugins/dirzzle-persistence.cjs",
"default": "./dist/plugins/dirzzle-persistence.mjs"
"./plugins/drizzle-persistence": {
"types": "./dist/plugins/drizzle-persistence.d.ts",
"import": "./dist/plugins/drizzle-persistence.mjs",
"require": "./dist/plugins/drizzle-persistence.cjs",
"default": "./dist/plugins/drizzle-persistence.mjs"
}
},
"scripts": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,6 @@ export class DrizzlePersistence<
}
}

public async del() {
await this._delCheckpoint();
await this._delFilter();
}

// --- CHECKPOINTS TABLE METHODS ---

private async _getCheckpoint(): Promise<Cursor | undefined> {
Expand Down Expand Up @@ -156,12 +151,6 @@ export class DrizzlePersistence<
});
}

private async _delCheckpoint() {
await this._db
.delete(checkpoints)
.where(eq(checkpoints.id, this._indexerName));
}

// --- FILTERS TABLE METHODS ---

private async _getFilter(): Promise<TFilter | undefined> {
Expand Down Expand Up @@ -200,8 +189,4 @@ export class DrizzlePersistence<
},
});
}

private async _delFilter() {
await this._db.delete(filters).where(eq(filters.id, this._indexerName));
}
}

0 comments on commit 76f1e94

Please sign in to comment.