Files
core2026/packages/common/src/gateway/profileStatus.ts
T

71 lines
1.9 KiB
TypeScript

export const GATEWAY_PROFILE_STATUSES = [
'RESERVED',
'PREOPEN',
'RUNNING',
'PAUSED',
'COMPLETED',
'STOPPED',
'DISABLED',
] as const;
export type GatewayProfileStatus = (typeof GATEWAY_PROFILE_STATUSES)[number];
export type GatewayProfileCapabilities = {
/** Frontend/API/daemon processes are expected to remain online. */
runtimeExpected: boolean;
/** A player may enter the game and read or edit data such as reserved turns. */
userAccessible: boolean;
/** The turn daemon may advance logical game time. */
turnsRunning: boolean;
/** An operator may move this state directly back to RUNNING. */
operatorResumable: boolean;
};
const CAPABILITIES: Record<GatewayProfileStatus, GatewayProfileCapabilities> = {
RESERVED: {
runtimeExpected: false,
userAccessible: false,
turnsRunning: false,
operatorResumable: false,
},
PREOPEN: {
runtimeExpected: true,
userAccessible: true,
turnsRunning: false,
operatorResumable: false,
},
RUNNING: {
runtimeExpected: true,
userAccessible: true,
turnsRunning: true,
operatorResumable: false,
},
PAUSED: {
runtimeExpected: true,
userAccessible: true,
turnsRunning: false,
operatorResumable: true,
},
COMPLETED: {
runtimeExpected: true,
userAccessible: true,
turnsRunning: false,
operatorResumable: false,
},
STOPPED: {
runtimeExpected: false,
userAccessible: false,
turnsRunning: false,
operatorResumable: true,
},
DISABLED: {
runtimeExpected: false,
userAccessible: false,
turnsRunning: false,
operatorResumable: false,
},
};
export const gatewayProfileCapabilities = (status: GatewayProfileStatus): GatewayProfileCapabilities =>
CAPABILITIES[status];