mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-13 07:04:53 +09:00
* Refactor UserManager to use Datastore * Rename lib.User to UserDetails also adds to/fromUserDetails * Fix existing tests * Add user class tests * Add tests for finaliseUsers * Move HostDetails to own file with tests * Move InstanceDetails to its own file with tests * Rename HostInfo and add tests * Rename InstanceInfo and add tests - Also changes the names of the host properties related to instances - Also removes the need to specify the location of InstanceInfo * Make json round trip test validate schema * Add InstanceManager * Fix lint errors * Extra tests * Add final test coverage * Add one last test to InstanceManager * Response to comments * Use generator rather than return anonumous generator Co-authored-by: Hornwitser <github@hornwitser.no> * Fix lint issue with generator --------- Co-authored-by: Hornwitser <github@hornwitser.no>
78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
import { Type, Static } from "@sinclair/typebox";
|
|
|
|
export default class HostDetails {
|
|
constructor(
|
|
/** Version of the host software. The controller may warn if there is a mismatch. */
|
|
public version: string,
|
|
/** Human-readable display name of the host. */
|
|
public name: string,
|
|
/** Unique numeric identifier for this host. */
|
|
public id: number,
|
|
/** Whether the host is currently connected to the controller. */
|
|
public connected: boolean,
|
|
/** Address from which the host has connected to the controller. */
|
|
public remoteAddress = "",
|
|
/** Public-facing IP address of the host, if available. */
|
|
public publicAddress: string = "",
|
|
/** Unix timestamp (sec) after which issued tokens are considered valid. */
|
|
public tokenValidAfter: number = 0,
|
|
/** Unix timestamp (ms) indicating when this record was last updated. */
|
|
public updatedAtMs = 0,
|
|
/** Flag indicating the host record has been removed on the controller. */
|
|
public isDeleted = false
|
|
) {}
|
|
|
|
static jsonSchema = Type.Object({
|
|
"version": Type.String(),
|
|
"name": Type.String(),
|
|
"id": Type.Integer(),
|
|
"connected": Type.Boolean(),
|
|
"remoteAddress": Type.Optional(Type.String()),
|
|
"publicAddress": Type.Optional(Type.String()),
|
|
"tokenValidAfter": Type.Optional(Type.Number()),
|
|
"updatedAtMs": Type.Optional(Type.Number()),
|
|
"isDeleted": Type.Optional(Type.Boolean()),
|
|
});
|
|
|
|
static fromJSON(json: Static<typeof this.jsonSchema>) {
|
|
return new this(
|
|
json.version,
|
|
json.name,
|
|
json.id,
|
|
json.connected,
|
|
json.remoteAddress,
|
|
json.publicAddress,
|
|
json.tokenValidAfter,
|
|
json.updatedAtMs,
|
|
json.isDeleted
|
|
);
|
|
}
|
|
|
|
toJSON() {
|
|
const json = {
|
|
version: this.version,
|
|
name: this.name,
|
|
id: this.id,
|
|
connected: this.connected,
|
|
} as Static<typeof HostDetails.jsonSchema>;
|
|
|
|
if (this.remoteAddress !== "") {
|
|
json.remoteAddress = this.remoteAddress;
|
|
}
|
|
if (this.publicAddress !== "") {
|
|
json.publicAddress = this.publicAddress;
|
|
}
|
|
if (this.tokenValidAfter !== 0) {
|
|
json.tokenValidAfter = this.tokenValidAfter;
|
|
}
|
|
if (this.updatedAtMs !== 0) {
|
|
json.updatedAtMs = this.updatedAtMs;
|
|
}
|
|
if (this.isDeleted !== false) {
|
|
json.isDeleted = this.isDeleted;
|
|
}
|
|
|
|
return json;
|
|
}
|
|
}
|