Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,10 @@ jobs:
- name: Run lint
run: pnpm lint
- name: Run build
# Exclude examples/cli since it requires the cli to be built.
run: pnpm build --filter=!./examples/cli-drizzle --filter=!./examples/cli-instrumentation --filter=!./examples/cli-js
run: pnpm build
- name: Run typecheck
run: pnpm typecheck
- name: Run test
run: pnpm test:ci --filter=!./examples/cli-drizzle --filter=!./examples/cli-instrumentation --filter=!./examples/cli-js
run: pnpm test:ci
- name: Check change files
run: pnpm beachball check
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
- name: Install dependencies
run: pnpm install --strict-peer-dependencies=false --no-frozen-lockfile
- name: Run build
run: pnpm build --filter=!./examples/cli-drizzle --filter=!./examples/cli-instrumentation --filter=!./examples/cli-js
run: pnpm build
- name: Set git credentials
run: |
git config user.name "Capy Bot"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "plugin-mongo: fix error on connection and disable retry",
"packageName": "@apibara/plugin-mongo",
"email": "francesco@ceccon.me",
"dependentChangeType": "patch"
}
3 changes: 0 additions & 3 deletions examples/cli-drizzle/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
"description": "",
"type": "module",
"scripts": {
"build": "apibara build",
"dev": "apibara dev",
"start": "apibara start",
"start:pg": "export POSTGRES_CONNECTION_STRING=\"postgres://postgres:postgres@localhost:5432/postgres\" && pnpm start",
"lint": "biome check .",
"lint:fix": "pnpm lint --write",
"test": "vitest",
Expand Down
4 changes: 1 addition & 3 deletions examples/cli-instrumentation/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
"description": "",
"type": "module",
"scripts": {
"build": "apibara build",
"dev": "apibara dev",
"start": "apibara start",
"lint": "biome check .",
"lint:fix": "pnpm lint --write"
},
Expand Down Expand Up @@ -35,4 +33,4 @@
"starknet": "^6.11.0",
"viem": "^2.21.53"
}
}
}
2 changes: 0 additions & 2 deletions examples/cli-js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@
"version": "0.0.0",
"description": "",
"scripts": {
"build": "apibara build",
"dev": "apibara dev",
"start": "apibara start",
"lint": "biome check .",
"lint:fix": "pnpm lint --write"
},
Expand Down
3 changes: 3 additions & 0 deletions examples/cli-mongodb/apibara.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { defineConfig } from "apibara/config";

export default defineConfig({});
20 changes: 20 additions & 0 deletions examples/cli-mongodb/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
services:
mongo:
image: bitnami/mongodb:8.0
ports:
- 27017:27017
environment:
MONGODB_PORT_NUMBER: "27017"
MONGODB_ROOT_USER: mongo
MONGODB_ROOT_PASSWORD: mongo
MONGODB_REPLICA_SET_MODE: primary
MONGODB_REPLICA_SET_NAME: rs0
MONGODB_REPLICA_SET_KEY: mongomongo
MONGODB_ADVERTISE_IP: true
volumes:
- "mongo_data:/data/db"
- "mongo_config:/data/configdb"

volumes:
mongo_data:
mongo_config:
34 changes: 34 additions & 0 deletions examples/cli-mongodb/indexers/starknet.indexer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { defineIndexer } from "@apibara/indexer";
import { useLogger } from "@apibara/indexer/plugins";
import { mongoStorage, useMongoStorage } from "@apibara/plugin-mongo";
import { StarknetStream } from "@apibara/starknet";
import { MongoClient } from "mongodb";

export default function (_runtimeConfig) {
const mongodb = new MongoClient("mongodb://mongo:mongo@localhost:27017/");

return defineIndexer(StarknetStream)({
streamUrl: "https://starknet.preview.apibara.org",
finality: "accepted",
startingBlock: 1_000_000n,
filter: {
transactions: [{}],
},
plugins: [
mongoStorage({
client: mongodb,
dbName: "test-db",
collections: ["blocks", "transactions"],
}),
],
async transform({ block: { header, transactions } }) {
const logger = useLogger();
const mongo = useMongoStorage();

await mongo.collection("blocks").insertOne(header);
await mongo.collection("transactions").insertMany(transactions);

logger.info(`Inserted block ${header.blockNumber}`);
},
});
}
26 changes: 26 additions & 0 deletions examples/cli-mongodb/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"name": "example-cli-mongodb",
"private": true,
"version": "0.0.0",
"description": "",
"scripts": {
"dev": "apibara dev",
"lint": "biome check .",
"lint:fix": "pnpm lint --write"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/node": "^20.5.2",
"typescript": "^5.6.2"
},
"dependencies": {
"@apibara/indexer": "workspace:*",
"@apibara/plugin-mongo": "workspace:*",
"@apibara/protocol": "workspace:*",
"@apibara/starknet": "workspace:*",
"apibara": "workspace:*",
"mongodb": "^6.12.0"
}
}
9 changes: 2 additions & 7 deletions packages/plugin-mongo/src/persistence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,8 @@ export async function initializePersistentState(
db: Db,
session: ClientSession,
) {
const checkpoint = await db.createCollection<CheckpointSchema>(
checkpointCollectionName,
{ session },
);
const filter = await db.createCollection<FilterSchema>(filterCollectionName, {
session,
});
const checkpoint = db.collection<CheckpointSchema>(checkpointCollectionName);
const filter = db.collection<FilterSchema>(filterCollectionName);

await checkpoint.createIndex({ id: 1 }, { session });
await filter.createIndex({ id: 1, fromBlock: 1 }, { session });
Expand Down
11 changes: 8 additions & 3 deletions packages/plugin-mongo/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,13 @@ export async function withTransaction<T>(
cb: (session: ClientSession) => Promise<T>,
) {
return await client.withSession(async (session) => {
return await session.withTransaction(async (session) => {
return await cb(session);
});
return await session.withTransaction(
async (session) => {
return await cb(session);
},
{
retryWrites: false,
},
);
});
}
28 changes: 28 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.