import { I18nKey } from "#/i18n/declaration"; /** * Per-automation run timeout defaults. The deployment reports the maximum it * enforces through capability discovery. */ export const AUTOMATION_TIMEOUT_DEFAULT_SECONDS = 600; // 10 minutes export type AutomationTimeoutValidation = | { value: number | null } | { errorKey: I18nKey }; /** * Validate a raw timeout string from the edit form. A blank string means "use * the server default" (resolved as `null`). Otherwise the value must be a * positive integer. When capability discovery supplies a ceiling, values above * it are rejected before the request reaches the service. */ export function validateAutomationTimeout( raw: string, maxSeconds?: number, ): AutomationTimeoutValidation { const trimmed = raw.trim(); if (!trimmed) return { value: null }; const seconds = Number(trimmed); if (!Number.isInteger(seconds)) { return { errorKey: I18nKey.AUTOMATIONS$ERROR_TIMEOUT_INVALID_NUMBER }; } if (seconds <= 0) { return { errorKey: I18nKey.AUTOMATIONS$ERROR_TIMEOUT_POSITIVE }; } if (maxSeconds !== undefined && seconds > maxSeconds) { return { errorKey: I18nKey.AUTOMATIONS$ERROR_TIMEOUT_MAX_EXCEEDED }; } return { value: seconds }; }