@clusterio/host
Version:
Implementation of Clusterio host server
190 lines • 8.28 kB
TypeScript
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