@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
JavaScript
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