import { Execution, Hue, State } from '../state.js';
export type ValidationResult<T> = {
    ok: true;
    value: Partial<T>;
} | {
    ok: false;
    error: string;
};
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
/**
 * Confirms the shape every accessory unconditionally dereferences
 * (device.name/firmwareVersion/uniqueId, execution.mode/hdmiSource/
 * brightness, hue.groups[*].name, hdmi.input1-4.name) is actually present,
 * so a malformed or spoofed Sync Box response fails here instead of
 * throwing a TypeError - or forwarding NaN/empty values to HomeKit - deep
 * inside an accessory's update().
 */
export declare function isValidState(value: unknown): value is State;
/**
 * Applies the same bounds/allowlist checks the HomeKit-driven accessory code applies
 * before calling SyncBoxClient.updateExecution, so the API server can't be used to send
 * values no legitimate code path would ever produce.
 */
export declare function validateExecution(input: unknown): ValidationResult<Execution>;
/**
 * Mirrors EntertainmentTvDevice's group-existence check: only a groupId that exists in
 * the device's current state may be forwarded to SyncBoxClient.updateHue.
 */
export declare function validateHue(input: unknown, state: State | null): ValidationResult<Hue>;
//# sourceMappingURL=validation.d.ts.map