From 8191971ce79e92f08fed2137ace73e30e6223477 Mon Sep 17 00:00:00 2001 From: MasterPtato Date: Wed, 8 Jan 2025 20:02:58 +0000 Subject: [PATCH] feat: add url to actor ports --- Cargo.lock | 2 +- .../src/route/game_guard/dynamic_servers.rs | 1 - .../common/convert/src/impls/provision.rs | 1 - packages/common/util/core/src/format.rs | 18 +++- packages/services/ds/src/ops/server/get.rs | 5 - packages/services/ds/src/types.rs | 102 +++++++++++++----- packages/services/ds/src/util/mod.rs | 1 - .../services/ds/src/workers/undrain_all.rs | 2 - .../ds/src/workflows/server/pegboard/mod.rs | 14 ++- sdks/api/fern/definition/actor/common.yml | 4 + sdks/api/full/go/actor/types.go | 4 +- sdks/api/full/openapi/openapi.yml | 5 + sdks/api/full/openapi_compat/openapi.yml | 5 + sdks/api/full/rust/docs/ActorPort.md | 1 + sdks/api/full/rust/src/models/actor_port.rs | 4 + sdks/api/runtime/go/actor/types.go | 4 +- sdks/api/runtime/openapi/openapi.yml | 5 + sdks/api/runtime/openapi_compat/openapi.yml | 5 + sdks/api/runtime/rust/docs/ActorPort.md | 1 + .../api/runtime/rust/src/models/actor_port.rs | 4 + site/src/content/docs/api/spec.json | 2 +- .../docs/self-hosting/server-spec.json | 12 +-- 22 files changed, 147 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 67137ad0c8..e185bf2db2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3409,7 +3409,7 @@ dependencies = [ [[package]] name = "cluster-tunnel-tls-renew" -version = "0.0.1" +version = "24.6.2-rc.1" dependencies = [ "chirp-client", "chirp-workflow", diff --git a/packages/api/traefik-provider/src/route/game_guard/dynamic_servers.rs b/packages/api/traefik-provider/src/route/game_guard/dynamic_servers.rs index e9ec62996b..e7e934a281 100644 --- a/packages/api/traefik-provider/src/route/game_guard/dynamic_servers.rs +++ b/packages/api/traefik-provider/src/route/game_guard/dynamic_servers.rs @@ -304,7 +304,6 @@ fn add_http_port( let (hostname, path) = ds::util::build_ds_hostname_and_path( proxied_port.server_id, &proxied_port.port_name, - proxied_port.datacenter_id, if is_https { GameGuardProtocol::Https } else { diff --git a/packages/common/convert/src/impls/provision.rs b/packages/common/convert/src/impls/provision.rs index b031eb91ad..a720580dc5 100644 --- a/packages/common/convert/src/impls/provision.rs +++ b/packages/common/convert/src/impls/provision.rs @@ -1,5 +1,4 @@ use rivet_api::models; -use rivet_operation::prelude::*; use crate::{ApiFrom, ApiInto}; diff --git a/packages/common/util/core/src/format.rs b/packages/common/util/core/src/format.rs index 31cc91c540..29c44bccff 100644 --- a/packages/common/util/core/src/format.rs +++ b/packages/common/util/core/src/format.rs @@ -1,4 +1,7 @@ -use std::iter::Iterator; +use std::{ + fmt::{self, Display, Formatter}, + iter::Iterator, +}; use lazy_static::lazy_static; use rand::seq::IteratorRandom; @@ -10,6 +13,19 @@ lazy_static! { static ref SPACE_REPLACE: Regex = Regex::new(r#" +"#).unwrap(); } +/// Renders `Some` as `T` and does not render `None`. +pub struct OptDisplay(pub Option); + +impl Display for OptDisplay { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + if let Some(value) = &self.0 { + write!(f, "{}", value) + } else { + Ok(()) + } + } +} + /// Formats a user's biography properly. Assumes util::check::biography succeeded before this function pub fn biography>(s: T) -> String { let s = s.as_ref(); diff --git a/packages/services/ds/src/ops/server/get.rs b/packages/services/ds/src/ops/server/get.rs index 2cf72561e1..4419bbcf6d 100644 --- a/packages/services/ds/src/ops/server/get.rs +++ b/packages/services/ds/src/ops/server/get.rs @@ -260,10 +260,8 @@ pub async fn ds_server_get(ctx: &OperationCtx, input: &Input) -> GlobalResult GlobalResult) -> fmt::Result { + match self { + GameGuardProtocol::Http => write!(f, "http"), + GameGuardProtocol::Https => write!(f, "https"), + GameGuardProtocol::Tcp => write!(f, "tcp"), + GameGuardProtocol::TcpTls => write!(f, "tcps"), + GameGuardProtocol::Udp => write!(f, "udp"), + } + } +} + #[derive(Debug, Clone, Serialize, Deserialize, Hash)] pub enum PortAuthorization { None, @@ -254,44 +266,75 @@ impl ApiFrom for models::ActorNetworkMode { impl ApiFrom for models::ActorPort { fn api_from(value: Port) -> models::ActorPort { - let (protocol, routing) = match &value.routing { + let (protocol, routing, url) = match &value.routing { Routing::GameGuard { protocol, authorization, - } => ( - (*protocol).api_into(), - models::ActorPortRouting { - guard: Some(json!({})), - // Temporarily disabled - // guard: Some(Box::new(models::ActorGuardRouting { - // authorization: match authorization { - // PortAuthorization::None => None, - // PortAuthorization::Bearer(token) => { - // Some(Box::new(models::ActorPortAuthorization { - // bearer: Some(token.clone()), - // ..Default::default() - // })) - // } - // PortAuthorization::Query(key, value) => { - // Some(Box::new(models::ActorPortAuthorization { - // query: Some(Box::new(models::ActorPortQueryAuthorization { - // key: key.clone(), - // value: value.clone(), - // })), - // ..Default::default() - // })) - // } - // }, - // })), - ..Default::default() - }, - ), + } => { + let url = match ( + protocol, + value.public_hostname.as_ref(), + value.public_port, + value.public_path.as_ref(), + ) { + ( + GameGuardProtocol::Http | GameGuardProtocol::Https, + Some(hostname), + Some(port), + path, + ) => Some(format!( + "{protocol}://{hostname}:{port}{}", + util::format::OptDisplay(path) + )), + ( + GameGuardProtocol::Http | GameGuardProtocol::Https, + Some(hostname), + None, + path, + ) => Some(format!( + "{protocol}://{hostname}{}", + util::format::OptDisplay(path) + )), + _ => None, + }; + + ( + (*protocol).api_into(), + models::ActorPortRouting { + guard: Some(json!({})), + // Temporarily disabled + // guard: Some(Box::new(models::ActorGuardRouting { + // authorization: match authorization { + // PortAuthorization::None => None, + // PortAuthorization::Bearer(token) => { + // Some(Box::new(models::ActorPortAuthorization { + // bearer: Some(token.clone()), + // ..Default::default() + // })) + // } + // PortAuthorization::Query(key, value) => { + // Some(Box::new(models::ActorPortAuthorization { + // query: Some(Box::new(models::ActorPortQueryAuthorization { + // key: key.clone(), + // value: value.clone(), + // })), + // ..Default::default() + // })) + // } + // }, + // })), + ..Default::default() + }, + url, + ) + } Routing::Host { protocol } => ( (*protocol).api_into(), models::ActorPortRouting { host: Some(json!({})), ..Default::default() }, + None, ), }; @@ -301,6 +344,7 @@ impl ApiFrom for models::ActorPort { hostname: value.public_hostname, port: value.public_port, path: value.public_path, + url, routing: Box::new(routing), } } diff --git a/packages/services/ds/src/util/mod.rs b/packages/services/ds/src/util/mod.rs index 27961633b7..84be4fa77f 100644 --- a/packages/services/ds/src/util/mod.rs +++ b/packages/services/ds/src/util/mod.rs @@ -26,7 +26,6 @@ pub fn is_nomad_ds(job_id: &str) -> bool { pub fn build_ds_hostname_and_path( server_id: Uuid, port_name: &str, - datacenter_id: Uuid, protocol: GameGuardProtocol, endpoint_type: EndpointType, guard_public_hostname: &GuardPublicHostname, diff --git a/packages/services/ds/src/workers/undrain_all.rs b/packages/services/ds/src/workers/undrain_all.rs index 7038432215..8f27cdb917 100644 --- a/packages/services/ds/src/workers/undrain_all.rs +++ b/packages/services/ds/src/workers/undrain_all.rs @@ -1,5 +1,3 @@ -use std::convert::TryInto; - use chirp_worker::prelude::*; use proto::backend::pkg::*; diff --git a/packages/services/ds/src/workflows/server/pegboard/mod.rs b/packages/services/ds/src/workflows/server/pegboard/mod.rs index f96a65c246..e75cfce314 100644 --- a/packages/services/ds/src/workflows/server/pegboard/mod.rs +++ b/packages/services/ds/src/workflows/server/pegboard/mod.rs @@ -925,7 +925,11 @@ async fn wait_for_traefik_poll( servers_res.servers.iter().map(|s| s.server_id).collect() }; - tracing::debug!(servers = ?remaining_servers, after_create_ts = ?input.create_ts, "waiting for traefik servers"); + tracing::debug!( + servers=?remaining_servers, + after_create_ts=?input.create_ts, + "waiting for traefik servers", + ); let res = tokio::time::timeout(TRAEFIK_POLL_TIMEOUT, async { // Wait for servers to fetch their configs loop { @@ -933,9 +937,13 @@ async fn wait_for_traefik_poll( if let Some(server_id) = msg.server_id { if msg.latest_ds_create_ts >= input.create_ts { - let did_remove = remaining_servers.remove(&server_id); + let _did_remove = remaining_servers.remove(&server_id); - tracing::debug!(server_id = ?msg.server_id, latest_ds_create_ts = ?msg.latest_ds_create_ts, servers = ?remaining_servers, "received poll from traefik server"); + tracing::debug!( + server_id=?msg.server_id, + latest_ds_create_ts=?msg.latest_ds_create_ts, + servers=?remaining_servers, "received poll from traefik server", + ); // Break loop once all servers have polled if remaining_servers.is_empty() { diff --git a/sdks/api/fern/definition/actor/common.yml b/sdks/api/fern/definition/actor/common.yml index f1d9a55289..010b7d7760 100644 --- a/sdks/api/fern/definition/actor/common.yml +++ b/sdks/api/fern/definition/actor/common.yml @@ -66,6 +66,10 @@ types: hostname: optional port: optional path: optional + url: + docs: | + Fully formed connection URL including protocol, hostname, port, and path, if applicable. + type: optional routing: PortRouting PortProtocol: diff --git a/sdks/api/full/go/actor/types.go b/sdks/api/full/go/actor/types.go index 80bc548ffa..25880cffe6 100644 --- a/sdks/api/full/go/actor/types.go +++ b/sdks/api/full/go/actor/types.go @@ -343,7 +343,9 @@ type Port struct { Hostname *string `json:"hostname,omitempty"` Port *int `json:"port,omitempty"` Path *string `json:"path,omitempty"` - Routing *PortRouting `json:"routing,omitempty"` + // Fully formed connection URL including protocol, hostname, port, and path, if applicable. + Url *string `json:"url,omitempty"` + Routing *PortRouting `json:"routing,omitempty"` _rawJSON json.RawMessage } diff --git a/sdks/api/full/openapi/openapi.yml b/sdks/api/full/openapi/openapi.yml index 6c68bfa151..35c3e7f104 100644 --- a/sdks/api/full/openapi/openapi.yml +++ b/sdks/api/full/openapi/openapi.yml @@ -10094,6 +10094,11 @@ components: type: integer path: type: string + url: + type: string + description: >- + Fully formed connection URL including protocol, hostname, port, and + path, if applicable. routing: $ref: '#/components/schemas/ActorPortRouting' required: diff --git a/sdks/api/full/openapi_compat/openapi.yml b/sdks/api/full/openapi_compat/openapi.yml index 8d89eef9e7..72c90f62c0 100644 --- a/sdks/api/full/openapi_compat/openapi.yml +++ b/sdks/api/full/openapi_compat/openapi.yml @@ -10094,6 +10094,11 @@ components: type: integer path: type: string + url: + type: string + description: >- + Fully formed connection URL including protocol, hostname, port, and + path, if applicable. routing: $ref: '#/components/schemas/ActorPortRouting' required: diff --git a/sdks/api/full/rust/docs/ActorPort.md b/sdks/api/full/rust/docs/ActorPort.md index 36115b467c..02136ac9d2 100644 --- a/sdks/api/full/rust/docs/ActorPort.md +++ b/sdks/api/full/rust/docs/ActorPort.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **hostname** | Option<**String**> | | [optional] **port** | Option<**i32**> | | [optional] **path** | Option<**String**> | | [optional] +**url** | Option<**String**> | Fully formed connection URL including protocol, hostname, port, and path, if applicable. | [optional] **routing** | [**crate::models::ActorPortRouting**](ActorPortRouting.md) | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdks/api/full/rust/src/models/actor_port.rs b/sdks/api/full/rust/src/models/actor_port.rs index af3784e506..7e3ddf7eb7 100644 --- a/sdks/api/full/rust/src/models/actor_port.rs +++ b/sdks/api/full/rust/src/models/actor_port.rs @@ -20,6 +20,9 @@ pub struct ActorPort { pub port: Option, #[serde(rename = "path", skip_serializing_if = "Option::is_none")] pub path: Option, + /// Fully formed connection URL including protocol, hostname, port, and path, if applicable. + #[serde(rename = "url", skip_serializing_if = "Option::is_none")] + pub url: Option, #[serde(rename = "routing")] pub routing: Box, } @@ -35,6 +38,7 @@ impl ActorPort { hostname: None, port: None, path: None, + url: None, routing: Box::new(routing), } } diff --git a/sdks/api/runtime/go/actor/types.go b/sdks/api/runtime/go/actor/types.go index 80bc548ffa..25880cffe6 100644 --- a/sdks/api/runtime/go/actor/types.go +++ b/sdks/api/runtime/go/actor/types.go @@ -343,7 +343,9 @@ type Port struct { Hostname *string `json:"hostname,omitempty"` Port *int `json:"port,omitempty"` Path *string `json:"path,omitempty"` - Routing *PortRouting `json:"routing,omitempty"` + // Fully formed connection URL including protocol, hostname, port, and path, if applicable. + Url *string `json:"url,omitempty"` + Routing *PortRouting `json:"routing,omitempty"` _rawJSON json.RawMessage } diff --git a/sdks/api/runtime/openapi/openapi.yml b/sdks/api/runtime/openapi/openapi.yml index 966425635e..9f3ea4380c 100644 --- a/sdks/api/runtime/openapi/openapi.yml +++ b/sdks/api/runtime/openapi/openapi.yml @@ -1271,6 +1271,11 @@ components: type: integer path: type: string + url: + type: string + description: >- + Fully formed connection URL including protocol, hostname, port, and + path, if applicable. routing: $ref: '#/components/schemas/ActorPortRouting' required: diff --git a/sdks/api/runtime/openapi_compat/openapi.yml b/sdks/api/runtime/openapi_compat/openapi.yml index 7065cbdc40..41c524f9d9 100644 --- a/sdks/api/runtime/openapi_compat/openapi.yml +++ b/sdks/api/runtime/openapi_compat/openapi.yml @@ -1271,6 +1271,11 @@ components: type: integer path: type: string + url: + type: string + description: >- + Fully formed connection URL including protocol, hostname, port, and + path, if applicable. routing: $ref: '#/components/schemas/ActorPortRouting' required: diff --git a/sdks/api/runtime/rust/docs/ActorPort.md b/sdks/api/runtime/rust/docs/ActorPort.md index 36115b467c..02136ac9d2 100644 --- a/sdks/api/runtime/rust/docs/ActorPort.md +++ b/sdks/api/runtime/rust/docs/ActorPort.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **hostname** | Option<**String**> | | [optional] **port** | Option<**i32**> | | [optional] **path** | Option<**String**> | | [optional] +**url** | Option<**String**> | Fully formed connection URL including protocol, hostname, port, and path, if applicable. | [optional] **routing** | [**crate::models::ActorPortRouting**](ActorPortRouting.md) | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdks/api/runtime/rust/src/models/actor_port.rs b/sdks/api/runtime/rust/src/models/actor_port.rs index 19ecd1b657..2ce7e9c149 100644 --- a/sdks/api/runtime/rust/src/models/actor_port.rs +++ b/sdks/api/runtime/rust/src/models/actor_port.rs @@ -23,6 +23,9 @@ pub struct ActorPort { pub port: Option, #[serde(rename = "path", skip_serializing_if = "Option::is_none")] pub path: Option, + /// Fully formed connection URL including protocol, hostname, port, and path, if applicable. + #[serde(rename = "url", skip_serializing_if = "Option::is_none")] + pub url: Option, #[serde(rename = "routing")] pub routing: Box, } @@ -35,6 +38,7 @@ impl ActorPort { hostname: None, port: None, path: None, + url: None, routing: Box::new(routing), } } diff --git a/site/src/content/docs/api/spec.json b/site/src/content/docs/api/spec.json index 37bd977dbf..101c01b17a 100644 --- a/site/src/content/docs/api/spec.json +++ b/site/src/content/docs/api/spec.json @@ -1 +1 @@ -{"definitions":{"ActorGetActorResponse":{"type":"object","properties":{"actor":{"$ref":"#/components/schemas/ActorActor"}},"required":["actor"]},"ActorCreateActorRequest":{"type":"object","properties":{"region":{"type":"string"},"tags":{},"build":{"type":"string","format":"uuid"},"build_tags":{},"runtime":{"$ref":"#/components/schemas/ActorCreateActorRuntimeRequest"},"network":{"$ref":"#/components/schemas/ActorCreateActorNetworkRequest"},"resources":{"$ref":"#/components/schemas/ActorResources"},"lifecycle":{"$ref":"#/components/schemas/ActorLifecycle"}},"required":["tags"]},"ActorCreateActorRuntimeRequest":{"type":"object","properties":{"environment":{"type":"object","additionalProperties":{"type":"string"}}}},"ActorCreateActorNetworkRequest":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ActorNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ActorCreateActorPortRequest"}}}},"ActorCreateActorPortRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ActorPortProtocol"},"internal_port":{"type":"integer"},"routing":{"$ref":"#/components/schemas/ActorPortRouting"}},"required":["protocol"]},"ActorCreateActorResponse":{"type":"object","properties":{"actor":{"$ref":"#/components/schemas/ActorActor","description":"The actor that was created"}},"required":["actor"]},"ActorDestroyActorResponse":{"type":"object","properties":{}},"ActorUpgradeActorRequest":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"build_tags":{}}},"ActorUpgradeActorResponse":{"type":"object","properties":{}},"ActorUpgradeAllActorsRequest":{"type":"object","properties":{"tags":{},"build":{"type":"string","format":"uuid"},"build_tags":{}},"required":["tags"]},"ActorUpgradeAllActorsResponse":{"type":"object","properties":{"count":{"type":"integer","format":"int64"}},"required":["count"]},"ActorListActorsResponse":{"type":"object","properties":{"actors":{"type":"array","items":{"$ref":"#/components/schemas/ActorActor"},"description":"A list of actors for the project associated with the token."}},"required":["actors"]},"CloudBootstrapResponse":{"type":"object","properties":{"cluster":{"$ref":"#/components/schemas/CloudBootstrapCluster"},"access":{"$ref":"#/components/schemas/CloudBootstrapAccess"},"domains":{"$ref":"#/components/schemas/CloudBootstrapDomains"},"origins":{"$ref":"#/components/schemas/CloudBootstrapOrigins"},"captcha":{"$ref":"#/components/schemas/CloudBootstrapCaptcha"},"login_methods":{"$ref":"#/components/schemas/CloudBootstrapLoginMethods"},"deploy_hash":{"type":"string"}},"required":["cluster","access","domains","origins","captcha","login_methods","deploy_hash"]},"CloudBootstrapCluster":{"type":"string","enum":["enterprise","oss"],"description":"The type of cluster that the backend is currently running."},"CloudBootstrapAccess":{"type":"string","enum":["public","private","development"]},"CloudBootstrapDomains":{"type":"object","description":"Domains that host parts of Rivet","properties":{"cdn":{"type":"string"},"job":{"type":"string"},"main":{"type":"string"},"opengb":{"type":"string"}}},"CloudBootstrapOrigins":{"type":"object","description":"Origins used to build URLs from","properties":{"hub":{"type":"string"}},"required":["hub"]},"CloudBootstrapCaptcha":{"type":"object","properties":{"turnstile":{"$ref":"#/components/schemas/CloudBootstrapCaptchaTurnstile"}}},"CloudBootstrapCaptchaTurnstile":{"type":"object","properties":{"site_key":{"type":"string"}},"required":["site_key"]},"CloudBootstrapLoginMethods":{"type":"object","properties":{"email":{"type":"boolean"},"access_token":{"type":"boolean"}},"required":["email"]},"CloudGamesGetGamesResponse":{"type":"object","properties":{"games":{"type":"array","items":{"$ref":"#/components/schemas/GameGameSummary"},"description":"A list of game summaries."},"groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"},"description":"A list of group summaries."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["games","groups","watch"]},"CloudGamesCreateGameRequest":{"type":"object","properties":{"name_id":{"$ref":"#/components/schemas/Identifier","description":"**Deprecated**"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"developer_group_id":{"type":"string","format":"uuid"}},"required":["display_name","developer_group_id"]},"CloudGamesCreateGameResponse":{"type":"object","properties":{"game_id":{"type":"string","format":"uuid"}},"required":["game_id"]},"CloudGamesValidateGameRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"name_id":{"$ref":"#/components/schemas/Identifier","description":"**Deprecated**"}},"required":["display_name"]},"CloudGamesValidateGameResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesGetGameByIdResponse":{"type":"object","properties":{"game":{"$ref":"#/components/schemas/CloudGameFull"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["game","watch"]},"CloudGamesGameBannerUploadPrepareRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the game banner."},"mime":{"type":"string","description":"The MIME type of the game banner."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"CloudGamesGameBannerUploadPrepareResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"CloudGamesGameLogoUploadPrepareRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the game logo."},"mime":{"type":"string","description":"The MIME type of the game logo."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"CloudGamesGameLogoUploadPrepareResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"CloudGamesNamespacesInspectResponse":{"type":"object","properties":{"agent":{"$ref":"#/components/schemas/CloudAuthAgent"}},"required":["agent"]},"CloudGamesNamespacesCreateGameNamespaceRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"version_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."}},"required":["display_name","version_id","name_id"]},"CloudGamesNamespacesCreateGameNamespaceResponse":{"type":"object","properties":{"namespace_id":{"type":"string","format":"uuid"}},"required":["namespace_id"]},"CloudGamesNamespacesValidateGameNamespaceRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."}},"required":["display_name","name_id"]},"CloudGamesNamespacesValidateGameNamespaceResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesNamespacesGetGameNamespaceByIdResponse":{"type":"object","properties":{"namespace":{"$ref":"#/components/schemas/CloudNamespaceFull"}},"required":["namespace"]},"CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest":{"type":"object","properties":{"user":{"type":"string","description":"A user name."},"password":{"type":"string","description":"A bcrypt encrypted password. An error is returned if the given string is not properly encrypted."}},"required":["user","password"]},"CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest":{"type":"object","properties":{"auth_type":{"$ref":"#/components/schemas/CloudCdnAuthType"}},"required":["auth_type"]},"CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable authentication based on domain."}},"required":["enabled"]},"CloudGamesNamespacesAddNamespaceDomainRequest":{"type":"object","properties":{"domain":{"type":"string","description":"A valid domain name (no protocol)."}},"required":["domain"]},"CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest":{"type":"object","properties":{"lobby_count_max":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_count_max","max_players"]},"CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse":{"type":"object","properties":{"versions":{"type":"array","items":{"$ref":"#/components/schemas/CloudNamespaceVersion"},"description":"A list of previously deployed namespace versions."}},"required":["versions"]},"CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest":{"type":"object","properties":{"lobby_count_max":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_count_max","max_players"]},"CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest":{"type":"object","properties":{"hostname":{"type":"string","description":"The hostname used for the token."},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudMatchmakerDevelopmentPort"}},"lobby_ports":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort"},"description":"**Deprecated**\nA list of docker ports."}},"required":["hostname"]},"CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."}},"required":["token"]},"CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest":{"type":"object","properties":{"hostname":{"type":"string"},"lobby_ports":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort"},"description":"A list of docker ports."}},"required":["hostname","lobby_ports"]},"CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."}},"required":["token"]},"CloudGamesNamespacesUpdateGameNamespaceVersionRequest":{"type":"object","properties":{"version_id":{"type":"string","format":"uuid"}},"required":["version_id"]},"CloudVersionConfig":{"type":"object","description":"Cloud configuration for a given version.","properties":{"scripts":{"type":"object","additionalProperties":{"type":"string"}},"engine":{"$ref":"#/components/schemas/CloudVersionEngineEngineConfig"},"cdn":{"$ref":"#/components/schemas/CloudVersionCdnCdnConfig"},"matchmaker":{"$ref":"#/components/schemas/CloudVersionMatchmakerMatchmakerConfig"},"kv":{"$ref":"#/components/schemas/CloudVersionKvKvConfig"},"identity":{"$ref":"#/components/schemas/CloudVersionIdentityIdentityConfig"}}},"CloudVersionFull":{"type":"object","description":"A full version.","properties":{"version_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"config":{"$ref":"#/components/schemas/CloudVersionConfig"}},"required":["version_id","create_ts","display_name","config"]},"CloudVersionSummary":{"type":"object","description":"A version summary.","properties":{"version_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["version_id","create_ts","display_name"]},"CloudVersionCdnCdnConfig":{"type":"object","description":"CDN configuration for a given version.","properties":{"build_command":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"build_output":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"build_env":{"type":"object","additionalProperties":{"type":"string"},"description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"site_id":{"type":"string","format":"uuid"},"routes":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionCdnRoute"},"description":"Multiple CDN version routes."}}},"CloudVersionCdnRoute":{"type":"object","properties":{"glob":{"type":"string"},"priority":{"type":"integer","description":"Unsigned 32 bit integer."},"middlewares":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionCdnMiddleware"},"description":"Multiple CDN version middleware."}},"required":["glob","priority","middlewares"]},"CloudVersionCdnMiddleware":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/CloudVersionCdnMiddlewareKind"}},"required":["kind"]},"CloudVersionCdnMiddlewareKind":{"type":"object","properties":{"custom_headers":{"$ref":"#/components/schemas/CloudVersionCdnCustomHeadersMiddleware"}}},"CloudVersionCdnCustomHeadersMiddleware":{"type":"object","properties":{"headers":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionCdnHeader"}}},"required":["headers"]},"CloudVersionCdnHeader":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]},"CloudVersionEngineEngineConfig":{"type":"object","properties":{"unity":{"$ref":"#/components/schemas/CloudVersionEngineUnityConfig"},"unreal":{"$ref":"#/components/schemas/CloudVersionEngineUnrealConfig"},"godot":{"$ref":"#/components/schemas/CloudVersionEngineGodotConfig"},"html5":{"$ref":"#/components/schemas/CloudVersionEngineHtml5Config"},"custom":{"$ref":"#/components/schemas/CloudVersionEngineCustomConfig"}}},"CloudVersionIdentityIdentityConfig":{"type":"object","description":"**Deprecated**\nIdentity configuration for a given version.","properties":{"display_names":{"type":"array","items":{"type":"string"},"description":"**Deprecated**"},"avatars":{"type":"array","items":{"type":"string","format":"uuid"},"description":"**Deprecated**"},"custom_display_names":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionIdentityCustomDisplayName"},"description":"**Deprecated**"},"custom_avatars":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionIdentityCustomAvatar"},"description":"**Deprecated**"}}},"CloudVersionIdentityCustomDisplayName":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"CloudVersionIdentityCustomAvatar":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"}},"required":["upload_id"]},"CloudVersionKvKvConfig":{"type":"object","description":"KV configuration for a given version.","properties":{}},"CloudVersionMatchmakerMatchmakerConfig":{"type":"object","description":"Matchmaker configuration for a given version.","properties":{"game_modes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameMode"},"description":"A list of game modes."},"captcha":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptcha"},"dev_hostname":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"regions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRegion"}},"max_players":{"type":"integer"},"max_players_direct":{"type":"integer"},"max_players_party":{"type":"integer"},"docker":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRuntimeDocker"},"tier":{"type":"string"},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdleLobbiesConfig"},"lobby_groups":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroup"},"description":"**Deprecated: use `game_modes` instead**\nA list of game modes."}}},"GroupListSuggestedResponse":{"type":"object","properties":{"groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"},"description":"A list of group summaries."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["groups","watch"]},"GroupCreateRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"GroupCreateResponse":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"}},"required":["group_id"]},"GroupPrepareAvatarUploadRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the group avatar."},"mime":{"type":"string","description":"The MIME type of the group avatar."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"GroupPrepareAvatarUploadResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"GroupValidateProfileRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"bio":{"$ref":"#/components/schemas/DisplayName"},"publicity":{"$ref":"#/components/schemas/GroupPublicity"}}},"GroupValidateProfileResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"GroupGetBansResponse":{"type":"object","properties":{"banned_identities":{"type":"array","items":{"$ref":"#/components/schemas/GroupBannedIdentity"},"description":"A list of banned group members."},"anchor":{"type":"string","description":"The pagination anchor."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["banned_identities","watch"]},"GroupGetJoinRequestsResponse":{"type":"object","properties":{"join_requests":{"type":"array","items":{"$ref":"#/components/schemas/GroupJoinRequest"},"description":"A list of group join requests."},"anchor":{"type":"string","description":"The pagination anchor."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["join_requests","watch"]},"GroupGetMembersResponse":{"type":"object","properties":{"members":{"type":"array","items":{"$ref":"#/components/schemas/GroupMember"},"description":"A list of group members."},"anchor":{"type":"string","description":"The pagination anchor."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["members","watch"]},"GroupGetProfileResponse":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/GroupProfile"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["group","watch"]},"GroupUpdateProfileRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"bio":{"type":"string","description":"Detailed information about a profile."},"publicity":{"$ref":"#/components/schemas/GroupPublicity"}}},"GroupGetSummaryResponse":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/GroupGroupSummary"}},"required":["group"]},"GroupTransferOwnershipRequest":{"type":"object","properties":{"new_owner_identity_id":{"type":"string","description":"Identity to transfer the group to.\nMust be a member of the group."}},"required":["new_owner_identity_id"]},"IdentitySetupResponse":{"type":"object","properties":{"identity_token":{"$ref":"#/components/schemas/Jwt","description":"Token used to authenticate the identity.\nShould be stored somewhere permanent.\nPass this to `rivet.api.identity#Setup$existing_identity_token` next time `rivet.api.identity#Setup` is called.\nToken has a 90 day TTL.\nThis means that if `rivet.api.identity#Setup` is not called again within 90 days, the token will no longer be valid.\nIf this happens, the user can recover their account through the linking process (see `rivet.api.identity#PrepareGameLink`).\nThis token should be stored locally and never sent to a server or another device.\nIf this token is compromised, anyone with access to this token has control of the identity."},"identity_token_expire_ts":{"$ref":"#/components/schemas/Timestamp"},"identity":{"$ref":"#/components/schemas/IdentityProfile","description":"Information about the identity that was just authenticated."},"game_id":{"type":"string","format":"uuid"}},"required":["identity_token","identity_token_expire_ts","identity","game_id"]},"IdentityGetProfileResponse":{"type":"object","properties":{"identity":{"$ref":"#/components/schemas/IdentityProfile"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identity","watch"]},"IdentityGetHandlesResponse":{"type":"object","properties":{"identities":{"type":"array","items":{"$ref":"#/components/schemas/IdentityHandle"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identities","watch"]},"IdentityGetSummariesResponse":{"type":"object","properties":{"identities":{"type":"array","items":{"$ref":"#/components/schemas/IdentitySummary"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identities","watch"]},"IdentityValidateProfileResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}},"required":["errors"]},"IdentityPrepareAvatarUploadResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"ProvisionDatacentersGetTlsResponse":{"type":"object","properties":{"job_cert_pem":{"type":"string"},"job_private_key_pem":{"type":"string"}},"required":["job_cert_pem","job_private_key_pem"]},"ProvisionDatacentersGetServersResponse":{"type":"object","properties":{"servers":{"type":"array","items":{"$ref":"#/components/schemas/ProvisionServer"}}},"required":["servers"]},"ProvisionServersGetInfoResponse":{"type":"object","properties":{"name":{"type":"string"},"server_id":{"type":"string","format":"uuid"},"datacenter_id":{"type":"string","format":"uuid"},"cluster_id":{"type":"string","format":"uuid"},"lan_ip":{"type":"string"},"wan_ip":{"type":"string"},"vlan_ip":{"type":"string","description":"**Deprecated**: Use lan_ip"},"public_ip":{"type":"string","description":"**Deprecated**: Use wan_ip"}},"required":["name","server_id","datacenter_id","cluster_id","lan_ip","wan_ip","vlan_ip","public_ip"]},"ServersGetServerResponse":{"type":"object","properties":{"server":{"$ref":"#/components/schemas/ServersServer"}},"required":["server"]},"ServersCreateServerRequest":{"type":"object","properties":{"datacenter":{"type":"string","format":"uuid"},"tags":{},"runtime":{"$ref":"#/components/schemas/ServersCreateServerRuntimeRequest"},"network":{"$ref":"#/components/schemas/ServersCreateServerNetworkRequest"},"resources":{"$ref":"#/components/schemas/ServersResources"},"lifecycle":{"$ref":"#/components/schemas/ServersLifecycle"}},"required":["datacenter","tags","runtime","network","resources"]},"ServersCreateServerRuntimeRequest":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"arguments":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","additionalProperties":{"type":"string"}}},"required":["build"]},"ServersCreateServerNetworkRequest":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ServersNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ServersCreateServerPortRequest"}}},"required":["ports"]},"ServersCreateServerPortRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ServersPortProtocol"},"internal_port":{"type":"integer"},"routing":{"$ref":"#/components/schemas/ServersPortRouting"}},"required":["protocol"]},"ServersCreateServerResponse":{"type":"object","properties":{"server":{"$ref":"#/components/schemas/ServersServer","description":"The server that was created"}},"required":["server"]},"ServersDestroyServerResponse":{"type":"object","properties":{}},"ServersListServersResponse":{"type":"object","properties":{"servers":{"type":"array","items":{"$ref":"#/components/schemas/ServersServer"},"description":"A list of servers for the game associated with the token."}},"required":["servers"]},"ActorGetBuildResponse":{"type":"object","properties":{"build":{"$ref":"#/components/schemas/ActorBuild"}},"required":["build"]},"ActorListBuildsResponse":{"type":"object","properties":{"builds":{"type":"array","items":{"$ref":"#/components/schemas/ActorBuild"},"description":"A list of builds for the project associated with the token."}},"required":["builds"]},"ActorPatchBuildTagsRequest":{"type":"object","properties":{"tags":{},"exclusive_tags":{"type":"array","items":{"type":"string"},"description":"Removes the given tag keys from all other builds."}},"required":["tags"]},"ActorPatchBuildTagsResponse":{"type":"object","properties":{}},"ActorPrepareBuildRequest":{"type":"object","properties":{"image_tag":{"type":"string","description":"A tag given to the project build."},"image_file":{"$ref":"#/components/schemas/UploadPrepareFile"},"kind":{"$ref":"#/components/schemas/ActorBuildKind"},"compression":{"$ref":"#/components/schemas/ActorBuildCompression"}},"required":["image_file"]},"ActorPrepareBuildResponse":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["build","presigned_requests"]},"ActorBuildKind":{"type":"string","enum":["docker_image","oci_bundle","javascript"]},"ActorBuildCompression":{"type":"string","enum":["none","lz4"]},"ActorActor":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"region":{"type":"string"},"tags":{},"runtime":{"$ref":"#/components/schemas/ActorRuntime"},"network":{"$ref":"#/components/schemas/ActorNetwork"},"resources":{"$ref":"#/components/schemas/ActorResources"},"lifecycle":{"$ref":"#/components/schemas/ActorLifecycle"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"started_at":{"$ref":"#/components/schemas/Timestamp"},"destroyed_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["id","region","tags","runtime","network","resources","lifecycle","created_at"]},"ActorRuntime":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"arguments":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","additionalProperties":{"type":"string"}}},"required":["build"]},"ActorLifecycle":{"type":"object","properties":{"kill_timeout":{"type":"integer","format":"int64","description":"The duration to wait for in milliseconds before killing the actor. This should be set to a safe default, and can be overridden during a DELETE request if needed."},"durable":{"type":"boolean","description":"If true, the actor will try to reschedule itself automatically in the event of a crash or a datacenter failover. The actor will not reschedule if it exits successfully."}}},"ActorResources":{"type":"object","properties":{"cpu":{"type":"integer","description":"The number of CPU cores in millicores, or 1/1000 of a core. For example,\n1/8 of a core would be 125 millicores, and 1 core would be 1000\nmillicores."},"memory":{"type":"integer","description":"The amount of memory in megabytes"}},"required":["cpu","memory"]},"ActorNetwork":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ActorNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ActorPort"}}},"required":["mode","ports"]},"ActorNetworkMode":{"type":"string","enum":["bridge","host"]},"ActorPort":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ActorPortProtocol"},"internal_port":{"type":"integer"},"hostname":{"type":"string"},"port":{"type":"integer"},"path":{"type":"string"},"routing":{"$ref":"#/components/schemas/ActorPortRouting"}},"required":["protocol","routing"]},"ActorPortProtocol":{"type":"string","enum":["http","https","tcp","tcp_tls","udp"]},"ActorPortRouting":{"type":"object","properties":{"guard":{"$ref":"#/components/schemas/ActorGuardRouting"},"host":{"$ref":"#/components/schemas/ActorHostRouting"}}},"ActorGuardRouting":{"type":"object","properties":{}},"ActorHostRouting":{"type":"object","properties":{}},"ActorEndpointType":{"type":"string","enum":["hostname","path"]},"ActorBuild":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags of this build"}},"required":["id","name","created_at","content_length","tags"]},"ActorRegion":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"ActorGetActorLogsResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"timestamps":{"type":"array","items":{"$ref":"#/components/schemas/Timestamp"},"description":"Sorted old to new."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["lines","timestamps","watch"]},"ActorLogStream":{"type":"string","enum":["std_out","std_err"]},"ActorListRegionsResponse":{"type":"object","properties":{"regions":{"type":"array","items":{"$ref":"#/components/schemas/ActorRegion"}}},"required":["regions"]},"ActorResolveRegionResponse":{"type":"object","properties":{"region":{"$ref":"#/components/schemas/ActorRegion"}},"required":["region"]},"AuthCompleteStatus":{"type":"string","enum":["switch_identity","linked_account_added","already_complete","expired","too_many_attempts","incorrect"],"description":"Represents the state of an external account linking process."},"AuthIdentityStartEmailVerificationRequest":{"type":"object","properties":{"email":{"type":"string"},"captcha":{"$ref":"#/components/schemas/CaptchaConfig"},"game_id":{"type":"string","format":"uuid"}},"required":["email"]},"AuthIdentityStartEmailVerificationResponse":{"type":"object","properties":{"verification_id":{"type":"string","format":"uuid"}},"required":["verification_id"]},"AuthIdentityCompleteEmailVerificationRequest":{"type":"object","properties":{"verification_id":{"type":"string","format":"uuid"},"code":{"type":"string","description":"The code sent to the requestee's email."}},"required":["verification_id","code"]},"AuthIdentityCompleteEmailVerificationResponse":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/AuthCompleteStatus"}},"required":["status"]},"AuthRefreshIdentityTokenRequest":{"type":"object","properties":{"logout":{"type":"boolean","description":"When `true`, the current identity for the provided cookie will be logged out and a new identity will be returned."}}},"AuthRefreshIdentityTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."},"exp":{"type":"string","description":"Token expiration time (in milliseconds)."},"identity_id":{"type":"string","format":"uuid"}},"required":["token","exp","identity_id"]},"CaptchaConfig":{"type":"object","description":"Methods to verify a captcha","properties":{"hcaptcha":{"$ref":"#/components/schemas/CaptchaConfigHcaptcha"},"turnstile":{"$ref":"#/components/schemas/CaptchaConfigTurnstile"}}},"CaptchaConfigHcaptcha":{"type":"object","description":"Captcha configuration.","properties":{"client_response":{"type":"string"}},"required":["client_response"]},"CaptchaConfigTurnstile":{"type":"object","description":"Captcha configuration.","properties":{"client_response":{"type":"string"}},"required":["client_response"]},"CloudInspectResponse":{"type":"object","properties":{"agent":{"$ref":"#/components/schemas/CloudAuthAgent"}},"required":["agent"]},"CloudSvcPerf":{"type":"object","description":"A service performance summary.","properties":{"svc_name":{"type":"string","description":"The name of the service."},"ts":{"$ref":"#/components/schemas/Timestamp"},"duration":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"req_id":{"type":"string","format":"uuid"},"spans":{"type":"array","items":{"$ref":"#/components/schemas/CloudLogsPerfSpan"},"description":"A list of performance spans."},"marks":{"type":"array","items":{"$ref":"#/components/schemas/CloudLogsPerfMark"},"description":"A list of performance marks."}},"required":["svc_name","ts","duration","spans","marks"]},"CloudLogsPerfSpan":{"type":"object","description":"A performance span.","properties":{"label":{"type":"string","description":"The label given to this performance span."},"start_ts":{"$ref":"#/components/schemas/Timestamp"},"finish_ts":{"$ref":"#/components/schemas/Timestamp"},"req_id":{"type":"string","format":"uuid"}},"required":["label","start_ts"]},"CloudLogsPerfMark":{"type":"object","description":"A performance mark.","properties":{"label":{"type":"string","description":"The label given to this performance mark."},"ts":{"$ref":"#/components/schemas/Timestamp"},"ray_id":{"type":"string","format":"uuid"},"req_id":{"type":"string","format":"uuid"}},"required":["label","ts"]},"CloudLobbySummaryAnalytics":{"type":"object","description":"Analytical information about a lobby.","properties":{"lobby_id":{"type":"string","format":"uuid"},"lobby_group_id":{"type":"string","format":"uuid"},"lobby_group_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"region_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"is_ready":{"type":"boolean","description":"Whether or not this lobby is ready."},"is_idle":{"type":"boolean","description":"Whether or not this lobby is idle."},"is_closed":{"type":"boolean","description":"Whether or not this lobby is in a closed state."},"is_outdated":{"type":"boolean","description":"Whether or not this lobby is outdated."},"max_players_normal":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_direct":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_party":{"type":"integer","description":"Unsigned 32 bit integer."},"total_player_count":{"type":"integer","description":"Unsigned 32 bit integer."},"registered_player_count":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_id","lobby_group_id","lobby_group_name_id","region_id","create_ts","is_ready","is_idle","is_closed","is_outdated","max_players_normal","max_players_direct","max_players_party","total_player_count","registered_player_count"]},"CloudLogsLobbySummary":{"type":"object","description":"A logs summary for a lobby.","properties":{"lobby_id":{"type":"string","format":"uuid"},"namespace_id":{"type":"string","format":"uuid"},"lobby_group_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"region_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"start_ts":{"$ref":"#/components/schemas/Timestamp"},"ready_ts":{"$ref":"#/components/schemas/Timestamp"},"status":{"$ref":"#/components/schemas/CloudLogsLobbyStatus"}},"required":["lobby_id","namespace_id","lobby_group_name_id","region_id","create_ts","status"]},"CloudLogsLobbyStatus":{"type":"object","description":"A union representing the state of a lobby.","properties":{"running":{"$ref":"#/components/schemas/EmptyObject"},"stopped":{"$ref":"#/components/schemas/CloudLogsLobbyStatusStopped"}},"required":["running"]},"CloudLogsLobbyStatusStopped":{"type":"object","description":"The status of a stopped lobby.","properties":{"stop_ts":{"$ref":"#/components/schemas/Timestamp"},"failed":{"type":"boolean","description":"Whether or not the lobby failed or stopped successfully."},"exit_code":{"type":"integer","description":"The exit code returned by the lobby's main process when stopped."}},"required":["stop_ts","failed","exit_code"]},"CloudSvcMetrics":{"type":"object","description":"Metrics relating to a job service.","properties":{"job":{"type":"string","description":"The job name."},"cpu":{"type":"array","items":{"type":"number","format":"double"},"description":"CPU metrics."},"memory":{"type":"array","items":{"type":"number","format":"double"},"description":"Memory metrics."},"allocated_memory":{"type":"number","format":"double","description":"Total allocated memory (MB)."}},"required":["job","cpu","memory"]},"CloudAuthAgent":{"type":"object","description":"The current authenticated agent.","properties":{"identity":{"$ref":"#/components/schemas/CloudAuthAgentIdentity"},"game_cloud":{"$ref":"#/components/schemas/CloudAuthAgentGameCloud"}}},"CloudAuthAgentIdentity":{"type":"object","description":"The current authenticated identity.","properties":{"identity_id":{"type":"string","format":"uuid"}},"required":["identity_id"]},"CloudAuthAgentGameCloud":{"type":"object","description":"The current authenticated game cloud.","properties":{"game_id":{"type":"string","format":"uuid"}},"required":["game_id"]},"CloudCustomAvatarSummary":{"type":"object","description":"A custom avatar summary.","properties":{"upload_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"url":{"type":"string","description":"The URL of this custom avatar image. Only present if upload is complete."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"complete":{"type":"boolean","description":"Whether or not this custom avatar has completely been uploaded."}},"required":["upload_id","display_name","create_ts","content_length","complete"]},"CloudBuildSummary":{"type":"object","description":"A build summary.","properties":{"build_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"complete":{"type":"boolean","description":"Whether or not this build has completely been uploaded."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags of this build"}},"required":["build_id","upload_id","display_name","create_ts","content_length","complete","tags"]},"CloudCdnSiteSummary":{"type":"object","description":"A CDN site summary.","properties":{"site_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"complete":{"type":"boolean","description":"Whether or not this site has completely been uploaded."}},"required":["site_id","upload_id","display_name","create_ts","content_length","complete"]},"CloudGameFull":{"type":"object","description":"A full game.","properties":{"game_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"display_name":{"$ref":"#/components/schemas/DisplayName"},"developer_group_id":{"type":"string","format":"uuid"},"total_player_count":{"type":"integer","description":"Unsigned 32 bit integer."},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."},"namespaces":{"type":"array","items":{"$ref":"#/components/schemas/CloudNamespaceSummary"},"description":"A list of namespace summaries."},"versions":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionSummary"},"description":"A list of version summaries."},"available_regions":{"type":"array","items":{"$ref":"#/components/schemas/CloudRegionSummary"},"description":"A list of region summaries."}},"required":["game_id","create_ts","name_id","display_name","developer_group_id","total_player_count","namespaces","versions","available_regions"]},"CloudNamespaceSummary":{"type":"object","description":"A namespace summary.","properties":{"namespace_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"version_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."}},"required":["namespace_id","create_ts","display_name","version_id","name_id"]},"CloudRegionSummary":{"type":"object","description":"A region summary.","properties":{"region_id":{"type":"string","format":"uuid"},"region_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"provider":{"type":"string","description":"The server provider of this region."},"universal_region":{"$ref":"#/components/schemas/CloudUniversalRegion","description":"**Deprecated**\nA universal region label given to this region."},"provider_display_name":{"$ref":"#/components/schemas/DisplayName"},"region_display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["region_id","region_name_id","provider","universal_region","provider_display_name","region_display_name"]},"CloudGameLobbyExpenses":{"type":"object","description":"Game lobby expenses.","properties":{"game":{"$ref":"#/components/schemas/GameHandle"},"namespaces":{"type":"array","items":{"$ref":"#/components/schemas/CloudNamespaceSummary"},"description":"A list of namespace summaries."},"expenses":{"type":"array","items":{"$ref":"#/components/schemas/CloudRegionTierExpenses"},"description":"A list of multiple region tier expenses."}},"required":["game","namespaces","expenses"]},"CloudRegionTierExpenses":{"type":"object","description":"Region tier expenses.","properties":{"namespace_id":{"type":"string","format":"uuid"},"region_id":{"type":"string","format":"uuid"},"tier_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"lobby_group_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"uptime":{"type":"number","format":"double","description":"How long a region tier has been active (in milliseconds)."},"expenses":{"type":"number","format":"double","description":"Amount of expenses for this region tier (in hundred-thousandths USD, 100,000 = $1.00)."}},"required":["namespace_id","region_id","tier_name_id","lobby_group_name_id","uptime","expenses"]},"CloudGroupBankSource":{"type":"object","properties":{"account_number":{"type":"string","description":"The bank account number of this group's bank source."},"routing_number":{"type":"string","description":"The bank routing number of this group's bank source."}},"required":["account_number","routing_number"]},"CloudRegionTier":{"type":"object","description":"A region server tier.","properties":{"tier_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"rivet_cores_numerator":{"type":"integer","description":"Together with the denominator, denotes the portion of the CPU a given server uses."},"rivet_cores_denominator":{"type":"integer","description":"Together with the numerator, denotes the portion of the CPU a given server uses."},"cpu":{"type":"integer","description":"CPU frequency (MHz)."},"memory":{"type":"integer","description":"Allocated memory (MB)."},"disk":{"type":"integer","description":"Allocated disk space (MB)."},"bandwidth":{"type":"integer","description":"Internet bandwidth (MB)."},"price_per_second":{"type":"integer","description":"**Deprecated**\nPrice billed for every second this server is running (in quadrillionth USD, 1,000,000,000,000 = $1.00)."}},"required":["tier_name_id","rivet_cores_numerator","rivet_cores_denominator","cpu","memory","disk","bandwidth","price_per_second"]},"CloudUniversalRegion":{"type":"string","enum":["unknown","local","amsterdam","atlanta","bangalore","dallas","frankfurt","london","mumbai","newark","new_york_city","san_francisco","singapore","sydney","tokyo","toronto","washington_dc","chicago","paris","seattle","sao_paulo","stockholm","chennai","osaka","milan","miami","jakarta","los_angeles"],"description":"**Deprecated**"},"CloudNamespaceFull":{"type":"object","description":"A full namespace.","properties":{"namespace_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"version_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"config":{"$ref":"#/components/schemas/CloudNamespaceConfig"}},"required":["namespace_id","create_ts","display_name","version_id","name_id","config"]},"CloudNamespaceConfig":{"type":"object","description":"Cloud configuration for a given namespace.","properties":{"cdn":{"$ref":"#/components/schemas/CloudCdnNamespaceConfig"},"matchmaker":{"$ref":"#/components/schemas/CloudMatchmakerNamespaceConfig"},"kv":{"$ref":"#/components/schemas/CloudKvNamespaceConfig"},"identity":{"$ref":"#/components/schemas/CloudIdentityNamespaceConfig"}},"required":["cdn","matchmaker","kv","identity"]},"CloudCdnNamespaceConfig":{"type":"object","description":"CDN configuration for a given namespace.","properties":{"enable_domain_public_auth":{"type":"boolean","description":"Whether or not to allow users to connect to the given namespace via domain name."},"domains":{"type":"array","items":{"$ref":"#/components/schemas/CloudCdnNamespaceDomain"},"description":"A list of CDN domains for a given namespace."},"auth_type":{"$ref":"#/components/schemas/CloudCdnAuthType"},"auth_user_list":{"type":"array","items":{"$ref":"#/components/schemas/CloudCdnNamespaceAuthUser"},"description":"A list of CDN authenticated users for a given namespace."}},"required":["enable_domain_public_auth","domains","auth_type","auth_user_list"]},"CloudMatchmakerNamespaceConfig":{"type":"object","description":"Matchmaker configuration for a given namespace.","properties":{"lobby_count_max":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_vpn":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_proxy":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_tor":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_hosting":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_count_max","max_players_per_client","max_players_per_client_vpn","max_players_per_client_proxy","max_players_per_client_tor","max_players_per_client_hosting"]},"CloudKvNamespaceConfig":{"type":"object","description":"KV configuration for a given namespace.","properties":{}},"CloudIdentityNamespaceConfig":{"type":"object","description":"Identity configuration for a given namespace.","properties":{}},"CloudCdnAuthType":{"type":"string","enum":["none","basic"],"description":"A value denoting what type of authentication to use for a game namespace's CDN."},"CloudCdnNamespaceDomain":{"type":"object","description":"A CDN domain for a given namespace.","properties":{"domain":{"type":"string","description":"A valid domain name (no protocol)."},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"verification_status":{"$ref":"#/components/schemas/CloudCdnNamespaceDomainVerificationStatus"},"verification_method":{"$ref":"#/components/schemas/CloudCdnNamespaceDomainVerificationMethod"},"verification_errors":{"type":"array","items":{"type":"string"}}},"required":["domain","create_ts","verification_status","verification_method","verification_errors"]},"CloudCdnNamespaceDomainVerificationMethod":{"type":"object","description":"A union representing the verification method used for this CDN domain.","properties":{"invalid":{"$ref":"#/components/schemas/EmptyObject"},"http":{"$ref":"#/components/schemas/CloudCdnNamespaceDomainVerificationMethodHttp"}}},"CloudCdnNamespaceDomainVerificationMethodHttp":{"type":"object","properties":{"cname_record":{"type":"string"}},"required":["cname_record"]},"CloudCdnNamespaceDomainVerificationStatus":{"type":"string","enum":["active","pending","failed"],"description":"A value denoting the status of a CDN domain's verification status."},"CloudCdnNamespaceAuthUser":{"type":"object","description":"An authenticated CDN user for a given namespace.","properties":{"user":{"type":"string","description":"A user name."}},"required":["user"]},"CloudMatchmakerDevelopmentPort":{"type":"object","description":"A port configuration used to create development tokens.","properties":{"port":{"type":"integer"},"port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange"},"protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol"}},"required":["protocol"]},"CloudNamespaceVersion":{"type":"object","description":"A previously deployed namespace version.","properties":{"namespace_id":{"type":"string","description":"A universally unique identifier."},"version_id":{"type":"string","description":"A universally unique identifier."},"deploy_ts":{"$ref":"#/components/schemas/Timestamp"}},"required":["namespace_id","version_id","deploy_ts"]},"CloudDevicesPrepareDeviceLinkResponse":{"type":"object","properties":{"device_link_id":{"type":"string","format":"uuid"},"device_link_token":{"type":"string"},"device_link_url":{"type":"string"}},"required":["device_link_id","device_link_token","device_link_url"]},"CloudDevicesGetDeviceLinkResponse":{"type":"object","properties":{"cloud_token":{"type":"string"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["watch"]},"CloudDevicesCompleteDeviceLinkRequest":{"type":"object","properties":{"device_link_token":{"$ref":"#/components/schemas/Jwt"},"game_id":{"type":"string","format":"uuid"}},"required":["device_link_token","game_id"]},"CloudGamesListGameCustomAvatarsResponse":{"type":"object","properties":{"custom_avatars":{"type":"array","items":{"$ref":"#/components/schemas/CloudCustomAvatarSummary"},"description":"A list of custom avatar summaries."}},"required":["custom_avatars"]},"CloudGamesPrepareCustomAvatarUploadRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the custom avatar."},"mime":{"type":"string","description":"The MIME type of the custom avatar."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"CloudGamesPrepareCustomAvatarUploadResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"CloudGamesListGameBuildsResponse":{"type":"object","properties":{"builds":{"type":"array","items":{"$ref":"#/components/schemas/CloudBuildSummary"},"description":"A list of build summaries."}},"required":["builds"]},"CloudGamesCreateGameBuildRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"image_tag":{"type":"string","description":"A tag given to the game build."},"image_file":{"$ref":"#/components/schemas/UploadPrepareFile"},"multipart_upload":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/CloudGamesBuildKind"},"compression":{"$ref":"#/components/schemas/CloudGamesBuildCompression"}},"required":["display_name","image_tag","image_file"]},"CloudGamesCreateGameBuildResponse":{"type":"object","properties":{"build_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"image_presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"},"image_presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["build_id","upload_id"]},"CloudGamesBuildKind":{"type":"string","enum":["docker_image","oci_bundle"]},"CloudGamesBuildCompression":{"type":"string","enum":["none","lz4"]},"CloudGamesListGameCdnSitesResponse":{"type":"object","properties":{"sites":{"type":"array","items":{"$ref":"#/components/schemas/CloudCdnSiteSummary"},"description":"A list of CDN site summaries."}},"required":["sites"]},"CloudGamesCreateGameCdnSiteRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"files":{"type":"array","items":{"$ref":"#/components/schemas/UploadPrepareFile"},"description":"A list of files preparing to upload."}},"required":["display_name","files"]},"CloudGamesCreateGameCdnSiteResponse":{"type":"object","properties":{"site_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["site_id","upload_id","presigned_requests"]},"CloudGamesExportMatchmakerLobbyHistoryRequest":{"type":"object","properties":{"query_start":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"query_end":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["query_start","query_end"]},"CloudGamesExportMatchmakerLobbyHistoryResponse":{"type":"object","properties":{"url":{"type":"string","description":"The URL to a CSV file for the given lobby history."}},"required":["url"]},"CloudGamesDeleteMatchmakerLobbyResponse":{"type":"object","properties":{"did_remove":{"type":"boolean","description":"Whether or not the lobby was successfully stopped."}},"required":["did_remove"]},"CloudGamesGetLobbyLogsResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"timestamps":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["lines","timestamps","watch"]},"CloudGamesExportLobbyLogsRequest":{"type":"object","properties":{"stream":{"$ref":"#/components/schemas/CloudGamesLogStream"}},"required":["stream"]},"CloudGamesExportLobbyLogsResponse":{"type":"object","properties":{"url":{"type":"string","description":"The URL to a CSV file for the given lobby history."}},"required":["url"]},"CloudGamesLogStream":{"type":"string","enum":["std_out","std_err"]},"CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse":{"type":"object","properties":{"lobbies":{"type":"array","items":{"$ref":"#/components/schemas/CloudLobbySummaryAnalytics"},"description":"A list of analytics lobby summaries."}},"required":["lobbies"]},"CloudGamesNamespacesListNamespaceLobbiesResponse":{"type":"object","properties":{"lobbies":{"type":"array","items":{"$ref":"#/components/schemas/CloudLogsLobbySummary"},"description":"A list of lobby log summaries."}},"required":["lobbies"]},"CloudGamesNamespacesGetNamespaceLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/CloudLogsLobbySummary"},"metrics":{"$ref":"#/components/schemas/CloudSvcMetrics"},"stdout_presigned_urls":{"type":"array","items":{"type":"string"},"description":"**Deprecated**\nA list of URLs."},"stderr_presigned_urls":{"type":"array","items":{"type":"string"},"description":"**Deprecated**\nA list of URLs."},"perf_lists":{"type":"array","items":{"$ref":"#/components/schemas/CloudSvcPerf"},"description":"**Deprecated**\nA list of service performance summaries."}},"required":["lobby","stdout_presigned_urls","stderr_presigned_urls","perf_lists"]},"CloudGamesCreateCloudTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."}},"required":["token"]},"CloudGamesCreateGameVersionRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"config":{"$ref":"#/components/schemas/CloudVersionConfig"}},"required":["display_name","config"]},"CloudGamesCreateGameVersionResponse":{"type":"object","properties":{"version_id":{"type":"string","format":"uuid"}},"required":["version_id"]},"CloudGamesReserveVersionNameResponse":{"type":"object","properties":{"version_display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["version_display_name"]},"CloudGamesValidateGameVersionRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"config":{"$ref":"#/components/schemas/CloudVersionConfig"}},"required":["display_name","config"]},"CloudGamesValidateGameVersionResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesGetGameVersionByIdResponse":{"type":"object","properties":{"version":{"$ref":"#/components/schemas/CloudVersionFull"}},"required":["version"]},"CloudValidateGroupRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"CloudValidateGroupResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGetRayPerfLogsResponse":{"type":"object","properties":{"perf_lists":{"type":"array","items":{"$ref":"#/components/schemas/CloudSvcPerf"},"description":"A list of service performance summaries."}},"required":["perf_lists"]},"CloudGetRegionTiersResponse":{"type":"object","properties":{"tiers":{"type":"array","items":{"$ref":"#/components/schemas/CloudRegionTier"},"description":"A list of region server tiers."}},"required":["tiers"]},"CloudVersionEngineCustomConfig":{"type":"object","properties":{}},"CloudVersionEngineGodotConfig":{"type":"object","properties":{}},"CloudVersionEngineHtml5Config":{"type":"object","properties":{}},"CloudVersionEngineUnityConfig":{"type":"object","properties":{}},"CloudVersionEngineUnrealConfig":{"type":"object","properties":{"game_module":{"type":"string","description":"Name of the Unreal module that holds the game code.\nThis is usually the value of `$.Modules[0].Name` in the file `MyProject.unproject`.\n_Configures Rivet CLI behavior. Has no effect on server behavior._"}},"required":["game_module"]},"CloudVersionMatchmakerPortRange":{"type":"object","description":"Range of ports that can be connected to.\nIf configured, `network_mode` must equal `host`.\nPort ranges may overlap between containers, it is the responsibility of the developer to ensure ports are available before using.\nRead more about host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking).\nOnly available on Rivet Open Source & Enterprise.\n\n### Related\n\n- cloud.version.matchmaker.PortProtocol\n- cloud.version.matchmaker.ProxyKind","properties":{"min":{"type":"integer","description":"Unsigned 32 bit integer."},"max":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["min","max"]},"CloudVersionMatchmakerPortProtocol":{"type":"string","enum":["http","https","tcp","tcp_tls","udp"],"description":"Signifies the protocol of the port.\nNote that when proxying through GameGuard (via `ProxyKind`), the port number returned by `/find`, `/join`, and `/create` will not be the same as the port number configured in the config:\n\n- With HTTP, the port will always be 80. The hostname of the port correctly routes the incoming\n connection to the correct port being used by the game server.\n- With HTTPS, the port will always be 443. The hostname of the port correctly routes the incoming\n connection to the correct port being used by the game server.\n- Using TCP/UDP, the port will be a random number between 26000 and 31999. This gets automatically\n routed to the correct port being used by the game server.\n\n### Related - cloud.version.matchmaker.GameModeRuntimeDockerPort - cloud.version.matchmaker.ProxyKind - /docs/dynamic-servers/concepts/game-guard - matchmaker.lobbies.find"},"CloudVersionMatchmakerProxyKind":{"type":"string","enum":["none","game_guard"],"description":"Range of ports that can be connected to.\n`game_guard` (default) proxies all traffic through [Game Guard](https://rivet.gg/docs/dynamic-servers/concepts/game-guard) to mitigate DDoS attacks and provide TLS termination.\n`none` sends traffic directly to the game server. If configured, `network_mode` must equal `host`. Read more about host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). Only available on Rivet Open Source & Enterprise.\n\n### Related - /docs/dynamic-servers/concepts/game-guard - cloud.version.matchmaker.PortProtocol"},"CloudVersionMatchmakerCaptcha":{"type":"object","description":"Matchmaker captcha configuration.","properties":{"requests_before_reverify":{"type":"integer","description":"Denotes how many requests a connection can make before it is required to reverify a captcha."},"verification_ttl":{"type":"integer","format":"int64","description":"Denotes how long a connection can continue to reconnect without having to reverify a captcha (in milliseconds)."},"hcaptcha":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptchaHcaptcha"},"turnstile":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptchaTurnstile"}},"required":["requests_before_reverify","verification_ttl"]},"CloudVersionMatchmakerCaptchaHcaptcha":{"type":"object","description":"hCpatcha configuration.","properties":{"level":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptchaHcaptchaLevel","description":"**Deprecated**"},"site_key":{"type":"string","description":"Site key for your hCaptcha application. Must be set."},"secret_key":{"type":"string","description":"Secret key for your hCaptcha application. Must be set."}}},"CloudVersionMatchmakerCaptchaHcaptchaLevel":{"type":"string","enum":["easy","moderate","difficult","always_on"],"description":"**Deprecated**\nHow hard a captcha should be."},"CloudVersionMatchmakerCaptchaTurnstile":{"type":"object","description":"Turnstile captcha configuration.","properties":{"site_key":{"type":"string"},"secret_key":{"type":"string"}},"required":["site_key","secret_key"]},"CloudVersionMatchmakerNetworkMode":{"type":"string","enum":["bridge","host"],"description":"Configures how the container's network is isolated from the host.\n`bridge` (default) networking isolates the container's network from the host & other containers.\n`host` networking removes isolation between the container and the host. Only available in Rivet Open Source & Enterprise.\nRead more about bridge vs host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking)."},"CloudVersionMatchmakerGameMode":{"type":"object","description":"A game mode.","properties":{"regions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRegion"}},"max_players":{"type":"integer"},"max_players_direct":{"type":"integer"},"max_players_party":{"type":"integer"},"docker":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRuntimeDocker"},"listable":{"type":"boolean"},"taggable":{"type":"boolean"},"allow_dynamic_max_players":{"type":"boolean"},"actions":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeActions"},"tier":{"type":"string"},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdleLobbiesConfig"}}},"CloudVersionMatchmakerGameModeRegion":{"type":"object","description":"A game mode region.","properties":{"tier":{"type":"string"},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdleLobbiesConfig"}}},"CloudVersionMatchmakerGameModeRuntimeDocker":{"type":"object","description":"A game mode runtime running through Docker.","properties":{"dockerfile":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"build_args":{"type":"object","additionalProperties":{"type":"string"},"description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"image":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"image_id":{"type":"string","format":"uuid"},"args":{"type":"array","items":{"type":"string"}},"env":{"type":"object","additionalProperties":{"type":"string"}},"network_mode":{"$ref":"#/components/schemas/CloudVersionMatchmakerNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRuntimeDockerPort"}}}},"CloudVersionMatchmakerGameModeRuntimeDockerPort":{"type":"object","description":"Port config for a docker build.","properties":{"port":{"type":"integer","description":"The port number to connect to.\n\n### Related - cloud.version.matchmaker.PortProtocol - cloud.version.matchmaker.ProxyKind"},"port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange"},"protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol"},"proxy":{"$ref":"#/components/schemas/CloudVersionMatchmakerProxyKind","description":"How this port should be proxied. Defaults to 'game-guard`."},"dev_port":{"type":"integer","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"dev_port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"dev_protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"}}},"CloudVersionMatchmakerGameModeIdleLobbiesConfig":{"type":"object","description":"Configuration for how many idle lobbies a game version should have.","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"]},"CloudVersionMatchmakerGameModeActions":{"type":"object","description":"Configuration for the connection types allowed for a game mode.","properties":{"find":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeFindConfig"},"join":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeJoinConfig"},"create":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeCreateConfig"}}},"CloudVersionMatchmakerGameModeIdentityRequirement":{"type":"string","enum":["none","guest","registered"],"description":"**Deprecated**\nThe registration requirement for a user when joining/finding/creating a lobby. \"None\" allows for connections without an identity."},"CloudVersionMatchmakerGameModeVerificationConfig":{"type":"object","description":"Configuration that tells Rivet where to send validation requests and with what headers. When set, Rivet will send the `verification_data` property (given by the user in the find/join/create endpoint) to the given url along with the headers provided and some information about the requested lobby. The response of this request will determine if the user can join that lobby or not.","properties":{"url":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["url","headers"]},"CloudVersionMatchmakerGameModeFindConfig":{"type":"object","description":"Configures the requirements and authentication for the /find endpoint. If this value is not set in the config, the /find endpoint is still enabled.","properties":{"enabled":{"type":"boolean","description":"Sets whether or not the /find endpoint is enabled."},"identity_requirement":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdentityRequirement"},"verification":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeVerificationConfig"}},"required":["enabled"]},"CloudVersionMatchmakerGameModeJoinConfig":{"type":"object","description":"Configures the requirements and authentication for the /join endpoint. If this value is not set in the config, the /join endpoint is still enabled.","properties":{"enabled":{"type":"boolean","description":"Sets whether or not the /join endpoint is enabled."},"identity_requirement":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdentityRequirement"},"verification":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeVerificationConfig"}},"required":["enabled"]},"CloudVersionMatchmakerGameModeCreateConfig":{"type":"object","description":"Configures the requirements and authentication for the /create endpoint. If this value is not set in the config, the /create endpoint is NOT enabled.","properties":{"enabled":{"type":"boolean","description":"Sets whether or not the /create endpoint is enabled."},"identity_requirement":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdentityRequirement"},"verification":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeVerificationConfig"},"enable_public":{"type":"boolean","description":"Defaults to false when unset."},"enable_private":{"type":"boolean","description":"Defaults to true when unset."},"max_lobbies_per_identity":{"type":"integer","description":"**Deprecated**"}},"required":["enabled"]},"CloudVersionMatchmakerLobbyGroup":{"type":"object","description":"A game mode.","properties":{"name_id":{"type":"string","description":"**Deprecated: use GameMode instead**\nA human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"regions":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRegion"},"description":"A list of game mode regions."},"max_players_normal":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_direct":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_party":{"type":"integer","description":"Unsigned 32 bit integer."},"runtime":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntime"}},"required":["name_id","regions","max_players_normal","max_players_direct","max_players_party","runtime"]},"CloudVersionMatchmakerLobbyGroupRuntime":{"type":"object","description":"**Deprecated: use GameMode instead**\nA union representing the runtime a game mode runs on.","properties":{"docker":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDocker"}}},"CloudVersionMatchmakerLobbyGroupRegion":{"type":"object","description":"**Deprecated: use GameMode instead**\nA game mode region.","properties":{"region_id":{"type":"string","format":"uuid"},"tier_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig"}},"required":["region_id","tier_name_id"]},"CloudVersionMatchmakerLobbyGroupRuntimeDocker":{"type":"object","description":"**Deprecated: use GameMode instead**\nA game mode runtime running through Docker.","properties":{"build_id":{"type":"string","format":"uuid"},"args":{"type":"array","items":{"type":"string"}},"env_vars":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar"}},"network_mode":{"$ref":"#/components/schemas/CloudVersionMatchmakerNetworkMode"},"ports":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort"}}},"required":["args","env_vars","ports"]},"CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar":{"type":"object","description":"**Deprecated: use GameMode instead**\nA docker environment variable.","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"CloudVersionMatchmakerLobbyGroupRuntimeDockerPort":{"type":"object","description":"**Deprecated: use GameMode instead**\nA docker port.","properties":{"label":{"type":"string","description":"The label of this docker port."},"target_port":{"type":"integer","description":"The port number to connect to."},"port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange"},"proxy_protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol"}},"required":["label","proxy_protocol"]},"CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig":{"type":"object","description":"**Deprecated: use GameMode instead**\nConfiguration for how many idle lobbies a game version should have.","properties":{"min_idle_lobbies":{"type":"integer","description":"Unsigned 32 bit integer."},"max_idle_lobbies":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["min_idle_lobbies","max_idle_lobbies"]},"Identifier":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `uuid` because this is intended to be human readable. Different than `DisplayName` because this should not include special characters and be short."},"Bio":{"type":"string","description":"Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$"},"Email":{"type":"string","description":"A valid email address"},"Jwt":{"type":"string","description":"Documentation at https://jwt.io/"},"WatchQuery":{"type":"string","description":"A query parameter denoting the requests watch index."},"WatchResponse":{"type":"object","description":"Provided by watchable endpoints used in blocking loops.","properties":{"index":{"type":"string","description":"Index indicating the version of the data responded.\nPass this to `WatchQuery` to block and wait for the next response."}},"required":["index"]},"DisplayName":{"type":"string","description":"Represent a resource's readable display name."},"AccountNumber":{"type":"integer"},"Timestamp":{"type":"string","format":"date-time","description":"RFC3339 timestamp"},"GlobalEventNotification":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"thumbnail_url":{"type":"string"},"url":{"type":"string"}},"required":["title","description","thumbnail_url","url"]},"ValidationError":{"type":"object","description":"An error given by failed content validation.","properties":{"path":{"type":"array","items":{"type":"string"},"description":"A list of strings denoting the origin of a validation error."}},"required":["path"]},"EmptyObject":{"type":"object","properties":{}},"ErrorMetadata":{"description":"Unstructured metadata relating to an error. Must be manually parsed."},"ErrorBody":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"ray_id":{"type":"string"},"documentation":{"type":"string"},"metadata":{"$ref":"#/components/schemas/ErrorMetadata"}},"required":["code","message","ray_id"]},"GameHandle":{"type":"object","properties":{"game_id":{"type":"string","format":"uuid"},"name_id":{"$ref":"#/components/schemas/Identifier"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."}},"required":["game_id","name_id","display_name"]},"GameGameSummary":{"type":"object","properties":{"game_id":{"type":"string","format":"uuid"},"name_id":{"$ref":"#/components/schemas/Identifier"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."},"url":{"type":"string"},"developer":{"$ref":"#/components/schemas/GroupHandle"},"total_player_count":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["game_id","name_id","display_name","url","developer","total_player_count"]},"GameProfile":{"type":"object","description":"A game profile.","properties":{"game_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"display_name":{"$ref":"#/components/schemas/DisplayName"},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."},"url":{"type":"string","description":"The URL to this game's website."},"developer":{"$ref":"#/components/schemas/GroupGroupSummary"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of game tags."},"description":{"type":"string","description":"A description of the given game."},"platforms":{"type":"array","items":{"$ref":"#/components/schemas/GamePlatformLink"},"description":"A list of platform links."},"recommended_groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"},"description":"A list of group summaries."},"identity_leaderboard_categories":{"type":"array","items":{"$ref":"#/components/schemas/GameLeaderboardCategory"},"description":"A list of game leaderboard categories."},"group_leaderboard_categories":{"type":"array","items":{"$ref":"#/components/schemas/GameLeaderboardCategory"},"description":"A list of game leaderboard categories."}},"required":["game_id","name_id","display_name","url","developer","tags","description","platforms","recommended_groups","identity_leaderboard_categories","group_leaderboard_categories"]},"GamePlatformLink":{"type":"object","description":"A platform link denoting a supported platform.","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"url":{"type":"string","description":"The URL to the given game's method of distribution on this platform."}},"required":["display_name","url"]},"GameLeaderboardCategory":{"type":"object","description":"A game leaderboard category.","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"GameStatSummary":{"type":"object","description":"A game statistic summary.","properties":{"game":{"$ref":"#/components/schemas/GameHandle"},"stats":{"type":"array","items":{"$ref":"#/components/schemas/GameStat"}}},"required":["game","stats"]},"GameStat":{"type":"object","description":"A game statistic.","properties":{"config":{"$ref":"#/components/schemas/GameStatConfig"},"overall_value":{"type":"number","format":"double","description":"A single overall value of the given statistic."}},"required":["config","overall_value"]},"GameStatConfig":{"type":"object","description":"A game statistic config.","properties":{"record_id":{"type":"string","format":"uuid"},"icon_id":{"type":"string","format":"uuid"},"format":{"$ref":"#/components/schemas/GameStatFormatMethod"},"aggregation":{"$ref":"#/components/schemas/GameStatAggregationMethod"},"sorting":{"$ref":"#/components/schemas/GameStatSortingMethod"},"priority":{"type":"integer"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"postfix_singular":{"type":"string","description":"A string appended to the end of a singular game statistic's value. Example: 1 **dollar**."},"postfix_plural":{"type":"string","description":"A string appended to the end of a game statistic's value that is not exactly 1. Example: 45 **dollars**."},"prefix_singular":{"type":"string","description":"A string appended to the beginning of a singular game statistic's value. Example: **value** 1."},"prefix_plural":{"type":"string","description":"A string prepended to the beginning of a game statistic's value that is not exactly 1. Example: **values** 45."}},"required":["record_id","icon_id","format","aggregation","sorting","priority","display_name"]},"GameStatFormatMethod":{"type":"string","enum":["integer","float_1","float_2","float_3","duration_minute","duration_second","duration_hundredth_second"],"description":"A value denoting the format method of a game statistic."},"GameStatAggregationMethod":{"type":"string","enum":["sum","average","min","max"],"description":"A value denoting the aggregation method of a game statistic."},"GameStatSortingMethod":{"type":"string","enum":["desc","asc"],"description":"A value denoting the sorting method of a game statistic."},"GamesEnvironmentsCreateServiceTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token."}},"required":["token"]},"GeoCoord":{"type":"object","description":"Geographical coordinates for a location on Planet Earth.","properties":{"latitude":{"type":"number","format":"double"},"longitude":{"type":"number","format":"double"}},"required":["latitude","longitude"]},"GeoDistance":{"type":"object","description":"Distance available in multiple units.","properties":{"kilometers":{"type":"number","format":"double"},"miles":{"type":"number","format":"double"}},"required":["kilometers","miles"]},"GroupGroupSummary":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"avatar_url":{"type":"string","description":"The URL of this group's avatar image."},"external":{"$ref":"#/components/schemas/GroupExternalLinks"},"is_developer":{"type":"boolean","description":"**Deprecated**\nWhether or not this group is a developer."},"bio":{"$ref":"#/components/schemas/Bio"},"is_current_identity_member":{"type":"boolean","description":"Whether or not the current identity is a member of this group."},"publicity":{"$ref":"#/components/schemas/GroupPublicity"},"member_count":{"type":"integer"},"owner_identity_id":{"type":"string","format":"uuid"}},"required":["group_id","display_name","external","is_developer","bio","is_current_identity_member","publicity","member_count","owner_identity_id"]},"GroupPublicity":{"type":"string","enum":["open","closed"],"description":"The current publicity value for the given group."},"GroupHandle":{"type":"object","description":"A group handle.","properties":{"group_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"avatar_url":{"type":"string","description":"The URL of this group's avatar image"},"external":{"$ref":"#/components/schemas/GroupExternalLinks"},"is_developer":{"type":"boolean","description":"Whether or not this group is a developer group."}},"required":["group_id","display_name","external"]},"GroupExternalLinks":{"type":"object","description":"External links for this group.","properties":{"profile":{"type":"string","description":"A link to this group's profile page."}},"required":["profile"]},"GroupJoinRequest":{"type":"object","description":"A group join request.","properties":{"identity":{"$ref":"#/components/schemas/IdentityHandle"},"ts":{"$ref":"#/components/schemas/Timestamp"}},"required":["identity","ts"]},"GroupMember":{"type":"object","description":"A group member.","properties":{"identity":{"$ref":"#/components/schemas/IdentityHandle"}},"required":["identity"]},"GroupProfile":{"type":"object","description":"A list of group profiles.","properties":{"group_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"avatar_url":{"type":"string","description":"The URL of this group's avatar image."},"external":{"$ref":"#/components/schemas/GroupExternalLinks"},"is_developer":{"type":"boolean","description":"Whether or not this group is a developer."},"bio":{"type":"string","description":"Detailed information about a profile."},"is_current_identity_member":{"type":"boolean","description":"Whether or not the current identity is a member of this group."},"publicity":{"$ref":"#/components/schemas/GroupPublicity"},"member_count":{"type":"integer","description":"Unsigned 32 bit integer."},"members":{"type":"array","items":{"$ref":"#/components/schemas/GroupMember"},"description":"A list of group members."},"join_requests":{"type":"array","items":{"$ref":"#/components/schemas/GroupJoinRequest"},"description":"A list of group join requests."},"is_current_identity_requesting_join":{"type":"boolean","description":"Whether or not the current identity is currently requesting to join this group."},"owner_identity_id":{"type":"string","format":"uuid"}},"required":["group_id","display_name","external","bio","publicity","members","join_requests","owner_identity_id"]},"GroupBannedIdentity":{"type":"object","description":"A banned identity.","properties":{"identity":{"$ref":"#/components/schemas/IdentityHandle"},"ban_ts":{"$ref":"#/components/schemas/Timestamp"}},"required":["identity","ban_ts"]},"GroupGetInviteResponse":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/GroupHandle"}},"required":["group"]},"GroupConsumeInviteResponse":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"}}},"GroupCreateInviteRequest":{"type":"object","properties":{"ttl":{"type":"number","format":"double","description":"How long until the group invite expires (in milliseconds)."},"use_count":{"type":"number","format":"double","description":"How many times the group invite can be used."}}},"GroupCreateInviteResponse":{"type":"object","properties":{"code":{"type":"string","description":"The code that will be passed to `rivet.api.group#ConsumeInvite` to join a group."}},"required":["code"]},"GroupResolveJoinRequestRequest":{"type":"object","properties":{"resolution":{"type":"boolean"}}},"IdentityListActivitiesResponse":{"type":"object","properties":{"identities":{"type":"array","items":{"$ref":"#/components/schemas/IdentityHandle"}},"games":{"type":"array","items":{"$ref":"#/components/schemas/GameGameSummary"}},"suggested_groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"}},"suggested_players":{"type":"array","items":{"$ref":"#/components/schemas/IdentityHandle"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identities","games","suggested_groups","suggested_players","watch"]},"IdentityGlobalEvent":{"type":"object","description":"An event relevant to the current identity.","properties":{"ts":{"$ref":"#/components/schemas/Timestamp"},"kind":{"$ref":"#/components/schemas/IdentityGlobalEventKind"},"notification":{"$ref":"#/components/schemas/IdentityGlobalEventNotification"}},"required":["ts","kind"]},"IdentityGlobalEventKind":{"type":"object","properties":{"identity_update":{"$ref":"#/components/schemas/IdentityGlobalEventIdentityUpdate"}}},"IdentityGlobalEventNotification":{"type":"object","description":"Notifications represent information that should be presented to the user\nimmediately.\nAt the moment, only chat message events have associated notifications.\n\n# Display\n\nNotifications should be displayed in an unobtrusive manner throughout the\nentire game. Notifications should disappear after a few seconds if not\ninteracted with.\n\n# Interactions\n\nIf your platform supports it, notifications should be able to be clicked or\ntapped in order to open the relevant context for the event.\nFor a simple implementation of notification interactions, open `url` in a\nweb browser to present the relevant context. For example, a chat message\nnotification will open the thread the chat message was sent in.\nFor advanced implementations that implement a custom chat UI, use\n`GlobalEvent.kind` to determine what action to take when the notification is interacted with.\nFor example, if the global event kind is `GlobalEventChatMessage`, then open\nthe chat UI for the given thread.","properties":{"title":{"type":"string"},"description":{"type":"string"},"thumbnail_url":{"type":"string","description":"URL to an image thumbnail that should be shown for this notification."},"url":{"type":"string","description":"Rivet Hub URL that holds the relevant context for this notification."}},"required":["title","description","thumbnail_url","url"]},"IdentityGlobalEventIdentityUpdate":{"type":"object","properties":{"identity":{"$ref":"#/components/schemas/IdentityProfile"}},"required":["identity"]},"IdentityUpdateGameActivity":{"type":"object","description":"Information about the identity's current game. This is information that all other identities can see about what the current identity is doing.","properties":{"message":{"type":"string","description":"A short message about the current game activity."},"public_metadata":{"description":"JSON data seen by anyone."},"mutual_metadata":{"description":"JSON data seen only by the given identity and their mutual followers."}}},"IdentityHandle":{"type":"object","description":"An identity handle.","properties":{"identity_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"account_number":{"$ref":"#/components/schemas/AccountNumber"},"avatar_url":{"type":"string","description":"The URL of this identity's avatar image."},"is_registered":{"type":"boolean","description":"Whether or not this identity is registered with a linked account."},"external":{"$ref":"#/components/schemas/IdentityExternalLinks"}},"required":["identity_id","display_name","account_number","avatar_url","is_registered","external"]},"IdentitySummary":{"type":"object","description":"An identity summary.","properties":{"identity_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"account_number":{"$ref":"#/components/schemas/AccountNumber"},"avatar_url":{"type":"string","description":"The URL of this identity's avatar image."},"is_registered":{"type":"boolean","description":"Whether or not this identity is registered with a linked account."},"external":{"$ref":"#/components/schemas/IdentityExternalLinks"},"following":{"type":"boolean","description":"Whether or not the requestee's identity is following this identity."},"is_following_me":{"type":"boolean","description":"Whether or not this identity is both following and is followed by the requestee's identity."},"is_mutual_following":{"type":"boolean"}},"required":["identity_id","display_name","account_number","avatar_url","is_registered","external","following","is_following_me","is_mutual_following"]},"IdentityProfile":{"type":"object","description":"An identity profile.","properties":{"identity_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"account_number":{"$ref":"#/components/schemas/AccountNumber"},"avatar_url":{"type":"string","description":"The URL of this identity's avatar image."},"is_registered":{"type":"boolean","description":"Whether or not this identity is registered with a linked account."},"external":{"$ref":"#/components/schemas/IdentityExternalLinks"},"is_admin":{"type":"boolean","description":"Whether or not this identity is an admin."},"is_game_linked":{"type":"boolean","description":"Whether or not this game user has been linked through the Rivet dashboard."},"dev_state":{"$ref":"#/components/schemas/IdentityDevState","description":"**Deprecated**"},"follower_count":{"type":"integer","format":"int64"},"following_count":{"type":"integer","format":"int64"},"following":{"type":"boolean","description":"Whether or not the requestee's identity is following this identity."},"is_following_me":{"type":"boolean","description":"Whether or not this identity is both following and is followed by the requestee's identity."},"is_mutual_following":{"type":"boolean"},"join_ts":{"$ref":"#/components/schemas/Timestamp"},"bio":{"$ref":"#/components/schemas/Bio"},"linked_accounts":{"type":"array","items":{"$ref":"#/components/schemas/IdentityLinkedAccount"}},"groups":{"type":"array","items":{"$ref":"#/components/schemas/IdentityGroup"}},"games":{"type":"array","items":{"$ref":"#/components/schemas/GameStatSummary"}},"awaiting_deletion":{"type":"boolean","description":"Whether or not this identity is awaiting account deletion. Only visible to when the requestee is\nthis identity."}},"required":["identity_id","display_name","account_number","avatar_url","is_registered","external","is_admin","follower_count","following_count","following","is_following_me","is_mutual_following","join_ts","bio","linked_accounts","groups","games"]},"IdentityExternalLinks":{"type":"object","description":"External links for an identity.","properties":{"profile":{"type":"string","description":"A link to this identity's profile page."},"settings":{"type":"string","description":"A link to the Rivet settings page."}},"required":["profile"]},"IdentityStatus":{"type":"string","enum":["online","away","offline"],"description":"The current status of an identity. This helps players understand if another player is currently playing or has their game in the background."},"IdentityGameActivity":{"type":"object","description":"The game an identity is currently participating in.","properties":{"game":{"$ref":"#/components/schemas/GameHandle"},"message":{"type":"string","description":"A short activity message about the current game activity."},"public_metadata":{"description":"JSON data seen by anyone."},"mutual_metadata":{"description":"JSON data seen only by the given identity and their mutual followers."}},"required":["game","message"]},"IdentityGroup":{"type":"object","description":"A group that the given identity.","properties":{"group":{"$ref":"#/components/schemas/GroupHandle"}},"required":["group"]},"IdentityLinkedAccount":{"type":"object","description":"A union representing an identity's linked accounts.","properties":{"email":{"$ref":"#/components/schemas/IdentityEmailLinkedAccount"},"default_user":{"type":"boolean"}}},"IdentityEmailLinkedAccount":{"type":"object","description":"An identity's linked email.","properties":{"email":{"$ref":"#/components/schemas/Email"}},"required":["email"]},"IdentityDevState":{"type":"string","enum":["inactive","pending","accepted"],"description":"The state of the given identity's developer status."},"IdentityGameLinkStatus":{"type":"string","enum":["incomplete","complete","cancelled"]},"IdentityWatchEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/IdentityGlobalEvent"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["events","watch"]},"MatchmakerLobbyInfo":{"type":"object","description":"A public lobby in the lobby list.","properties":{"region_id":{"type":"string"},"game_mode_id":{"type":"string"},"lobby_id":{"type":"string","format":"uuid"},"max_players_normal":{"type":"integer"},"max_players_direct":{"type":"integer"},"max_players_party":{"type":"integer"},"total_player_count":{"type":"integer"},"state":{}},"required":["region_id","game_mode_id","lobby_id","max_players_normal","max_players_direct","max_players_party","total_player_count"]},"MatchmakerGameModeInfo":{"type":"object","description":"A game mode that the player can join.","properties":{"game_mode_id":{"$ref":"#/components/schemas/Identifier"}},"required":["game_mode_id"]},"MatchmakerRegionInfo":{"type":"object","description":"A region that the player can connect to.","properties":{"region_id":{"$ref":"#/components/schemas/Identifier"},"provider_display_name":{"$ref":"#/components/schemas/DisplayName"},"region_display_name":{"$ref":"#/components/schemas/DisplayName"},"datacenter_coord":{"$ref":"#/components/schemas/GeoCoord"},"datacenter_distance_from_client":{"$ref":"#/components/schemas/GeoDistance"}},"required":["region_id","provider_display_name","region_display_name","datacenter_coord","datacenter_distance_from_client"]},"MatchmakerJoinLobby":{"type":"object","description":"A matchmaker lobby.","properties":{"lobby_id":{"type":"string","format":"uuid"},"region":{"$ref":"#/components/schemas/MatchmakerJoinRegion"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"},"description":"**Deprecated**"},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer","description":"**Deprecated**"}},"required":["lobby_id","region","ports","player"]},"MatchmakerJoinRegion":{"type":"object","description":"A matchmaker lobby region.","properties":{"region_id":{"$ref":"#/components/schemas/Identifier"},"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["region_id","display_name"]},"MatchmakerJoinPort":{"type":"object","properties":{"host":{"type":"string","description":"The host for the given port. Will be null if using a port range."},"hostname":{"type":"string"},"port":{"type":"integer","description":"The port number for this lobby. Will be null if using a port range."},"port_range":{"$ref":"#/components/schemas/MatchmakerJoinPortRange"},"is_tls":{"type":"boolean","description":"Whether or not this lobby port uses TLS. You cannot mix a non-TLS and TLS ports."}},"required":["hostname","is_tls"]},"MatchmakerJoinPortRange":{"type":"object","description":"Inclusive range of ports that can be connected to.","properties":{"min":{"type":"integer","description":"Minimum port that can be connected to. Inclusive range."},"max":{"type":"integer","description":"Maximum port that can be connected to. Inclusive range."}},"required":["min","max"]},"MatchmakerJoinPlayer":{"type":"object","description":"A matchmaker lobby player.","properties":{"token":{"$ref":"#/components/schemas/Jwt","description":"Pass this token through the socket to the lobby server. The lobby server will validate this token with `PlayerConnected.player_token`"}},"required":["token"]},"MatchmakerCustomLobbyPublicity":{"type":"string","enum":["public","private"]},"MatchmakerFindLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/MatchmakerJoinLobby"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"}},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer"}},"required":["lobby","ports","player"]},"MatchmakerJoinLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/MatchmakerJoinLobby"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"}},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer"}},"required":["lobby","ports","player"]},"MatchmakerCreateLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/MatchmakerJoinLobby"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"}},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer"}},"required":["lobby","ports","player"]},"MatchmakerListLobbiesResponse":{"type":"object","properties":{"game_modes":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerGameModeInfo"}},"regions":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerRegionInfo"}},"lobbies":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerLobbyInfo"}}},"required":["game_modes","regions","lobbies"]},"MatchmakerGetStatisticsResponse":{"type":"object","properties":{"player_count":{"type":"integer","format":"int64"},"game_modes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerGameModeStatistics"}}},"required":["player_count","game_modes"]},"MatchmakerGameModeStatistics":{"type":"object","properties":{"player_count":{"type":"integer","format":"int64"},"regions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerRegionStatistics"}}},"required":["player_count","regions"]},"MatchmakerRegionStatistics":{"type":"object","properties":{"player_count":{"type":"integer","format":"int64"}},"required":["player_count"]},"MatchmakerListRegionsResponse":{"type":"object","properties":{"regions":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerRegionInfo"}}},"required":["regions"]},"PortalNotificationRegisterService":{"type":"object","properties":{"firebase":{"$ref":"#/components/schemas/PortalNotificationRegisterFirebaseService"}}},"PortalNotificationRegisterFirebaseService":{"type":"object","properties":{"access_key":{"type":"string"}},"required":["access_key"]},"PortalNotificationUnregisterService":{"type":"string","enum":["firebase"]},"PortalGetSuggestedGamesResponse":{"type":"object","properties":{"games":{"type":"array","items":{"$ref":"#/components/schemas/GameGameSummary"},"description":"A list of game summaries."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["games","watch"]},"PortalGetGameProfileResponse":{"type":"object","properties":{"game":{"$ref":"#/components/schemas/GameProfile"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["game","watch"]},"ProvisionPoolType":{"type":"string","enum":["job","gg","ats","pegboard","pegboard_isolate","fdb"]},"ProvisionServer":{"type":"object","properties":{"server_id":{"type":"string","format":"uuid"},"datacenter_id":{"type":"string","format":"uuid"},"pool_type":{"$ref":"#/components/schemas/ProvisionPoolType"},"lan_ip":{"type":"string"},"wan_ip":{"type":"string"}},"required":["server_id","datacenter_id","pool_type"]},"ServersGetBuildResponse":{"type":"object","properties":{"build":{"$ref":"#/components/schemas/ServersBuild"}},"required":["build"]},"ServersListBuildsResponse":{"type":"object","properties":{"builds":{"type":"array","items":{"$ref":"#/components/schemas/ServersBuild"},"description":"A list of builds for the game associated with the token."}},"required":["builds"]},"ServersPatchBuildTagsRequest":{"type":"object","properties":{"tags":{},"exclusive_tags":{"type":"array","items":{"type":"string"},"description":"Removes the given tag keys from all other builds."}},"required":["tags"]},"ServersPatchBuildTagsResponse":{"type":"object","properties":{}},"ServersCreateBuildRequest":{"type":"object","properties":{"name":{"type":"string"},"image_tag":{"type":"string","description":"A tag given to the game build."},"image_file":{"$ref":"#/components/schemas/UploadPrepareFile"},"multipart_upload":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/ServersBuildKind"},"compression":{"$ref":"#/components/schemas/ServersBuildCompression"},"prewarm_datacenters":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["name","image_tag","image_file"]},"ServersCreateBuildResponse":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"image_presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"},"image_presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["build"]},"ServersBuildKind":{"type":"string","enum":["docker_image","oci_bundle"]},"ServersBuildCompression":{"type":"string","enum":["none","lz4"]},"ServersServer":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"environment":{"type":"string","format":"uuid"},"datacenter":{"type":"string","format":"uuid"},"tags":{},"runtime":{"$ref":"#/components/schemas/ServersRuntime"},"network":{"$ref":"#/components/schemas/ServersNetwork"},"resources":{"$ref":"#/components/schemas/ServersResources"},"lifecycle":{"$ref":"#/components/schemas/ServersLifecycle"},"created_at":{"type":"integer","format":"int64"},"started_at":{"type":"integer","format":"int64"},"destroyed_at":{"type":"integer","format":"int64"}},"required":["id","environment","datacenter","tags","runtime","network","resources","lifecycle","created_at"]},"ServersRuntime":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"arguments":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","additionalProperties":{"type":"string"}}},"required":["build"]},"ServersLifecycle":{"type":"object","properties":{"kill_timeout":{"type":"integer","format":"int64","description":"The duration to wait for in milliseconds before killing the server. This should be set to a safe default, and can be overridden during a DELETE request if needed."}}},"ServersResources":{"type":"object","properties":{"cpu":{"type":"integer","description":"The number of CPU cores in millicores, or 1/1000 of a core. For example,\n1/8 of a core would be 125 millicores, and 1 core would be 1000\nmillicores."},"memory":{"type":"integer","description":"The amount of memory in megabytes"}},"required":["cpu","memory"]},"ServersNetwork":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ServersNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ServersPort"}}},"required":["ports"]},"ServersNetworkMode":{"type":"string","enum":["bridge","host"]},"ServersPort":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ServersPortProtocol"},"internal_port":{"type":"integer"},"public_hostname":{"type":"string"},"public_port":{"type":"integer"},"routing":{"$ref":"#/components/schemas/ServersPortRouting"}},"required":["protocol","routing"]},"ServersPortProtocol":{"type":"string","enum":["http","https","tcp","tcp_tls","udp"]},"ServersPortRouting":{"type":"object","properties":{"game_guard":{"$ref":"#/components/schemas/ServersGameGuardRouting"},"host":{"$ref":"#/components/schemas/ServersHostRouting"}}},"ServersGameGuardRouting":{"type":"object","properties":{}},"ServersHostRouting":{"type":"object","properties":{}},"ServersBuild":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags of this build"}},"required":["id","name","created_at","content_length","tags"]},"ServersDatacenter":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"]},"ServersListDatacentersResponse":{"type":"object","properties":{"datacenters":{"type":"array","items":{"$ref":"#/components/schemas/ServersDatacenter"}}},"required":["datacenters"]},"ServersGetServerLogsResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"timestamps":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["lines","timestamps","watch"]},"ServersLogStream":{"type":"string","enum":["std_out","std_err"]},"UploadPresignedRequest":{"type":"object","description":"A presigned request used to upload files. Upload your file to the given URL via a PUT request.","properties":{"path":{"type":"string","description":"The name of the file to upload. This is the same as the one given in the upload prepare file."},"url":{"type":"string","description":"The URL of the presigned request for which to upload your file to."},"byte_offset":{"type":"integer","format":"int64","description":"The byte offset for this multipart chunk. Always 0 if not a multipart upload."},"content_length":{"type":"integer","format":"int64","description":"Expected size of this upload."}},"required":["path","url","byte_offset","content_length"]},"UploadPrepareFile":{"type":"object","description":"A file being prepared to upload.","properties":{"path":{"type":"string","description":"The path/filename of the file."},"content_type":{"type":"string","description":"The MIME type of the file."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]}}} \ No newline at end of file +{"definitions":{"ActorGetActorResponse":{"type":"object","properties":{"actor":{"$ref":"#/components/schemas/ActorActor"}},"required":["actor"]},"ActorCreateActorRequest":{"type":"object","properties":{"region":{"type":"string"},"tags":{},"build":{"type":"string","format":"uuid"},"build_tags":{},"runtime":{"$ref":"#/components/schemas/ActorCreateActorRuntimeRequest"},"network":{"$ref":"#/components/schemas/ActorCreateActorNetworkRequest"},"resources":{"$ref":"#/components/schemas/ActorResources"},"lifecycle":{"$ref":"#/components/schemas/ActorLifecycle"}},"required":["tags"]},"ActorCreateActorRuntimeRequest":{"type":"object","properties":{"environment":{"type":"object","additionalProperties":{"type":"string"}}}},"ActorCreateActorNetworkRequest":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ActorNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ActorCreateActorPortRequest"}}}},"ActorCreateActorPortRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ActorPortProtocol"},"internal_port":{"type":"integer"},"routing":{"$ref":"#/components/schemas/ActorPortRouting"}},"required":["protocol"]},"ActorCreateActorResponse":{"type":"object","properties":{"actor":{"$ref":"#/components/schemas/ActorActor","description":"The actor that was created"}},"required":["actor"]},"ActorDestroyActorResponse":{"type":"object","properties":{}},"ActorUpgradeActorRequest":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"build_tags":{}}},"ActorUpgradeActorResponse":{"type":"object","properties":{}},"ActorUpgradeAllActorsRequest":{"type":"object","properties":{"tags":{},"build":{"type":"string","format":"uuid"},"build_tags":{}},"required":["tags"]},"ActorUpgradeAllActorsResponse":{"type":"object","properties":{"count":{"type":"integer","format":"int64"}},"required":["count"]},"ActorListActorsResponse":{"type":"object","properties":{"actors":{"type":"array","items":{"$ref":"#/components/schemas/ActorActor"},"description":"A list of actors for the project associated with the token."}},"required":["actors"]},"CloudBootstrapResponse":{"type":"object","properties":{"cluster":{"$ref":"#/components/schemas/CloudBootstrapCluster"},"access":{"$ref":"#/components/schemas/CloudBootstrapAccess"},"domains":{"$ref":"#/components/schemas/CloudBootstrapDomains"},"origins":{"$ref":"#/components/schemas/CloudBootstrapOrigins"},"captcha":{"$ref":"#/components/schemas/CloudBootstrapCaptcha"},"login_methods":{"$ref":"#/components/schemas/CloudBootstrapLoginMethods"},"deploy_hash":{"type":"string"}},"required":["cluster","access","domains","origins","captcha","login_methods","deploy_hash"]},"CloudBootstrapCluster":{"type":"string","enum":["enterprise","oss"],"description":"The type of cluster that the backend is currently running."},"CloudBootstrapAccess":{"type":"string","enum":["public","private","development"]},"CloudBootstrapDomains":{"type":"object","description":"Domains that host parts of Rivet","properties":{"cdn":{"type":"string"},"job":{"type":"string"},"main":{"type":"string"},"opengb":{"type":"string"}}},"CloudBootstrapOrigins":{"type":"object","description":"Origins used to build URLs from","properties":{"hub":{"type":"string"}},"required":["hub"]},"CloudBootstrapCaptcha":{"type":"object","properties":{"turnstile":{"$ref":"#/components/schemas/CloudBootstrapCaptchaTurnstile"}}},"CloudBootstrapCaptchaTurnstile":{"type":"object","properties":{"site_key":{"type":"string"}},"required":["site_key"]},"CloudBootstrapLoginMethods":{"type":"object","properties":{"email":{"type":"boolean"},"access_token":{"type":"boolean"}},"required":["email"]},"CloudGamesGetGamesResponse":{"type":"object","properties":{"games":{"type":"array","items":{"$ref":"#/components/schemas/GameGameSummary"},"description":"A list of game summaries."},"groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"},"description":"A list of group summaries."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["games","groups","watch"]},"CloudGamesCreateGameRequest":{"type":"object","properties":{"name_id":{"$ref":"#/components/schemas/Identifier","description":"**Deprecated**"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"developer_group_id":{"type":"string","format":"uuid"}},"required":["display_name","developer_group_id"]},"CloudGamesCreateGameResponse":{"type":"object","properties":{"game_id":{"type":"string","format":"uuid"}},"required":["game_id"]},"CloudGamesValidateGameRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"name_id":{"$ref":"#/components/schemas/Identifier","description":"**Deprecated**"}},"required":["display_name"]},"CloudGamesValidateGameResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesGetGameByIdResponse":{"type":"object","properties":{"game":{"$ref":"#/components/schemas/CloudGameFull"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["game","watch"]},"CloudGamesGameBannerUploadPrepareRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the game banner."},"mime":{"type":"string","description":"The MIME type of the game banner."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"CloudGamesGameBannerUploadPrepareResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"CloudGamesGameLogoUploadPrepareRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the game logo."},"mime":{"type":"string","description":"The MIME type of the game logo."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"CloudGamesGameLogoUploadPrepareResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"CloudGamesNamespacesInspectResponse":{"type":"object","properties":{"agent":{"$ref":"#/components/schemas/CloudAuthAgent"}},"required":["agent"]},"CloudGamesNamespacesCreateGameNamespaceRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"version_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."}},"required":["display_name","version_id","name_id"]},"CloudGamesNamespacesCreateGameNamespaceResponse":{"type":"object","properties":{"namespace_id":{"type":"string","format":"uuid"}},"required":["namespace_id"]},"CloudGamesNamespacesValidateGameNamespaceRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."}},"required":["display_name","name_id"]},"CloudGamesNamespacesValidateGameNamespaceResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesNamespacesGetGameNamespaceByIdResponse":{"type":"object","properties":{"namespace":{"$ref":"#/components/schemas/CloudNamespaceFull"}},"required":["namespace"]},"CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest":{"type":"object","properties":{"user":{"type":"string","description":"A user name."},"password":{"type":"string","description":"A bcrypt encrypted password. An error is returned if the given string is not properly encrypted."}},"required":["user","password"]},"CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest":{"type":"object","properties":{"auth_type":{"$ref":"#/components/schemas/CloudCdnAuthType"}},"required":["auth_type"]},"CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable authentication based on domain."}},"required":["enabled"]},"CloudGamesNamespacesAddNamespaceDomainRequest":{"type":"object","properties":{"domain":{"type":"string","description":"A valid domain name (no protocol)."}},"required":["domain"]},"CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest":{"type":"object","properties":{"lobby_count_max":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_count_max","max_players"]},"CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse":{"type":"object","properties":{"versions":{"type":"array","items":{"$ref":"#/components/schemas/CloudNamespaceVersion"},"description":"A list of previously deployed namespace versions."}},"required":["versions"]},"CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest":{"type":"object","properties":{"lobby_count_max":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_count_max","max_players"]},"CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest":{"type":"object","properties":{"hostname":{"type":"string","description":"The hostname used for the token."},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudMatchmakerDevelopmentPort"}},"lobby_ports":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort"},"description":"**Deprecated**\nA list of docker ports."}},"required":["hostname"]},"CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."}},"required":["token"]},"CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest":{"type":"object","properties":{"hostname":{"type":"string"},"lobby_ports":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort"},"description":"A list of docker ports."}},"required":["hostname","lobby_ports"]},"CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."}},"required":["token"]},"CloudGamesNamespacesUpdateGameNamespaceVersionRequest":{"type":"object","properties":{"version_id":{"type":"string","format":"uuid"}},"required":["version_id"]},"CloudVersionConfig":{"type":"object","description":"Cloud configuration for a given version.","properties":{"scripts":{"type":"object","additionalProperties":{"type":"string"}},"engine":{"$ref":"#/components/schemas/CloudVersionEngineEngineConfig"},"cdn":{"$ref":"#/components/schemas/CloudVersionCdnCdnConfig"},"matchmaker":{"$ref":"#/components/schemas/CloudVersionMatchmakerMatchmakerConfig"},"kv":{"$ref":"#/components/schemas/CloudVersionKvKvConfig"},"identity":{"$ref":"#/components/schemas/CloudVersionIdentityIdentityConfig"}}},"CloudVersionFull":{"type":"object","description":"A full version.","properties":{"version_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"config":{"$ref":"#/components/schemas/CloudVersionConfig"}},"required":["version_id","create_ts","display_name","config"]},"CloudVersionSummary":{"type":"object","description":"A version summary.","properties":{"version_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["version_id","create_ts","display_name"]},"CloudVersionCdnCdnConfig":{"type":"object","description":"CDN configuration for a given version.","properties":{"build_command":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"build_output":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"build_env":{"type":"object","additionalProperties":{"type":"string"},"description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"site_id":{"type":"string","format":"uuid"},"routes":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionCdnRoute"},"description":"Multiple CDN version routes."}}},"CloudVersionCdnRoute":{"type":"object","properties":{"glob":{"type":"string"},"priority":{"type":"integer","description":"Unsigned 32 bit integer."},"middlewares":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionCdnMiddleware"},"description":"Multiple CDN version middleware."}},"required":["glob","priority","middlewares"]},"CloudVersionCdnMiddleware":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/CloudVersionCdnMiddlewareKind"}},"required":["kind"]},"CloudVersionCdnMiddlewareKind":{"type":"object","properties":{"custom_headers":{"$ref":"#/components/schemas/CloudVersionCdnCustomHeadersMiddleware"}}},"CloudVersionCdnCustomHeadersMiddleware":{"type":"object","properties":{"headers":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionCdnHeader"}}},"required":["headers"]},"CloudVersionCdnHeader":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]},"CloudVersionEngineEngineConfig":{"type":"object","properties":{"unity":{"$ref":"#/components/schemas/CloudVersionEngineUnityConfig"},"unreal":{"$ref":"#/components/schemas/CloudVersionEngineUnrealConfig"},"godot":{"$ref":"#/components/schemas/CloudVersionEngineGodotConfig"},"html5":{"$ref":"#/components/schemas/CloudVersionEngineHtml5Config"},"custom":{"$ref":"#/components/schemas/CloudVersionEngineCustomConfig"}}},"CloudVersionIdentityIdentityConfig":{"type":"object","description":"**Deprecated**\nIdentity configuration for a given version.","properties":{"display_names":{"type":"array","items":{"type":"string"},"description":"**Deprecated**"},"avatars":{"type":"array","items":{"type":"string","format":"uuid"},"description":"**Deprecated**"},"custom_display_names":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionIdentityCustomDisplayName"},"description":"**Deprecated**"},"custom_avatars":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionIdentityCustomAvatar"},"description":"**Deprecated**"}}},"CloudVersionIdentityCustomDisplayName":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"CloudVersionIdentityCustomAvatar":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"}},"required":["upload_id"]},"CloudVersionKvKvConfig":{"type":"object","description":"KV configuration for a given version.","properties":{}},"CloudVersionMatchmakerMatchmakerConfig":{"type":"object","description":"Matchmaker configuration for a given version.","properties":{"game_modes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameMode"},"description":"A list of game modes."},"captcha":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptcha"},"dev_hostname":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"regions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRegion"}},"max_players":{"type":"integer"},"max_players_direct":{"type":"integer"},"max_players_party":{"type":"integer"},"docker":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRuntimeDocker"},"tier":{"type":"string"},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdleLobbiesConfig"},"lobby_groups":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroup"},"description":"**Deprecated: use `game_modes` instead**\nA list of game modes."}}},"GroupListSuggestedResponse":{"type":"object","properties":{"groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"},"description":"A list of group summaries."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["groups","watch"]},"GroupCreateRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"GroupCreateResponse":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"}},"required":["group_id"]},"GroupPrepareAvatarUploadRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the group avatar."},"mime":{"type":"string","description":"The MIME type of the group avatar."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"GroupPrepareAvatarUploadResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"GroupValidateProfileRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"bio":{"$ref":"#/components/schemas/DisplayName"},"publicity":{"$ref":"#/components/schemas/GroupPublicity"}}},"GroupValidateProfileResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"GroupGetBansResponse":{"type":"object","properties":{"banned_identities":{"type":"array","items":{"$ref":"#/components/schemas/GroupBannedIdentity"},"description":"A list of banned group members."},"anchor":{"type":"string","description":"The pagination anchor."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["banned_identities","watch"]},"GroupGetJoinRequestsResponse":{"type":"object","properties":{"join_requests":{"type":"array","items":{"$ref":"#/components/schemas/GroupJoinRequest"},"description":"A list of group join requests."},"anchor":{"type":"string","description":"The pagination anchor."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["join_requests","watch"]},"GroupGetMembersResponse":{"type":"object","properties":{"members":{"type":"array","items":{"$ref":"#/components/schemas/GroupMember"},"description":"A list of group members."},"anchor":{"type":"string","description":"The pagination anchor."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["members","watch"]},"GroupGetProfileResponse":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/GroupProfile"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["group","watch"]},"GroupUpdateProfileRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"bio":{"type":"string","description":"Detailed information about a profile."},"publicity":{"$ref":"#/components/schemas/GroupPublicity"}}},"GroupGetSummaryResponse":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/GroupGroupSummary"}},"required":["group"]},"GroupTransferOwnershipRequest":{"type":"object","properties":{"new_owner_identity_id":{"type":"string","description":"Identity to transfer the group to.\nMust be a member of the group."}},"required":["new_owner_identity_id"]},"IdentitySetupResponse":{"type":"object","properties":{"identity_token":{"$ref":"#/components/schemas/Jwt","description":"Token used to authenticate the identity.\nShould be stored somewhere permanent.\nPass this to `rivet.api.identity#Setup$existing_identity_token` next time `rivet.api.identity#Setup` is called.\nToken has a 90 day TTL.\nThis means that if `rivet.api.identity#Setup` is not called again within 90 days, the token will no longer be valid.\nIf this happens, the user can recover their account through the linking process (see `rivet.api.identity#PrepareGameLink`).\nThis token should be stored locally and never sent to a server or another device.\nIf this token is compromised, anyone with access to this token has control of the identity."},"identity_token_expire_ts":{"$ref":"#/components/schemas/Timestamp"},"identity":{"$ref":"#/components/schemas/IdentityProfile","description":"Information about the identity that was just authenticated."},"game_id":{"type":"string","format":"uuid"}},"required":["identity_token","identity_token_expire_ts","identity","game_id"]},"IdentityGetProfileResponse":{"type":"object","properties":{"identity":{"$ref":"#/components/schemas/IdentityProfile"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identity","watch"]},"IdentityGetHandlesResponse":{"type":"object","properties":{"identities":{"type":"array","items":{"$ref":"#/components/schemas/IdentityHandle"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identities","watch"]},"IdentityGetSummariesResponse":{"type":"object","properties":{"identities":{"type":"array","items":{"$ref":"#/components/schemas/IdentitySummary"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identities","watch"]},"IdentityValidateProfileResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}},"required":["errors"]},"IdentityPrepareAvatarUploadResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"ProvisionDatacentersGetTlsResponse":{"type":"object","properties":{"job_cert_pem":{"type":"string"},"job_private_key_pem":{"type":"string"}},"required":["job_cert_pem","job_private_key_pem"]},"ProvisionDatacentersGetServersResponse":{"type":"object","properties":{"servers":{"type":"array","items":{"$ref":"#/components/schemas/ProvisionServer"}}},"required":["servers"]},"ProvisionServersGetInfoResponse":{"type":"object","properties":{"name":{"type":"string"},"server_id":{"type":"string","format":"uuid"},"datacenter_id":{"type":"string","format":"uuid"},"cluster_id":{"type":"string","format":"uuid"},"lan_ip":{"type":"string"},"wan_ip":{"type":"string"},"vlan_ip":{"type":"string","description":"**Deprecated**: Use lan_ip"},"public_ip":{"type":"string","description":"**Deprecated**: Use wan_ip"}},"required":["name","server_id","datacenter_id","cluster_id","lan_ip","wan_ip","vlan_ip","public_ip"]},"ProvisionTunnelGetTlsResponse":{"type":"object","properties":{"cert_pem":{"type":"string"},"root_ca_cert_pem":{"type":"string"},"private_key_pem":{"type":"string"}},"required":["cert_pem","root_ca_cert_pem","private_key_pem"]},"ServersGetServerResponse":{"type":"object","properties":{"server":{"$ref":"#/components/schemas/ServersServer"}},"required":["server"]},"ServersCreateServerRequest":{"type":"object","properties":{"datacenter":{"type":"string","format":"uuid"},"tags":{},"runtime":{"$ref":"#/components/schemas/ServersCreateServerRuntimeRequest"},"network":{"$ref":"#/components/schemas/ServersCreateServerNetworkRequest"},"resources":{"$ref":"#/components/schemas/ServersResources"},"lifecycle":{"$ref":"#/components/schemas/ServersLifecycle"}},"required":["datacenter","tags","runtime","network","resources"]},"ServersCreateServerRuntimeRequest":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"arguments":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","additionalProperties":{"type":"string"}}},"required":["build"]},"ServersCreateServerNetworkRequest":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ServersNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ServersCreateServerPortRequest"}}},"required":["ports"]},"ServersCreateServerPortRequest":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ServersPortProtocol"},"internal_port":{"type":"integer"},"routing":{"$ref":"#/components/schemas/ServersPortRouting"}},"required":["protocol"]},"ServersCreateServerResponse":{"type":"object","properties":{"server":{"$ref":"#/components/schemas/ServersServer","description":"The server that was created"}},"required":["server"]},"ServersDestroyServerResponse":{"type":"object","properties":{}},"ServersListServersResponse":{"type":"object","properties":{"servers":{"type":"array","items":{"$ref":"#/components/schemas/ServersServer"},"description":"A list of servers for the game associated with the token."}},"required":["servers"]},"ActorGetBuildResponse":{"type":"object","properties":{"build":{"$ref":"#/components/schemas/ActorBuild"}},"required":["build"]},"ActorListBuildsResponse":{"type":"object","properties":{"builds":{"type":"array","items":{"$ref":"#/components/schemas/ActorBuild"},"description":"A list of builds for the project associated with the token."}},"required":["builds"]},"ActorPatchBuildTagsRequest":{"type":"object","properties":{"tags":{},"exclusive_tags":{"type":"array","items":{"type":"string"},"description":"Removes the given tag keys from all other builds."}},"required":["tags"]},"ActorPatchBuildTagsResponse":{"type":"object","properties":{}},"ActorPrepareBuildRequest":{"type":"object","properties":{"image_tag":{"type":"string","description":"A tag given to the project build."},"image_file":{"$ref":"#/components/schemas/UploadPrepareFile"},"kind":{"$ref":"#/components/schemas/ActorBuildKind"},"compression":{"$ref":"#/components/schemas/ActorBuildCompression"}},"required":["image_file"]},"ActorPrepareBuildResponse":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["build","presigned_requests"]},"ActorBuildKind":{"type":"string","enum":["docker_image","oci_bundle","javascript"]},"ActorBuildCompression":{"type":"string","enum":["none","lz4"]},"ActorActor":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"region":{"type":"string"},"tags":{},"runtime":{"$ref":"#/components/schemas/ActorRuntime"},"network":{"$ref":"#/components/schemas/ActorNetwork"},"resources":{"$ref":"#/components/schemas/ActorResources"},"lifecycle":{"$ref":"#/components/schemas/ActorLifecycle"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"started_at":{"$ref":"#/components/schemas/Timestamp"},"destroyed_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["id","region","tags","runtime","network","resources","lifecycle","created_at"]},"ActorRuntime":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"arguments":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","additionalProperties":{"type":"string"}}},"required":["build"]},"ActorLifecycle":{"type":"object","properties":{"kill_timeout":{"type":"integer","format":"int64","description":"The duration to wait for in milliseconds before killing the actor. This should be set to a safe default, and can be overridden during a DELETE request if needed."},"durable":{"type":"boolean","description":"If true, the actor will try to reschedule itself automatically in the event of a crash or a datacenter failover. The actor will not reschedule if it exits successfully."}}},"ActorResources":{"type":"object","properties":{"cpu":{"type":"integer","description":"The number of CPU cores in millicores, or 1/1000 of a core. For example,\n1/8 of a core would be 125 millicores, and 1 core would be 1000\nmillicores."},"memory":{"type":"integer","description":"The amount of memory in megabytes"}},"required":["cpu","memory"]},"ActorNetwork":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ActorNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ActorPort"}}},"required":["mode","ports"]},"ActorNetworkMode":{"type":"string","enum":["bridge","host"]},"ActorPort":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ActorPortProtocol"},"internal_port":{"type":"integer"},"hostname":{"type":"string"},"port":{"type":"integer"},"path":{"type":"string"},"url":{"type":"string","description":"Fully formed connection URL including protocol, hostname, port, and path, if applicable."},"routing":{"$ref":"#/components/schemas/ActorPortRouting"}},"required":["protocol","routing"]},"ActorPortProtocol":{"type":"string","enum":["http","https","tcp","tcp_tls","udp"]},"ActorPortRouting":{"type":"object","properties":{"guard":{"$ref":"#/components/schemas/ActorGuardRouting"},"host":{"$ref":"#/components/schemas/ActorHostRouting"}}},"ActorGuardRouting":{"type":"object","properties":{}},"ActorHostRouting":{"type":"object","properties":{}},"ActorEndpointType":{"type":"string","enum":["hostname","path"]},"ActorBuild":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags of this build"}},"required":["id","name","created_at","content_length","tags"]},"ActorRegion":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"ActorGetActorLogsResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"timestamps":{"type":"array","items":{"$ref":"#/components/schemas/Timestamp"},"description":"Sorted old to new."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["lines","timestamps","watch"]},"ActorLogStream":{"type":"string","enum":["std_out","std_err"]},"ActorListRegionsResponse":{"type":"object","properties":{"regions":{"type":"array","items":{"$ref":"#/components/schemas/ActorRegion"}}},"required":["regions"]},"ActorResolveRegionResponse":{"type":"object","properties":{"region":{"$ref":"#/components/schemas/ActorRegion"}},"required":["region"]},"AuthCompleteStatus":{"type":"string","enum":["switch_identity","linked_account_added","already_complete","expired","too_many_attempts","incorrect"],"description":"Represents the state of an external account linking process."},"AuthIdentityStartEmailVerificationRequest":{"type":"object","properties":{"email":{"type":"string"},"captcha":{"$ref":"#/components/schemas/CaptchaConfig"},"game_id":{"type":"string","format":"uuid"}},"required":["email"]},"AuthIdentityStartEmailVerificationResponse":{"type":"object","properties":{"verification_id":{"type":"string","format":"uuid"}},"required":["verification_id"]},"AuthIdentityCompleteEmailVerificationRequest":{"type":"object","properties":{"verification_id":{"type":"string","format":"uuid"},"code":{"type":"string","description":"The code sent to the requestee's email."}},"required":["verification_id","code"]},"AuthIdentityCompleteEmailVerificationResponse":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/AuthCompleteStatus"}},"required":["status"]},"AuthRefreshIdentityTokenRequest":{"type":"object","properties":{"logout":{"type":"boolean","description":"When `true`, the current identity for the provided cookie will be logged out and a new identity will be returned."}}},"AuthRefreshIdentityTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."},"exp":{"type":"string","description":"Token expiration time (in milliseconds)."},"identity_id":{"type":"string","format":"uuid"}},"required":["token","exp","identity_id"]},"CaptchaConfig":{"type":"object","description":"Methods to verify a captcha","properties":{"hcaptcha":{"$ref":"#/components/schemas/CaptchaConfigHcaptcha"},"turnstile":{"$ref":"#/components/schemas/CaptchaConfigTurnstile"}}},"CaptchaConfigHcaptcha":{"type":"object","description":"Captcha configuration.","properties":{"client_response":{"type":"string"}},"required":["client_response"]},"CaptchaConfigTurnstile":{"type":"object","description":"Captcha configuration.","properties":{"client_response":{"type":"string"}},"required":["client_response"]},"CloudInspectResponse":{"type":"object","properties":{"agent":{"$ref":"#/components/schemas/CloudAuthAgent"}},"required":["agent"]},"CloudSvcPerf":{"type":"object","description":"A service performance summary.","properties":{"svc_name":{"type":"string","description":"The name of the service."},"ts":{"$ref":"#/components/schemas/Timestamp"},"duration":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"req_id":{"type":"string","format":"uuid"},"spans":{"type":"array","items":{"$ref":"#/components/schemas/CloudLogsPerfSpan"},"description":"A list of performance spans."},"marks":{"type":"array","items":{"$ref":"#/components/schemas/CloudLogsPerfMark"},"description":"A list of performance marks."}},"required":["svc_name","ts","duration","spans","marks"]},"CloudLogsPerfSpan":{"type":"object","description":"A performance span.","properties":{"label":{"type":"string","description":"The label given to this performance span."},"start_ts":{"$ref":"#/components/schemas/Timestamp"},"finish_ts":{"$ref":"#/components/schemas/Timestamp"},"req_id":{"type":"string","format":"uuid"}},"required":["label","start_ts"]},"CloudLogsPerfMark":{"type":"object","description":"A performance mark.","properties":{"label":{"type":"string","description":"The label given to this performance mark."},"ts":{"$ref":"#/components/schemas/Timestamp"},"ray_id":{"type":"string","format":"uuid"},"req_id":{"type":"string","format":"uuid"}},"required":["label","ts"]},"CloudLobbySummaryAnalytics":{"type":"object","description":"Analytical information about a lobby.","properties":{"lobby_id":{"type":"string","format":"uuid"},"lobby_group_id":{"type":"string","format":"uuid"},"lobby_group_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"region_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"is_ready":{"type":"boolean","description":"Whether or not this lobby is ready."},"is_idle":{"type":"boolean","description":"Whether or not this lobby is idle."},"is_closed":{"type":"boolean","description":"Whether or not this lobby is in a closed state."},"is_outdated":{"type":"boolean","description":"Whether or not this lobby is outdated."},"max_players_normal":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_direct":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_party":{"type":"integer","description":"Unsigned 32 bit integer."},"total_player_count":{"type":"integer","description":"Unsigned 32 bit integer."},"registered_player_count":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_id","lobby_group_id","lobby_group_name_id","region_id","create_ts","is_ready","is_idle","is_closed","is_outdated","max_players_normal","max_players_direct","max_players_party","total_player_count","registered_player_count"]},"CloudLogsLobbySummary":{"type":"object","description":"A logs summary for a lobby.","properties":{"lobby_id":{"type":"string","format":"uuid"},"namespace_id":{"type":"string","format":"uuid"},"lobby_group_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"region_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"start_ts":{"$ref":"#/components/schemas/Timestamp"},"ready_ts":{"$ref":"#/components/schemas/Timestamp"},"status":{"$ref":"#/components/schemas/CloudLogsLobbyStatus"}},"required":["lobby_id","namespace_id","lobby_group_name_id","region_id","create_ts","status"]},"CloudLogsLobbyStatus":{"type":"object","description":"A union representing the state of a lobby.","properties":{"running":{"$ref":"#/components/schemas/EmptyObject"},"stopped":{"$ref":"#/components/schemas/CloudLogsLobbyStatusStopped"}},"required":["running"]},"CloudLogsLobbyStatusStopped":{"type":"object","description":"The status of a stopped lobby.","properties":{"stop_ts":{"$ref":"#/components/schemas/Timestamp"},"failed":{"type":"boolean","description":"Whether or not the lobby failed or stopped successfully."},"exit_code":{"type":"integer","description":"The exit code returned by the lobby's main process when stopped."}},"required":["stop_ts","failed","exit_code"]},"CloudSvcMetrics":{"type":"object","description":"Metrics relating to a job service.","properties":{"job":{"type":"string","description":"The job name."},"cpu":{"type":"array","items":{"type":"number","format":"double"},"description":"CPU metrics."},"memory":{"type":"array","items":{"type":"number","format":"double"},"description":"Memory metrics."},"allocated_memory":{"type":"number","format":"double","description":"Total allocated memory (MB)."}},"required":["job","cpu","memory"]},"CloudAuthAgent":{"type":"object","description":"The current authenticated agent.","properties":{"identity":{"$ref":"#/components/schemas/CloudAuthAgentIdentity"},"game_cloud":{"$ref":"#/components/schemas/CloudAuthAgentGameCloud"}}},"CloudAuthAgentIdentity":{"type":"object","description":"The current authenticated identity.","properties":{"identity_id":{"type":"string","format":"uuid"}},"required":["identity_id"]},"CloudAuthAgentGameCloud":{"type":"object","description":"The current authenticated game cloud.","properties":{"game_id":{"type":"string","format":"uuid"}},"required":["game_id"]},"CloudCustomAvatarSummary":{"type":"object","description":"A custom avatar summary.","properties":{"upload_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"url":{"type":"string","description":"The URL of this custom avatar image. Only present if upload is complete."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"complete":{"type":"boolean","description":"Whether or not this custom avatar has completely been uploaded."}},"required":["upload_id","display_name","create_ts","content_length","complete"]},"CloudBuildSummary":{"type":"object","description":"A build summary.","properties":{"build_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"complete":{"type":"boolean","description":"Whether or not this build has completely been uploaded."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags of this build"}},"required":["build_id","upload_id","display_name","create_ts","content_length","complete","tags"]},"CloudCdnSiteSummary":{"type":"object","description":"A CDN site summary.","properties":{"site_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"complete":{"type":"boolean","description":"Whether or not this site has completely been uploaded."}},"required":["site_id","upload_id","display_name","create_ts","content_length","complete"]},"CloudGameFull":{"type":"object","description":"A full game.","properties":{"game_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"display_name":{"$ref":"#/components/schemas/DisplayName"},"developer_group_id":{"type":"string","format":"uuid"},"total_player_count":{"type":"integer","description":"Unsigned 32 bit integer."},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."},"namespaces":{"type":"array","items":{"$ref":"#/components/schemas/CloudNamespaceSummary"},"description":"A list of namespace summaries."},"versions":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionSummary"},"description":"A list of version summaries."},"available_regions":{"type":"array","items":{"$ref":"#/components/schemas/CloudRegionSummary"},"description":"A list of region summaries."}},"required":["game_id","create_ts","name_id","display_name","developer_group_id","total_player_count","namespaces","versions","available_regions"]},"CloudNamespaceSummary":{"type":"object","description":"A namespace summary.","properties":{"namespace_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"version_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."}},"required":["namespace_id","create_ts","display_name","version_id","name_id"]},"CloudRegionSummary":{"type":"object","description":"A region summary.","properties":{"region_id":{"type":"string","format":"uuid"},"region_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"provider":{"type":"string","description":"The server provider of this region."},"universal_region":{"$ref":"#/components/schemas/CloudUniversalRegion","description":"**Deprecated**\nA universal region label given to this region."},"provider_display_name":{"$ref":"#/components/schemas/DisplayName"},"region_display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["region_id","region_name_id","provider","universal_region","provider_display_name","region_display_name"]},"CloudGameLobbyExpenses":{"type":"object","description":"Game lobby expenses.","properties":{"game":{"$ref":"#/components/schemas/GameHandle"},"namespaces":{"type":"array","items":{"$ref":"#/components/schemas/CloudNamespaceSummary"},"description":"A list of namespace summaries."},"expenses":{"type":"array","items":{"$ref":"#/components/schemas/CloudRegionTierExpenses"},"description":"A list of multiple region tier expenses."}},"required":["game","namespaces","expenses"]},"CloudRegionTierExpenses":{"type":"object","description":"Region tier expenses.","properties":{"namespace_id":{"type":"string","format":"uuid"},"region_id":{"type":"string","format":"uuid"},"tier_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"lobby_group_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"uptime":{"type":"number","format":"double","description":"How long a region tier has been active (in milliseconds)."},"expenses":{"type":"number","format":"double","description":"Amount of expenses for this region tier (in hundred-thousandths USD, 100,000 = $1.00)."}},"required":["namespace_id","region_id","tier_name_id","lobby_group_name_id","uptime","expenses"]},"CloudGroupBankSource":{"type":"object","properties":{"account_number":{"type":"string","description":"The bank account number of this group's bank source."},"routing_number":{"type":"string","description":"The bank routing number of this group's bank source."}},"required":["account_number","routing_number"]},"CloudRegionTier":{"type":"object","description":"A region server tier.","properties":{"tier_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"rivet_cores_numerator":{"type":"integer","description":"Together with the denominator, denotes the portion of the CPU a given server uses."},"rivet_cores_denominator":{"type":"integer","description":"Together with the numerator, denotes the portion of the CPU a given server uses."},"cpu":{"type":"integer","description":"CPU frequency (MHz)."},"memory":{"type":"integer","description":"Allocated memory (MB)."},"disk":{"type":"integer","description":"Allocated disk space (MB)."},"bandwidth":{"type":"integer","description":"Internet bandwidth (MB)."},"price_per_second":{"type":"integer","description":"**Deprecated**\nPrice billed for every second this server is running (in quadrillionth USD, 1,000,000,000,000 = $1.00)."}},"required":["tier_name_id","rivet_cores_numerator","rivet_cores_denominator","cpu","memory","disk","bandwidth","price_per_second"]},"CloudUniversalRegion":{"type":"string","enum":["unknown","local","amsterdam","atlanta","bangalore","dallas","frankfurt","london","mumbai","newark","new_york_city","san_francisco","singapore","sydney","tokyo","toronto","washington_dc","chicago","paris","seattle","sao_paulo","stockholm","chennai","osaka","milan","miami","jakarta","los_angeles"],"description":"**Deprecated**"},"CloudNamespaceFull":{"type":"object","description":"A full namespace.","properties":{"namespace_id":{"type":"string","format":"uuid"},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"version_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"config":{"$ref":"#/components/schemas/CloudNamespaceConfig"}},"required":["namespace_id","create_ts","display_name","version_id","name_id","config"]},"CloudNamespaceConfig":{"type":"object","description":"Cloud configuration for a given namespace.","properties":{"cdn":{"$ref":"#/components/schemas/CloudCdnNamespaceConfig"},"matchmaker":{"$ref":"#/components/schemas/CloudMatchmakerNamespaceConfig"},"kv":{"$ref":"#/components/schemas/CloudKvNamespaceConfig"},"identity":{"$ref":"#/components/schemas/CloudIdentityNamespaceConfig"}},"required":["cdn","matchmaker","kv","identity"]},"CloudCdnNamespaceConfig":{"type":"object","description":"CDN configuration for a given namespace.","properties":{"enable_domain_public_auth":{"type":"boolean","description":"Whether or not to allow users to connect to the given namespace via domain name."},"domains":{"type":"array","items":{"$ref":"#/components/schemas/CloudCdnNamespaceDomain"},"description":"A list of CDN domains for a given namespace."},"auth_type":{"$ref":"#/components/schemas/CloudCdnAuthType"},"auth_user_list":{"type":"array","items":{"$ref":"#/components/schemas/CloudCdnNamespaceAuthUser"},"description":"A list of CDN authenticated users for a given namespace."}},"required":["enable_domain_public_auth","domains","auth_type","auth_user_list"]},"CloudMatchmakerNamespaceConfig":{"type":"object","description":"Matchmaker configuration for a given namespace.","properties":{"lobby_count_max":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_vpn":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_proxy":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_tor":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_per_client_hosting":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["lobby_count_max","max_players_per_client","max_players_per_client_vpn","max_players_per_client_proxy","max_players_per_client_tor","max_players_per_client_hosting"]},"CloudKvNamespaceConfig":{"type":"object","description":"KV configuration for a given namespace.","properties":{}},"CloudIdentityNamespaceConfig":{"type":"object","description":"Identity configuration for a given namespace.","properties":{}},"CloudCdnAuthType":{"type":"string","enum":["none","basic"],"description":"A value denoting what type of authentication to use for a game namespace's CDN."},"CloudCdnNamespaceDomain":{"type":"object","description":"A CDN domain for a given namespace.","properties":{"domain":{"type":"string","description":"A valid domain name (no protocol)."},"create_ts":{"$ref":"#/components/schemas/Timestamp"},"verification_status":{"$ref":"#/components/schemas/CloudCdnNamespaceDomainVerificationStatus"},"verification_method":{"$ref":"#/components/schemas/CloudCdnNamespaceDomainVerificationMethod"},"verification_errors":{"type":"array","items":{"type":"string"}}},"required":["domain","create_ts","verification_status","verification_method","verification_errors"]},"CloudCdnNamespaceDomainVerificationMethod":{"type":"object","description":"A union representing the verification method used for this CDN domain.","properties":{"invalid":{"$ref":"#/components/schemas/EmptyObject"},"http":{"$ref":"#/components/schemas/CloudCdnNamespaceDomainVerificationMethodHttp"}}},"CloudCdnNamespaceDomainVerificationMethodHttp":{"type":"object","properties":{"cname_record":{"type":"string"}},"required":["cname_record"]},"CloudCdnNamespaceDomainVerificationStatus":{"type":"string","enum":["active","pending","failed"],"description":"A value denoting the status of a CDN domain's verification status."},"CloudCdnNamespaceAuthUser":{"type":"object","description":"An authenticated CDN user for a given namespace.","properties":{"user":{"type":"string","description":"A user name."}},"required":["user"]},"CloudMatchmakerDevelopmentPort":{"type":"object","description":"A port configuration used to create development tokens.","properties":{"port":{"type":"integer"},"port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange"},"protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol"}},"required":["protocol"]},"CloudNamespaceVersion":{"type":"object","description":"A previously deployed namespace version.","properties":{"namespace_id":{"type":"string","description":"A universally unique identifier."},"version_id":{"type":"string","description":"A universally unique identifier."},"deploy_ts":{"$ref":"#/components/schemas/Timestamp"}},"required":["namespace_id","version_id","deploy_ts"]},"CloudDevicesPrepareDeviceLinkResponse":{"type":"object","properties":{"device_link_id":{"type":"string","format":"uuid"},"device_link_token":{"type":"string"},"device_link_url":{"type":"string"}},"required":["device_link_id","device_link_token","device_link_url"]},"CloudDevicesGetDeviceLinkResponse":{"type":"object","properties":{"cloud_token":{"type":"string"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["watch"]},"CloudDevicesCompleteDeviceLinkRequest":{"type":"object","properties":{"device_link_token":{"$ref":"#/components/schemas/Jwt"},"game_id":{"type":"string","format":"uuid"}},"required":["device_link_token","game_id"]},"CloudGamesListGameCustomAvatarsResponse":{"type":"object","properties":{"custom_avatars":{"type":"array","items":{"$ref":"#/components/schemas/CloudCustomAvatarSummary"},"description":"A list of custom avatar summaries."}},"required":["custom_avatars"]},"CloudGamesPrepareCustomAvatarUploadRequest":{"type":"object","properties":{"path":{"type":"string","description":"The path/filename of the custom avatar."},"mime":{"type":"string","description":"The MIME type of the custom avatar."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]},"CloudGamesPrepareCustomAvatarUploadResponse":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"}},"required":["upload_id","presigned_request"]},"CloudGamesListGameBuildsResponse":{"type":"object","properties":{"builds":{"type":"array","items":{"$ref":"#/components/schemas/CloudBuildSummary"},"description":"A list of build summaries."}},"required":["builds"]},"CloudGamesCreateGameBuildRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"image_tag":{"type":"string","description":"A tag given to the game build."},"image_file":{"$ref":"#/components/schemas/UploadPrepareFile"},"multipart_upload":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/CloudGamesBuildKind"},"compression":{"$ref":"#/components/schemas/CloudGamesBuildCompression"}},"required":["display_name","image_tag","image_file"]},"CloudGamesCreateGameBuildResponse":{"type":"object","properties":{"build_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"image_presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"},"image_presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["build_id","upload_id"]},"CloudGamesBuildKind":{"type":"string","enum":["docker_image","oci_bundle"]},"CloudGamesBuildCompression":{"type":"string","enum":["none","lz4"]},"CloudGamesListGameCdnSitesResponse":{"type":"object","properties":{"sites":{"type":"array","items":{"$ref":"#/components/schemas/CloudCdnSiteSummary"},"description":"A list of CDN site summaries."}},"required":["sites"]},"CloudGamesCreateGameCdnSiteRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"files":{"type":"array","items":{"$ref":"#/components/schemas/UploadPrepareFile"},"description":"A list of files preparing to upload."}},"required":["display_name","files"]},"CloudGamesCreateGameCdnSiteResponse":{"type":"object","properties":{"site_id":{"type":"string","format":"uuid"},"upload_id":{"type":"string","format":"uuid"},"presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["site_id","upload_id","presigned_requests"]},"CloudGamesExportMatchmakerLobbyHistoryRequest":{"type":"object","properties":{"query_start":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"query_end":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["query_start","query_end"]},"CloudGamesExportMatchmakerLobbyHistoryResponse":{"type":"object","properties":{"url":{"type":"string","description":"The URL to a CSV file for the given lobby history."}},"required":["url"]},"CloudGamesDeleteMatchmakerLobbyResponse":{"type":"object","properties":{"did_remove":{"type":"boolean","description":"Whether or not the lobby was successfully stopped."}},"required":["did_remove"]},"CloudGamesGetLobbyLogsResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"timestamps":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["lines","timestamps","watch"]},"CloudGamesExportLobbyLogsRequest":{"type":"object","properties":{"stream":{"$ref":"#/components/schemas/CloudGamesLogStream"}},"required":["stream"]},"CloudGamesExportLobbyLogsResponse":{"type":"object","properties":{"url":{"type":"string","description":"The URL to a CSV file for the given lobby history."}},"required":["url"]},"CloudGamesLogStream":{"type":"string","enum":["std_out","std_err"]},"CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse":{"type":"object","properties":{"lobbies":{"type":"array","items":{"$ref":"#/components/schemas/CloudLobbySummaryAnalytics"},"description":"A list of analytics lobby summaries."}},"required":["lobbies"]},"CloudGamesNamespacesListNamespaceLobbiesResponse":{"type":"object","properties":{"lobbies":{"type":"array","items":{"$ref":"#/components/schemas/CloudLogsLobbySummary"},"description":"A list of lobby log summaries."}},"required":["lobbies"]},"CloudGamesNamespacesGetNamespaceLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/CloudLogsLobbySummary"},"metrics":{"$ref":"#/components/schemas/CloudSvcMetrics"},"stdout_presigned_urls":{"type":"array","items":{"type":"string"},"description":"**Deprecated**\nA list of URLs."},"stderr_presigned_urls":{"type":"array","items":{"type":"string"},"description":"**Deprecated**\nA list of URLs."},"perf_lists":{"type":"array","items":{"$ref":"#/components/schemas/CloudSvcPerf"},"description":"**Deprecated**\nA list of service performance summaries."}},"required":["lobby","stdout_presigned_urls","stderr_presigned_urls","perf_lists"]},"CloudGamesCreateCloudTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token.\nSlightly modified to include a description prefix and use Protobufs of\nJSON."}},"required":["token"]},"CloudGamesCreateGameVersionRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"config":{"$ref":"#/components/schemas/CloudVersionConfig"}},"required":["display_name","config"]},"CloudGamesCreateGameVersionResponse":{"type":"object","properties":{"version_id":{"type":"string","format":"uuid"}},"required":["version_id"]},"CloudGamesReserveVersionNameResponse":{"type":"object","properties":{"version_display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["version_display_name"]},"CloudGamesValidateGameVersionRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"config":{"$ref":"#/components/schemas/CloudVersionConfig"}},"required":["display_name","config"]},"CloudGamesValidateGameVersionResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGamesGetGameVersionByIdResponse":{"type":"object","properties":{"version":{"$ref":"#/components/schemas/CloudVersionFull"}},"required":["version"]},"CloudValidateGroupRequest":{"type":"object","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"CloudValidateGroupResponse":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"},"description":"A list of validation errors."}},"required":["errors"]},"CloudGetRayPerfLogsResponse":{"type":"object","properties":{"perf_lists":{"type":"array","items":{"$ref":"#/components/schemas/CloudSvcPerf"},"description":"A list of service performance summaries."}},"required":["perf_lists"]},"CloudGetRegionTiersResponse":{"type":"object","properties":{"tiers":{"type":"array","items":{"$ref":"#/components/schemas/CloudRegionTier"},"description":"A list of region server tiers."}},"required":["tiers"]},"CloudVersionEngineCustomConfig":{"type":"object","properties":{}},"CloudVersionEngineGodotConfig":{"type":"object","properties":{}},"CloudVersionEngineHtml5Config":{"type":"object","properties":{}},"CloudVersionEngineUnityConfig":{"type":"object","properties":{}},"CloudVersionEngineUnrealConfig":{"type":"object","properties":{"game_module":{"type":"string","description":"Name of the Unreal module that holds the game code.\nThis is usually the value of `$.Modules[0].Name` in the file `MyProject.unproject`.\n_Configures Rivet CLI behavior. Has no effect on server behavior._"}},"required":["game_module"]},"CloudVersionMatchmakerPortRange":{"type":"object","description":"Range of ports that can be connected to.\nIf configured, `network_mode` must equal `host`.\nPort ranges may overlap between containers, it is the responsibility of the developer to ensure ports are available before using.\nRead more about host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking).\nOnly available on Rivet Open Source & Enterprise.\n\n### Related\n\n- cloud.version.matchmaker.PortProtocol\n- cloud.version.matchmaker.ProxyKind","properties":{"min":{"type":"integer","description":"Unsigned 32 bit integer."},"max":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["min","max"]},"CloudVersionMatchmakerPortProtocol":{"type":"string","enum":["http","https","tcp","tcp_tls","udp"],"description":"Signifies the protocol of the port.\nNote that when proxying through GameGuard (via `ProxyKind`), the port number returned by `/find`, `/join`, and `/create` will not be the same as the port number configured in the config:\n\n- With HTTP, the port will always be 80. The hostname of the port correctly routes the incoming\n connection to the correct port being used by the game server.\n- With HTTPS, the port will always be 443. The hostname of the port correctly routes the incoming\n connection to the correct port being used by the game server.\n- Using TCP/UDP, the port will be a random number between 26000 and 31999. This gets automatically\n routed to the correct port being used by the game server.\n\n### Related - cloud.version.matchmaker.GameModeRuntimeDockerPort - cloud.version.matchmaker.ProxyKind - /docs/dynamic-servers/concepts/game-guard - matchmaker.lobbies.find"},"CloudVersionMatchmakerProxyKind":{"type":"string","enum":["none","game_guard"],"description":"Range of ports that can be connected to.\n`game_guard` (default) proxies all traffic through [Game Guard](https://rivet.gg/docs/dynamic-servers/concepts/game-guard) to mitigate DDoS attacks and provide TLS termination.\n`none` sends traffic directly to the game server. If configured, `network_mode` must equal `host`. Read more about host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). Only available on Rivet Open Source & Enterprise.\n\n### Related - /docs/dynamic-servers/concepts/game-guard - cloud.version.matchmaker.PortProtocol"},"CloudVersionMatchmakerCaptcha":{"type":"object","description":"Matchmaker captcha configuration.","properties":{"requests_before_reverify":{"type":"integer","description":"Denotes how many requests a connection can make before it is required to reverify a captcha."},"verification_ttl":{"type":"integer","format":"int64","description":"Denotes how long a connection can continue to reconnect without having to reverify a captcha (in milliseconds)."},"hcaptcha":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptchaHcaptcha"},"turnstile":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptchaTurnstile"}},"required":["requests_before_reverify","verification_ttl"]},"CloudVersionMatchmakerCaptchaHcaptcha":{"type":"object","description":"hCpatcha configuration.","properties":{"level":{"$ref":"#/components/schemas/CloudVersionMatchmakerCaptchaHcaptchaLevel","description":"**Deprecated**"},"site_key":{"type":"string","description":"Site key for your hCaptcha application. Must be set."},"secret_key":{"type":"string","description":"Secret key for your hCaptcha application. Must be set."}}},"CloudVersionMatchmakerCaptchaHcaptchaLevel":{"type":"string","enum":["easy","moderate","difficult","always_on"],"description":"**Deprecated**\nHow hard a captcha should be."},"CloudVersionMatchmakerCaptchaTurnstile":{"type":"object","description":"Turnstile captcha configuration.","properties":{"site_key":{"type":"string"},"secret_key":{"type":"string"}},"required":["site_key","secret_key"]},"CloudVersionMatchmakerNetworkMode":{"type":"string","enum":["bridge","host"],"description":"Configures how the container's network is isolated from the host.\n`bridge` (default) networking isolates the container's network from the host & other containers.\n`host` networking removes isolation between the container and the host. Only available in Rivet Open Source & Enterprise.\nRead more about bridge vs host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking)."},"CloudVersionMatchmakerGameMode":{"type":"object","description":"A game mode.","properties":{"regions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRegion"}},"max_players":{"type":"integer"},"max_players_direct":{"type":"integer"},"max_players_party":{"type":"integer"},"docker":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRuntimeDocker"},"listable":{"type":"boolean"},"taggable":{"type":"boolean"},"allow_dynamic_max_players":{"type":"boolean"},"actions":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeActions"},"tier":{"type":"string"},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdleLobbiesConfig"}}},"CloudVersionMatchmakerGameModeRegion":{"type":"object","description":"A game mode region.","properties":{"tier":{"type":"string"},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdleLobbiesConfig"}}},"CloudVersionMatchmakerGameModeRuntimeDocker":{"type":"object","description":"A game mode runtime running through Docker.","properties":{"dockerfile":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"build_args":{"type":"object","additionalProperties":{"type":"string"},"description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"image":{"type":"string","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"image_id":{"type":"string","format":"uuid"},"args":{"type":"array","items":{"type":"string"}},"env":{"type":"object","additionalProperties":{"type":"string"}},"network_mode":{"$ref":"#/components/schemas/CloudVersionMatchmakerNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeRuntimeDockerPort"}}}},"CloudVersionMatchmakerGameModeRuntimeDockerPort":{"type":"object","description":"Port config for a docker build.","properties":{"port":{"type":"integer","description":"The port number to connect to.\n\n### Related - cloud.version.matchmaker.PortProtocol - cloud.version.matchmaker.ProxyKind"},"port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange"},"protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol"},"proxy":{"$ref":"#/components/schemas/CloudVersionMatchmakerProxyKind","description":"How this port should be proxied. Defaults to 'game-guard`."},"dev_port":{"type":"integer","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"dev_port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"},"dev_protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol","description":"_Configures Rivet CLI behavior. Has no effect on server behavior._"}}},"CloudVersionMatchmakerGameModeIdleLobbiesConfig":{"type":"object","description":"Configuration for how many idle lobbies a game version should have.","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"]},"CloudVersionMatchmakerGameModeActions":{"type":"object","description":"Configuration for the connection types allowed for a game mode.","properties":{"find":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeFindConfig"},"join":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeJoinConfig"},"create":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeCreateConfig"}}},"CloudVersionMatchmakerGameModeIdentityRequirement":{"type":"string","enum":["none","guest","registered"],"description":"**Deprecated**\nThe registration requirement for a user when joining/finding/creating a lobby. \"None\" allows for connections without an identity."},"CloudVersionMatchmakerGameModeVerificationConfig":{"type":"object","description":"Configuration that tells Rivet where to send validation requests and with what headers. When set, Rivet will send the `verification_data` property (given by the user in the find/join/create endpoint) to the given url along with the headers provided and some information about the requested lobby. The response of this request will determine if the user can join that lobby or not.","properties":{"url":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["url","headers"]},"CloudVersionMatchmakerGameModeFindConfig":{"type":"object","description":"Configures the requirements and authentication for the /find endpoint. If this value is not set in the config, the /find endpoint is still enabled.","properties":{"enabled":{"type":"boolean","description":"Sets whether or not the /find endpoint is enabled."},"identity_requirement":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdentityRequirement"},"verification":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeVerificationConfig"}},"required":["enabled"]},"CloudVersionMatchmakerGameModeJoinConfig":{"type":"object","description":"Configures the requirements and authentication for the /join endpoint. If this value is not set in the config, the /join endpoint is still enabled.","properties":{"enabled":{"type":"boolean","description":"Sets whether or not the /join endpoint is enabled."},"identity_requirement":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdentityRequirement"},"verification":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeVerificationConfig"}},"required":["enabled"]},"CloudVersionMatchmakerGameModeCreateConfig":{"type":"object","description":"Configures the requirements and authentication for the /create endpoint. If this value is not set in the config, the /create endpoint is NOT enabled.","properties":{"enabled":{"type":"boolean","description":"Sets whether or not the /create endpoint is enabled."},"identity_requirement":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeIdentityRequirement"},"verification":{"$ref":"#/components/schemas/CloudVersionMatchmakerGameModeVerificationConfig"},"enable_public":{"type":"boolean","description":"Defaults to false when unset."},"enable_private":{"type":"boolean","description":"Defaults to true when unset."},"max_lobbies_per_identity":{"type":"integer","description":"**Deprecated**"}},"required":["enabled"]},"CloudVersionMatchmakerLobbyGroup":{"type":"object","description":"A game mode.","properties":{"name_id":{"type":"string","description":"**Deprecated: use GameMode instead**\nA human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"regions":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRegion"},"description":"A list of game mode regions."},"max_players_normal":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_direct":{"type":"integer","description":"Unsigned 32 bit integer."},"max_players_party":{"type":"integer","description":"Unsigned 32 bit integer."},"runtime":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntime"}},"required":["name_id","regions","max_players_normal","max_players_direct","max_players_party","runtime"]},"CloudVersionMatchmakerLobbyGroupRuntime":{"type":"object","description":"**Deprecated: use GameMode instead**\nA union representing the runtime a game mode runs on.","properties":{"docker":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDocker"}}},"CloudVersionMatchmakerLobbyGroupRegion":{"type":"object","description":"**Deprecated: use GameMode instead**\nA game mode region.","properties":{"region_id":{"type":"string","format":"uuid"},"tier_name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"idle_lobbies":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig"}},"required":["region_id","tier_name_id"]},"CloudVersionMatchmakerLobbyGroupRuntimeDocker":{"type":"object","description":"**Deprecated: use GameMode instead**\nA game mode runtime running through Docker.","properties":{"build_id":{"type":"string","format":"uuid"},"args":{"type":"array","items":{"type":"string"}},"env_vars":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar"}},"network_mode":{"$ref":"#/components/schemas/CloudVersionMatchmakerNetworkMode"},"ports":{"type":"array","items":{"$ref":"#/components/schemas/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort"}}},"required":["args","env_vars","ports"]},"CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar":{"type":"object","description":"**Deprecated: use GameMode instead**\nA docker environment variable.","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"CloudVersionMatchmakerLobbyGroupRuntimeDockerPort":{"type":"object","description":"**Deprecated: use GameMode instead**\nA docker port.","properties":{"label":{"type":"string","description":"The label of this docker port."},"target_port":{"type":"integer","description":"The port number to connect to."},"port_range":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortRange"},"proxy_protocol":{"$ref":"#/components/schemas/CloudVersionMatchmakerPortProtocol"}},"required":["label","proxy_protocol"]},"CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig":{"type":"object","description":"**Deprecated: use GameMode instead**\nConfiguration for how many idle lobbies a game version should have.","properties":{"min_idle_lobbies":{"type":"integer","description":"Unsigned 32 bit integer."},"max_idle_lobbies":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["min_idle_lobbies","max_idle_lobbies"]},"Identifier":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `uuid` because this is intended to be human readable. Different than `DisplayName` because this should not include special characters and be short."},"Bio":{"type":"string","description":"Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$"},"Email":{"type":"string","description":"A valid email address"},"Jwt":{"type":"string","description":"Documentation at https://jwt.io/"},"WatchQuery":{"type":"string","description":"A query parameter denoting the requests watch index."},"WatchResponse":{"type":"object","description":"Provided by watchable endpoints used in blocking loops.","properties":{"index":{"type":"string","description":"Index indicating the version of the data responded.\nPass this to `WatchQuery` to block and wait for the next response."}},"required":["index"]},"DisplayName":{"type":"string","description":"Represent a resource's readable display name."},"AccountNumber":{"type":"integer"},"Timestamp":{"type":"string","format":"date-time","description":"RFC3339 timestamp"},"GlobalEventNotification":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"thumbnail_url":{"type":"string"},"url":{"type":"string"}},"required":["title","description","thumbnail_url","url"]},"ValidationError":{"type":"object","description":"An error given by failed content validation.","properties":{"path":{"type":"array","items":{"type":"string"},"description":"A list of strings denoting the origin of a validation error."}},"required":["path"]},"EmptyObject":{"type":"object","properties":{}},"ErrorMetadata":{"description":"Unstructured metadata relating to an error. Must be manually parsed."},"ErrorBody":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"ray_id":{"type":"string"},"documentation":{"type":"string"},"metadata":{"$ref":"#/components/schemas/ErrorMetadata"}},"required":["code","message","ray_id"]},"GameHandle":{"type":"object","properties":{"game_id":{"type":"string","format":"uuid"},"name_id":{"$ref":"#/components/schemas/Identifier"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."}},"required":["game_id","name_id","display_name"]},"GameGameSummary":{"type":"object","properties":{"game_id":{"type":"string","format":"uuid"},"name_id":{"$ref":"#/components/schemas/Identifier"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."},"url":{"type":"string"},"developer":{"$ref":"#/components/schemas/GroupHandle"},"total_player_count":{"type":"integer","description":"Unsigned 32 bit integer."}},"required":["game_id","name_id","display_name","url","developer","total_player_count"]},"GameProfile":{"type":"object","description":"A game profile.","properties":{"game_id":{"type":"string","format":"uuid"},"name_id":{"type":"string","description":"A human readable short identifier used to references resources. Different than a `rivet.common#Uuid` because this is intended to be human readable. Different than `rivet.common#DisplayName` because this should not include special characters and be short."},"display_name":{"$ref":"#/components/schemas/DisplayName"},"logo_url":{"type":"string","description":"The URL of this game's logo image."},"banner_url":{"type":"string","description":"The URL of this game's banner image."},"url":{"type":"string","description":"The URL to this game's website."},"developer":{"$ref":"#/components/schemas/GroupGroupSummary"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of game tags."},"description":{"type":"string","description":"A description of the given game."},"platforms":{"type":"array","items":{"$ref":"#/components/schemas/GamePlatformLink"},"description":"A list of platform links."},"recommended_groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"},"description":"A list of group summaries."},"identity_leaderboard_categories":{"type":"array","items":{"$ref":"#/components/schemas/GameLeaderboardCategory"},"description":"A list of game leaderboard categories."},"group_leaderboard_categories":{"type":"array","items":{"$ref":"#/components/schemas/GameLeaderboardCategory"},"description":"A list of game leaderboard categories."}},"required":["game_id","name_id","display_name","url","developer","tags","description","platforms","recommended_groups","identity_leaderboard_categories","group_leaderboard_categories"]},"GamePlatformLink":{"type":"object","description":"A platform link denoting a supported platform.","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"},"url":{"type":"string","description":"The URL to the given game's method of distribution on this platform."}},"required":["display_name","url"]},"GameLeaderboardCategory":{"type":"object","description":"A game leaderboard category.","properties":{"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["display_name"]},"GameStatSummary":{"type":"object","description":"A game statistic summary.","properties":{"game":{"$ref":"#/components/schemas/GameHandle"},"stats":{"type":"array","items":{"$ref":"#/components/schemas/GameStat"}}},"required":["game","stats"]},"GameStat":{"type":"object","description":"A game statistic.","properties":{"config":{"$ref":"#/components/schemas/GameStatConfig"},"overall_value":{"type":"number","format":"double","description":"A single overall value of the given statistic."}},"required":["config","overall_value"]},"GameStatConfig":{"type":"object","description":"A game statistic config.","properties":{"record_id":{"type":"string","format":"uuid"},"icon_id":{"type":"string","format":"uuid"},"format":{"$ref":"#/components/schemas/GameStatFormatMethod"},"aggregation":{"$ref":"#/components/schemas/GameStatAggregationMethod"},"sorting":{"$ref":"#/components/schemas/GameStatSortingMethod"},"priority":{"type":"integer"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"postfix_singular":{"type":"string","description":"A string appended to the end of a singular game statistic's value. Example: 1 **dollar**."},"postfix_plural":{"type":"string","description":"A string appended to the end of a game statistic's value that is not exactly 1. Example: 45 **dollars**."},"prefix_singular":{"type":"string","description":"A string appended to the beginning of a singular game statistic's value. Example: **value** 1."},"prefix_plural":{"type":"string","description":"A string prepended to the beginning of a game statistic's value that is not exactly 1. Example: **values** 45."}},"required":["record_id","icon_id","format","aggregation","sorting","priority","display_name"]},"GameStatFormatMethod":{"type":"string","enum":["integer","float_1","float_2","float_3","duration_minute","duration_second","duration_hundredth_second"],"description":"A value denoting the format method of a game statistic."},"GameStatAggregationMethod":{"type":"string","enum":["sum","average","min","max"],"description":"A value denoting the aggregation method of a game statistic."},"GameStatSortingMethod":{"type":"string","enum":["desc","asc"],"description":"A value denoting the sorting method of a game statistic."},"GamesEnvironmentsCreateServiceTokenResponse":{"type":"object","properties":{"token":{"type":"string","description":"A JSON Web Token."}},"required":["token"]},"GeoCoord":{"type":"object","description":"Geographical coordinates for a location on Planet Earth.","properties":{"latitude":{"type":"number","format":"double"},"longitude":{"type":"number","format":"double"}},"required":["latitude","longitude"]},"GeoDistance":{"type":"object","description":"Distance available in multiple units.","properties":{"kilometers":{"type":"number","format":"double"},"miles":{"type":"number","format":"double"}},"required":["kilometers","miles"]},"GroupGroupSummary":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"avatar_url":{"type":"string","description":"The URL of this group's avatar image."},"external":{"$ref":"#/components/schemas/GroupExternalLinks"},"is_developer":{"type":"boolean","description":"**Deprecated**\nWhether or not this group is a developer."},"bio":{"$ref":"#/components/schemas/Bio"},"is_current_identity_member":{"type":"boolean","description":"Whether or not the current identity is a member of this group."},"publicity":{"$ref":"#/components/schemas/GroupPublicity"},"member_count":{"type":"integer"},"owner_identity_id":{"type":"string","format":"uuid"}},"required":["group_id","display_name","external","is_developer","bio","is_current_identity_member","publicity","member_count","owner_identity_id"]},"GroupPublicity":{"type":"string","enum":["open","closed"],"description":"The current publicity value for the given group."},"GroupHandle":{"type":"object","description":"A group handle.","properties":{"group_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"avatar_url":{"type":"string","description":"The URL of this group's avatar image"},"external":{"$ref":"#/components/schemas/GroupExternalLinks"},"is_developer":{"type":"boolean","description":"Whether or not this group is a developer group."}},"required":["group_id","display_name","external"]},"GroupExternalLinks":{"type":"object","description":"External links for this group.","properties":{"profile":{"type":"string","description":"A link to this group's profile page."}},"required":["profile"]},"GroupJoinRequest":{"type":"object","description":"A group join request.","properties":{"identity":{"$ref":"#/components/schemas/IdentityHandle"},"ts":{"$ref":"#/components/schemas/Timestamp"}},"required":["identity","ts"]},"GroupMember":{"type":"object","description":"A group member.","properties":{"identity":{"$ref":"#/components/schemas/IdentityHandle"}},"required":["identity"]},"GroupProfile":{"type":"object","description":"A list of group profiles.","properties":{"group_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"avatar_url":{"type":"string","description":"The URL of this group's avatar image."},"external":{"$ref":"#/components/schemas/GroupExternalLinks"},"is_developer":{"type":"boolean","description":"Whether or not this group is a developer."},"bio":{"type":"string","description":"Detailed information about a profile."},"is_current_identity_member":{"type":"boolean","description":"Whether or not the current identity is a member of this group."},"publicity":{"$ref":"#/components/schemas/GroupPublicity"},"member_count":{"type":"integer","description":"Unsigned 32 bit integer."},"members":{"type":"array","items":{"$ref":"#/components/schemas/GroupMember"},"description":"A list of group members."},"join_requests":{"type":"array","items":{"$ref":"#/components/schemas/GroupJoinRequest"},"description":"A list of group join requests."},"is_current_identity_requesting_join":{"type":"boolean","description":"Whether or not the current identity is currently requesting to join this group."},"owner_identity_id":{"type":"string","format":"uuid"}},"required":["group_id","display_name","external","bio","publicity","members","join_requests","owner_identity_id"]},"GroupBannedIdentity":{"type":"object","description":"A banned identity.","properties":{"identity":{"$ref":"#/components/schemas/IdentityHandle"},"ban_ts":{"$ref":"#/components/schemas/Timestamp"}},"required":["identity","ban_ts"]},"GroupGetInviteResponse":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/GroupHandle"}},"required":["group"]},"GroupConsumeInviteResponse":{"type":"object","properties":{"group_id":{"type":"string","format":"uuid"}}},"GroupCreateInviteRequest":{"type":"object","properties":{"ttl":{"type":"number","format":"double","description":"How long until the group invite expires (in milliseconds)."},"use_count":{"type":"number","format":"double","description":"How many times the group invite can be used."}}},"GroupCreateInviteResponse":{"type":"object","properties":{"code":{"type":"string","description":"The code that will be passed to `rivet.api.group#ConsumeInvite` to join a group."}},"required":["code"]},"GroupResolveJoinRequestRequest":{"type":"object","properties":{"resolution":{"type":"boolean"}}},"IdentityListActivitiesResponse":{"type":"object","properties":{"identities":{"type":"array","items":{"$ref":"#/components/schemas/IdentityHandle"}},"games":{"type":"array","items":{"$ref":"#/components/schemas/GameGameSummary"}},"suggested_groups":{"type":"array","items":{"$ref":"#/components/schemas/GroupGroupSummary"}},"suggested_players":{"type":"array","items":{"$ref":"#/components/schemas/IdentityHandle"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["identities","games","suggested_groups","suggested_players","watch"]},"IdentityGlobalEvent":{"type":"object","description":"An event relevant to the current identity.","properties":{"ts":{"$ref":"#/components/schemas/Timestamp"},"kind":{"$ref":"#/components/schemas/IdentityGlobalEventKind"},"notification":{"$ref":"#/components/schemas/IdentityGlobalEventNotification"}},"required":["ts","kind"]},"IdentityGlobalEventKind":{"type":"object","properties":{"identity_update":{"$ref":"#/components/schemas/IdentityGlobalEventIdentityUpdate"}}},"IdentityGlobalEventNotification":{"type":"object","description":"Notifications represent information that should be presented to the user\nimmediately.\nAt the moment, only chat message events have associated notifications.\n\n# Display\n\nNotifications should be displayed in an unobtrusive manner throughout the\nentire game. Notifications should disappear after a few seconds if not\ninteracted with.\n\n# Interactions\n\nIf your platform supports it, notifications should be able to be clicked or\ntapped in order to open the relevant context for the event.\nFor a simple implementation of notification interactions, open `url` in a\nweb browser to present the relevant context. For example, a chat message\nnotification will open the thread the chat message was sent in.\nFor advanced implementations that implement a custom chat UI, use\n`GlobalEvent.kind` to determine what action to take when the notification is interacted with.\nFor example, if the global event kind is `GlobalEventChatMessage`, then open\nthe chat UI for the given thread.","properties":{"title":{"type":"string"},"description":{"type":"string"},"thumbnail_url":{"type":"string","description":"URL to an image thumbnail that should be shown for this notification."},"url":{"type":"string","description":"Rivet Hub URL that holds the relevant context for this notification."}},"required":["title","description","thumbnail_url","url"]},"IdentityGlobalEventIdentityUpdate":{"type":"object","properties":{"identity":{"$ref":"#/components/schemas/IdentityProfile"}},"required":["identity"]},"IdentityUpdateGameActivity":{"type":"object","description":"Information about the identity's current game. This is information that all other identities can see about what the current identity is doing.","properties":{"message":{"type":"string","description":"A short message about the current game activity."},"public_metadata":{"description":"JSON data seen by anyone."},"mutual_metadata":{"description":"JSON data seen only by the given identity and their mutual followers."}}},"IdentityHandle":{"type":"object","description":"An identity handle.","properties":{"identity_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"account_number":{"$ref":"#/components/schemas/AccountNumber"},"avatar_url":{"type":"string","description":"The URL of this identity's avatar image."},"is_registered":{"type":"boolean","description":"Whether or not this identity is registered with a linked account."},"external":{"$ref":"#/components/schemas/IdentityExternalLinks"}},"required":["identity_id","display_name","account_number","avatar_url","is_registered","external"]},"IdentitySummary":{"type":"object","description":"An identity summary.","properties":{"identity_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"account_number":{"$ref":"#/components/schemas/AccountNumber"},"avatar_url":{"type":"string","description":"The URL of this identity's avatar image."},"is_registered":{"type":"boolean","description":"Whether or not this identity is registered with a linked account."},"external":{"$ref":"#/components/schemas/IdentityExternalLinks"},"following":{"type":"boolean","description":"Whether or not the requestee's identity is following this identity."},"is_following_me":{"type":"boolean","description":"Whether or not this identity is both following and is followed by the requestee's identity."},"is_mutual_following":{"type":"boolean"}},"required":["identity_id","display_name","account_number","avatar_url","is_registered","external","following","is_following_me","is_mutual_following"]},"IdentityProfile":{"type":"object","description":"An identity profile.","properties":{"identity_id":{"type":"string","format":"uuid"},"display_name":{"$ref":"#/components/schemas/DisplayName"},"account_number":{"$ref":"#/components/schemas/AccountNumber"},"avatar_url":{"type":"string","description":"The URL of this identity's avatar image."},"is_registered":{"type":"boolean","description":"Whether or not this identity is registered with a linked account."},"external":{"$ref":"#/components/schemas/IdentityExternalLinks"},"is_admin":{"type":"boolean","description":"Whether or not this identity is an admin."},"is_game_linked":{"type":"boolean","description":"Whether or not this game user has been linked through the Rivet dashboard."},"dev_state":{"$ref":"#/components/schemas/IdentityDevState","description":"**Deprecated**"},"follower_count":{"type":"integer","format":"int64"},"following_count":{"type":"integer","format":"int64"},"following":{"type":"boolean","description":"Whether or not the requestee's identity is following this identity."},"is_following_me":{"type":"boolean","description":"Whether or not this identity is both following and is followed by the requestee's identity."},"is_mutual_following":{"type":"boolean"},"join_ts":{"$ref":"#/components/schemas/Timestamp"},"bio":{"$ref":"#/components/schemas/Bio"},"linked_accounts":{"type":"array","items":{"$ref":"#/components/schemas/IdentityLinkedAccount"}},"groups":{"type":"array","items":{"$ref":"#/components/schemas/IdentityGroup"}},"games":{"type":"array","items":{"$ref":"#/components/schemas/GameStatSummary"}},"awaiting_deletion":{"type":"boolean","description":"Whether or not this identity is awaiting account deletion. Only visible to when the requestee is\nthis identity."}},"required":["identity_id","display_name","account_number","avatar_url","is_registered","external","is_admin","follower_count","following_count","following","is_following_me","is_mutual_following","join_ts","bio","linked_accounts","groups","games"]},"IdentityExternalLinks":{"type":"object","description":"External links for an identity.","properties":{"profile":{"type":"string","description":"A link to this identity's profile page."},"settings":{"type":"string","description":"A link to the Rivet settings page."}},"required":["profile"]},"IdentityStatus":{"type":"string","enum":["online","away","offline"],"description":"The current status of an identity. This helps players understand if another player is currently playing or has their game in the background."},"IdentityGameActivity":{"type":"object","description":"The game an identity is currently participating in.","properties":{"game":{"$ref":"#/components/schemas/GameHandle"},"message":{"type":"string","description":"A short activity message about the current game activity."},"public_metadata":{"description":"JSON data seen by anyone."},"mutual_metadata":{"description":"JSON data seen only by the given identity and their mutual followers."}},"required":["game","message"]},"IdentityGroup":{"type":"object","description":"A group that the given identity.","properties":{"group":{"$ref":"#/components/schemas/GroupHandle"}},"required":["group"]},"IdentityLinkedAccount":{"type":"object","description":"A union representing an identity's linked accounts.","properties":{"email":{"$ref":"#/components/schemas/IdentityEmailLinkedAccount"},"default_user":{"type":"boolean"}}},"IdentityEmailLinkedAccount":{"type":"object","description":"An identity's linked email.","properties":{"email":{"$ref":"#/components/schemas/Email"}},"required":["email"]},"IdentityDevState":{"type":"string","enum":["inactive","pending","accepted"],"description":"The state of the given identity's developer status."},"IdentityGameLinkStatus":{"type":"string","enum":["incomplete","complete","cancelled"]},"IdentityWatchEventsResponse":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/IdentityGlobalEvent"}},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["events","watch"]},"MatchmakerLobbyInfo":{"type":"object","description":"A public lobby in the lobby list.","properties":{"region_id":{"type":"string"},"game_mode_id":{"type":"string"},"lobby_id":{"type":"string","format":"uuid"},"max_players_normal":{"type":"integer"},"max_players_direct":{"type":"integer"},"max_players_party":{"type":"integer"},"total_player_count":{"type":"integer"},"state":{}},"required":["region_id","game_mode_id","lobby_id","max_players_normal","max_players_direct","max_players_party","total_player_count"]},"MatchmakerGameModeInfo":{"type":"object","description":"A game mode that the player can join.","properties":{"game_mode_id":{"$ref":"#/components/schemas/Identifier"}},"required":["game_mode_id"]},"MatchmakerRegionInfo":{"type":"object","description":"A region that the player can connect to.","properties":{"region_id":{"$ref":"#/components/schemas/Identifier"},"provider_display_name":{"$ref":"#/components/schemas/DisplayName"},"region_display_name":{"$ref":"#/components/schemas/DisplayName"},"datacenter_coord":{"$ref":"#/components/schemas/GeoCoord"},"datacenter_distance_from_client":{"$ref":"#/components/schemas/GeoDistance"}},"required":["region_id","provider_display_name","region_display_name","datacenter_coord","datacenter_distance_from_client"]},"MatchmakerJoinLobby":{"type":"object","description":"A matchmaker lobby.","properties":{"lobby_id":{"type":"string","format":"uuid"},"region":{"$ref":"#/components/schemas/MatchmakerJoinRegion"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"},"description":"**Deprecated**"},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer","description":"**Deprecated**"}},"required":["lobby_id","region","ports","player"]},"MatchmakerJoinRegion":{"type":"object","description":"A matchmaker lobby region.","properties":{"region_id":{"$ref":"#/components/schemas/Identifier"},"display_name":{"$ref":"#/components/schemas/DisplayName"}},"required":["region_id","display_name"]},"MatchmakerJoinPort":{"type":"object","properties":{"host":{"type":"string","description":"The host for the given port. Will be null if using a port range."},"hostname":{"type":"string"},"port":{"type":"integer","description":"The port number for this lobby. Will be null if using a port range."},"port_range":{"$ref":"#/components/schemas/MatchmakerJoinPortRange"},"is_tls":{"type":"boolean","description":"Whether or not this lobby port uses TLS. You cannot mix a non-TLS and TLS ports."}},"required":["hostname","is_tls"]},"MatchmakerJoinPortRange":{"type":"object","description":"Inclusive range of ports that can be connected to.","properties":{"min":{"type":"integer","description":"Minimum port that can be connected to. Inclusive range."},"max":{"type":"integer","description":"Maximum port that can be connected to. Inclusive range."}},"required":["min","max"]},"MatchmakerJoinPlayer":{"type":"object","description":"A matchmaker lobby player.","properties":{"token":{"$ref":"#/components/schemas/Jwt","description":"Pass this token through the socket to the lobby server. The lobby server will validate this token with `PlayerConnected.player_token`"}},"required":["token"]},"MatchmakerCustomLobbyPublicity":{"type":"string","enum":["public","private"]},"MatchmakerFindLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/MatchmakerJoinLobby"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"}},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer"}},"required":["lobby","ports","player"]},"MatchmakerJoinLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/MatchmakerJoinLobby"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"}},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer"}},"required":["lobby","ports","player"]},"MatchmakerCreateLobbyResponse":{"type":"object","properties":{"lobby":{"$ref":"#/components/schemas/MatchmakerJoinLobby"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerJoinPort"}},"player":{"$ref":"#/components/schemas/MatchmakerJoinPlayer"}},"required":["lobby","ports","player"]},"MatchmakerListLobbiesResponse":{"type":"object","properties":{"game_modes":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerGameModeInfo"}},"regions":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerRegionInfo"}},"lobbies":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerLobbyInfo"}}},"required":["game_modes","regions","lobbies"]},"MatchmakerGetStatisticsResponse":{"type":"object","properties":{"player_count":{"type":"integer","format":"int64"},"game_modes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerGameModeStatistics"}}},"required":["player_count","game_modes"]},"MatchmakerGameModeStatistics":{"type":"object","properties":{"player_count":{"type":"integer","format":"int64"},"regions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MatchmakerRegionStatistics"}}},"required":["player_count","regions"]},"MatchmakerRegionStatistics":{"type":"object","properties":{"player_count":{"type":"integer","format":"int64"}},"required":["player_count"]},"MatchmakerListRegionsResponse":{"type":"object","properties":{"regions":{"type":"array","items":{"$ref":"#/components/schemas/MatchmakerRegionInfo"}}},"required":["regions"]},"PortalNotificationRegisterService":{"type":"object","properties":{"firebase":{"$ref":"#/components/schemas/PortalNotificationRegisterFirebaseService"}}},"PortalNotificationRegisterFirebaseService":{"type":"object","properties":{"access_key":{"type":"string"}},"required":["access_key"]},"PortalNotificationUnregisterService":{"type":"string","enum":["firebase"]},"PortalGetSuggestedGamesResponse":{"type":"object","properties":{"games":{"type":"array","items":{"$ref":"#/components/schemas/GameGameSummary"},"description":"A list of game summaries."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["games","watch"]},"PortalGetGameProfileResponse":{"type":"object","properties":{"game":{"$ref":"#/components/schemas/GameProfile"},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["game","watch"]},"ProvisionPoolType":{"type":"string","enum":["job","gg","ats","pegboard","pegboard_isolate","fdb"]},"ProvisionServer":{"type":"object","properties":{"server_id":{"type":"string","format":"uuid"},"datacenter_id":{"type":"string","format":"uuid"},"pool_type":{"$ref":"#/components/schemas/ProvisionPoolType"},"lan_ip":{"type":"string"},"wan_ip":{"type":"string"}},"required":["server_id","datacenter_id","pool_type"]},"ServersGetBuildResponse":{"type":"object","properties":{"build":{"$ref":"#/components/schemas/ServersBuild"}},"required":["build"]},"ServersListBuildsResponse":{"type":"object","properties":{"builds":{"type":"array","items":{"$ref":"#/components/schemas/ServersBuild"},"description":"A list of builds for the game associated with the token."}},"required":["builds"]},"ServersPatchBuildTagsRequest":{"type":"object","properties":{"tags":{},"exclusive_tags":{"type":"array","items":{"type":"string"},"description":"Removes the given tag keys from all other builds."}},"required":["tags"]},"ServersPatchBuildTagsResponse":{"type":"object","properties":{}},"ServersCreateBuildRequest":{"type":"object","properties":{"name":{"type":"string"},"image_tag":{"type":"string","description":"A tag given to the game build."},"image_file":{"$ref":"#/components/schemas/UploadPrepareFile"},"multipart_upload":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/ServersBuildKind"},"compression":{"$ref":"#/components/schemas/ServersBuildCompression"},"prewarm_datacenters":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["name","image_tag","image_file"]},"ServersCreateBuildResponse":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"image_presigned_request":{"$ref":"#/components/schemas/UploadPresignedRequest"},"image_presigned_requests":{"type":"array","items":{"$ref":"#/components/schemas/UploadPresignedRequest"}}},"required":["build"]},"ServersBuildKind":{"type":"string","enum":["docker_image","oci_bundle"]},"ServersBuildCompression":{"type":"string","enum":["none","lz4"]},"ServersServer":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"environment":{"type":"string","format":"uuid"},"datacenter":{"type":"string","format":"uuid"},"tags":{},"runtime":{"$ref":"#/components/schemas/ServersRuntime"},"network":{"$ref":"#/components/schemas/ServersNetwork"},"resources":{"$ref":"#/components/schemas/ServersResources"},"lifecycle":{"$ref":"#/components/schemas/ServersLifecycle"},"created_at":{"type":"integer","format":"int64"},"started_at":{"type":"integer","format":"int64"},"destroyed_at":{"type":"integer","format":"int64"}},"required":["id","environment","datacenter","tags","runtime","network","resources","lifecycle","created_at"]},"ServersRuntime":{"type":"object","properties":{"build":{"type":"string","format":"uuid"},"arguments":{"type":"array","items":{"type":"string"}},"environment":{"type":"object","additionalProperties":{"type":"string"}}},"required":["build"]},"ServersLifecycle":{"type":"object","properties":{"kill_timeout":{"type":"integer","format":"int64","description":"The duration to wait for in milliseconds before killing the server. This should be set to a safe default, and can be overridden during a DELETE request if needed."}}},"ServersResources":{"type":"object","properties":{"cpu":{"type":"integer","description":"The number of CPU cores in millicores, or 1/1000 of a core. For example,\n1/8 of a core would be 125 millicores, and 1 core would be 1000\nmillicores."},"memory":{"type":"integer","description":"The amount of memory in megabytes"}},"required":["cpu","memory"]},"ServersNetwork":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ServersNetworkMode"},"ports":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ServersPort"}}},"required":["ports"]},"ServersNetworkMode":{"type":"string","enum":["bridge","host"]},"ServersPort":{"type":"object","properties":{"protocol":{"$ref":"#/components/schemas/ServersPortProtocol"},"internal_port":{"type":"integer"},"public_hostname":{"type":"string"},"public_port":{"type":"integer"},"routing":{"$ref":"#/components/schemas/ServersPortRouting"}},"required":["protocol","routing"]},"ServersPortProtocol":{"type":"string","enum":["http","https","tcp","tcp_tls","udp"]},"ServersPortRouting":{"type":"object","properties":{"game_guard":{"$ref":"#/components/schemas/ServersGameGuardRouting"},"host":{"$ref":"#/components/schemas/ServersHostRouting"}}},"ServersGameGuardRouting":{"type":"object","properties":{}},"ServersHostRouting":{"type":"object","properties":{}},"ServersBuild":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags of this build"}},"required":["id","name","created_at","content_length","tags"]},"ServersDatacenter":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"]},"ServersListDatacentersResponse":{"type":"object","properties":{"datacenters":{"type":"array","items":{"$ref":"#/components/schemas/ServersDatacenter"}}},"required":["datacenters"]},"ServersGetServerLogsResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"timestamps":{"type":"array","items":{"type":"string"},"description":"Sorted old to new."},"watch":{"$ref":"#/components/schemas/WatchResponse"}},"required":["lines","timestamps","watch"]},"ServersLogStream":{"type":"string","enum":["std_out","std_err"]},"UploadPresignedRequest":{"type":"object","description":"A presigned request used to upload files. Upload your file to the given URL via a PUT request.","properties":{"path":{"type":"string","description":"The name of the file to upload. This is the same as the one given in the upload prepare file."},"url":{"type":"string","description":"The URL of the presigned request for which to upload your file to."},"byte_offset":{"type":"integer","format":"int64","description":"The byte offset for this multipart chunk. Always 0 if not a multipart upload."},"content_length":{"type":"integer","format":"int64","description":"Expected size of this upload."}},"required":["path","url","byte_offset","content_length"]},"UploadPrepareFile":{"type":"object","description":"A file being prepared to upload.","properties":{"path":{"type":"string","description":"The path/filename of the file."},"content_type":{"type":"string","description":"The MIME type of the file."},"content_length":{"type":"integer","format":"int64","description":"Unsigned 64 bit integer."}},"required":["path","content_length"]}}} \ No newline at end of file diff --git a/site/src/content/docs/self-hosting/server-spec.json b/site/src/content/docs/self-hosting/server-spec.json index e8cf15093f..e653bb2fd8 100644 --- a/site/src/content/docs/self-hosting/server-spec.json +++ b/site/src/content/docs/self-hosting/server-spec.json @@ -1623,21 +1623,17 @@ "type": "object", "required": [ "acme", - "cert_locally_signed_job_cert_pem", - "cert_locally_signed_job_key_pem", - "root_ca_cert_pem" + "root_ca_cert_pem", + "root_ca_key_pem" ], "properties": { "acme": { "$ref": "#/definitions/TlsAcme" }, - "cert_locally_signed_job_cert_pem": { - "$ref": "#/definitions/Secret" - }, - "cert_locally_signed_job_key_pem": { + "root_ca_cert_pem": { "$ref": "#/definitions/Secret" }, - "root_ca_cert_pem": { + "root_ca_key_pem": { "$ref": "#/definitions/Secret" } },