UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

67 lines (66 loc) 2.83 kB
import { PrinterTypesEnum } from "../printer-api.interface.js"; import "../../constants/service.constants.js"; import { z } from "zod"; //#region src/services/validators/printer-service.validation.ts const octoPrintApiKeySchema = z.string().min(32).max(43).regex(/^[a-zA-Z0-9_-]+$/, "Alpha-numeric, dash, and underscore only"); const printerApiKeyValidator = z.string().optional(); const printerNameValidator = z.string(); const printerUsernameValidator = z.string().nullable(); const printerPasswordValidator = z.string().nullable(); const printerEnabledValidator = z.boolean(); const printerDisabledReasonValidator = z.string().nullable(); const printerUrlValidator = z.string().url(); const printerTypeValidator = z.nativeEnum(PrinterTypesEnum); const printerDateAddedValidator = z.number().optional(); const prusaLinkAuthSchema = z.object({ username: printerUsernameValidator, password: printerPasswordValidator }); const basePrinterSchema = z.object({ dateAdded: printerDateAddedValidator, printerURL: printerUrlValidator, printerType: printerTypeValidator, apiKey: printerApiKeyValidator, username: printerUsernameValidator.optional(), password: printerPasswordValidator.optional(), enabled: printerEnabledValidator.optional(), name: printerNameValidator }).strip(); z.object({ apiKey: printerApiKeyValidator, printerType: printerTypeValidator, username: printerUsernameValidator.optional(), password: printerPasswordValidator.optional() }); const refineApiKeyValidator = (data, ctx) => { if (data.printerType === 0) { const result = octoPrintApiKeySchema.safeParse(data.apiKey); if (!result.success) result.error.issues.forEach((issue) => { ctx.addIssue({ ...issue, path: ["apiKey", ...issue.path] }); }); } else if (data.printerType === 2 || data.printerType === 3) { const result = prusaLinkAuthSchema.safeParse({ username: data.username, password: data.password }); if (!result.success) result.error.issues.forEach((issue) => { ctx.addIssue({ ...issue, path: ["username", ...issue.path] }); ctx.addIssue({ ...issue, path: ["password", ...issue.path] }); }); } }; const createPrinterSchema = basePrinterSchema.superRefine(refineApiKeyValidator); const updatePrinterEnabledSchema = z.object({ enabled: printerEnabledValidator }); const updatePrinterDisabledReasonSchema = z.object({ disabledReason: printerDisabledReasonValidator }); //#endregion export { createPrinterSchema, printerApiKeyValidator, printerDateAddedValidator, printerDisabledReasonValidator, printerEnabledValidator, printerNameValidator, printerPasswordValidator, printerTypeValidator, printerUrlValidator, printerUsernameValidator, refineApiKeyValidator, updatePrinterDisabledReasonSchema, updatePrinterEnabledSchema }; //# sourceMappingURL=printer-service.validation.js.map