56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import { CHECK_TTL_SENTINEL } from "@/domain/checks/check.type.js";
|
|
import { z } from "zod";
|
|
|
|
//****************************************
|
|
// Settings Validations
|
|
//****************************************
|
|
|
|
export const updateAppSettingsBodyValidation = z
|
|
.object({
|
|
checkTTL: z.number().int().min(1).max(CHECK_TTL_SENTINEL).optional(),
|
|
systemEmailPort: z.number().nullable().optional(),
|
|
pagespeedApiKey: z.string().nullable().optional(),
|
|
language: z.string().optional(),
|
|
timezone: z.string().optional(),
|
|
systemEmailHost: z.string().nullable().optional(),
|
|
systemEmailAddress: z.string().nullable().optional(),
|
|
systemEmailDisplayName: z
|
|
.string()
|
|
.max(100)
|
|
.transform((val) => (val.trim() === "" ? null : val.trim()))
|
|
.nullable()
|
|
.optional(),
|
|
systemEmailPassword: z.string().nullable().optional(),
|
|
systemEmailUser: z.string().nullable().optional(),
|
|
systemEmailConnectionHost: z.string().nullable().optional(),
|
|
systemEmailTLSServername: z.string().nullable().optional(),
|
|
|
|
showURL: z.boolean().optional(),
|
|
systemEmailSecure: z.boolean().optional(),
|
|
systemEmailPool: z.boolean().optional(),
|
|
systemEmailIgnoreTLS: z.boolean().optional(),
|
|
systemEmailRequireTLS: z.boolean().optional(),
|
|
systemEmailRejectUnauthorized: z.boolean().optional(),
|
|
|
|
globalThresholds: z
|
|
.object({
|
|
cpu: z.number().min(1).max(100).optional(),
|
|
memory: z.number().min(1).max(100).optional(),
|
|
disk: z.number().min(1).max(100).optional(),
|
|
temperature: z.number().min(1).max(150).optional(),
|
|
})
|
|
.optional(),
|
|
globalProxyEnabled: z.boolean().optional(),
|
|
globalProxyId: z.string().nullable().optional(),
|
|
})
|
|
.strip()
|
|
.superRefine((body, ctx) => {
|
|
if (body.globalProxyEnabled === true && !body.globalProxyId) {
|
|
ctx.addIssue({
|
|
code: "custom",
|
|
path: ["globalProxyId"],
|
|
message: "A proxy must be selected to enable the global proxy",
|
|
});
|
|
}
|
|
});
|