diff --git a/apps/dashboard/src/components/forms/api-key/form.tsx b/apps/dashboard/src/components/forms/api-key/form.tsx index d8db436fa..d5482a4ac 100644 --- a/apps/dashboard/src/components/forms/api-key/form.tsx +++ b/apps/dashboard/src/components/forms/api-key/form.tsx @@ -34,7 +34,7 @@ import { toast } from "sonner"; import { z } from "zod"; export const schema = z.object({ - name: z.string().min(1, "Name is required"), + name: z.string().trim().min(1, "Name is required"), description: z.string().optional(), expiresAt: z.string().optional(), // Single-value radio. The wire format on the create-key API is diff --git a/apps/dashboard/src/components/forms/components/form-components.tsx b/apps/dashboard/src/components/forms/components/form-components.tsx index 1f65910cb..d44063e8f 100644 --- a/apps/dashboard/src/components/forms/components/form-components.tsx +++ b/apps/dashboard/src/components/forms/components/form-components.tsx @@ -106,7 +106,7 @@ const componentSchema = z.object({ id: z.number(), monitorId: z.number().nullish(), order: z.number(), - name: z.string().min(1, { message: "Name is required" }), + name: z.string().trim().min(1, { message: "Name is required" }), description: z.string().optional(), type: z.enum(["monitor", "static"]), }); @@ -117,7 +117,7 @@ const schema = z.object({ z.object({ id: z.number(), order: z.number(), - name: z.string(), + name: z.string().trim().min(1, { message: "Name is required" }), defaultOpen: z.boolean(), components: z.array(componentSchema).min(1, { message: "At least one component is required", @@ -738,7 +738,7 @@ function ComponentRow({ className={cn("rounded-md", className)} {...props} > -
+
; diff --git a/apps/dashboard/src/components/forms/status-report/form.tsx b/apps/dashboard/src/components/forms/status-report/form.tsx index 72e5b658b..bf769987d 100644 --- a/apps/dashboard/src/components/forms/status-report/form.tsx +++ b/apps/dashboard/src/components/forms/status-report/form.tsx @@ -64,7 +64,7 @@ import { useTRPC } from "@/lib/trpc/client"; const schema = z.object({ status: z.enum(statusReportStatus), - title: z.string().min(1, "Title is required.").max(256), + title: z.string().trim().min(1, "Title is required.").max(256), message: z.string(), date: z.date(), pageComponents: z.array(z.number()), diff --git a/apps/dashboard/src/components/nav/nav-feedback.tsx b/apps/dashboard/src/components/nav/nav-feedback.tsx index 8f97d9032..84c1cb0a6 100644 --- a/apps/dashboard/src/components/nav/nav-feedback.tsx +++ b/apps/dashboard/src/components/nav/nav-feedback.tsx @@ -27,7 +27,7 @@ import { z } from "zod"; import { useTRPC } from "@/lib/trpc/client"; const schema = z.object({ - message: z.string().min(1), + message: z.string().trim().min(1), }); export function NavFeedback() { diff --git a/packages/services/src/api-key/schemas.ts b/packages/services/src/api-key/schemas.ts index edc2e4890..a9e536ac5 100644 --- a/packages/services/src/api-key/schemas.ts +++ b/packages/services/src/api-key/schemas.ts @@ -19,7 +19,7 @@ export const apiKeyCreateScopesSchema = z .default(["write"]); export const CreateApiKeyInput = z.object({ - name: z.string().min(1, "Name is required"), + name: z.string().trim().min(1, "Name is required"), description: z.string().optional(), expiresAt: z.date().optional(), scopes: apiKeyCreateScopesSchema, diff --git a/packages/services/src/maintenance/schemas.ts b/packages/services/src/maintenance/schemas.ts index 31172b46f..62a0db48e 100644 --- a/packages/services/src/maintenance/schemas.ts +++ b/packages/services/src/maintenance/schemas.ts @@ -12,7 +12,7 @@ export const maintenanceListPeriodSchema = z.enum(maintenanceListPeriods); export const CreateMaintenanceInput = z .object({ - title: z.string().min(1).max(256), + title: z.string().trim().min(1).max(256), message: z.string().min(1), from: z.coerce.date(), to: z.coerce.date(), @@ -27,7 +27,7 @@ export type CreateMaintenanceInput = z.infer; export const UpdateMaintenanceInput = z.object({ id: z.number().int(), - title: z.string().min(1).max(256).optional(), + title: z.string().trim().min(1).max(256).optional(), message: z.string().min(1).optional(), from: z.coerce.date().optional(), to: z.coerce.date().optional(), diff --git a/packages/services/src/monitor-tag/schemas.ts b/packages/services/src/monitor-tag/schemas.ts index 466b47824..70abfb0ba 100644 --- a/packages/services/src/monitor-tag/schemas.ts +++ b/packages/services/src/monitor-tag/schemas.ts @@ -5,7 +5,7 @@ export type ListMonitorTagsInput = z.infer; const tagInput = z.object({ id: z.number().int().optional(), - name: z.string(), + name: z.string().trim().min(1), color: z.string(), }); diff --git a/packages/services/src/page-component/schemas.ts b/packages/services/src/page-component/schemas.ts index 8b6546d14..d228a7871 100644 --- a/packages/services/src/page-component/schemas.ts +++ b/packages/services/src/page-component/schemas.ts @@ -17,7 +17,7 @@ const componentInput = z id: z.number().int().optional(), monitorId: z.number().int().nullish(), order: z.number().int(), - name: z.string(), + name: z.string().trim().min(1), description: z.string().nullish(), type: z.enum(["monitor", "static"]), }) @@ -37,7 +37,7 @@ const groupInput = z.object({ // assignments, subscriber scopes) off a cliff. id: z.number().int().optional(), order: z.number().int(), - name: z.string(), + name: z.string().trim().min(1), defaultOpen: z.boolean().optional().default(false), components: z.array(componentInput), }); @@ -60,7 +60,7 @@ export const CreatePageComponentInput = z pageId: z.number().int(), type: z.enum(["monitor", "static"]), monitorId: z.number().int().nullish(), - name: z.string().min(1).optional(), + name: z.string().trim().min(1).optional(), description: z.string().nullish(), order: z.number().int().default(0), groupId: z.number().int().nullish(), @@ -84,7 +84,7 @@ export type CreatePageComponentInput = z.input; /** Partial patch — `undefined` leaves a field as-is, `null` clears it. */ export const UpdatePageComponentInput = z.object({ id: z.number().int(), - name: z.string().min(1).optional(), + name: z.string().trim().min(1).optional(), description: z.string().nullish(), order: z.number().int().optional(), groupId: z.number().int().nullish(), diff --git a/packages/services/src/private-location/schemas.ts b/packages/services/src/private-location/schemas.ts index 6cb07a625..7e04516e1 100644 --- a/packages/services/src/private-location/schemas.ts +++ b/packages/services/src/private-location/schemas.ts @@ -18,7 +18,7 @@ export const PrivateLocationMetadata = z export type PrivateLocationMetadata = z.infer; export const CreatePrivateLocationInput = z.object({ - name: z.string().min(1), + name: z.string().trim().min(1), token: z.string().min(1).optional(), monitors: monitorIds, metadata: PrivateLocationMetadata.optional(), @@ -29,7 +29,7 @@ export type CreatePrivateLocationInput = z.infer< export const UpdatePrivateLocationInput = z.object({ id: z.number().int(), - name: z.string().min(1).optional(), + name: z.string().trim().min(1).optional(), monitors: monitorIds.optional(), metadata: PrivateLocationMetadata.optional(), }); diff --git a/packages/services/src/status-report/schemas.ts b/packages/services/src/status-report/schemas.ts index 0536ac115..b4e17a1b9 100644 --- a/packages/services/src/status-report/schemas.ts +++ b/packages/services/src/status-report/schemas.ts @@ -27,7 +27,7 @@ export type StatusReportListPeriod = (typeof statusReportListPeriods)[number]; export const statusReportListPeriodSchema = z.enum(statusReportListPeriods); export const CreateStatusReportInput = z.object({ - title: z.string().min(1).max(256), + title: z.string().trim().min(1).max(256), status: statusReportStatusSchema, message: z.string(), date: z.coerce.date(), @@ -40,7 +40,7 @@ export type CreateStatusReportInput = z.infer; export const UpdateStatusReportInput = z.object({ id: z.number().int(), - title: z.string().min(1).max(256).optional(), + title: z.string().trim().min(1).max(256).optional(), status: statusReportStatusSchema.optional(), /** When provided, replaces the full association set (empty array clears). */ pageComponentIds: z.array(z.number().int()).optional(), diff --git a/packages/services/src/workspace/schemas.ts b/packages/services/src/workspace/schemas.ts index 4a80811f7..eec8be63c 100644 --- a/packages/services/src/workspace/schemas.ts +++ b/packages/services/src/workspace/schemas.ts @@ -19,7 +19,7 @@ export type GetWorkspaceByStripeIdInput = z.infer< >; export const UpdateWorkspaceNameInput = z.object({ - name: z.string().min(1), + name: z.string().trim().min(1), }); export type UpdateWorkspaceNameInput = z.infer;