import type { Logger } from "pino"; import { type StateManager } from "./state/state-manager.js"; /** * Reserved-namespace prefix under which each device's hidden flag is * stored, keyed by the device's qualified identifier (design.md D7). * * Modelled on `ROOM_ASSIGNMENT_PREFIX` (`room-manager.ts`): one reserved * state key per device, written through `setInternal`/`deleteInternal` so * a single change is one atomic write with no intermediate state, and is * excluded from the public state API and the state SSE stream the same way * every other reserved key is (design.md D20). */ export declare const HIDDEN_PREFIX = "$internal:hidden:"; /** Returns the reserved state key storing `qualifiedId`'s hidden flag. */ export declare function hiddenKey(qualifiedId: string): string; /** Emitted whenever a device's hidden flag changes. */ export interface VisibilityChange { qualifiedId: string; hidden: boolean; } export type VisibilityChangeListener = (change: VisibilityChange) => void; /** * A persisted, per-device hidden flag (design.md D7; specs/device-visibility * "Per-Device Hidden Flag"). * * Absence of `hiddenKey(qualifiedId)` means visible — unhiding deletes the * key rather than writing `false`, so the store holds only what the user * changed, and `listHidden()` enumerates exactly the hidden set. * * Deliberately does not take the device sources: hiding an unknown * qualified id is explicitly allowed (a device MAY be hidden before it is * known to the system), and staying device-free keeps this constructible * from `StateManager` alone, ahead of `AggregateDeviceSource` in * `createEngine()` (design.md D8). */ export declare class DeviceVisibility { private readonly stateManager; private readonly logger; private readonly listeners; constructor(stateManager: StateManager, logger: Logger); /** Mark a device hidden. Idempotent — hiding an already-hidden device changes nothing and fires no event. */ hide(qualifiedId: string): void; /** Mark a device visible. Idempotent — unhiding a visible device changes nothing and fires no event. */ unhide(qualifiedId: string): void; /** Whether a device is currently hidden. Absence of the key means visible. */ isHidden(qualifiedId: string): boolean; /** Every qualified id currently marked hidden. */ listHidden(): string[]; /** * Register a listener fired whenever a device's hidden flag changes. * Each listener is isolated with its own try/catch — a throwing listener * does not prevent the others from being notified. */ onChange(listener: VisibilityChangeListener): void; /** Remove a previously-registered visibility change listener. */ offChange(listener: VisibilityChangeListener): void; private notify; } //# sourceMappingURL=device-visibility.d.ts.map