import { ServerDate, IntBool } from '.'; import type { ViewResponse as BuildingViewResponse } from './building'; export interface ViewResponse extends BuildingViewResponse { /** Twice the Space Port's level. */ max_ships: number; docks_available: number; /** Count of docked ships, keyed by ship type. */ docked_ships: Record; } export type Target = | { body_id: number } | { body_name: string } | { star_id: number } | { star_name: string } | { x: number; y: number }; export type Paging = { page_number?: number; items_per_page?: number; no_paging?: IntBool; }; export type Filter = { task?: string; type?: string; tag?: string; }; export type Ship = { id: number; name: string; type: string; type_human: string; task: string; speed: number; fleet_speed: number; stealth: number; hold_size: number; berth_level: number; date_started: ServerDate; date_available: ServerDate; date_arrives: ServerDate; can_recall: IntBool; can_scuttle: IntBool; combat?: number; max_occupants?: number; estimated_travel_time?: number; /** * Present on ships that carry cargo. The server nests the manifest here as * `details.payload` (a list of human-readable strings); older shapes put a * bare `payload` array at the top level. */ details?: { payload?: string[] }; from?: ShipPoint; to?: ShipPoint; orbiting?: ShipPoint; }; export interface ViewAllShipsParams { building_id: number; paging?: Paging; filter?: Filter; sort?: string; } export interface ViewAllShipsResponse { ships: Ship[]; number_of_ships: number; } export interface ViewTravellingShipsParams { building_id: number; page_number?: number; } export interface ViewTravellingShipsResponse { ships_travelling: Ship[]; number_of_ships_travelling: number; } export interface ViewOrbitingShipsParams { building_id: number; page_number?: number; } export interface ViewOrbitingShipsResponse { ships: Ship[]; number_of_ships: number; } export interface ViewForeignShipsParams { building_id: number; page_number?: number; } export interface ViewForeignShipsResponse { ships: Ship[]; number_of_ships: number; } export type ShipPoint = { id: number; type: 'body' | 'star'; name: string; x: number; y: number; empire?: { id: number; name: string }; }; export interface GetFleetForParams { from_body_id: number; target: Target; } export interface GetFleetForResponse { ships: Array<{ type: string; type_human: string; speed: number; stealth: number; combat: number; name: string; hold_size: number; quantity: number; estimated_travel_time: number; }>; } export interface GetShipsForParams { from_body_id: number; target: Target; } export interface GetShipsForResponse { incoming: Ship[]; available: Ship[]; unavailable: Array<{ reason: [number, string]; ship: Ship }>; orbiting: Ship[]; mining_platforms?: Array<{ empire_id: number; empire_name: string }>; fleet_send_limit: number; } export interface SendShipTypesParams { from_body_id: number; target: Target; types: Array<{ type: string; speed?: number; stealth?: number; combat?: number; quantity: number; }>; arrival: { day: number; hour: number; minute: number; second: number } | { earliest: 1 }; } export interface SendShipTypesResponse { ships: Array<{ type: string; type_human: string; speed: number; stealth: number; combat: number; quantity: number; }>; } export interface SendFleetParams { ship_ids: number[]; target: Target; set_speed?: number; } export interface SendFleetResponse { // TODO - I don't think this is right but it's outside of what I'm testing right now fleet: Ship[]; } export interface RecallShipParams { building_id: number; ship_id: number; } export interface RecallShipResponse { ship: Ship; } export interface RecallAllParams { building_id: number; } export interface RecallAllResponse { ships: Ship[]; } export interface NameShipParams { building_id: number; ship_id: number; name: string; } export interface NameShipResponse {} export interface ScuttleShipParams { building_id: number; ship_id: number; } export interface ScuttleShipResponse {} export interface MassScuttleShipParams { building_id: number; ship_ids: number[]; } export interface MassScuttleShipResponse {} export type Spy = { id: number; level: number; name: string; assigned_to?: { body_id: number; name: string }; }; export interface PrepareSendSpiesParams { on_body_id: number; to_body_id: number; } export interface PrepareSendSpiesResponse { ships: Ship[]; spies: Spy[]; } export interface SendSpiesParams { on_body_id: number; to_body_id: number; ship_id: number; spy_ids: number[]; } export interface SendSpiesResponse { ship: Ship; spies_sent: number[]; spies_not_sent: number[]; } export interface PrepareFetchSpiesParams { on_body_id: number; to_body_id: number; } export interface PrepareFetchSpiesResponse { ships: Ship[]; spies: Spy[]; } export interface FetchSpiesParams { on_body_id: number; to_body_id: number; ship_id: number; spy_ids: number[]; } export interface FetchSpiesResponse { ship: Ship; } export interface ViewBattleLogsParams { building_id: number; page_number?: number; } export interface ViewBattleLogsResponse { battle_log: Array<{ date: ServerDate; attacking_body: string; attacking_empire: string; attacking_unit: string; defending_body: string; defending_empire: string; defending_unit: string; victory_to: 'attacker' | 'defender'; }>; number_of_logs: number; } export interface SendShipParams { ship_id: number; target: Target; } export interface SendShipResponse { // "id" : "id-goes-here", // "quantity" : 1, // "task" : "Travelling", // "details" { // "name" : "P13", // "mark" : "A3123AB8ED", // "type_human" : "Probe", // "type" : "probe", // "speed" : "1200", // "stealth" : "0", // "combat" : "0", // "hold_size" : "0", // "berth_level" : "1", // "date_started" : "01 31 2010 13:09:05 +0600", // "date_available" : "02 01 2010 10:08:33 +0600", // "max_occupants" : "0", // "payload" : "{}", // "can_scuttle" : "0", // "can_recall" : "0", // }, // "date_arrives" : "02 01 2010 10:08:33 +0600", // "from" : { // "id" : "id-goes-here", // "type" : "body", // "name" : "Earth", // "owner" : "Allied", // "empire" : { // "id" : "id-goes-here", // "name" : "Earthlings" // } // }, // "to" : { // "id" : "id-goes-here", // "type" : "star", // "name" : "Sol", // } }