/** * The Nanoleaf `DeviceSource` (design.md D17, D22; tasks 6.5, 6.6). * * Nanoleaf has no push transport, so every device is refreshed on a * configurable interval; one unreachable device is marked unreachable and * logged without disrupting the refresh cycle for the others. * * The effect list is described as an enumerated writable capability whose * permitted values are the device's own reported effect list, refreshed * whenever that list changes — so the generic renderer needs no * Nanoleaf-specific handling to present it as a select control. */ import type { Logger } from "pino"; import type { NanoleafService } from "../services/nanoleaf-service.js"; import type { DeviceChangeListener, DeviceCommandOutcome, DeviceDescriptor, DeviceSource } from "./device-source.js"; export declare const NANOLEAF_SOURCE_ID = "nanoleaf"; /** Default poll interval for Nanoleaf devices, in milliseconds. */ export declare const DEFAULT_NANOLEAF_SOURCE_POLL_MS = 10000; export declare class NanoleafDeviceSource implements DeviceSource { private readonly nanoleaf; private readonly logger; private readonly pollIntervalMs; readonly id = "nanoleaf"; private readonly listeners; private readonly tracked; private pollTimer; constructor(nanoleaf: NanoleafService | null, logger: Logger, pollIntervalMs?: number); get available(): boolean; start(): void; stop(): void; list(): DeviceDescriptor[]; get(deviceId: string): DeviceDescriptor | undefined; command(deviceId: string, properties: Record): Promise; subscribe(listener: DeviceChangeListener): () => void; /** * One poll tick over every registered device. Per-device errors are caught, * logged, and marked unreachable so one unreachable device cannot abort * the tick or block the others being refreshed. */ private poll; private notify; private toDescriptor; } //# sourceMappingURL=nanoleaf-source.d.ts.map