export type UpdateAllItemType = 'plugin' | 'homebridge' | 'ui'; export type UpdateAllExclusionReason = 'hidden' | 'disabled' | 'major' | 'engines'; export type UpdateAllRestartImpact = 'ui' | 'homebridge' | 'child-bridges'; export interface UpdateAllPlanItem { type: UpdateAllItemType; name: string; displayName?: string; icon?: string | null; childBridgeUsernames?: string[]; restartImpact?: UpdateAllRestartImpact; from: string; to: string; } export interface UpdateAllPlanExclusion extends UpdateAllPlanItem { reason: UpdateAllExclusionReason; } export interface UpdateAllPlan { items: UpdateAllPlanItem[]; needsReview: UpdateAllPlanExclusion[]; skipped: UpdateAllPlanExclusion[]; } export type UpdateAllItemStatus = 'planned' | 'running' | 'ok' | 'failed' | 'skipped'; export interface UpdateAllJournalItem { type: UpdateAllItemType; name: string; displayName?: string; icon?: string | null; childBridgeUsernames?: string[]; restartImpact?: UpdateAllRestartImpact; from: string; to: string; status: UpdateAllItemStatus; reason?: string; logTail?: string[]; } export interface UpdateAllJournal { schemaVersion: 1; runId: string; startedAt: string; finishedAt?: string; items: UpdateAllJournalItem[]; restart: { homebridge: 'done' | 'failed' | 'not-needed' | 'pending'; ui: 'scheduled' | 'not-needed' | 'pending'; childBridges?: 'done' | 'failed' | 'not-needed'; }; }