/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { HathoraCloudCore } from "../core.js"; import { encodeJSON, encodeSimple } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; import * as components from "../models/components/index.js"; import { HathoraCloudError } from "../models/errors/hathoraclouderror.js"; import { ConnectionError, InvalidRequestError, RequestAbortedError, RequestTimeoutError, UnexpectedClientError, } from "../models/errors/httpclienterrors.js"; import * as errors from "../models/errors/index.js"; import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; /** * SetLobbyState * * @remarks * Set the state of a lobby. State is intended to be set by the server and must be smaller than 1MB. Use this endpoint to store match data like live player count to enforce max number of clients or persist end-game data (i.e. winner or final scores). * * @deprecated method: This will be removed in a future release, please migrate away from it as soon as possible. */ export function lobbiesV2SetLobbyState( client: HathoraCloudCore, roomId: string, setLobbyStateParams: components.SetLobbyStateParams, appId?: string | undefined, options?: RequestOptions, ): APIPromise< Result< components.Lobby, | errors.ApiError | HathoraCloudError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError > > { return new APIPromise($do( client, roomId, setLobbyStateParams, appId, options, )); } async function $do( client: HathoraCloudCore, roomId: string, setLobbyStateParams: components.SetLobbyStateParams, appId?: string | undefined, options?: RequestOptions, ): Promise< [ Result< components.Lobby, | errors.ApiError | HathoraCloudError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >, APICall, ] > { const input: operations.SetLobbyStateRequest = { roomId: roomId, setLobbyStateParams: setLobbyStateParams, appId: appId, }; const parsed = safeParse( input, (value) => operations.SetLobbyStateRequest$outboundSchema.parse(value), "Input validation failed", ); if (!parsed.ok) { return [parsed, { status: "invalid" }]; } const payload = parsed.value; const body = encodeJSON("body", payload.SetLobbyStateParams, { explode: true, }); const pathParams = { appId: encodeSimple("appId", payload.appId ?? client._options.appId, { explode: false, charEncoding: "percent", }), roomId: encodeSimple("roomId", payload.roomId, { explode: false, charEncoding: "percent", }), }; const path = pathToFunc("/lobby/v2/{appId}/setState/{roomId}")(pathParams); const headers = new Headers(compactMap({ "Content-Type": "application/json", Accept: "application/json", })); const secConfig = await extractSecurity(client._options.hathoraDevToken); const securityInput = secConfig == null ? {} : { hathoraDevToken: secConfig }; const requestSecurity = resolveGlobalSecurity(securityInput); const context = { options: client._options, baseURL: options?.serverURL ?? client._baseURL ?? "", operationID: "SetLobbyState", oAuth2Scopes: null, resolvedSecurity: requestSecurity, securitySource: client._options.hathoraDevToken, retryConfig: options?.retries || client._options.retryConfig || { strategy: "none" }, retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], }; const requestRes = client._createRequest(context, { security: requestSecurity, method: "POST", baseURL: options?.serverURL, path: path, headers: headers, body: body, userAgent: client._options.userAgent, timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { return [requestRes, { status: "invalid" }]; } const req = requestRes.value; const doResult = await client._do(req, { context, errorCodes: ["401", "404", "408", "422", "429", "4XX", "5XX"], retryConfig: context.retryConfig, retryCodes: context.retryCodes, }); if (!doResult.ok) { return [doResult, { status: "request-error", request: req }]; } const response = doResult.value; const responseFields = { HttpMeta: { Response: response, Request: req }, }; const [result] = await M.match< components.Lobby, | errors.ApiError | HathoraCloudError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >( M.json(200, components.Lobby$inboundSchema), M.jsonErr([401, 404, 408, 422, 429], errors.ApiError$inboundSchema), M.fail("4XX"), M.fail("5XX"), )(response, req, { extraFields: responseFields }); if (!result.ok) { return [result, { status: "complete", request: req, response }]; } return [result, { status: "complete", request: req, response }]; }