diff --git a/backend/src/lib/indexer-state.ts b/backend/src/lib/indexer-state.ts new file mode 100644 index 00000000..fb0218e7 --- /dev/null +++ b/backend/src/lib/indexer-state.ts @@ -0,0 +1 @@ +export const INDEXER_STATE_ID = 'singleton'; diff --git a/backend/src/routes/health.routes.ts b/backend/src/routes/health.routes.ts index d489e55c..cf9e68dd 100644 --- a/backend/src/routes/health.routes.ts +++ b/backend/src/routes/health.routes.ts @@ -1,5 +1,6 @@ import { Router, type Request, type Response } from 'express'; import { prisma } from '../lib/prisma.js'; +import { INDEXER_STATE_ID } from '../lib/indexer-state.js'; const router = Router(); @@ -62,7 +63,7 @@ router.get('/', async (_req: Request, res: Response) => { let indexerLag = -1; try { - const state = await prisma.indexerState.findUnique({ where: { id: 'singleton' } }); + const state = await prisma.indexerState.findUnique({ where: { id: INDEXER_STATE_ID } }); if (state) { const now = Math.floor(Date.now() / 1000); const updatedAt = Math.floor(state.updatedAt.getTime() / 1000); diff --git a/backend/src/routes/v1/admin.routes.ts b/backend/src/routes/v1/admin.routes.ts index bd90a3b0..253f1124 100644 --- a/backend/src/routes/v1/admin.routes.ts +++ b/backend/src/routes/v1/admin.routes.ts @@ -8,6 +8,7 @@ import { } from '../../services/indexerService.js'; import { prisma } from '../../lib/prisma.js'; +import { INDEXER_STATE_ID } from '../../lib/indexer-state.js'; import { sseService } from '../../services/sse.service.js'; import { cache } from '../../lib/redis.js'; import logger from '../../logger.js'; @@ -56,7 +57,7 @@ async function buildAdminMetrics() { where: { isActive: false, events: { some: { eventType: 'COMPLETED' } } }, }), prisma.streamEvent.count({ where: { createdAt: { gte: since24h } } }), - prisma.indexerState.findUnique({ where: { id: 'singleton' } }), + prisma.indexerState.findUnique({ where: { id: INDEXER_STATE_ID } }), prisma.streamEvent.findMany({ where: { eventType: 'FEE_COLLECTED' }, select: { amount: true, metadata: true }, diff --git a/backend/src/services/indexerService.ts b/backend/src/services/indexerService.ts index 5fed17e6..4dc6a2d3 100644 --- a/backend/src/services/indexerService.ts +++ b/backend/src/services/indexerService.ts @@ -1,9 +1,8 @@ import { prisma } from '../lib/prisma.js'; +import { INDEXER_STATE_ID } from '../lib/indexer-state.js'; import { sorobanEventWorker } from '../workers/soroban-event-worker.js'; import logger from '../logger.js'; -const INDEXER_STATE_ID = 'singleton'; - export interface IndexerStatus { lastLedger: number; lastCursor: string | null; diff --git a/backend/src/workers/soroban-event-worker.ts b/backend/src/workers/soroban-event-worker.ts index cc76096c..5aef9fc8 100644 --- a/backend/src/workers/soroban-event-worker.ts +++ b/backend/src/workers/soroban-event-worker.ts @@ -1,12 +1,11 @@ import { rpc, xdr, StrKey } from '@stellar/stellar-sdk'; import { prisma } from '../lib/prisma.js'; +import { INDEXER_STATE_ID } from '../lib/indexer-state.js'; import { sseService } from '../services/sse.service.js'; import logger from '../logger.js'; // ─── Config ────────────────────────────────────────────────────────────────── -const INDEXER_STATE_ID = 'singleton'; - // ─── XDR Decoding Helpers ──────────────────────────────────────────────────── /** Decode an ScVal symbol to a string. */