import type { LogLevel } from './common.js' export type InputABI = | string | string[] | Record[] | Record export enum ProcessorType { Block = 'block', Reorg = 'reorg', Transaction = 'transaction', Event = 'event', } export type Manifest = { manifest: string defaultLogLevel?: LogLevel flinkLogLevel?: LogLevel cluster?: Cluster namespace: string | Namespace filterGroups?: FilterGroup[] indexers?: Indexer[] processors?: Processor[] enrichers?: Enricher[] workers?: Worker[] solutions?: Solution[] } export type Solution> = { source: string config: TConfig } export enum ClusterSize { tiny = 'tiny', small = 'small', medium = 'medium', large = 'large', custom = 'custom', } type Cluster = { id: string size?: ClusterSize } type Namespace = { id: string } type Processor = | { id: string enabled?: boolean type?: ProcessorType.Event handler: string env?: EnvItem[] abi?: InputABI acceptUnknownTopics?: boolean } | { id: string enabled?: boolean type?: ProcessorType.Transaction handler: string env?: EnvItem[] abi?: InputABI } | { id: string enabled?: boolean type: | ProcessorType.Block | ProcessorType.Reorg | ProcessorType.Transaction handler: string env?: EnvItem[] } type EnvItem = { name: string value: string } export enum EnricherEngine { Rockset = 'rockset', Flink = 'flink', } export enum FlinkMode { Streaming = 'streaming', Batch = 'batch', } export type EnricherSize = | 'tiny' | 'small' | 'medium' | 'large' | '2xlarge' | '3xlarge' type Enricher = | { id: string enabled?: boolean engine: EnricherEngine.Flink logLevel?: LogLevel inputSql?: string size: EnricherSize parameters?: Record options?: { parallelism?: number } } | { id: string enabled?: boolean engine?: EnricherEngine.Rockset logLevel?: LogLevel handler: string inputSql?: string parameters?: Record env?: EnvItem[] } type Worker = { id: string enabled?: boolean schedule: string enricher: string parameters?: Record } type FilterGroup = { id: string addresses?: ( | { chainId: string | number address: `0x${string}` | '*' location?: 'log-address' | 'tx-from' | 'tx-to' } | { fromFile: string } )[] topics?: ( | InputABI | { fromFile: string } )[] description?: string updateStrategy?: 'preserve' | 'replace' } type Source = { endpoint: string weight?: number } type Indexer = { chainId: number enabled: boolean ingestionFilterGroup: string processingFilterGroup: string sources: Source[] emitBlocks?: boolean emitTransactions?: boolean emitEvents?: boolean emitTraces?: boolean resolveRevertReason?: boolean }