75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
import { z } from "zod";
|
|
import {
|
|
baySchema,
|
|
companySchema,
|
|
contractSchema,
|
|
dispatchSchema,
|
|
idSchema,
|
|
pilotSchema,
|
|
playerStateSchema,
|
|
shipSchema,
|
|
timeSchema,
|
|
} from "./entities";
|
|
|
|
/** Request with no body or parameters. */
|
|
export const emptyRequestSchema = z.object({}).strict();
|
|
|
|
export const createGuestResponseSchema = z.object({
|
|
playerId: idSchema,
|
|
state: playerStateSchema,
|
|
});
|
|
|
|
export const contractBoardRequestSchema = z.object({ locationId: idSchema });
|
|
export const contractBoardResponseSchema = z.object({
|
|
contracts: z.array(contractSchema),
|
|
/** When this board period ends and every contract on it expires. */
|
|
periodEndsAt: timeSchema,
|
|
});
|
|
|
|
export const createDispatchRequestSchema = z.discriminatedUnion("kind", [
|
|
z.object({
|
|
kind: z.literal("contract"),
|
|
contractId: idSchema,
|
|
shipId: idSchema,
|
|
pilotId: idSchema,
|
|
}),
|
|
/** The avatar flies the loaner; no ship or pilot to choose. */
|
|
z.object({ kind: z.literal("tutorial"), contractId: idSchema }),
|
|
z.object({
|
|
kind: z.literal("reposition"),
|
|
shipId: idSchema,
|
|
pilotId: idSchema,
|
|
destinationId: idSchema,
|
|
}),
|
|
]);
|
|
export type CreateDispatchRequest = z.infer<typeof createDispatchRequestSchema>;
|
|
export const dispatchResponseSchema = z.object({ dispatch: dispatchSchema });
|
|
|
|
/** Decision 0.5.35: the ship is delivered to one of the player's bays. */
|
|
export const buyShipRequestSchema = z.object({ modelId: idSchema, bayId: idSchema });
|
|
export const shipResponseSchema = z.object({ ship: shipSchema });
|
|
|
|
export const leaseBayRequestSchema = z.object({ locationId: idSchema });
|
|
export const bayResponseSchema = z.object({ bay: baySchema });
|
|
|
|
/** Decision 0.5.22: hire at one of the player's bays. */
|
|
export const hirePilotRequestSchema = z.object({ locationId: idSchema });
|
|
export const assignPilotRequestSchema = z.object({ pilotId: idSchema, shipId: idSchema });
|
|
export const unassignPilotRequestSchema = z.object({ pilotId: idSchema });
|
|
/** CR-004: rest an idle pilot now, at any duty level. */
|
|
export const restPilotRequestSchema = z.object({ pilotId: idSchema });
|
|
export const spendSkillPointRequestSchema = z.object({ pilotId: idSchema, skillId: idSchema });
|
|
export const pilotResponseSchema = z.object({ pilot: pilotSchema });
|
|
|
|
export const acknowledgeSummariesRequestSchema = z.object({
|
|
dispatchIds: z.array(idSchema).min(1),
|
|
});
|
|
export const acknowledgeSummariesResponseSchema = z.object({
|
|
acknowledged: z.number().int().nonnegative(),
|
|
});
|
|
|
|
/** Pay the loan down by up to `amount` credits (decision 0.5.32). */
|
|
export const repayLoanRequestSchema = z.object({ amount: z.number().int().positive() });
|
|
export const claimGoalRequestSchema = z.object({ goalId: idSchema });
|
|
export const companyResponseSchema = z.object({ company: companySchema });
|