diff --git a/indexer/common/src/handlers/index.ts b/indexer/common/src/handlers/index.ts new file mode 100644 index 0000000..ed3f975 --- /dev/null +++ b/indexer/common/src/handlers/index.ts @@ -0,0 +1,7 @@ +import { Event } from '../rpc'; + +export interface EventHandler { + name: string; + supports(event: Event): boolean; + handle(event: Event): Promise; +} diff --git a/indexer/common/src/poller/README.md b/indexer/common/src/poller/README.md new file mode 100644 index 0000000..ed91eb9 --- /dev/null +++ b/indexer/common/src/poller/README.md @@ -0,0 +1,6 @@ +# Event Poller + +The Event Poller is responsible for continuously fetching Soroban events from the Stellar network and dispatching them to registered handlers. + +## Architecture + diff --git a/indexer/common/src/poller/index.ts b/indexer/common/src/poller/index.ts new file mode 100644 index 0000000..7d01d94 --- /dev/null +++ b/indexer/common/src/poller/index.ts @@ -0,0 +1 @@ +export * from './EventPoller'; diff --git a/indexer/common/src/repositories/index.ts b/indexer/common/src/repositories/index.ts new file mode 100644 index 0000000..754694d --- /dev/null +++ b/indexer/common/src/repositories/index.ts @@ -0,0 +1,4 @@ +export interface CursorRepository { + getCursor(): Promise; + saveCursor(ledger: number): Promise; +} diff --git a/indexer/common/src/rpc/index.ts b/indexer/common/src/rpc/index.ts new file mode 100644 index 0000000..e4a3cfb --- /dev/null +++ b/indexer/common/src/rpc/index.ts @@ -0,0 +1,20 @@ +export interface Event { + id: string; + ledger: number; + contractId: string; + topics: string[]; + data: any; + timestamp: Date; +} + +export interface GetEventsParams { + startLedger: number; + limit?: number; + contractId?: string; + topics?: string[]; +} + +export interface SorobanRpc { + getEvents(params: GetEventsParams): Promise; + getLatestLedger(): Promise; +}