;
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;