From f2736bae405aed3105fb51fab5b08f9edc2d4dd8 Mon Sep 17 00:00:00 2001 From: Luciole <31817566+Luciole0x@users.noreply.github.com> Date: Mon, 14 Aug 2023 14:34:56 +0200 Subject: [PATCH] tsconfig update; fix function signature; test: add .default --- packages/controller/src/ControlConnection.ts | 47 ++++++++++++++++---- packages/controller/src/WsServer.ts | 6 +-- packages/controller/src/WsServerConnector.ts | 18 ++++++-- packages/controller/tsconfig.json | 6 +-- packages/lib/src/config/classes.ts | 2 +- test/controller/HttpCloser.js | 2 +- test/controller/routes.js | 2 +- test/mock.js | 2 +- 8 files changed, 61 insertions(+), 24 deletions(-) diff --git a/packages/controller/src/ControlConnection.ts b/packages/controller/src/ControlConnection.ts index 76f9b3d7..b43c274c 100644 --- a/packages/controller/src/ControlConnection.ts +++ b/packages/controller/src/ControlConnection.ts @@ -64,7 +64,7 @@ export default class ControlConnection extends BaseConnection { this._version = registerData.version; this.connector.on("connect", () => { - this.connector._socket.clusterio_ignore_dump = Boolean(this.ws_dumper); + this.connector._socket!.clusterio_ignore_dump = Boolean(this.ws_dumper); }); this.connector.on("close", () => { if (this.logTransport) { @@ -264,11 +264,21 @@ export default class ControlConnection extends BaseConnection { async handleInstanceDetailsGetRequest(request: lib.InstanceDetailsGetRequest) { let instance = this._controller.getRequestInstance(request.instanceId); + let assigned_host: number|null|undefined = instance.config.get("instance.assigned_host"); + if (assigned_host === null) { + assigned_host = undefined; + } + + let game_port: number|null|undefined = instance.game_port + if (game_port === null) { + game_port = undefined; + } + return new lib.InstanceDetails( instance.config.get("instance.name"), instance.id, - instance.config.get("instance.assigned_host"), - instance.game_port, + assigned_host, + game_port, instance.status, ); } @@ -276,11 +286,21 @@ export default class ControlConnection extends BaseConnection { async handleInstanceDetailsListRequest() { let list = []; for (let instance of this._controller.instances!.values()) { + let assigned_host: number|null|undefined = instance.config.get("instance.assigned_host"); + if (assigned_host === null) { + assigned_host = undefined; + } + + let game_port: number|null|undefined = instance.game_port + if (game_port === null) { + game_port = undefined; + } + list.push(new lib.InstanceDetails( instance.config.get("instance.name"), instance.id, - instance.config.get("instance.assigned_host"), - instance.game_port, + assigned_host, + game_port, instance.status, )); } @@ -296,12 +316,23 @@ export default class ControlConnection extends BaseConnection { this.instanceSubscriptions.all || this.instanceSubscriptions.instanceIds.includes(instance.id) ) { + let assigned_host: number|null|undefined = instance.config.get("instance.assigned_host"); + if (assigned_host === null) { + assigned_host = undefined; + } + + let game_port: number|null|undefined = instance.game_port + if (game_port === null) { + game_port = undefined; + } + + this.send(new lib.InstanceDetailsUpdateEvent( new lib.InstanceDetails( instance.config.get("instance.name"), instance.id, - instance.config.get("instance.assigned_host"), - instance.game_port, + assigned_host, + game_port, instance.status, ) )); @@ -954,7 +985,7 @@ export default class ControlConnection extends BaseConnection { this.send(new lib.DebugWsMessageEvent(data.direction, data.content)); } }; - this.connector._socket.clusterio_ignore_dump = true; + this.connector._socket!.clusterio_ignore_dump = true; this._controller.debugEvents.on("message", this.ws_dumper); } } diff --git a/packages/controller/src/WsServer.ts b/packages/controller/src/WsServer.ts index e120c8eb..bf57cb79 100644 --- a/packages/controller/src/WsServer.ts +++ b/packages/controller/src/WsServer.ts @@ -1,6 +1,7 @@ import type { IncomingMessage } from "http"; import type { Duplex } from "stream"; import type Controller from "./Controller"; +import type { WebSocketClusterio } from "./WsServerConnector"; import jwt from "jsonwebtoken"; import WebSocket, { WebSocketServer } from "ws"; @@ -12,11 +13,6 @@ import ControlConnection from "./ControlConnection"; import HostConnection, { HostInfo } from "./HostConnection"; import WsServerConnector from "./WsServerConnector"; -export interface WebSocketClusterio extends WebSocket { - clusterio_ignore_dump: boolean | undefined; -} - - const packageVersion = require("../package.json").version; const wsMessageCounter = new lib.Counter( diff --git a/packages/controller/src/WsServerConnector.ts b/packages/controller/src/WsServerConnector.ts index 3974a9c1..5776f93a 100644 --- a/packages/controller/src/WsServerConnector.ts +++ b/packages/controller/src/WsServerConnector.ts @@ -5,6 +5,11 @@ import events from "events"; import * as lib from "@clusterio/lib"; const { logger } = lib; +export interface WebSocketClusterio extends WebSocket { + clusterio_ignore_dump?: boolean; +} + + /** * Connector for controller connections * @@ -13,6 +18,7 @@ const { logger } = lib; */ export default class WsServerConnector extends lib.WebSocketBaseConnector { _timeoutId: NodeJS.Timeout | null = null; + declare _socket: WebSocketClusterio | null; constructor( dst: lib.Address, @@ -47,7 +53,7 @@ export default class WsServerConnector extends lib.WebSocketBaseConnector { * @param account - account data to provide to control connection */ ready( - socket: WebSocket, + socket: WebSocket.WebSocket, src: lib.Address, sessionToken: string, account: lib.AccountDetails | undefined @@ -84,7 +90,7 @@ export default class WsServerConnector extends lib.WebSocketBaseConnector { // It's possible the previous connection hasn't closed yet due to a // stale connection. Terminate it if so. - if (this._state === "connected") { + if (this._state === "connected" && this._socket !== null) { this._socket.terminate(); this._socket.once("close", () => this.continue(socket, lastSeq)); return; @@ -117,6 +123,10 @@ export default class WsServerConnector extends lib.WebSocketBaseConnector { } _attachSocketHandlers() { + if (this._socket === null) { + throw new Error("this._socket is null"); + } + this.startHeartbeat(); this._socket.on("close", (code: number, reason: string) => { @@ -188,7 +198,9 @@ export default class WsServerConnector extends lib.WebSocketBaseConnector { } this._closing = true; - this._socket.close(code, reason); + if (this._socket !== null) { + this._socket.close(code, reason); + } await events.once(this, "close"); } diff --git a/packages/controller/tsconfig.json b/packages/controller/tsconfig.json index 87c2e4ab..a0c4cf46 100644 --- a/packages/controller/tsconfig.json +++ b/packages/controller/tsconfig.json @@ -1,17 +1,15 @@ { "include": ["controller.ts", "package.json", "src/**/*.ts"], "compilerOptions": { - "lib": ["esnext"], + "lib": ["es2023"], "module": "commonjs", "target": "es2022", "rootDir": ".", "outDir": "dist/controller", "composite": true, + "sourceMap": true, "strict": true, "alwaysStrict": true, - "allowJs": true, - "checkJs": false, - "noEmitOnError": false, "esModuleInterop": true, "skipLibCheck": true, "resolveJsonModule": true diff --git a/packages/lib/src/config/classes.ts b/packages/lib/src/config/classes.ts index b1e956d1..6eb33fcb 100644 --- a/packages/lib/src/config/classes.ts +++ b/packages/lib/src/config/classes.ts @@ -58,7 +58,7 @@ function splitOn(separator: string, string: string) { return [string.slice(0, index), string.slice(index + separator.length)]; } -type SerializedConfig = ReturnType; +export type SerializedConfig = ReturnType; type SerializedGroup = ReturnType; /** diff --git a/test/controller/HttpCloser.js b/test/controller/HttpCloser.js index 13201b62..b44dc561 100644 --- a/test/controller/HttpCloser.js +++ b/test/controller/HttpCloser.js @@ -7,7 +7,7 @@ const util = require("util"); const phin = require("phin"); -const HttpCloser = require("@clusterio/controller/dist/controller/src/HttpCloser"); +const HttpCloser = require("@clusterio/controller/dist/controller/src/HttpCloser").default; // Time to wait during async operations to ensure they happened in order. const tick = 20; diff --git a/test/controller/routes.js b/test/controller/routes.js index a9724ea2..ef3f591e 100644 --- a/test/controller/routes.js +++ b/test/controller/routes.js @@ -7,7 +7,7 @@ const http = require("http"); const phin = require("phin"); const { wait } = require("@clusterio/lib"); -const routes = require("@clusterio/controller/dist/controller/src/routes"); +const routes = require("@clusterio/controller/dist/controller/src/routes").default; const mock = require("../mock"); diff --git a/test/mock.js b/test/mock.js index 13d3b220..8ad5d751 100644 --- a/test/mock.js +++ b/test/mock.js @@ -5,7 +5,7 @@ const express = require("express"); const lib = require("@clusterio/lib"); -const UserManager = require("@clusterio/controller/dist/controller/src/UserManager"); +const UserManager = require("@clusterio/controller/dist/controller/src/UserManager").default; const addr = lib.Address.fromShorthand;