import type { ConfigField } from "../registry.js"; // Shared config-field presets so drivers stay terse and consistent. export const hostField: ConfigField = { key: "host", label: "IP address / host", type: "host", required: true, help: "On the isolated device VLAN. See wiki/concepts/network-isolation.md.", }; export function portField(def: number): ConfigField { return { key: "port", label: "Port", type: "port", required: true, default: def }; } export const usernameField: ConfigField = { key: "username", label: "Username", type: "string", required: false, }; export const passwordField: ConfigField = { key: "password", label: "Password", type: "secret", required: false, }; /** * Sink for stub/diagnostic device messages. Defaults to a no-op so the package * has no host/runtime dependency; the server sets this to its Fastify logger. */ export type DeviceLogSink = (line: string) => void; let sink: DeviceLogSink = () => {}; export function setDeviceLogSink(fn: DeviceLogSink): void { sink = fn; } /** Stubs log instead of performing real I/O. Replaced with real protocols later. */ export function stubLog(driverId: string, msg: string): void { sink(`[device:${driverId}] ${msg}`); }