UNPKG

@clusterio/host

Version:

Implementation of Clusterio host server

190 lines 8.28 kB
import * as lib from "@clusterio/lib"; import type { HostConnector } from "../host"; import InstanceConnection from "./InstanceConnection"; import BaseHostPlugin from "./BaseHostPlugin"; /** * Searches for instances in the provided directory * * Looks through all sub-dirs of the provided directory for valid * instance definitions and return a mapping of instance id to * instanceInfo objects. * * @param instancesDir - Directory containing instances * @returns * mapping between instance id and information about this instance. * @internal */ declare function discoverInstances(instancesDir: string): Promise<Map<number, { path: string; config: lib.InstanceConfig; }>>; export declare class HostRouter { host: Host; constructor(host: Host); /** * Forward a message to the next hop towards its destination. * * @param origin - * Link the message originated from. * @param message - Message to process. * @param entry - message entry if message is a request or an event. * @param hasFallback - is fallback available * @returns true if the message was handled, false if fallback * is requested */ forwardMessage(origin: lib.Link, message: lib.MessageRoutable, entry: lib.RequestEntry | lib.EventEntry | undefined, hasFallback: boolean): boolean; broadcastMessage(origin: lib.Link, message: lib.MessageRoutable, entry: lib.EventEntry): void; wakeInstance(origin: lib.Link, message: lib.MessageRoutable, nextHop?: lib.Link): void; sendMessage(nextHop: lib.Link, message: lib.MessageRoutable, origin: lib.Link): void; warnUnrouted(message: lib.MessageRoutable, msg?: string): void; } /** * Handles running the host * * Connects to the controller over the WebSocket and manages intsances. */ export default class Host extends lib.Link { /** * If true indicates that there is a process monitor present that * will restart this host on a non-zero exit codes. */ canRestart: boolean; /** * If true indicates the host is in recovery mode and should * disable certain actions such as loading plugins or instance autostart */ recoveryMode: boolean; modStore: lib.ModStore; "connector": HostConnector; router: HostRouter; /** * Certificate authority used to validate TLS connections to the controller. */ tlsCa?: string; pluginInfos: lib.PluginNodeEnvInfo[]; config: lib.HostConfig; /** Mapping of plugin name to loaded plugin */ plugins: Map<string, BaseHostPlugin>; instanceConnections: Map<number, InstanceConnection>; discoveredInstanceInfos: Map<number, { path: string; config: lib.InstanceConfig; }>; instanceInfos: Map<number, { path: string; config: lib.InstanceConfig; }>; adminlist: Set<string>; banlist: Map<string, string>; whitelist: Set<string>; serverVersion: string; serverPlugins: Map<string, string>; _startup: boolean; _disconnecting: boolean; _shuttingDown: boolean; static instanceConfigWarning: { _warning: string; }; static bootstrap(hostConfig: lib.HostConfig): Promise<readonly [lib.ModStore]>; constructor(connector: HostConnector, hostConfig: lib.HostConfig, tlsCa: string | undefined, pluginInfos: lib.PluginNodeEnvInfo[], /** * If true indicates that there is a process monitor present that * will restart this host on a non-zero exit codes. */ canRestart?: boolean, /** * If true indicates the host is in recovery mode and should * disable certain actions such as loading plugins or instance autostart */ recoveryMode?: boolean, modStore?: lib.ModStore); loadPlugins(): Promise<void>; _createNewInstanceDir(name: string): Promise<string>; broadcastEventToInstance<T>(event: lib.Event<T>): Promise<void>; handleHostStopRequest(): Promise<void>; handleHostRestartRequest(): Promise<void>; handleHostConfigGetRequest(): Promise<Record<string, string | number | boolean | {} | null>>; handleHostConfigSetFieldRequest(request: lib.HostConfigSetFieldRequest): Promise<void>; handleHostConfigSetPropRequest(request: lib.HostConfigSetPropRequest): Promise<void>; handleSyncUserListsEvent(event: lib.SyncUserListsEvent): Promise<void>; handleAdminlistUpdateEvent(event: lib.InstanceAdminlistUpdateEvent): Promise<void>; handleBanlistUpdateEvent(event: lib.InstanceBanlistUpdateEvent): Promise<void>; handleWhitelistUpdateEvent(event: lib.InstanceWhitelistUpdateEvent): Promise<void>; downloadMod(mod: lib.ModRecord): Promise<lib.ModInfo>; private _fetchModQueue; fetchMod(mod: lib.ModRecord): Promise<lib.ModInfo>; private _fetchModInternal; fetchMods(mods: Iterable<lib.ModRecord>): Promise<lib.ModInfo[]>; handleInstanceAssignInternalRequest(request: lib.InstanceAssignInternalRequest): Promise<void>; handleInstanceUnassignInternalRequest(request: lib.InstanceUnassignInternalRequest): Promise<void>; instanceLogMeta(instanceId: number, instanceInfo?: { config: lib.InstanceConfig; }): { instance_id: number; instance_name: string; }; getRequestInstanceInfo(instanceId: number): { path: string; config: lib.InstanceConfig; }; /** * Retrieved assigned port of the given instance * @param instanceId - ID of the instance to get the assigned game port of: * @returns Assigned game port or undefined if it does not exist. */ gamePort(instanceId: number): number | undefined; assignGamePort(instanceId: number): number; /** * Initialize and connect an unloaded instance * * @param instanceId - ID of instance to initialize. * @returns connection to instance. */ _connectInstance(instanceId: number): Promise<InstanceConnection>; handleSystemInfoRequest(): Promise<lib.SystemInfo>; checkRestartRequired(): Promise<boolean>; handleHostMetricsRequest(): Promise<{ results: (lib.CollectorResult | { metric: { type: "counter" | "gauge" | "histogram" | "summary" | "untyped"; help: string; name: string; labels: string[]; }; samples: [string, [string, number][]][]; })[]; }>; fallbackInstanceSaveDetailsListRequest(request: lib.InstanceSaveDetailsListRequest, src: lib.Address, dst: lib.Address): Promise<lib.SaveDetails[]>; handleInstanceRenameSaveRequest(request: lib.InstanceRenameSaveRequest): Promise<void>; handleInstanceCopySaveRequest(request: lib.InstanceCopySaveRequest): Promise<void>; handleInstanceTransferSaveRequest(request: lib.InstanceTransferSaveRequest): Promise<string>; sendSaveListUpdate(instanceId: number, savesDir: string): Promise<void>; handleInstanceDeleteSaveRequest(request: lib.InstanceDeleteSaveRequest): Promise<void>; handleInstancePullSaveRequest(request: lib.InstancePullSaveRequest): Promise<string>; handleInstancePushSaveRequest(request: lib.InstancePushSaveRequest): Promise<void>; handleInstanceDeleteInternalRequest(request: lib.InstanceDeleteInternalRequest): Promise<void>; handleHostUpdateRequest(request: lib.HostUpdateRequest): Promise<void>; handlePluginUpdateRequest(request: lib.PluginUpdateRequest): Promise<void>; handlePluginInstallRequest(request: lib.PluginInstallRequest): Promise<void>; handlePluginListRequest(request: lib.PluginListRequest): Promise<lib.PluginDetails[]>; sendHostUpdate(): void; /** * Discover available instances * * Looks through the instances directory for instances and updates * the host and controller with the new list of instances. */ updateInstances(): Promise<void>; prepareDisconnect(): Promise<void>; /** * Stops all instances and closes the connection */ shutdown(): Promise<void>; /** * True if the connection to the controller is connected, not in the dropped * state,and not in the process of disconnecting. */ get connected(): boolean; } export declare const _discoverInstances: typeof discoverInstances; export {}; //# sourceMappingURL=Host.d.ts.map