From 8fe3294a08fa0f4908ac9459fd4f465795eb489c Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Mon, 20 Jul 2026 15:30:13 -0600 Subject: [PATCH] fix(schedule): give scheduleType a clean enum type for the host-access gate createInsertSchema inferred scheduleType as a broadened union (drizzle-zod 0.5.1), so passing input.scheduleType into assertHostScheduleAccess failed typecheck on a cold build. Refine the insert schema's scheduleType to a plain z.enum and type the helper param as the schedule enum. --- packages/server/src/db/schema/schedule.ts | 10 +++++++++- packages/server/src/services/schedule.ts | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/server/src/db/schema/schedule.ts b/packages/server/src/db/schema/schedule.ts index 4c679ae36..6e7395dcb 100644 --- a/packages/server/src/db/schema/schedule.ts +++ b/packages/server/src/db/schema/schedule.ts @@ -57,6 +57,7 @@ export const schedules = pgTable("schedule", { }); export type Schedule = typeof schedules.$inferSelect; +export type ScheduleType = Schedule["scheduleType"]; export const schedulesRelations = relations(schedules, ({ one, many }) => ({ application: one(applications, { @@ -78,7 +79,14 @@ export const schedulesRelations = relations(schedules, ({ one, many }) => ({ deployments: many(deployments), })); -export const createScheduleSchema = createInsertSchema(schedules); +export const createScheduleSchema = createInsertSchema(schedules, { + scheduleType: z.enum([ + "application", + "compose", + "server", + "dokploy-server", + ]), +}); export const updateScheduleSchema = createScheduleSchema.extend({ scheduleId: z.string().min(1), diff --git a/packages/server/src/services/schedule.ts b/packages/server/src/services/schedule.ts index db6d51ecd..c94973e02 100644 --- a/packages/server/src/services/schedule.ts +++ b/packages/server/src/services/schedule.ts @@ -22,7 +22,7 @@ export type ScheduleExtended = Awaited>; // not downgrade this to a service-access check. export const assertHostScheduleAccess = async ( ctx: { user: { id: string }; session: { activeOrganizationId: string } }, - scheduleType: string | undefined, + scheduleType: Schedule["scheduleType"] | null | undefined, serverId: string | null | undefined, ) => { if (scheduleType !== "server" && scheduleType !== "dokploy-server") return;