From 6de5c336a284734bcde91a08fdece59c6cace5cf Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Sun, 11 Oct 2026 02:23:38 +0700 Subject: [PATCH] up --- proto/main.proto | 26 +++++++++++++++---- .../crabs/evening_detective_server/index.ts | 25 ++++++++++++++++++ 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/proto/main.proto b/proto/main.proto index 7137476..f573f36 100644 --- a/proto/main.proto +++ b/proto/main.proto @@ -626,6 +626,14 @@ service EveningDetectiveServer { }; } + // HTTP uploads are streamed by a dedicated handler, bypassing gRPC message limits. + rpc ImportGame(google.api.HttpBody) returns (GameImportRsp) { + option (google.api.http) = { + post: "/api/games/import" + body: "*" + }; + } + rpc StartGameExport(StartGameExportReq) returns (GameExportRsp) { option (google.api.http) = { post: "/api/games/{ID}/export" @@ -1645,16 +1653,24 @@ message Game { // Download ready ZIP through the authenticated streaming HTTP route: // GET /api/games/{ID}/export/download (not an HttpBody RPC). message GameExport { - string ID = 1; - string state = 2; // preparing, ready or failed; preparing/ready lock game writes. + string ID = 1; + string state = 2; // preparing, ready or failed; preparing/ready lock game writes. string packageID = 3; - int64 size = 4; - string sha256 = 5; - string failure = 6; + int64 size = 4; + string sha256 = 5; + string failure = 6; +} + +message GameImportRsp { + int32 gameID = 1; + string packageID = 2; + bool repeated = 3; } message StartGameExportReq { int32 ID = 1; } + message GetGameExportReq { int32 ID = 1; } + message GameExportRsp { GameExport export = 1; } enum ScreenMode { diff --git a/src/api/generated/crabs/evening_detective_server/index.ts b/src/api/generated/crabs/evening_detective_server/index.ts index b6d09d6..740ef47 100644 --- a/src/api/generated/crabs/evening_detective_server/index.ts +++ b/src/api/generated/crabs/evening_detective_server/index.ts @@ -574,6 +574,12 @@ export type GameExport = { failure: string | undefined; }; +export type GameImportRsp = { + gameID: number | undefined; + packageID: string | undefined; + repeated: boolean | undefined; +}; + export type StartGameExportReq = { ID: number | undefined; }; @@ -1272,6 +1278,8 @@ export interface EveningDetectiveServer { AddGame(request: AddGameReq): Promise; GetGames(request: GetGamesReq): Promise; GetGame(request: GetGameReq): Promise; + // HTTP uploads are streamed by a dedicated handler, bypassing gRPC message limits. + ImportGame(request: googleapi_HttpBody): Promise; StartGameExport(request: StartGameExportReq): Promise; GetGameExport(request: GetGameExportReq): Promise; IssueGameTickets(request: IssueGameTicketsReq): Promise; @@ -2418,6 +2426,23 @@ export function createEveningDetectiveServerClient( method: "GetGame", }) as Promise; }, + ImportGame(request) { // eslint-disable-line @typescript-eslint/no-unused-vars + const path = `api/games/import`; // eslint-disable-line quotes + const body = JSON.stringify(request); + const queryParams: string[] = []; + let uri = path; + if (queryParams.length > 0) { + uri += `?${queryParams.join("&")}` + } + return handler({ + path: uri, + method: "POST", + body, + }, { + service: "EveningDetectiveServer", + method: "ImportGame", + }) as Promise; + }, StartGameExport(request) { // eslint-disable-line @typescript-eslint/no-unused-vars if (!request.ID) { throw new Error("missing required field request.ID");