import { ActionSpec, EngineControlResponse, SerializableEngine } from "jm-castle-ac-dc-types"; import { CastleAcDc } from "../../system/status/System.mjs"; import { ControlContext } from "../ControlContext.mjs"; import { EngineContext } from "../EngineContext.mjs"; import { Control, ControlContextConsumer, Engine } from "../Types.mjs"; import { ControlPart } from "./Types.mjs"; export interface RunPartsResponse { duration: number; errors?: string[]; } export interface ControlEngineProps { engineId: string; parts: ControlPart[]; actions: Record; } export declare class ControlEngine implements Engine, Control { constructor(props: ControlEngineProps); private actions; private engineId; private controlHistory; private lastStartedAt; private lastLapEndAt; private running; private shouldRun; private lap; private durations; private errors; private parts; private consumers; getSerializable: () => Promise; getSerializableControlHistory: () => import("jm-castle-ac-dc-types").SerializableControlContext; getControlHistoryCopy: () => ControlContext; onLapEnd: (consumer: ControlContextConsumer) => void; onHistoryChange: (consumer: ControlContextConsumer) => void; removeOnHistoryChange: (consumer: ControlContextConsumer) => void; addPart: (...parts: ControlPart[]) => void; private lapStart; consumeAction: (actionId: string, context: EngineContext, system: CastleAcDc) => Promise; private runParts; private runPartsOnAction; private lapEnd; private executeDeviceControlRequestsOnLapEnd; private run; onContextChange: (context: EngineContext, system: CastleAcDc) => Promise; private waitAndCheckRunning; start: () => Promise; stop: () => Promise; status: () => Promise<{ lastStartedAt: number; lastLapEndAt: number; running: boolean; duration: { laps: number; consumed: { total: number; lapStart: number; lapEnd: number; }; }; errors: { lap: number; errors: string[]; }[]; }>; settings: () => Promise<{ lapDuration: number; }>; }