From d5626d31e6a660a958242a93957c55bdeec47c2d Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Wed, 17 Jan 2024 04:08:09 +0100 Subject: [PATCH 1/8] Fix rendering of ModDetails --- packages/web_ui/src/components/ModDetails.tsx | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/web_ui/src/components/ModDetails.tsx b/packages/web_ui/src/components/ModDetails.tsx index f630f01d..973480fb 100644 --- a/packages/web_ui/src/components/ModDetails.tsx +++ b/packages/web_ui/src/components/ModDetails.tsx @@ -14,7 +14,11 @@ export default function ModDetails(props: let screens = useBreakpoint(); const mod: Partial & Partial = props.mod; - return + return {mod.error && Error} span={2} @@ -29,10 +33,14 @@ export default function ModDetails(props: && {props.actions(props.mod)} } - {mod.title && {mod.title}} - {mod.version && {mod.version}} - {mod.description && {mod.description} } - {mod.author && {mod.author}} + {Boolean(mod.title) && {mod.title}} + {Boolean(mod.version) + && {mod.version} + } + {Boolean(mod.description) + && {mod.description} + } + {Boolean(mod.author) && {mod.author}} @@ -40,17 +48,17 @@ export default function ModDetails(props: - {mod.contact && {mod.contact}} - {mod.homepage && {mod.homepage}} + {Boolean(mod.contact) && {mod.contact}} + {Boolean(mod.homepage) && {mod.homepage}} {mod.name} - {mod.factorioVersion + {Boolean(mod.factorioVersion) && {mod.factorioVersion} } - {mod.filename && {mod.filename}} + {Boolean(mod.filename) && {mod.filename}} {mod.size !== undefined && {lib.formatBytes(mod.size)} } - {mod.sha1 && {mod.sha1}} + {Boolean(mod.sha1) && {mod.sha1}} {mod.dependencies && mod.dependencies.length && {mod.dependencies From adc2d9cb4d78df6ff6f96f9c180af2021cd04b91 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Fri, 19 Jan 2024 19:17:03 +0100 Subject: [PATCH 2/8] Fix HostInfo.name description --- packages/controller/src/HostInfo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/controller/src/HostInfo.ts b/packages/controller/src/HostInfo.ts index 7a7a105e..93f41fd3 100644 --- a/packages/controller/src/HostInfo.ts +++ b/packages/controller/src/HostInfo.ts @@ -8,7 +8,7 @@ export default class HostInfo { constructor( /** Id of this host */ public id: number, - /** Version this host last connected with */ + /** Name of this host */ public name: string, /** Version this host last connected with */ public version: string, From 5e2221796a6968a82ff8f75d73a7326d6b137af7 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 20 Jan 2024 01:22:29 +0100 Subject: [PATCH 3/8] Rename sharedMods to mods on migration The place for storing mods was changed from sharedMods to mods when mod management was implemented. Rename the old sharedMods folder to mods when the migration script is invoked. --- packages/create/create.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/create/create.js b/packages/create/create.js index a50b5dbd..e5f27d24 100755 --- a/packages/create/create.js +++ b/packages/create/create.js @@ -281,6 +281,14 @@ async function migrateRename(args) { await migrateLogsDir(path.join("logs", "cluster-prerename"), path.join("logs", "cluster")); } + if ( + await fs.pathExists("sharedMods") + && !await fs.pathExists("mods") + ) { + logger.info("Moving sharedMods/ to mods/"); + await fs.rename("sharedMods", "mods"); + } + if (!args.dev) { let pkg = JSON.parse(await fs.readFile("package.json")); if (pkg.dependencies) { From 671ff23085a955392d5a802e3c7dbd31a8781883 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 20 Jan 2024 01:30:24 +0100 Subject: [PATCH 4/8] Write new run scripts during migration If the old run-master or run-slave scripts are present write the new run-controller and/or run-host scripts. --- packages/create/create.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/create/create.js b/packages/create/create.js index e5f27d24..2ccfb8b7 100755 --- a/packages/create/create.js +++ b/packages/create/create.js @@ -305,9 +305,27 @@ async function migrateRename(args) { await execFile(`npm${scriptExt}`, ["update"]); } + const hasRunMaster = await fs.pathExists("run-master.sh") || await fs.pathExists("run-master.cmd"); + const hasRunSlave = await fs.pathExists("run-slave.sh") || await fs.pathExists("run-slave.cmd"); + if (hasRunMaster || hasRunSlave) { + logger.info("Writing run scripts"); + let mode = "standalone"; + if (!hasRunSlave) { mode = "controller"; } + if (!hasRunMaster) { mode = "host"; } + await writeScripts(mode); + } + logger.info( "Migration complete, you may now delete the following left over files and directories (if present):" + - "\n- config-master.json\n- config-slave.json\n- logs/master\n- logs/slave\n- logs/cluster-prerename" + "\n- config-master.json" + + "\n- config-slave.json" + + "\n- logs/master" + + "\n- logs/slave" + + "\n- logs/cluster-prerename" + + "\n- systemd/clusteriomaster.service" + + "\n- systemd/clusterioslave.service" + + "\n- run-master.sh / run-master.cmd" + + "\n- run-slave.sh / run-slave.cmd" ); } From 96f48ca1020283cc20dc4a3f2f068e9318c95d88 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 20 Jan 2024 01:34:33 +0100 Subject: [PATCH 5/8] Fix installer breaking on setting up plugins The entrypoint of plugins were changed in 50f12c7 and b0f6c95 but the installer's loading of plugin info to get the correct plugin name was not updated for these changes. Update installer plugin loading to use the correct entrypoint. --- packages/create/create.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create/create.js b/packages/create/create.js index 2ccfb8b7..7fcc62bc 100755 --- a/packages/create/create.js +++ b/packages/create/create.js @@ -374,7 +374,7 @@ async function installClusterio(mode, plugins) { for (let plugin of plugins) { if (!pluginList.has(plugin)) { // eslint-disable-next-line node/global-require - let pluginInfo = require(require.resolve(path.posix.join(plugin, "info"), { paths: [process.cwd()] })); + let pluginInfo = require(require.resolve(plugin, { paths: [process.cwd()] })).plugin; pluginList.set(pluginInfo.name, plugin); } } From bb1401a6832322f4fcdce25761274af35db8156a Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 20 Jan 2024 02:03:23 +0100 Subject: [PATCH 6/8] Update jsonwebtoken used by player_auth This was missed during 1a9cbd2 which updated jsonwebtoken in other packages. --- plugins/player_auth/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/player_auth/package.json b/plugins/player_auth/package.json index da721e6c..d3ff154a 100644 --- a/plugins/player_auth/package.json +++ b/plugins/player_auth/package.json @@ -23,7 +23,7 @@ "dependencies": { "@sinclair/typebox": "^0.30.4", "express": "^4.16.2", - "jsonwebtoken": "^8.2.1" + "jsonwebtoken": "^9.0.1" }, "devDependencies": { "@clusterio/lib": "^2.0.0-alpha.13", From 1e66f1191747f41bd820bebaf0e7cc2664c181e9 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 20 Jan 2024 02:16:19 +0100 Subject: [PATCH 7/8] Reorder members of Address The logical order of clusterio's components are in most places controller, host, instance, control. It is confusing that Address breaks this convention and I do not remember I wrote it that way. Reorder and renumber the host and instance members of Address to be consistent with most other places. --- packages/lib/src/data/messages_core.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/lib/src/data/messages_core.ts b/packages/lib/src/data/messages_core.ts index 4a84e9c4..67ea64a5 100644 --- a/packages/lib/src/data/messages_core.ts +++ b/packages/lib/src/data/messages_core.ts @@ -19,10 +19,10 @@ export type AddressShorthand = export class Address { /** Controller address */ static controller = 0; - /** Instance address */ - static instance = 1; /** Host address */ - static host = 2; + static host = 1; + /** Instance address */ + static instance = 2; /** Control address */ static control = 3; /** Broadcast */ From c3c2528c30294ed5b20c0889d3d8a78f5e4e6212 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 20 Jan 2024 02:44:55 +0100 Subject: [PATCH 8/8] Add missing updates to instance.updatedAt Fix instances not properly updating their status to unassigned and unknown due to the updatedAt field not being updated with the current timestamp. --- packages/controller/src/Controller.ts | 1 + packages/controller/src/HostConnection.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/controller/src/Controller.ts b/packages/controller/src/Controller.ts index 89214e0f..4ad9e6f0 100644 --- a/packages/controller/src/Controller.ts +++ b/packages/controller/src/Controller.ts @@ -937,6 +937,7 @@ export default class Controller { ); } else { instance.status = "unassigned"; + instance.updatedAt = Date.now(); this.instanceDetailsUpdated([instance]); } } diff --git a/packages/controller/src/HostConnection.ts b/packages/controller/src/HostConnection.ts index f4cf1d84..ec078553 100644 --- a/packages/controller/src/HostConnection.ts +++ b/packages/controller/src/HostConnection.ts @@ -57,6 +57,7 @@ export default class HostConnection extends BaseConnection { } this.connector.on("close", () => { + const now = Date.now(); // Update status to unknown for instances on this host. const instances: InstanceInfo[] = []; for (let instance of this._controller.instances.values()) { @@ -67,6 +68,7 @@ export default class HostConnection extends BaseConnection { instances.push(instance); let prev = instance.status; instance.status = "unknown"; + instance.updatedAt = now; lib.invokeHook(this._controller.plugins, "onInstanceStatusChanged", instance, prev); } this._controller.instanceDetailsUpdated(instances);