From e03542b4454bb74e7198b037b70d474cc1eabe0d Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Sat, 14 Sep 2024 21:42:38 +0200 Subject: [PATCH] feat: add SaveGame --- src/index.ts | 3 +++ src/v1/SaveGame.ts | 23 +++++++++++++++++++++++ src/v1/error.ts | 4 ++++ src/v1/index.ts | 12 ++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 src/v1/SaveGame.ts diff --git a/src/index.ts b/src/index.ts index 5e8195d..4dabeab 100644 --- a/src/index.ts +++ b/src/index.ts @@ -43,6 +43,9 @@ export type { RunCommandRequest, RunCommandResponse, RunCommandResponseData, + SaveGameFailedErrorResponse, + SaveGameRequest, + SaveGameResponse, ServerClaimedErrorResponse, ServerNotClaimedErrorResponse, SetAdminPasswordRequest, diff --git a/src/v1/SaveGame.ts b/src/v1/SaveGame.ts new file mode 100644 index 0000000..1a44e1f --- /dev/null +++ b/src/v1/SaveGame.ts @@ -0,0 +1,23 @@ +import type { ApiRequest } from "./common.js"; +import { buildApiRequest } from "./common.js"; + +export type SaveGameRequest = ApiRequest< + "SaveGame", + { + /** + * Name of the save game file to create. + * + * Passed name might be sanitized. + */ + saveName: string; + } +>; + +export type SaveGameResponse = string; + +export const buildSaveGame = buildApiRequest( + "v1", + { + function: "SaveGame", + } +); diff --git a/src/v1/error.ts b/src/v1/error.ts index 3f38ef6..9463571 100644 --- a/src/v1/error.ts +++ b/src/v1/error.ts @@ -48,3 +48,7 @@ export interface PasswordInUseErrorResponse extends ErrorResponse { export interface CannotResetAdminPasswordErrorResponse extends ErrorResponse { errorCode: "cannot_reset_admin_password"; } + +export interface SaveGameFailedErrorResponse extends ErrorResponse { + errorCode: "save_game_failed"; +} diff --git a/src/v1/index.ts b/src/v1/index.ts index 2d03aef..dc780ec 100644 --- a/src/v1/index.ts +++ b/src/v1/index.ts @@ -11,6 +11,7 @@ import { buildPasswordLogin } from "./PasswordLogin.js"; import { buildQueryServerState } from "./QueryServerState.js"; import { buildRenameServer } from "./RenameServer.js"; import { buildRunCommand } from "./RunCommand.js"; +import { buildSaveGame } from "./SaveGame.js"; import { buildSetAdminPassword } from "./SetAdminPassword.js"; import { buildSetAutoLoadSessionName } from "./SetAutoLoadSessionName.js"; import { buildSetClientPassword } from "./SetClientPassword.js"; @@ -147,6 +148,16 @@ export function buildV1(options: InternalClientOptions) { * Function does not return any data on success. */ CreateNewGame: buildCreateNewGame(options), + /** + * Saves the currently loaded session into the new save game file named as the argument. + * + * Requires Admin privileges. + * + * SaveName might be changed to satisfy file system restrictions on file names. + * + * Function does not return any data on success. + */ + SaveGame: buildSaveGame(options), }; } @@ -164,6 +175,7 @@ export type * from "./PasswordLogin.js"; export type * from "./QueryServerState.js"; export type * from "./RenameServer.js"; export type * from "./RunCommand.js"; +export type * from "./SaveGame.js"; export type * from "./SetAdminPassword.js"; export type * from "./SetAutoLoadSessionName.js"; export type * from "./SetClientPassword.js";