import { z } from 'zod'; export declare const sshAuthSchema: z.ZodDiscriminatedUnion<"method", [z.ZodObject<{ method: z.ZodLiteral<"key">; privateKeyPath: z.ZodString; passphrase: z.ZodDefault>; }, "strip", z.ZodTypeAny, { passphrase: string; privateKeyPath: string; method: "key"; }, { privateKeyPath: string; method: "key"; passphrase?: string | undefined; }>, z.ZodObject<{ method: z.ZodLiteral<"password">; password: z.ZodString; }, "strip", z.ZodTypeAny, { password: string; method: "password"; }, { password: string; method: "password"; }>, z.ZodObject<{ method: z.ZodLiteral<"agent">; }, "strip", z.ZodTypeAny, { method: "agent"; }, { method: "agent"; }>]>; export declare const sshConnectionSchema: z.ZodObject<{ host: z.ZodString; port: z.ZodDefault; user: z.ZodString; auth: z.ZodDiscriminatedUnion<"method", [z.ZodObject<{ method: z.ZodLiteral<"key">; privateKeyPath: z.ZodString; passphrase: z.ZodDefault>; }, "strip", z.ZodTypeAny, { passphrase: string; privateKeyPath: string; method: "key"; }, { privateKeyPath: string; method: "key"; passphrase?: string | undefined; }>, z.ZodObject<{ method: z.ZodLiteral<"password">; password: z.ZodString; }, "strip", z.ZodTypeAny, { password: string; method: "password"; }, { password: string; method: "password"; }>, z.ZodObject<{ method: z.ZodLiteral<"agent">; }, "strip", z.ZodTypeAny, { method: "agent"; }, { method: "agent"; }>]>; connectTimeoutMs: z.ZodDefault; keepaliveIntervalMs: z.ZodDefault; /** 0 = never disconnect (default — common for always-on hosts). > 0 = close after this many ms idle. */ idleDisconnectMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { host: string; port: number; user: string; auth: { passphrase: string; privateKeyPath: string; method: "key"; } | { password: string; method: "password"; } | { method: "agent"; }; connectTimeoutMs: number; keepaliveIntervalMs: number; idleDisconnectMs: number; }, { host: string; user: string; auth: { privateKeyPath: string; method: "key"; passphrase?: string | undefined; } | { password: string; method: "password"; } | { method: "agent"; }; port?: number | undefined; connectTimeoutMs?: number | undefined; keepaliveIntervalMs?: number | undefined; idleDisconnectMs?: number | undefined; }>; export declare const hostSchema: z.ZodObject<{ id: z.ZodString; ssh: z.ZodObject<{ host: z.ZodString; port: z.ZodDefault; user: z.ZodString; auth: z.ZodDiscriminatedUnion<"method", [z.ZodObject<{ method: z.ZodLiteral<"key">; privateKeyPath: z.ZodString; passphrase: z.ZodDefault>; }, "strip", z.ZodTypeAny, { passphrase: string; privateKeyPath: string; method: "key"; }, { privateKeyPath: string; method: "key"; passphrase?: string | undefined; }>, z.ZodObject<{ method: z.ZodLiteral<"password">; password: z.ZodString; }, "strip", z.ZodTypeAny, { password: string; method: "password"; }, { password: string; method: "password"; }>, z.ZodObject<{ method: z.ZodLiteral<"agent">; }, "strip", z.ZodTypeAny, { method: "agent"; }, { method: "agent"; }>]>; connectTimeoutMs: z.ZodDefault; keepaliveIntervalMs: z.ZodDefault; /** 0 = never disconnect (default — common for always-on hosts). > 0 = close after this many ms idle. */ idleDisconnectMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { host: string; port: number; user: string; auth: { passphrase: string; privateKeyPath: string; method: "key"; } | { password: string; method: "password"; } | { method: "agent"; }; connectTimeoutMs: number; keepaliveIntervalMs: number; idleDisconnectMs: number; }, { host: string; user: string; auth: { privateKeyPath: string; method: "key"; passphrase?: string | undefined; } | { password: string; method: "password"; } | { method: "agent"; }; port?: number | undefined; connectTimeoutMs?: number | undefined; keepaliveIntervalMs?: number | undefined; idleDisconnectMs?: number | undefined; }>; }, "strip", z.ZodTypeAny, { id: string; ssh: { host: string; port: number; user: string; auth: { passphrase: string; privateKeyPath: string; method: "key"; } | { password: string; method: "password"; } | { method: "agent"; }; connectTimeoutMs: number; keepaliveIntervalMs: number; idleDisconnectMs: number; }; }, { id: string; ssh: { host: string; user: string; auth: { privateKeyPath: string; method: "key"; passphrase?: string | undefined; } | { password: string; method: "password"; } | { method: "agent"; }; port?: number | undefined; connectTimeoutMs?: number | undefined; keepaliveIntervalMs?: number | undefined; idleDisconnectMs?: number | undefined; }; }>; export type SshAuthConfig = z.infer; export type SshConnectionConfig = z.infer; export type HostConfig = z.infer; declare const commandSpecSchema: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; declare const garageStateMappingSchema: z.ZodObject<{ open: z.ZodObject<{ match: z.ZodString; mode: z.ZodEnum<["exact", "contains", "regex"]>; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; closed: z.ZodObject<{ match: z.ZodString; mode: z.ZodEnum<["exact", "contains", "regex"]>; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; opening: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; closing: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; }, "strip", z.ZodTypeAny, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }>; declare const garageDoorAccessorySchema: z.ZodEffects; name: z.ZodString; host: z.ZodString; commands: z.ZodObject<{ open: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; close: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; state: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }, { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }>; stateMapping: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; closed: z.ZodObject<{ match: z.ZodString; mode: z.ZodEnum<["exact", "contains", "regex"]>; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; opening: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; closing: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; }, "strip", z.ZodTypeAny, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }>>; timing: z.ZodDefault; closeTravelTimeMs: z.ZodDefault; /** 0 disables auto-close. >0 enables; `autoCloseMode` decides who fires it. */ autoCloseTimeoutMs: z.ZodDefault; /** * 'execute' (default): the plugin runs the close command after autoCloseTimeoutMs. * Use when the gate hardware does NOT auto-close on its own. * 'simulated': the plugin only tracks the state transition (Open→Closing→Closed) * without running any command. Use when the gate hardware (or a remote script) * physically auto-closes — the plugin just keeps HomeKit's view in sync. */ autoCloseMode: z.ZodDefault>; statePollIntervalMs: z.ZodDefault; /** * Fast-poll cadence used only while the door is in a transient state (Opening/Closing). * 0 disables fast-polling and falls back to `statePollIntervalMs` regardless of state. * Defaults to 1000ms — gives HomeKit second-by-second feedback during travel without * spamming SSH while the door is parked. */ transientPollIntervalMs: z.ZodDefault; /** * Grace period after issuing an open or close command before the next state * poll fires. Prevents the fast transient poll from racing the remote script's * state-file write. Default 5000ms. */ postCommandPollDelayMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }, { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; }, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; }>, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; }, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; }>; declare const switchAccessorySchema: z.ZodObject<{ type: z.ZodLiteral<"switch">; name: z.ZodString; host: z.ZodString; commands: z.ZodObject<{ on: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; off: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }, { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }>; state: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; onValue: z.ZodString; matchMode: z.ZodDefault>; pollIntervalMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; }, { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; }>>; behavior: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "stateful"; }, { mode: "stateful"; }>, z.ZodObject<{ mode: z.ZodLiteral<"momentary">; autoResetMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "momentary"; autoResetMs: number; }, { mode: "momentary"; autoResetMs?: number | undefined; }>]>>; }, "strip", z.ZodTypeAny, { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; behavior: { mode: "stateful"; } | { mode: "momentary"; autoResetMs: number; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; } | undefined; }, { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; } | undefined; behavior?: { mode: "stateful"; } | { mode: "momentary"; autoResetMs?: number | undefined; } | undefined; }>; export declare const accessoryItemSchema: z.ZodUnion<[z.ZodEffects; name: z.ZodString; host: z.ZodString; commands: z.ZodObject<{ open: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; close: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; state: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }, { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }>; stateMapping: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; closed: z.ZodObject<{ match: z.ZodString; mode: z.ZodEnum<["exact", "contains", "regex"]>; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; opening: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; closing: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; }, "strip", z.ZodTypeAny, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }>>; timing: z.ZodDefault; closeTravelTimeMs: z.ZodDefault; /** 0 disables auto-close. >0 enables; `autoCloseMode` decides who fires it. */ autoCloseTimeoutMs: z.ZodDefault; /** * 'execute' (default): the plugin runs the close command after autoCloseTimeoutMs. * Use when the gate hardware does NOT auto-close on its own. * 'simulated': the plugin only tracks the state transition (Open→Closing→Closed) * without running any command. Use when the gate hardware (or a remote script) * physically auto-closes — the plugin just keeps HomeKit's view in sync. */ autoCloseMode: z.ZodDefault>; statePollIntervalMs: z.ZodDefault; /** * Fast-poll cadence used only while the door is in a transient state (Opening/Closing). * 0 disables fast-polling and falls back to `statePollIntervalMs` regardless of state. * Defaults to 1000ms — gives HomeKit second-by-second feedback during travel without * spamming SSH while the door is parked. */ transientPollIntervalMs: z.ZodDefault; /** * Grace period after issuing an open or close command before the next state * poll fires. Prevents the fast transient poll from racing the remote script's * state-file write. Default 5000ms. */ postCommandPollDelayMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }, { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; }, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; }>, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; }, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"switch">; name: z.ZodString; host: z.ZodString; commands: z.ZodObject<{ on: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; off: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }, { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }>; state: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; onValue: z.ZodString; matchMode: z.ZodDefault>; pollIntervalMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; }, { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; }>>; behavior: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "stateful"; }, { mode: "stateful"; }>, z.ZodObject<{ mode: z.ZodLiteral<"momentary">; autoResetMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "momentary"; autoResetMs: number; }, { mode: "momentary"; autoResetMs?: number | undefined; }>]>>; }, "strip", z.ZodTypeAny, { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; behavior: { mode: "stateful"; } | { mode: "momentary"; autoResetMs: number; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; } | undefined; }, { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; } | undefined; behavior?: { mode: "stateful"; } | { mode: "momentary"; autoResetMs?: number | undefined; } | undefined; }>]>; export declare const pluginConfigSchema: z.ZodEffects; name: z.ZodString; logLevel: z.ZodDefault>; hosts: z.ZodArray; user: z.ZodString; auth: z.ZodDiscriminatedUnion<"method", [z.ZodObject<{ method: z.ZodLiteral<"key">; privateKeyPath: z.ZodString; passphrase: z.ZodDefault>; }, "strip", z.ZodTypeAny, { passphrase: string; privateKeyPath: string; method: "key"; }, { privateKeyPath: string; method: "key"; passphrase?: string | undefined; }>, z.ZodObject<{ method: z.ZodLiteral<"password">; password: z.ZodString; }, "strip", z.ZodTypeAny, { password: string; method: "password"; }, { password: string; method: "password"; }>, z.ZodObject<{ method: z.ZodLiteral<"agent">; }, "strip", z.ZodTypeAny, { method: "agent"; }, { method: "agent"; }>]>; connectTimeoutMs: z.ZodDefault; keepaliveIntervalMs: z.ZodDefault; /** 0 = never disconnect (default — common for always-on hosts). > 0 = close after this many ms idle. */ idleDisconnectMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { host: string; port: number; user: string; auth: { passphrase: string; privateKeyPath: string; method: "key"; } | { password: string; method: "password"; } | { method: "agent"; }; connectTimeoutMs: number; keepaliveIntervalMs: number; idleDisconnectMs: number; }, { host: string; user: string; auth: { privateKeyPath: string; method: "key"; passphrase?: string | undefined; } | { password: string; method: "password"; } | { method: "agent"; }; port?: number | undefined; connectTimeoutMs?: number | undefined; keepaliveIntervalMs?: number | undefined; idleDisconnectMs?: number | undefined; }>; }, "strip", z.ZodTypeAny, { id: string; ssh: { host: string; port: number; user: string; auth: { passphrase: string; privateKeyPath: string; method: "key"; } | { password: string; method: "password"; } | { method: "agent"; }; connectTimeoutMs: number; keepaliveIntervalMs: number; idleDisconnectMs: number; }; }, { id: string; ssh: { host: string; user: string; auth: { privateKeyPath: string; method: "key"; passphrase?: string | undefined; } | { password: string; method: "password"; } | { method: "agent"; }; port?: number | undefined; connectTimeoutMs?: number | undefined; keepaliveIntervalMs?: number | undefined; idleDisconnectMs?: number | undefined; }; }>, "many">; accessories: z.ZodArray; name: z.ZodString; host: z.ZodString; commands: z.ZodObject<{ open: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; close: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; state: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }, { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }>; stateMapping: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; closed: z.ZodObject<{ match: z.ZodString; mode: z.ZodEnum<["exact", "contains", "regex"]>; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>; opening: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; closing: z.ZodOptional; }, "strip", z.ZodTypeAny, { match: string; mode: "exact" | "contains" | "regex"; }, { match: string; mode: "exact" | "contains" | "regex"; }>>; }, "strip", z.ZodTypeAny, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }, { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; }>>; timing: z.ZodDefault; closeTravelTimeMs: z.ZodDefault; /** 0 disables auto-close. >0 enables; `autoCloseMode` decides who fires it. */ autoCloseTimeoutMs: z.ZodDefault; /** * 'execute' (default): the plugin runs the close command after autoCloseTimeoutMs. * Use when the gate hardware does NOT auto-close on its own. * 'simulated': the plugin only tracks the state transition (Open→Closing→Closed) * without running any command. Use when the gate hardware (or a remote script) * physically auto-closes — the plugin just keeps HomeKit's view in sync. */ autoCloseMode: z.ZodDefault>; statePollIntervalMs: z.ZodDefault; /** * Fast-poll cadence used only while the door is in a transient state (Opening/Closing). * 0 disables fast-polling and falls back to `statePollIntervalMs` regardless of state. * Defaults to 1000ms — gives HomeKit second-by-second feedback during travel without * spamming SSH while the door is parked. */ transientPollIntervalMs: z.ZodDefault; /** * Grace period after issuing an open or close command before the next state * poll fires. Prevents the fast transient poll from racing the remote script's * state-file write. Default 5000ms. */ postCommandPollDelayMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }, { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; }, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; }>, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; }, { type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"switch">; name: z.ZodString; host: z.ZodString; commands: z.ZodObject<{ on: z.ZodObject<{ command: z.ZodString; timeoutMs: z.ZodNumber; expectExitCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; off: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }, { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }>; state: z.ZodOptional; }, "strip", z.ZodTypeAny, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }, { command: string; timeoutMs: number; expectExitCode?: number | undefined; }>; onValue: z.ZodString; matchMode: z.ZodDefault>; pollIntervalMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; }, { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; }>>; behavior: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "stateful"; }, { mode: "stateful"; }>, z.ZodObject<{ mode: z.ZodLiteral<"momentary">; autoResetMs: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "momentary"; autoResetMs: number; }, { mode: "momentary"; autoResetMs?: number | undefined; }>]>>; }, "strip", z.ZodTypeAny, { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; behavior: { mode: "stateful"; } | { mode: "momentary"; autoResetMs: number; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; } | undefined; }, { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; } | undefined; behavior?: { mode: "stateful"; } | { mode: "momentary"; autoResetMs?: number | undefined; } | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { name: string; platform: "HomebridgeSsh"; logLevel: "debug" | "info" | "warn" | "error"; hosts: { id: string; ssh: { host: string; port: number; user: string; auth: { passphrase: string; privateKeyPath: string; method: "key"; } | { password: string; method: "password"; } | { method: "agent"; }; connectTimeoutMs: number; keepaliveIntervalMs: number; idleDisconnectMs: number; }; }[]; accessories: ({ type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; } | { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; behavior: { mode: "stateful"; } | { mode: "momentary"; autoResetMs: number; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; } | undefined; })[]; }, { name: string; platform: "HomebridgeSsh"; hosts: { id: string; ssh: { host: string; user: string; auth: { privateKeyPath: string; method: "key"; passphrase?: string | undefined; } | { password: string; method: "password"; } | { method: "agent"; }; port?: number | undefined; connectTimeoutMs?: number | undefined; keepaliveIntervalMs?: number | undefined; idleDisconnectMs?: number | undefined; }; }[]; accessories: ({ type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; } | { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; } | undefined; behavior?: { mode: "stateful"; } | { mode: "momentary"; autoResetMs?: number | undefined; } | undefined; })[]; logLevel?: "debug" | "info" | "warn" | "error" | undefined; }>, { name: string; platform: "HomebridgeSsh"; logLevel: "debug" | "info" | "warn" | "error"; hosts: { id: string; ssh: { host: string; port: number; user: string; auth: { passphrase: string; privateKeyPath: string; method: "key"; } | { password: string; method: "password"; } | { method: "agent"; }; connectTimeoutMs: number; keepaliveIntervalMs: number; idleDisconnectMs: number; }; }[]; accessories: ({ type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; timing: { openTravelTimeMs: number; closeTravelTimeMs: number; autoCloseTimeoutMs: number; autoCloseMode: "execute" | "simulated"; statePollIntervalMs: number; transientPollIntervalMs: number; postCommandPollDelayMs: number; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; } | { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; behavior: { mode: "stateful"; } | { mode: "momentary"; autoResetMs: number; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode: "exact" | "contains" | "regex"; pollIntervalMs: number; } | undefined; })[]; }, { name: string; platform: "HomebridgeSsh"; hosts: { id: string; ssh: { host: string; user: string; auth: { privateKeyPath: string; method: "key"; passphrase?: string | undefined; } | { password: string; method: "password"; } | { method: "agent"; }; port?: number | undefined; connectTimeoutMs?: number | undefined; keepaliveIntervalMs?: number | undefined; idleDisconnectMs?: number | undefined; }; }[]; accessories: ({ type: "garageDoor"; host: string; name: string; commands: { open: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; close: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; state?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; stateMapping?: { open: { match: string; mode: "exact" | "contains" | "regex"; }; closed: { match: string; mode: "exact" | "contains" | "regex"; }; opening?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; closing?: { match: string; mode: "exact" | "contains" | "regex"; } | undefined; } | undefined; timing?: { openTravelTimeMs?: number | undefined; closeTravelTimeMs?: number | undefined; autoCloseTimeoutMs?: number | undefined; autoCloseMode?: "execute" | "simulated" | undefined; statePollIntervalMs?: number | undefined; transientPollIntervalMs?: number | undefined; postCommandPollDelayMs?: number | undefined; } | undefined; } | { type: "switch"; host: string; name: string; commands: { on: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; off?: { command: string; timeoutMs: number; expectExitCode?: number | undefined; } | undefined; }; state?: { command: { command: string; timeoutMs: number; expectExitCode?: number | undefined; }; onValue: string; matchMode?: "exact" | "contains" | "regex" | undefined; pollIntervalMs?: number | undefined; } | undefined; behavior?: { mode: "stateful"; } | { mode: "momentary"; autoResetMs?: number | undefined; } | undefined; })[]; logLevel?: "debug" | "info" | "warn" | "error" | undefined; }>; export type PluginConfig = z.infer; export type AccessoryConfig = z.infer; export type SwitchAccessoryConfig = z.infer; export type GarageDoorAccessoryConfig = z.infer; export type GarageStateMapping = z.infer; export type CommandSpecConfig = z.infer; export {};