export const HARBOR_VERSIONS = Object.freeze({ macClient: '0.30.3', gatewayClient: '0.31.3', gatewayBackend: '0.31.0', }); export interface ParsedVersion { major: number; minor: number; hotfix: number; } export interface HarborVersions { macClient: string; gatewayClient: string; gatewayBackend: string; } export function parseVersion(value: unknown): ParsedVersion | null { const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(String(value || '')); return match ? { major: Number(match[1]), minor: Number(match[2]), hotfix: Number(match[3]), } : null; } export function versionCompatibility(versions: Partial | null | undefined) { const mac = parseVersion(versions?.macClient); const client = parseVersion(versions?.gatewayClient); const backend = parseVersion(versions?.gatewayBackend); const major = Boolean(mac && client && backend && mac.major === client.major && client.major === backend.major); const gateway = Boolean(client && backend && client.major === backend.major && client.minor === backend.minor); return { compatible: major && gateway, major, gateway }; }