import { z } from 'zod'; export const gameServerStatusSchema = z.enum([ 'DRAFT', 'PROVISIONING', 'INSTALLING', 'STOPPED', 'QUEUED', 'STARTING', 'RUNNING', 'STOPPING', 'BACKING_UP', 'RESTORING', 'UNKNOWN', 'ERROR', 'DELETING', 'DELETED', ]); export const serverEditionSchema = z.enum(['JAVA', 'BEDROCK']); export const softwareFamilySchema = z.enum([ 'VANILLA', 'PAPER', 'PURPUR', 'FABRIC', 'FORGE', 'NEOFORGE', 'QUILT', 'BEDROCK_DEDICATED', ]); export const createServerRequestSchema = z.object({ name: z.string().min(1).max(64), edition: serverEditionSchema.default('JAVA'), softwareFamily: softwareFamilySchema.default('VANILLA'), minecraftVersion: z.string().min(1).max(32).default('1.21.1'), eulaAccepted: z.literal(true, { errorMap: () => ({ message: 'EULA must be accepted' }), }), ramMb: z.number().int().min(512).max(65536).optional(), planId: z.string().uuid().optional(), }); export const serverResponseSchema = z.object({ id: z.string().uuid(), userId: z.string().uuid(), planId: z.string().uuid().nullable(), nodeId: z.string().uuid().nullable(), name: z.string(), status: gameServerStatusSchema, version: z.number().int(), edition: serverEditionSchema, softwareFamily: softwareFamilySchema, minecraftVersion: z.string(), eulaAccepted: z.boolean(), hostPort: z.number().int().nullable(), containerId: z.string().nullable(), dataPath: z.string().nullable(), activeWorldName: z.string(), ramMb: z.number().int(), idleShutdownEnabled: z.boolean(), idleStopAt: z.string().datetime().nullable(), createdAt: z.string().datetime(), updatedAt: z.string().datetime(), }); export const serverListResponseSchema = z.object({ servers: z.array(serverResponseSchema), }); export const serverActionResponseSchema = z.object({ server: serverResponseSchema, jobId: z.string().optional(), queuePosition: z.number().int().optional(), }); export type GameServerStatus = z.infer; export type ServerEdition = z.infer; export type SoftwareFamily = z.infer; export type CreateServerRequest = z.infer; export type ServerResponse = z.infer; export type ServerListResponse = z.infer; export type ServerActionResponse = z.infer;