import { BatchProducerModule, WorkerModule, PrivateMempool, SequencerModulesRecord, BlockProducerModule, VanillaTaskWorkerModules, TaskQueue, BaseLayer, BlockTrigger, Database, SequencerModule, SequencerStartupModule, } from "@proto-kit/sequencer"; import { TypedClass, ModulesConfig } from "@proto-kit/common"; type PreconfiguredSimpleSequencerModulesRecord = { Mempool: typeof PrivateMempool; BatchProducerModule: typeof BatchProducerModule; BlockProducerModule: typeof BlockProducerModule; SequencerStartupModule: TypedClass< SequencerStartupModule & SequencerModule >; }; export type MinimumAdditionalSequencerModules = { TaskQueue: TypedClass>; Database: TypedClass>; BaseLayer: TypedClass>; BlockTrigger: TypedClass>; }; export type SimpleSequencerModulesRecord = MinimumAdditionalSequencerModules & PreconfiguredSimpleSequencerModulesRecord; export type AdditionalSequencerModules = SequencerModulesRecord & MinimumAdditionalSequencerModules; export type SimpleSequencerWorkerModulesRecord = { WorkerModule: TypedClass< WorkerModule> >; TaskQueue: TypedClass; }; export class SimpleSequencerModules { public static worker< QueueModule extends TaskQueue, SequencerModules extends SequencerModulesRecord, >(queue: TypedClass, additionalModules: SequencerModules) { return { WorkerModule: WorkerModule.from(VanillaTaskWorkerModules.allTasks()), TaskQueue: queue, ...additionalModules, } satisfies SimpleSequencerWorkerModulesRecord; } public static with( additionalModules: SequencerModules ) { /* eslint-disable @typescript-eslint/no-shadow */ const { Database, BlockTrigger, TaskQueue, BaseLayer } = additionalModules; /* eslint-enable @typescript-eslint/no-shadow */ const modulesCopy: SequencerModulesRecord = { ...additionalModules }; /* eslint-disable @typescript-eslint/dot-notation */ delete modulesCopy["Database"]; delete modulesCopy["TaskQueue"]; delete modulesCopy["BaseLayer"]; delete modulesCopy["BlockTrigger"]; /* eslint-enable @typescript-eslint/dot-notation */ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const reducedModules = modulesCopy as Omit< SequencerModules, | "Database" | "TaskQueue" | "BaseLayer" | "BlockTrigger" | "DatabasePruneModule" >; return { Database, Mempool: PrivateMempool, BaseLayer, BatchProducerModule, BlockProducerModule, BlockTrigger, TaskQueue, ...reducedModules, SequencerStartupModule, } satisfies SimpleSequencerModulesRecord; } public static defaultConfig() { return { BlockProducerModule: {}, Mempool: {}, BatchProducerModule: {}, SequencerStartupModule: {}, } satisfies ModulesConfig; } public static defaultWorkerConfig() { return { WorkerModule: VanillaTaskWorkerModules.defaultConfig(), } satisfies ModulesConfig< Pick >; } }