import type { ContainerConfig, ResolveResult } from "../types.js"; import { type ConsumerManifest, type HistoryEntry } from "./schema.js"; /** * Persistent per-plugin manifests written to * `${dataDir}/signalk-container-manifests/.json`. * * Schema is enforced via TypeBox: `load()` validates every file it * reads and refuses to overwrite invalid or schema-mismatched files * (so a future-version file is preserved across downgrades). * * Writes are atomic (tmp + fsync + rename) and serialized per * pluginId so two concurrent `recordResolution` calls for the same * plugin can't lose history. */ export declare class ManifestStore { private readonly baseDir; private readonly debug; private readonly now; private queue; constructor(baseDir: string, debug?: (msg: string) => void, now?: () => string); get(pluginId: string): Promise; list(): Promise; getContainerHistory(containerName: string): Promise; recordResolution(params: { pluginId: string; pluginVersion: string; containerName: string; config: Pick; resolved: ResolveResult; /** * Caller's intent for this record. Optional — when omitted the store * auto-detects from the digest transition: * - first ever record for this container → `plugin-install` * - digest changed → `plugin-update` * - digest unchanged → no history entry (idempotent) * When provided, an explicit reason is preserved for transitions * (`from !== to`); the auto-detected `plugin-install` still wins for * the very first record so the history's origin is always honest. */ reason?: HistoryEntry["reason"]; }): Promise; private doRecord; private pathFor; } //# sourceMappingURL=store.d.ts.map