import { PrivateKey } from "@libp2p/interface";
import { Registry } from "prom-client";
import { BeaconApiMethods } from "@lodestar/api/beacon/server";
import { BeaconConfig } from "@lodestar/config";
import type { LoggerNode } from "@lodestar/logger/node";
import { CachedBeaconStateAllForks, PubkeyCache } from "@lodestar/state-transition";
import { phase0 } from "@lodestar/types";
import { ProcessShutdownCallback } from "@lodestar/validator";
import { BeaconRestApiServer } from "../api/index.js";
import { IBeaconChain } from "../chain/index.js";
import { ValidatorMonitor } from "../chain/validatorMonitor.js";
import { IBeaconDb } from "../db/index.js";
import { HttpMetricsServer, Metrics } from "../metrics/index.js";
import { MonitoringService } from "../monitoring/index.js";
import { Network } from "../network/index.js";
import { BackfillSync } from "../sync/backfill/index.js";
import { IBeaconSync } from "../sync/index.js";
import { IBeaconNodeOptions } from "./options.js";
export * from "./options.js";
export type BeaconNodeModules = {
    opts: IBeaconNodeOptions;
    config: BeaconConfig;
    db: IBeaconDb;
    metrics: Metrics | null;
    validatorMonitor: ValidatorMonitor | null;
    network: Network;
    chain: IBeaconChain;
    api: BeaconApiMethods;
    sync: IBeaconSync;
    backfillSync: BackfillSync | null;
    metricsServer: HttpMetricsServer | null;
    monitoring: MonitoringService | null;
    restApi?: BeaconRestApiServer;
    controller?: AbortController;
};
export type BeaconNodeInitModules = {
    opts: IBeaconNodeOptions;
    config: BeaconConfig;
    pubkeyCache: PubkeyCache;
    db: IBeaconDb;
    logger: LoggerNode;
    processShutdownCallback: ProcessShutdownCallback;
    privateKey: PrivateKey;
    dataDir: string;
    peerStoreDir?: string;
    anchorState: CachedBeaconStateAllForks;
    isAnchorStateFinalized: boolean;
    wsCheckpoint?: phase0.Checkpoint;
    metricsRegistries?: Registry[];
};
export declare enum BeaconNodeStatus {
    started = "started",
    closing = "closing",
    closed = "closed"
}
/**
 * The main Beacon Node class.  Contains various components for getting and processing data from the
 * Ethereum Consensus ecosystem as well as systems for getting beacon node metadata.
 */
export declare class BeaconNode {
    opts: IBeaconNodeOptions;
    config: BeaconConfig;
    db: IBeaconDb;
    metrics: Metrics | null;
    metricsServer: HttpMetricsServer | null;
    monitoring: MonitoringService | null;
    validatorMonitor: ValidatorMonitor | null;
    network: Network;
    chain: IBeaconChain;
    api: BeaconApiMethods;
    restApi?: BeaconRestApiServer;
    sync: IBeaconSync;
    backfillSync: BackfillSync | null;
    status: BeaconNodeStatus;
    private controller?;
    constructor({ opts, config, db, metrics, metricsServer, monitoring, validatorMonitor, network, chain, api, restApi, sync, backfillSync, controller }: BeaconNodeModules);
    /**
     * Initialize a beacon node.  Initializes and `start`s the varied sub-component services of the
     * beacon node
     */
    static init<T extends BeaconNode = BeaconNode>({ opts, config, pubkeyCache, db, logger, processShutdownCallback, privateKey, dataDir, peerStoreDir, anchorState, isAnchorStateFinalized, wsCheckpoint, metricsRegistries }: BeaconNodeInitModules): Promise<T>;
    /**
     * Stop beacon node and its sub-components.
     */
    close(): Promise<void>;
}
//# sourceMappingURL=nodejs.d.ts.map