diff --git a/Cargo.lock b/Cargo.lock index c450ffb11a..438a7e39af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -253,72 +253,6 @@ dependencies = [ "backtrace", ] -[[package]] -name = "api-actor" -version = "25.1.0-rc.1" -dependencies = [ - "api-helper", - "base64 0.13.1", - "build", - "build-create", - "build-get", - "build-list-for-env", - "cdn-namespace-domain-create", - "chirp-client", - "chrono", - "cloud-namespace-token-development-create", - "cloud-namespace-token-public-create", - "cluster", - "ds", - "ds-log-export", - "ds-log-read", - "faker-build", - "faker-game", - "faker-game-namespace", - "faker-game-version", - "faker-region", - "game-get", - "game-namespace-get", - "game-namespace-resolve-name-id", - "game-resolve-name-id", - "game-version-get", - "http 0.2.12", - "hyper 0.14.31", - "lazy_static", - "pegboard", - "region-get", - "region-recommend", - "reqwest 0.11.27", - "rivet-api", - "rivet-cache", - "rivet-claims", - "rivet-config", - "rivet-connection", - "rivet-convert", - "rivet-env", - "rivet-health-checks", - "rivet-operation", - "rivet-pools", - "rivet-util-team", - "s3-util", - "serde", - "serde_json", - "team-get", - "token-create", - "token-revoke", - "tokio", - "tracing", - "tracing-futures", - "tracing-subscriber", - "upload-complete", - "upload-get", - "url", - "user-get", - "user-identity-get", - "user-team-list", - "uuid", -] - [[package]] name = "api-auth" version = "25.1.0-rc.1" @@ -491,30 +425,421 @@ dependencies = [ "rivet-operation", "rivet-pools", "rivet-util-job", - "rivet-util-mm", - "rivet-util-team", + "rivet-util-mm", + "rivet-util-team", + "s3-util", + "serde", + "serde_json", + "team-get", + "team-member-count", + "team-validate", + "thiserror 1.0.69", + "tier", + "token-create", + "token-revoke", + "tokio", + "tracing", + "tracing-subscriber", + "upload-complete", + "upload-file-list", + "upload-get", + "upload-prepare", + "url", + "user-get", + "user-identity-create", + "user-identity-get", + "user-team-list", + "uuid", +] + +[[package]] +name = "api-core-actor" +version = "25.1.0-rc.1" +dependencies = [ + "api-helper", + "base64 0.13.1", + "build", + "build-create", + "build-get", + "build-list-for-env", + "cdn-namespace-domain-create", + "chirp-client", + "chrono", + "cloud-namespace-token-development-create", + "cloud-namespace-token-public-create", + "cluster", + "ds", + "ds-log-export", + "ds-log-read", + "faker-build", + "faker-game", + "faker-game-namespace", + "faker-game-version", + "faker-region", + "game-get", + "game-namespace-get", + "game-namespace-resolve-name-id", + "game-resolve-name-id", + "game-version-get", + "http 0.2.12", + "hyper 0.14.31", + "lazy_static", + "pegboard", + "region-get", + "region-recommend", + "reqwest 0.11.27", + "rivet-api", + "rivet-cache", + "rivet-claims", + "rivet-config", + "rivet-connection", + "rivet-convert", + "rivet-env", + "rivet-health-checks", + "rivet-operation", + "rivet-pools", + "rivet-util-team", + "s3-util", + "serde", + "serde_json", + "team-get", + "token-create", + "token-revoke", + "tokio", + "tracing", + "tracing-futures", + "tracing-subscriber", + "upload-complete", + "upload-get", + "url", + "user-get", + "user-identity-get", + "user-team-list", + "uuid", +] + +[[package]] +name = "api-core-intercom" +version = "25.1.0-rc.1" +dependencies = [ + "api-helper", + "async-trait", + "chirp-client", + "chirp-workflow", + "chrono", + "edge-pegboard", + "http 0.2.12", + "hyper 0.14.31", + "lazy_static", + "prost 0.10.4", + "rivet-api", + "rivet-cache", + "rivet-claims", + "rivet-config", + "rivet-convert", + "rivet-env", + "rivet-health-checks", + "rivet-operation", + "rivet-pools", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-subscriber", + "url", + "uuid", +] + +[[package]] +name = "api-core-monolith-edge" +version = "25.1.0-rc.1" +dependencies = [ + "api-core-intercom", + "api-core-traefik-provider", + "api-helper", + "api-provision", + "async-trait", + "chirp-client", + "http 0.2.12", + "hyper 0.14.31", + "rivet-config", + "rivet-env", + "rivet-operation", + "tokio", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "api-core-monolith-public" +version = "25.1.0-rc.1" +dependencies = [ + "api-auth", + "api-cf-verification", + "api-cloud", + "api-core-actor", + "api-games", + "api-group", + "api-helper", + "api-identity", + "api-job", + "api-matchmaker", + "api-portal", + "api-status", + "api-ui", + "async-trait", + "chirp-client", + "http 0.2.12", + "hyper 0.14.31", + "rivet-config", + "rivet-env", + "rivet-operation", + "tokio", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "api-core-traefik-provider" +version = "25.1.0-rc.1" +dependencies = [ + "api-helper", + "async-trait", + "async_once", + "base64 0.13.1", + "cdn-namespace-auth-user-update", + "cdn-namespace-domain-create", + "chirp-client", + "chrono", + "cluster", + "ds", + "faker-cdn-site", + "faker-game", + "faker-game-namespace", + "faker-game-version", + "faker-job-run", + "faker-region", + "game-get", + "http 0.2.12", + "hyper 0.14.31", + "lazy_static", + "prost 0.10.4", + "reqwest 0.11.27", + "rivet-cache", + "rivet-claims", + "rivet-config", + "rivet-connection", + "rivet-convert", + "rivet-env", + "rivet-health-checks", + "rivet-operation", + "rivet-pools", + "rivet-route", + "rivet-util-cdn", + "rivet-util-job", + "s3-util", + "serde", + "serde_json", + "sqlx", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-subscriber", + "url", + "uuid", +] + +[[package]] +name = "api-edge-actor" +version = "25.1.0-rc.1" +dependencies = [ + "api-helper", + "base64 0.13.1", + "build", + "build-create", + "build-get", + "build-list-for-env", + "cdn-namespace-domain-create", + "chirp-client", + "chirp-workflow", + "chrono", + "cloud-namespace-token-development-create", + "cloud-namespace-token-public-create", + "cluster", + "ds", + "ds-log-export", + "ds-log-read", + "faker-build", + "faker-game", + "faker-game-namespace", + "faker-game-version", + "faker-region", + "game-get", + "game-namespace-get", + "game-namespace-resolve-name-id", + "game-resolve-name-id", + "game-version-get", + "http 0.2.12", + "hyper 0.14.31", + "lazy_static", + "pegboard", + "region-get", + "region-recommend", + "reqwest 0.11.27", + "rivet-api", + "rivet-cache", + "rivet-claims", + "rivet-config", + "rivet-connection", + "rivet-convert", + "rivet-env", + "rivet-health-checks", + "rivet-operation", + "rivet-pools", + "rivet-util-team", + "s3-util", + "serde", + "serde_json", + "team-get", + "token-create", + "token-revoke", + "tokio", + "tracing", + "tracing-futures", + "tracing-subscriber", + "upload-complete", + "upload-get", + "url", + "user-get", + "user-identity-get", + "user-team-list", + "uuid", +] + +[[package]] +name = "api-edge-intercom" +version = "25.1.0-rc.1" +dependencies = [ + "api-helper", + "async-trait", + "chirp-client", + "chirp-workflow", + "chrono", + "edge-pegboard", + "http 0.2.12", + "hyper 0.14.31", + "lazy_static", + "prost 0.10.4", + "rivet-api", + "rivet-cache", + "rivet-claims", + "rivet-config", + "rivet-convert", + "rivet-env", + "rivet-health-checks", + "rivet-operation", + "rivet-pools", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-subscriber", + "url", + "uuid", +] + +[[package]] +name = "api-edge-monolith-edge" +version = "25.1.0-rc.1" +dependencies = [ + "api-edge-traefik-provider", + "api-helper", + "async-trait", + "chirp-client", + "http 0.2.12", + "hyper 0.14.31", + "rivet-config", + "rivet-env", + "rivet-operation", + "tokio", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "api-edge-monolith-public" +version = "25.1.0-rc.1" +dependencies = [ + "api-edge-actor", + "api-edge-intercom", + "api-helper", + "async-trait", + "chirp-client", + "http 0.2.12", + "hyper 0.14.31", + "rivet-config", + "rivet-env", + "rivet-operation", + "tokio", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "api-edge-traefik-provider" +version = "25.1.0-rc.1" +dependencies = [ + "api-core-traefik-provider", + "api-helper", + "async-trait", + "async_once", + "base64 0.13.1", + "cdn-namespace-auth-user-update", + "cdn-namespace-domain-create", + "chirp-client", + "chirp-workflow", + "chrono", + "cluster", + "ds", + "faker-cdn-site", + "faker-game", + "faker-game-namespace", + "faker-game-version", + "faker-job-run", + "faker-region", + "game-get", + "http 0.2.12", + "hyper 0.14.31", + "lazy_static", + "prost 0.10.4", + "reqwest 0.11.27", + "rivet-cache", + "rivet-claims", + "rivet-config", + "rivet-connection", + "rivet-convert", + "rivet-env", + "rivet-health-checks", + "rivet-operation", + "rivet-pools", + "rivet-route", + "rivet-util-cdn", + "rivet-util-job", "s3-util", "serde", "serde_json", - "team-get", - "team-member-count", - "team-validate", + "sqlx", "thiserror 1.0.69", - "tier", - "token-create", - "token-revoke", "tokio", "tracing", "tracing-subscriber", - "upload-complete", - "upload-file-list", - "upload-get", - "upload-prepare", "url", - "user-get", - "user-identity-create", - "user-identity-get", - "user-team-list", "uuid", ] @@ -857,56 +1182,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "api-monolith-edge" -version = "25.1.0-rc.1" -dependencies = [ - "api-helper", - "api-provision", - "api-traefik-provider", - "async-trait", - "chirp-client", - "http 0.2.12", - "hyper 0.14.31", - "rivet-config", - "rivet-env", - "rivet-operation", - "tokio", - "tracing", - "tracing-subscriber", - "url", -] - -[[package]] -name = "api-monolith-public" -version = "25.1.0-rc.1" -dependencies = [ - "api-actor", - "api-auth", - "api-cf-verification", - "api-cloud", - "api-games", - "api-group", - "api-helper", - "api-identity", - "api-job", - "api-matchmaker", - "api-portal", - "api-status", - "api-ui", - "async-trait", - "chirp-client", - "http 0.2.12", - "hyper 0.14.31", - "rivet-config", - "rivet-env", - "rivet-operation", - "tokio", - "tracing", - "tracing-subscriber", - "url", -] - [[package]] name = "api-portal" version = "25.1.0-rc.1" @@ -1031,56 +1306,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "api-traefik-provider" -version = "25.1.0-rc.1" -dependencies = [ - "api-helper", - "async-trait", - "async_once", - "base64 0.13.1", - "cdn-namespace-auth-user-update", - "cdn-namespace-domain-create", - "chirp-client", - "chrono", - "cluster", - "ds", - "faker-cdn-site", - "faker-game", - "faker-game-namespace", - "faker-game-version", - "faker-job-run", - "faker-region", - "game-get", - "http 0.2.12", - "hyper 0.14.31", - "lazy_static", - "prost 0.10.4", - "reqwest 0.11.27", - "rivet-cache", - "rivet-claims", - "rivet-config", - "rivet-connection", - "rivet-convert", - "rivet-env", - "rivet-health-checks", - "rivet-operation", - "rivet-pools", - "rivet-route", - "rivet-util-cdn", - "rivet-util-job", - "s3-util", - "serde", - "serde_json", - "sqlx", - "thiserror 1.0.69", - "tokio", - "tracing", - "tracing-subscriber", - "url", - "uuid", -] - [[package]] name = "api-ui" version = "25.1.0-rc.1" @@ -3320,6 +3545,7 @@ dependencies = [ "pegboard", "rand", "reqwest 0.11.27", + "rivet-api", "rivet-config", "rivet-metrics", "rivet-operation", @@ -5472,12 +5698,78 @@ dependencies = [ ] [[package]] -name = "edge-monolith-workflow-worker" +name = "edge-ds" version = "25.1.0-rc.1" dependencies = [ + "anyhow", + "bit-vec", + "build", + "build-get", + "chirp-client", + "chirp-worker", "chirp-workflow", - "ds", + "chrono", + "cjson", + "cluster", + "edge-pegboard", + "faker-build", + "faker-game", + "faker-region", + "faker-user", + "fdb-util", + "foundationdb", + "game-get", + "game-namespace-get", + "game-resolve-namespace-id", + "heck 0.3.3", + "hex", + "http 0.2.12", + "ip-info", + "lazy_static", + "mm-config-version-get", + "mm-lobby-get", + "mm-lobby-list-for-user-id", + "nix 0.27.1", + "nomad-client", + "nomad-util", + "nomad_client", "pegboard", + "rand", + "regex", + "region-get", + "reqwest 0.12.9", + "rivet-api", + "rivet-config", + "rivet-convert", + "rivet-health-checks", + "rivet-metrics", + "rivet-operation", + "rivet-runtime", + "rivet-util", + "rivet-util-build", + "rivet-util-job", + "s3-util", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlite-util", + "sqlx", + "strum 0.24.1", + "tier", + "token-create", + "tracing-subscriber", + "upload-get", + "user-identity-get", + "uuid", +] + +[[package]] +name = "edge-monolith-workflow-worker" +version = "25.1.0-rc.1" +dependencies = [ + "chirp-workflow", + "edge-ds", + "edge-pegboard", "rivet-config", "rivet-health-checks", "rivet-metrics", @@ -5488,10 +5780,14 @@ dependencies = [ name = "edge-pegboard" version = "25.1.0-rc.1" dependencies = [ + "anyhow", "chirp-workflow", + "fdb-util", + "foundationdb", "lazy_static", "nix 0.27.1", "pegboard", + "rivet-api", "rivet-config", "rivet-metrics", "rivet-util", @@ -5499,12 +5795,32 @@ dependencies = [ "serde", "serde_json", "server-spec", + "sqlite-util", "sqlx", "strum 0.24.1", "thiserror 1.0.69", "uuid", ] +[[package]] +name = "edge-pegboard-ws" +version = "25.1.0-rc.1" +dependencies = [ + "chirp-client", + "chirp-workflow", + "edge-pegboard", + "hyper 1.5.1", + "pegboard", + "rivet-config", + "rivet-connection", + "rivet-health-checks", + "rivet-metrics", + "rivet-runtime", + "serde", + "tokio-tungstenite 0.23.1", + "url", +] + [[package]] name = "either" version = "1.13.0" @@ -6017,6 +6333,7 @@ version = "25.1.0-rc.1" dependencies = [ "anyhow", "foundationdb", + "global-error", "lazy_static", "tokio", "tracing", @@ -9271,10 +9588,8 @@ version = "25.1.0-rc.1" dependencies = [ "chirp-workflow", "cluster", - "ds", "job-run", "linode", - "pegboard", "rivet-config", "rivet-health-checks", "rivet-metrics", @@ -11792,6 +12107,27 @@ dependencies = [ "user-team-list", ] +[[package]] +name = "rivet-edge-server" +version = "25.1.0-rc.1" +dependencies = [ + "anyhow", + "api-edge-monolith-edge", + "api-edge-monolith-public", + "chirp-workflow", + "clap", + "edge-monolith-workflow-worker", + "edge-pegboard-ws", + "rivet-cache", + "rivet-config", + "rivet-connection", + "rivet-migrate", + "rivet-runtime", + "rivet-server-cli", + "rivet-service-manager", + "s3-util", +] + [[package]] name = "rivet-env" version = "25.1.0-rc.1" @@ -12077,6 +12413,7 @@ dependencies = [ "redis", "rivet-config", "rivet-metrics", + "sqlite-util", "sqlx", "tempfile", "thiserror 1.0.69", @@ -12153,8 +12490,8 @@ name = "rivet-server" version = "25.1.0-rc.1" dependencies = [ "anyhow", - "api-monolith-edge", - "api-monolith-public", + "api-core-monolith-edge", + "api-core-monolith-public", "build-default-create", "chirp-client", "chirp-workflow", @@ -12176,10 +12513,6 @@ dependencies = [ "monolith-worker", "monolith-workflow-worker", "nomad-monitor", - "pegboard-dc-init", - "pegboard-gc", - "pegboard-metrics-publish", - "pegboard-ws", "rivet-cache", "rivet-config", "rivet-connection", @@ -12190,8 +12523,6 @@ dependencies = [ "s3-util", "telemetry-beacon", "user-delete-pending", - "workflow-gc", - "workflow-metrics-publish", ] [[package]] @@ -17057,41 +17388,6 @@ version = "0.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" -[[package]] -name = "workflow-gc" -version = "25.1.0-rc.1" -dependencies = [ - "chirp-client", - "chirp-worker", - "rivet-config", - "rivet-connection", - "rivet-health-checks", - "rivet-metrics", - "rivet-operation", - "rivet-runtime", - "tokio", - "tracing", - "tracing-logfmt", - "tracing-subscriber", -] - -[[package]] -name = "workflow-metrics-publish" -version = "25.1.0-rc.1" -dependencies = [ - "chirp-client", - "chirp-workflow", - "rivet-config", - "rivet-connection", - "rivet-health-checks", - "rivet-metrics", - "rivet-runtime", - "sqlx", - "tokio", - "tracing", - "tracing-subscriber", -] - [[package]] name = "write16" version = "1.0.0" diff --git a/Cargo.toml b/Cargo.toml index 0aeb0ad3bf..4a9690654b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [workspace] resolver = "2" -members = ["packages/api/actor","packages/api/auth","packages/api/cf-verification","packages/api/cloud","packages/api/games","packages/api/group","packages/api/identity","packages/api/job","packages/api/matchmaker","packages/api/monolith-edge","packages/api/monolith-public","packages/api/portal","packages/api/provision","packages/api/status","packages/api/traefik-provider","packages/api/ui","packages/common/api-helper/build","packages/common/api-helper/macros","packages/common/cache/build","packages/common/cache/result","packages/common/chirp-workflow/core","packages/common/chirp-workflow/macros","packages/common/chirp/client","packages/common/chirp/metrics","packages/common/chirp/perf","packages/common/chirp/types","packages/common/chirp/worker","packages/common/chirp/worker-attributes","packages/common/claims","packages/common/config","packages/common/connection","packages/common/convert","packages/common/deno-embed","packages/common/env","packages/common/fdb-util","packages/common/formatted-error","packages/common/global-error","packages/common/health-checks","packages/common/hub-embed","packages/common/kv-str","packages/common/metrics","packages/common/migrate","packages/common/nomad-util","packages/common/operation/core","packages/common/operation/macros","packages/common/pools","packages/common/redis-util","packages/common/runtime","packages/common/s3-util","packages/common/schemac","packages/common/server-cli","packages/common/service-manager","packages/common/smithy-output/api-auth/rust","packages/common/smithy-output/api-auth/rust-server","packages/common/smithy-output/api-cf-verification/rust","packages/common/smithy-output/api-cf-verification/rust-server","packages/common/smithy-output/api-cloud/rust","packages/common/smithy-output/api-cloud/rust-server","packages/common/smithy-output/api-group/rust","packages/common/smithy-output/api-group/rust-server","packages/common/smithy-output/api-identity/rust","packages/common/smithy-output/api-identity/rust-server","packages/common/smithy-output/api-job/rust","packages/common/smithy-output/api-job/rust-server","packages/common/smithy-output/api-kv/rust","packages/common/smithy-output/api-kv/rust-server","packages/common/smithy-output/api-matchmaker/rust","packages/common/smithy-output/api-matchmaker/rust-server","packages/common/smithy-output/api-party/rust","packages/common/smithy-output/api-party/rust-server","packages/common/smithy-output/api-portal/rust","packages/common/smithy-output/api-portal/rust-server","packages/common/smithy-output/api-status/rust","packages/common/smithy-output/api-status/rust-server","packages/common/smithy-output/api-traefik-provider/rust","packages/common/smithy-output/api-traefik-provider/rust-server","packages/common/sqlite-util","packages/common/test","packages/common/test-images","packages/common/types-proto/build","packages/common/types-proto/core","packages/common/util/core","packages/common/util/macros","packages/common/util/search","packages/infra/client/actor-kv","packages/infra/client/config","packages/infra/client/container-runner","packages/infra/client/echo","packages/infra/client/isolate-v8-runner","packages/infra/client/logs","packages/infra/client/manager","packages/infra/edge-server","packages/infra/legacy/job-runner","packages/infra/schema-generator","packages/infra/server","packages/services/build","packages/services/build/ops/create","packages/services/build/ops/get","packages/services/build/ops/list-for-env","packages/services/build/ops/list-for-game","packages/services/build/standalone/default-create","packages/services/build/util","packages/services/captcha/ops/hcaptcha-config-get","packages/services/captcha/ops/hcaptcha-verify","packages/services/captcha/ops/request","packages/services/captcha/ops/turnstile-config-get","packages/services/captcha/ops/turnstile-verify","packages/services/captcha/ops/verify","packages/services/captcha/util","packages/services/cdn/ops/namespace-auth-user-remove","packages/services/cdn/ops/namespace-auth-user-update","packages/services/cdn/ops/namespace-create","packages/services/cdn/ops/namespace-domain-create","packages/services/cdn/ops/namespace-domain-remove","packages/services/cdn/ops/namespace-get","packages/services/cdn/ops/namespace-resolve-domain","packages/services/cdn/ops/ns-auth-type-set","packages/services/cdn/ops/ns-enable-domain-public-auth-set","packages/services/cdn/ops/site-create","packages/services/cdn/ops/site-get","packages/services/cdn/ops/site-list-for-game","packages/services/cdn/ops/version-get","packages/services/cdn/ops/version-prepare","packages/services/cdn/ops/version-publish","packages/services/cdn/util","packages/services/cdn/worker","packages/services/cf-custom-hostname/ops/get","packages/services/cf-custom-hostname/ops/list-for-namespace-id","packages/services/cf-custom-hostname/ops/resolve-hostname","packages/services/cf-custom-hostname/worker","packages/services/cloud/ops/device-link-create","packages/services/cloud/ops/game-config-create","packages/services/cloud/ops/game-config-get","packages/services/cloud/ops/game-token-create","packages/services/cloud/ops/namespace-create","packages/services/cloud/ops/namespace-get","packages/services/cloud/ops/namespace-token-development-create","packages/services/cloud/ops/namespace-token-public-create","packages/services/cloud/ops/version-get","packages/services/cloud/ops/version-publish","packages/services/cloud/standalone/default-create","packages/services/cloud/worker","packages/services/cluster","packages/services/cluster/standalone/datacenter-tls-renew","packages/services/cluster/standalone/default-update","packages/services/cluster/standalone/gc","packages/services/cluster/standalone/metrics-publish","packages/services/custom-user-avatar/ops/list-for-game","packages/services/custom-user-avatar/ops/upload-complete","packages/services/debug/ops/email-res","packages/services/ds","packages/services/ds-log/ops/export","packages/services/ds-log/ops/read","packages/services/dynamic-config","packages/services/edge/monolith/standalone/workflow-worker","packages/services/edge/pegboard","packages/services/email-verification/ops/complete","packages/services/email-verification/ops/create","packages/services/email/ops/send","packages/services/external/ops/request-validate","packages/services/external/worker","packages/services/faker/ops/build","packages/services/faker/ops/cdn-site","packages/services/faker/ops/game","packages/services/faker/ops/game-namespace","packages/services/faker/ops/game-version","packages/services/faker/ops/job-run","packages/services/faker/ops/job-template","packages/services/faker/ops/mm-lobby","packages/services/faker/ops/mm-lobby-row","packages/services/faker/ops/mm-player","packages/services/faker/ops/region","packages/services/faker/ops/team","packages/services/faker/ops/user","packages/services/game/ops/banner-upload-complete","packages/services/game/ops/create","packages/services/game/ops/get","packages/services/game/ops/list-all","packages/services/game/ops/list-for-team","packages/services/game/ops/logo-upload-complete","packages/services/game/ops/namespace-create","packages/services/game/ops/namespace-get","packages/services/game/ops/namespace-list","packages/services/game/ops/namespace-resolve-name-id","packages/services/game/ops/namespace-resolve-url","packages/services/game/ops/namespace-validate","packages/services/game/ops/namespace-version-history-list","packages/services/game/ops/namespace-version-set","packages/services/game/ops/recommend","packages/services/game/ops/resolve-name-id","packages/services/game/ops/resolve-namespace-id","packages/services/game/ops/token-development-validate","packages/services/game/ops/validate","packages/services/game/ops/version-create","packages/services/game/ops/version-get","packages/services/game/ops/version-list","packages/services/game/ops/version-validate","packages/services/ip/ops/info","packages/services/job-log/ops/read","packages/services/job-log/worker","packages/services/job-run","packages/services/job/standalone/gc","packages/services/job/util","packages/services/linode","packages/services/linode/standalone/gc","packages/services/load-test/standalone/api-cloud","packages/services/load-test/standalone/mm","packages/services/load-test/standalone/mm-sustain","packages/services/load-test/standalone/sqlx","packages/services/load-test/standalone/watch-requests","packages/services/mm-config/ops/game-get","packages/services/mm-config/ops/game-upsert","packages/services/mm-config/ops/lobby-group-get","packages/services/mm-config/ops/lobby-group-resolve-name-id","packages/services/mm-config/ops/lobby-group-resolve-version","packages/services/mm-config/ops/namespace-config-set","packages/services/mm-config/ops/namespace-config-validate","packages/services/mm-config/ops/namespace-create","packages/services/mm-config/ops/namespace-get","packages/services/mm-config/ops/version-get","packages/services/mm-config/ops/version-prepare","packages/services/mm-config/ops/version-publish","packages/services/mm/ops/dev-player-token-create","packages/services/mm/ops/lobby-find-fail","packages/services/mm/ops/lobby-find-lobby-query-list","packages/services/mm/ops/lobby-find-try-complete","packages/services/mm/ops/lobby-for-run-id","packages/services/mm/ops/lobby-get","packages/services/mm/ops/lobby-history","packages/services/mm/ops/lobby-idle-update","packages/services/mm/ops/lobby-list-for-namespace","packages/services/mm/ops/lobby-list-for-user-id","packages/services/mm/ops/lobby-player-count","packages/services/mm/ops/lobby-runtime-aggregate","packages/services/mm/ops/lobby-state-get","packages/services/mm/ops/player-count-for-namespace","packages/services/mm/ops/player-get","packages/services/mm/standalone/gc","packages/services/mm/util","packages/services/mm/worker","packages/services/monolith/standalone/worker","packages/services/monolith/standalone/workflow-worker","packages/services/nomad/standalone/monitor","packages/services/pegboard","packages/services/pegboard/standalone/dc-init","packages/services/pegboard/standalone/gc","packages/services/pegboard/standalone/metrics-publish","packages/services/pegboard/standalone/ws","packages/services/region/ops/get","packages/services/region/ops/list","packages/services/region/ops/list-for-game","packages/services/region/ops/recommend","packages/services/region/ops/resolve","packages/services/region/ops/resolve-for-game","packages/services/server-spec","packages/services/team-invite/ops/get","packages/services/team-invite/worker","packages/services/team/ops/avatar-upload-complete","packages/services/team/ops/get","packages/services/team/ops/join-request-list","packages/services/team/ops/member-count","packages/services/team/ops/member-get","packages/services/team/ops/member-list","packages/services/team/ops/member-relationship-get","packages/services/team/ops/profile-validate","packages/services/team/ops/recommend","packages/services/team/ops/resolve-display-name","packages/services/team/ops/user-ban-get","packages/services/team/ops/user-ban-list","packages/services/team/ops/validate","packages/services/team/util","packages/services/team/worker","packages/services/telemetry/standalone/beacon","packages/services/tier","packages/services/token/ops/create","packages/services/token/ops/exchange","packages/services/token/ops/get","packages/services/token/ops/revoke","packages/services/upload/ops/complete","packages/services/upload/ops/file-list","packages/services/upload/ops/get","packages/services/upload/ops/list-for-user","packages/services/upload/ops/prepare","packages/services/upload/worker","packages/services/user","packages/services/user-identity/ops/create","packages/services/user-identity/ops/delete","packages/services/user-identity/ops/get","packages/services/user/ops/avatar-upload-complete","packages/services/user/ops/get","packages/services/user/ops/pending-delete-toggle","packages/services/user/ops/profile-validate","packages/services/user/ops/resolve-email","packages/services/user/ops/team-list","packages/services/user/ops/token-create","packages/services/user/standalone/delete-pending","packages/services/user/worker","packages/toolchain/actors-sdk-embed","packages/toolchain/cli","packages/toolchain/js-utils-embed","packages/toolchain/toolchain","sdks/api/full/rust"] +members = ["packages/common/api-helper/build","packages/common/api-helper/macros","packages/common/cache/build","packages/common/cache/result","packages/common/chirp-workflow/core","packages/common/chirp-workflow/macros","packages/common/chirp/client","packages/common/chirp/metrics","packages/common/chirp/perf","packages/common/chirp/types","packages/common/chirp/worker","packages/common/chirp/worker-attributes","packages/common/claims","packages/common/config","packages/common/connection","packages/common/convert","packages/common/deno-embed","packages/common/env","packages/common/fdb-util","packages/common/formatted-error","packages/common/global-error","packages/common/health-checks","packages/common/hub-embed","packages/common/kv-str","packages/common/metrics","packages/common/migrate","packages/common/nomad-util","packages/common/operation/core","packages/common/operation/macros","packages/common/pools","packages/common/redis-util","packages/common/runtime","packages/common/s3-util","packages/common/schemac","packages/common/server-cli","packages/common/service-manager","packages/common/smithy-output/api-auth/rust","packages/common/smithy-output/api-auth/rust-server","packages/common/smithy-output/api-cf-verification/rust","packages/common/smithy-output/api-cf-verification/rust-server","packages/common/smithy-output/api-cloud/rust","packages/common/smithy-output/api-cloud/rust-server","packages/common/smithy-output/api-group/rust","packages/common/smithy-output/api-group/rust-server","packages/common/smithy-output/api-identity/rust","packages/common/smithy-output/api-identity/rust-server","packages/common/smithy-output/api-job/rust","packages/common/smithy-output/api-job/rust-server","packages/common/smithy-output/api-kv/rust","packages/common/smithy-output/api-kv/rust-server","packages/common/smithy-output/api-matchmaker/rust","packages/common/smithy-output/api-matchmaker/rust-server","packages/common/smithy-output/api-party/rust","packages/common/smithy-output/api-party/rust-server","packages/common/smithy-output/api-portal/rust","packages/common/smithy-output/api-portal/rust-server","packages/common/smithy-output/api-status/rust","packages/common/smithy-output/api-status/rust-server","packages/common/smithy-output/api-traefik-provider/rust","packages/common/smithy-output/api-traefik-provider/rust-server","packages/common/sqlite-util","packages/common/test","packages/common/test-images","packages/common/types-proto/build","packages/common/types-proto/core","packages/common/util/core","packages/common/util/macros","packages/common/util/search","packages/core/api/actor","packages/core/api/auth","packages/core/api/cf-verification","packages/core/api/cloud","packages/core/api/games","packages/core/api/group","packages/core/api/identity","packages/core/api/intercom","packages/core/api/job","packages/core/api/matchmaker","packages/core/api/monolith-edge","packages/core/api/monolith-public","packages/core/api/portal","packages/core/api/provision","packages/core/api/status","packages/core/api/traefik-provider","packages/core/api/ui","packages/core/infra/client/actor-kv","packages/core/infra/client/config","packages/core/infra/client/container-runner","packages/core/infra/client/echo","packages/core/infra/client/isolate-v8-runner","packages/core/infra/client/logs","packages/core/infra/client/manager","packages/core/infra/legacy/job-runner","packages/core/infra/schema-generator","packages/core/infra/server","packages/core/services/build","packages/core/services/build/ops/create","packages/core/services/build/ops/get","packages/core/services/build/ops/list-for-env","packages/core/services/build/ops/list-for-game","packages/core/services/build/standalone/default-create","packages/core/services/build/util","packages/core/services/captcha/ops/hcaptcha-config-get","packages/core/services/captcha/ops/hcaptcha-verify","packages/core/services/captcha/ops/request","packages/core/services/captcha/ops/turnstile-config-get","packages/core/services/captcha/ops/turnstile-verify","packages/core/services/captcha/ops/verify","packages/core/services/captcha/util","packages/core/services/cdn/ops/namespace-auth-user-remove","packages/core/services/cdn/ops/namespace-auth-user-update","packages/core/services/cdn/ops/namespace-create","packages/core/services/cdn/ops/namespace-domain-create","packages/core/services/cdn/ops/namespace-domain-remove","packages/core/services/cdn/ops/namespace-get","packages/core/services/cdn/ops/namespace-resolve-domain","packages/core/services/cdn/ops/ns-auth-type-set","packages/core/services/cdn/ops/ns-enable-domain-public-auth-set","packages/core/services/cdn/ops/site-create","packages/core/services/cdn/ops/site-get","packages/core/services/cdn/ops/site-list-for-game","packages/core/services/cdn/ops/version-get","packages/core/services/cdn/ops/version-prepare","packages/core/services/cdn/ops/version-publish","packages/core/services/cdn/util","packages/core/services/cdn/worker","packages/core/services/cf-custom-hostname/ops/get","packages/core/services/cf-custom-hostname/ops/list-for-namespace-id","packages/core/services/cf-custom-hostname/ops/resolve-hostname","packages/core/services/cf-custom-hostname/worker","packages/core/services/cloud/ops/device-link-create","packages/core/services/cloud/ops/game-config-create","packages/core/services/cloud/ops/game-config-get","packages/core/services/cloud/ops/game-token-create","packages/core/services/cloud/ops/namespace-create","packages/core/services/cloud/ops/namespace-get","packages/core/services/cloud/ops/namespace-token-development-create","packages/core/services/cloud/ops/namespace-token-public-create","packages/core/services/cloud/ops/version-get","packages/core/services/cloud/ops/version-publish","packages/core/services/cloud/standalone/default-create","packages/core/services/cloud/worker","packages/core/services/cluster","packages/core/services/cluster/standalone/datacenter-tls-renew","packages/core/services/cluster/standalone/default-update","packages/core/services/cluster/standalone/gc","packages/core/services/cluster/standalone/metrics-publish","packages/core/services/custom-user-avatar/ops/list-for-game","packages/core/services/custom-user-avatar/ops/upload-complete","packages/core/services/debug/ops/email-res","packages/core/services/ds","packages/core/services/ds-log/ops/export","packages/core/services/ds-log/ops/read","packages/core/services/dynamic-config","packages/core/services/email-verification/ops/complete","packages/core/services/email-verification/ops/create","packages/core/services/email/ops/send","packages/core/services/external/ops/request-validate","packages/core/services/external/worker","packages/core/services/faker/ops/build","packages/core/services/faker/ops/cdn-site","packages/core/services/faker/ops/game","packages/core/services/faker/ops/game-namespace","packages/core/services/faker/ops/game-version","packages/core/services/faker/ops/job-run","packages/core/services/faker/ops/job-template","packages/core/services/faker/ops/mm-lobby","packages/core/services/faker/ops/mm-lobby-row","packages/core/services/faker/ops/mm-player","packages/core/services/faker/ops/region","packages/core/services/faker/ops/team","packages/core/services/faker/ops/user","packages/core/services/game/ops/banner-upload-complete","packages/core/services/game/ops/create","packages/core/services/game/ops/get","packages/core/services/game/ops/list-all","packages/core/services/game/ops/list-for-team","packages/core/services/game/ops/logo-upload-complete","packages/core/services/game/ops/namespace-create","packages/core/services/game/ops/namespace-get","packages/core/services/game/ops/namespace-list","packages/core/services/game/ops/namespace-resolve-name-id","packages/core/services/game/ops/namespace-resolve-url","packages/core/services/game/ops/namespace-validate","packages/core/services/game/ops/namespace-version-history-list","packages/core/services/game/ops/namespace-version-set","packages/core/services/game/ops/recommend","packages/core/services/game/ops/resolve-name-id","packages/core/services/game/ops/resolve-namespace-id","packages/core/services/game/ops/token-development-validate","packages/core/services/game/ops/validate","packages/core/services/game/ops/version-create","packages/core/services/game/ops/version-get","packages/core/services/game/ops/version-list","packages/core/services/game/ops/version-validate","packages/core/services/ip/ops/info","packages/core/services/job-log/ops/read","packages/core/services/job-log/worker","packages/core/services/job-run","packages/core/services/job/standalone/gc","packages/core/services/job/util","packages/core/services/linode","packages/core/services/linode/standalone/gc","packages/core/services/load-test/standalone/api-cloud","packages/core/services/load-test/standalone/mm","packages/core/services/load-test/standalone/mm-sustain","packages/core/services/load-test/standalone/sqlx","packages/core/services/load-test/standalone/watch-requests","packages/core/services/mm-config/ops/game-get","packages/core/services/mm-config/ops/game-upsert","packages/core/services/mm-config/ops/lobby-group-get","packages/core/services/mm-config/ops/lobby-group-resolve-name-id","packages/core/services/mm-config/ops/lobby-group-resolve-version","packages/core/services/mm-config/ops/namespace-config-set","packages/core/services/mm-config/ops/namespace-config-validate","packages/core/services/mm-config/ops/namespace-create","packages/core/services/mm-config/ops/namespace-get","packages/core/services/mm-config/ops/version-get","packages/core/services/mm-config/ops/version-prepare","packages/core/services/mm-config/ops/version-publish","packages/core/services/mm/ops/dev-player-token-create","packages/core/services/mm/ops/lobby-find-fail","packages/core/services/mm/ops/lobby-find-lobby-query-list","packages/core/services/mm/ops/lobby-find-try-complete","packages/core/services/mm/ops/lobby-for-run-id","packages/core/services/mm/ops/lobby-get","packages/core/services/mm/ops/lobby-history","packages/core/services/mm/ops/lobby-idle-update","packages/core/services/mm/ops/lobby-list-for-namespace","packages/core/services/mm/ops/lobby-list-for-user-id","packages/core/services/mm/ops/lobby-player-count","packages/core/services/mm/ops/lobby-runtime-aggregate","packages/core/services/mm/ops/lobby-state-get","packages/core/services/mm/ops/player-count-for-namespace","packages/core/services/mm/ops/player-get","packages/core/services/mm/standalone/gc","packages/core/services/mm/util","packages/core/services/mm/worker","packages/core/services/monolith/standalone/worker","packages/core/services/monolith/standalone/workflow-worker","packages/core/services/nomad/standalone/monitor","packages/core/services/pegboard","packages/core/services/pegboard/standalone/dc-init","packages/core/services/pegboard/standalone/gc","packages/core/services/pegboard/standalone/metrics-publish","packages/core/services/pegboard/standalone/ws","packages/core/services/region/ops/get","packages/core/services/region/ops/list","packages/core/services/region/ops/list-for-game","packages/core/services/region/ops/recommend","packages/core/services/region/ops/resolve","packages/core/services/region/ops/resolve-for-game","packages/core/services/server-spec","packages/core/services/team-invite/ops/get","packages/core/services/team-invite/worker","packages/core/services/team/ops/avatar-upload-complete","packages/core/services/team/ops/get","packages/core/services/team/ops/join-request-list","packages/core/services/team/ops/member-count","packages/core/services/team/ops/member-get","packages/core/services/team/ops/member-list","packages/core/services/team/ops/member-relationship-get","packages/core/services/team/ops/profile-validate","packages/core/services/team/ops/recommend","packages/core/services/team/ops/resolve-display-name","packages/core/services/team/ops/user-ban-get","packages/core/services/team/ops/user-ban-list","packages/core/services/team/ops/validate","packages/core/services/team/util","packages/core/services/team/worker","packages/core/services/telemetry/standalone/beacon","packages/core/services/tier","packages/core/services/token/ops/create","packages/core/services/token/ops/exchange","packages/core/services/token/ops/get","packages/core/services/token/ops/revoke","packages/core/services/upload/ops/complete","packages/core/services/upload/ops/file-list","packages/core/services/upload/ops/get","packages/core/services/upload/ops/list-for-user","packages/core/services/upload/ops/prepare","packages/core/services/upload/worker","packages/core/services/user","packages/core/services/user-identity/ops/create","packages/core/services/user-identity/ops/delete","packages/core/services/user-identity/ops/get","packages/core/services/user/ops/avatar-upload-complete","packages/core/services/user/ops/get","packages/core/services/user/ops/pending-delete-toggle","packages/core/services/user/ops/profile-validate","packages/core/services/user/ops/resolve-email","packages/core/services/user/ops/team-list","packages/core/services/user/ops/token-create","packages/core/services/user/standalone/delete-pending","packages/core/services/user/worker","packages/edge/api/actor","packages/edge/api/intercom","packages/edge/api/monolith-edge","packages/edge/api/monolith-public","packages/edge/api/traefik-provider","packages/edge/infra/edge-server","packages/edge/services/ds","packages/edge/services/monolith/standalone/workflow-worker","packages/edge/services/pegboard","packages/edge/services/pegboard/standalone/ws","packages/toolchain/actors-sdk-embed","packages/toolchain/cli","packages/toolchain/js-utils-embed","packages/toolchain/toolchain","sdks/api/full/rust"] [workspace.package] version = "25.1.0-rc.1" @@ -79,54 +79,6 @@ rev = "8a313913fa73d58f4f9532565b0084e723bc34ad" git = "https://github.com/rivet-gg/deno" rev = "9b1fbddb34c5e8cca115bc17a77c36f4c498eb4a" -[workspace.dependencies.api-actor] -path = "packages/api/actor" - -[workspace.dependencies.api-auth] -path = "packages/api/auth" - -[workspace.dependencies.api-cf-verification] -path = "packages/api/cf-verification" - -[workspace.dependencies.api-cloud] -path = "packages/api/cloud" - -[workspace.dependencies.api-games] -path = "packages/api/games" - -[workspace.dependencies.api-group] -path = "packages/api/group" - -[workspace.dependencies.api-identity] -path = "packages/api/identity" - -[workspace.dependencies.api-job] -path = "packages/api/job" - -[workspace.dependencies.api-matchmaker] -path = "packages/api/matchmaker" - -[workspace.dependencies.api-monolith-edge] -path = "packages/api/monolith-edge" - -[workspace.dependencies.api-monolith-public] -path = "packages/api/monolith-public" - -[workspace.dependencies.api-portal] -path = "packages/api/portal" - -[workspace.dependencies.api-provision] -path = "packages/api/provision" - -[workspace.dependencies.api-status] -path = "packages/api/status" - -[workspace.dependencies.api-traefik-provider] -path = "packages/api/traefik-provider" - -[workspace.dependencies.api-ui] -path = "packages/api/ui" - [workspace.dependencies.api-helper] path = "packages/common/api-helper/build" @@ -339,668 +291,740 @@ path = "packages/common/util/search" package = "rivet-util-search" path = "packages/common/util/search" +[workspace.dependencies.api-core-actor] +path = "packages/core/api/actor" + +[workspace.dependencies.api-auth] +path = "packages/core/api/auth" + +[workspace.dependencies.api-cf-verification] +path = "packages/core/api/cf-verification" + +[workspace.dependencies.api-cloud] +path = "packages/core/api/cloud" + +[workspace.dependencies.api-games] +path = "packages/core/api/games" + +[workspace.dependencies.api-group] +path = "packages/core/api/group" + +[workspace.dependencies.api-identity] +path = "packages/core/api/identity" + +[workspace.dependencies.api-core-intercom] +path = "packages/core/api/intercom" + +[workspace.dependencies.api-job] +path = "packages/core/api/job" + +[workspace.dependencies.api-matchmaker] +path = "packages/core/api/matchmaker" + +[workspace.dependencies.api-core-monolith-edge] +path = "packages/core/api/monolith-edge" + +[workspace.dependencies.api-core-monolith-public] +path = "packages/core/api/monolith-public" + +[workspace.dependencies.api-portal] +path = "packages/core/api/portal" + +[workspace.dependencies.api-provision] +path = "packages/core/api/provision" + +[workspace.dependencies.api-status] +path = "packages/core/api/status" + +[workspace.dependencies.api-core-traefik-provider] +path = "packages/core/api/traefik-provider" + +[workspace.dependencies.api-ui] +path = "packages/core/api/ui" + [workspace.dependencies.pegboard-actor-kv] -path = "packages/infra/client/actor-kv" +path = "packages/core/infra/client/actor-kv" [workspace.dependencies.pegboard-config] -path = "packages/infra/client/config" +path = "packages/core/infra/client/config" [workspace.dependencies.pegboard-container-runner] -path = "packages/infra/client/container-runner" +path = "packages/core/infra/client/container-runner" [workspace.dependencies.pegboard-echo-server] -path = "packages/infra/client/echo" +path = "packages/core/infra/client/echo" [workspace.dependencies.pegboard-isolate-v8-runner] -path = "packages/infra/client/isolate-v8-runner" +path = "packages/core/infra/client/isolate-v8-runner" [workspace.dependencies.pegboard-logs] -path = "packages/infra/client/logs" +path = "packages/core/infra/client/logs" [workspace.dependencies.pegboard-manager] -path = "packages/infra/client/manager" - -[workspace.dependencies.rivet-edge-server] -path = "packages/infra/edge-server" +path = "packages/core/infra/client/manager" [workspace.dependencies.rivet-job-runner] -path = "packages/infra/legacy/job-runner" +path = "packages/core/infra/legacy/job-runner" [workspace.dependencies.rivet-schema-generator] -path = "packages/infra/schema-generator" +path = "packages/core/infra/schema-generator" [workspace.dependencies.rivet-server] -path = "packages/infra/server" +path = "packages/core/infra/server" [workspace.dependencies.build] -path = "packages/services/build" +path = "packages/core/services/build" [workspace.dependencies.build-create] -path = "packages/services/build/ops/create" +path = "packages/core/services/build/ops/create" [workspace.dependencies.build-get] -path = "packages/services/build/ops/get" +path = "packages/core/services/build/ops/get" [workspace.dependencies.build-list-for-env] -path = "packages/services/build/ops/list-for-env" +path = "packages/core/services/build/ops/list-for-env" [workspace.dependencies.build-list-for-game] -path = "packages/services/build/ops/list-for-game" +path = "packages/core/services/build/ops/list-for-game" [workspace.dependencies.build-default-create] -path = "packages/services/build/standalone/default-create" +path = "packages/core/services/build/standalone/default-create" [workspace.dependencies.rivet-util-build] -path = "packages/services/build/util" +path = "packages/core/services/build/util" [workspace.dependencies.util-build] package = "rivet-util-build" -path = "packages/services/build/util" +path = "packages/core/services/build/util" [workspace.dependencies.captcha-hcaptcha-config-get] -path = "packages/services/captcha/ops/hcaptcha-config-get" +path = "packages/core/services/captcha/ops/hcaptcha-config-get" [workspace.dependencies.captcha-hcaptcha-verify] -path = "packages/services/captcha/ops/hcaptcha-verify" +path = "packages/core/services/captcha/ops/hcaptcha-verify" [workspace.dependencies.captcha-request] -path = "packages/services/captcha/ops/request" +path = "packages/core/services/captcha/ops/request" [workspace.dependencies.captcha-turnstile-config-get] -path = "packages/services/captcha/ops/turnstile-config-get" +path = "packages/core/services/captcha/ops/turnstile-config-get" [workspace.dependencies.captcha-turnstile-verify] -path = "packages/services/captcha/ops/turnstile-verify" +path = "packages/core/services/captcha/ops/turnstile-verify" [workspace.dependencies.captcha-verify] -path = "packages/services/captcha/ops/verify" +path = "packages/core/services/captcha/ops/verify" [workspace.dependencies.rivet-util-captcha] -path = "packages/services/captcha/util" +path = "packages/core/services/captcha/util" [workspace.dependencies.util-captcha] package = "rivet-util-captcha" -path = "packages/services/captcha/util" +path = "packages/core/services/captcha/util" [workspace.dependencies.cdn-namespace-auth-user-remove] -path = "packages/services/cdn/ops/namespace-auth-user-remove" +path = "packages/core/services/cdn/ops/namespace-auth-user-remove" [workspace.dependencies.cdn-namespace-auth-user-update] -path = "packages/services/cdn/ops/namespace-auth-user-update" +path = "packages/core/services/cdn/ops/namespace-auth-user-update" [workspace.dependencies.cdn-namespace-create] -path = "packages/services/cdn/ops/namespace-create" +path = "packages/core/services/cdn/ops/namespace-create" [workspace.dependencies.cdn-namespace-domain-create] -path = "packages/services/cdn/ops/namespace-domain-create" +path = "packages/core/services/cdn/ops/namespace-domain-create" [workspace.dependencies.cdn-namespace-domain-remove] -path = "packages/services/cdn/ops/namespace-domain-remove" +path = "packages/core/services/cdn/ops/namespace-domain-remove" [workspace.dependencies.cdn-namespace-get] -path = "packages/services/cdn/ops/namespace-get" +path = "packages/core/services/cdn/ops/namespace-get" [workspace.dependencies.cdn-namespace-resolve-domain] -path = "packages/services/cdn/ops/namespace-resolve-domain" +path = "packages/core/services/cdn/ops/namespace-resolve-domain" [workspace.dependencies.cdn-ns-auth-type-set] -path = "packages/services/cdn/ops/ns-auth-type-set" +path = "packages/core/services/cdn/ops/ns-auth-type-set" [workspace.dependencies.cdn-ns-enable-domain-public-auth-set] -path = "packages/services/cdn/ops/ns-enable-domain-public-auth-set" +path = "packages/core/services/cdn/ops/ns-enable-domain-public-auth-set" [workspace.dependencies.cdn-site-create] -path = "packages/services/cdn/ops/site-create" +path = "packages/core/services/cdn/ops/site-create" [workspace.dependencies.cdn-site-get] -path = "packages/services/cdn/ops/site-get" +path = "packages/core/services/cdn/ops/site-get" [workspace.dependencies.cdn-site-list-for-game] -path = "packages/services/cdn/ops/site-list-for-game" +path = "packages/core/services/cdn/ops/site-list-for-game" [workspace.dependencies.cdn-version-get] -path = "packages/services/cdn/ops/version-get" +path = "packages/core/services/cdn/ops/version-get" [workspace.dependencies.cdn-version-prepare] -path = "packages/services/cdn/ops/version-prepare" +path = "packages/core/services/cdn/ops/version-prepare" [workspace.dependencies.cdn-version-publish] -path = "packages/services/cdn/ops/version-publish" +path = "packages/core/services/cdn/ops/version-publish" [workspace.dependencies.rivet-util-cdn] -path = "packages/services/cdn/util" +path = "packages/core/services/cdn/util" [workspace.dependencies.util-cdn] package = "rivet-util-cdn" -path = "packages/services/cdn/util" +path = "packages/core/services/cdn/util" [workspace.dependencies.cdn-worker] -path = "packages/services/cdn/worker" +path = "packages/core/services/cdn/worker" [workspace.dependencies.cf-custom-hostname-get] -path = "packages/services/cf-custom-hostname/ops/get" +path = "packages/core/services/cf-custom-hostname/ops/get" [workspace.dependencies.cf-custom-hostname-list-for-namespace-id] -path = "packages/services/cf-custom-hostname/ops/list-for-namespace-id" +path = "packages/core/services/cf-custom-hostname/ops/list-for-namespace-id" [workspace.dependencies.cf-custom-hostname-resolve-hostname] -path = "packages/services/cf-custom-hostname/ops/resolve-hostname" +path = "packages/core/services/cf-custom-hostname/ops/resolve-hostname" [workspace.dependencies.cf-custom-hostname-worker] -path = "packages/services/cf-custom-hostname/worker" +path = "packages/core/services/cf-custom-hostname/worker" [workspace.dependencies.cloud-device-link-create] -path = "packages/services/cloud/ops/device-link-create" +path = "packages/core/services/cloud/ops/device-link-create" [workspace.dependencies.cloud-game-config-create] -path = "packages/services/cloud/ops/game-config-create" +path = "packages/core/services/cloud/ops/game-config-create" [workspace.dependencies.cloud-game-config-get] -path = "packages/services/cloud/ops/game-config-get" +path = "packages/core/services/cloud/ops/game-config-get" [workspace.dependencies.cloud-game-token-create] -path = "packages/services/cloud/ops/game-token-create" +path = "packages/core/services/cloud/ops/game-token-create" [workspace.dependencies.cloud-namespace-create] -path = "packages/services/cloud/ops/namespace-create" +path = "packages/core/services/cloud/ops/namespace-create" [workspace.dependencies.cloud-namespace-get] -path = "packages/services/cloud/ops/namespace-get" +path = "packages/core/services/cloud/ops/namespace-get" [workspace.dependencies.cloud-namespace-token-development-create] -path = "packages/services/cloud/ops/namespace-token-development-create" +path = "packages/core/services/cloud/ops/namespace-token-development-create" [workspace.dependencies.cloud-namespace-token-public-create] -path = "packages/services/cloud/ops/namespace-token-public-create" +path = "packages/core/services/cloud/ops/namespace-token-public-create" [workspace.dependencies.cloud-version-get] -path = "packages/services/cloud/ops/version-get" +path = "packages/core/services/cloud/ops/version-get" [workspace.dependencies.cloud-version-publish] -path = "packages/services/cloud/ops/version-publish" +path = "packages/core/services/cloud/ops/version-publish" [workspace.dependencies.cloud-default-create] -path = "packages/services/cloud/standalone/default-create" +path = "packages/core/services/cloud/standalone/default-create" [workspace.dependencies.cloud-worker] -path = "packages/services/cloud/worker" +path = "packages/core/services/cloud/worker" [workspace.dependencies.cluster] -path = "packages/services/cluster" +path = "packages/core/services/cluster" [workspace.dependencies.cluster-datacenter-tls-renew] -path = "packages/services/cluster/standalone/datacenter-tls-renew" +path = "packages/core/services/cluster/standalone/datacenter-tls-renew" [workspace.dependencies.cluster-default-update] -path = "packages/services/cluster/standalone/default-update" +path = "packages/core/services/cluster/standalone/default-update" [workspace.dependencies.cluster-gc] -path = "packages/services/cluster/standalone/gc" +path = "packages/core/services/cluster/standalone/gc" [workspace.dependencies.cluster-metrics-publish] -path = "packages/services/cluster/standalone/metrics-publish" +path = "packages/core/services/cluster/standalone/metrics-publish" [workspace.dependencies.custom-user-avatar-list-for-game] -path = "packages/services/custom-user-avatar/ops/list-for-game" +path = "packages/core/services/custom-user-avatar/ops/list-for-game" [workspace.dependencies.custom-user-avatar-upload-complete] -path = "packages/services/custom-user-avatar/ops/upload-complete" +path = "packages/core/services/custom-user-avatar/ops/upload-complete" [workspace.dependencies.debug-email-res] -path = "packages/services/debug/ops/email-res" +path = "packages/core/services/debug/ops/email-res" [workspace.dependencies.ds] -path = "packages/services/ds" +path = "packages/core/services/ds" [workspace.dependencies.ds-log-export] -path = "packages/services/ds-log/ops/export" +path = "packages/core/services/ds-log/ops/export" [workspace.dependencies.ds-log-read] -path = "packages/services/ds-log/ops/read" +path = "packages/core/services/ds-log/ops/read" [workspace.dependencies.dynamic-config] -path = "packages/services/dynamic-config" - -[workspace.dependencies.edge-monolith-workflow-worker] -path = "packages/services/edge/monolith/standalone/workflow-worker" - -[workspace.dependencies.edge-pegboard] -path = "packages/services/edge/pegboard" +path = "packages/core/services/dynamic-config" [workspace.dependencies.email-verification-complete] -path = "packages/services/email-verification/ops/complete" +path = "packages/core/services/email-verification/ops/complete" [workspace.dependencies.email-verification-create] -path = "packages/services/email-verification/ops/create" +path = "packages/core/services/email-verification/ops/create" [workspace.dependencies.email-send] -path = "packages/services/email/ops/send" +path = "packages/core/services/email/ops/send" [workspace.dependencies.external-request-validate] -path = "packages/services/external/ops/request-validate" +path = "packages/core/services/external/ops/request-validate" [workspace.dependencies.external-worker] -path = "packages/services/external/worker" +path = "packages/core/services/external/worker" [workspace.dependencies.faker-build] -path = "packages/services/faker/ops/build" +path = "packages/core/services/faker/ops/build" [workspace.dependencies.faker-cdn-site] -path = "packages/services/faker/ops/cdn-site" +path = "packages/core/services/faker/ops/cdn-site" [workspace.dependencies.faker-game] -path = "packages/services/faker/ops/game" +path = "packages/core/services/faker/ops/game" [workspace.dependencies.faker-game-namespace] -path = "packages/services/faker/ops/game-namespace" +path = "packages/core/services/faker/ops/game-namespace" [workspace.dependencies.faker-game-version] -path = "packages/services/faker/ops/game-version" +path = "packages/core/services/faker/ops/game-version" [workspace.dependencies.faker-job-run] -path = "packages/services/faker/ops/job-run" +path = "packages/core/services/faker/ops/job-run" [workspace.dependencies.faker-job-template] -path = "packages/services/faker/ops/job-template" +path = "packages/core/services/faker/ops/job-template" [workspace.dependencies.faker-mm-lobby] -path = "packages/services/faker/ops/mm-lobby" +path = "packages/core/services/faker/ops/mm-lobby" [workspace.dependencies.faker-mm-lobby-row] -path = "packages/services/faker/ops/mm-lobby-row" +path = "packages/core/services/faker/ops/mm-lobby-row" [workspace.dependencies.faker-mm-player] -path = "packages/services/faker/ops/mm-player" +path = "packages/core/services/faker/ops/mm-player" [workspace.dependencies.faker-region] -path = "packages/services/faker/ops/region" +path = "packages/core/services/faker/ops/region" [workspace.dependencies.faker-team] -path = "packages/services/faker/ops/team" +path = "packages/core/services/faker/ops/team" [workspace.dependencies.faker-user] -path = "packages/services/faker/ops/user" +path = "packages/core/services/faker/ops/user" [workspace.dependencies.game-banner-upload-complete] -path = "packages/services/game/ops/banner-upload-complete" +path = "packages/core/services/game/ops/banner-upload-complete" [workspace.dependencies.game-create] -path = "packages/services/game/ops/create" +path = "packages/core/services/game/ops/create" [workspace.dependencies.game-get] -path = "packages/services/game/ops/get" +path = "packages/core/services/game/ops/get" [workspace.dependencies.game-list-all] -path = "packages/services/game/ops/list-all" +path = "packages/core/services/game/ops/list-all" [workspace.dependencies.game-list-for-team] -path = "packages/services/game/ops/list-for-team" +path = "packages/core/services/game/ops/list-for-team" [workspace.dependencies.game-logo-upload-complete] -path = "packages/services/game/ops/logo-upload-complete" +path = "packages/core/services/game/ops/logo-upload-complete" [workspace.dependencies.game-namespace-create] -path = "packages/services/game/ops/namespace-create" +path = "packages/core/services/game/ops/namespace-create" [workspace.dependencies.game-namespace-get] -path = "packages/services/game/ops/namespace-get" +path = "packages/core/services/game/ops/namespace-get" [workspace.dependencies.game-namespace-list] -path = "packages/services/game/ops/namespace-list" +path = "packages/core/services/game/ops/namespace-list" [workspace.dependencies.game-namespace-resolve-name-id] -path = "packages/services/game/ops/namespace-resolve-name-id" +path = "packages/core/services/game/ops/namespace-resolve-name-id" [workspace.dependencies.game-namespace-resolve-url] -path = "packages/services/game/ops/namespace-resolve-url" +path = "packages/core/services/game/ops/namespace-resolve-url" [workspace.dependencies.game-namespace-validate] -path = "packages/services/game/ops/namespace-validate" +path = "packages/core/services/game/ops/namespace-validate" [workspace.dependencies.game-namespace-version-history-list] -path = "packages/services/game/ops/namespace-version-history-list" +path = "packages/core/services/game/ops/namespace-version-history-list" [workspace.dependencies.game-namespace-version-set] -path = "packages/services/game/ops/namespace-version-set" +path = "packages/core/services/game/ops/namespace-version-set" [workspace.dependencies.game-recommend] -path = "packages/services/game/ops/recommend" +path = "packages/core/services/game/ops/recommend" [workspace.dependencies.game-resolve-name-id] -path = "packages/services/game/ops/resolve-name-id" +path = "packages/core/services/game/ops/resolve-name-id" [workspace.dependencies.game-resolve-namespace-id] -path = "packages/services/game/ops/resolve-namespace-id" +path = "packages/core/services/game/ops/resolve-namespace-id" [workspace.dependencies.game-token-development-validate] -path = "packages/services/game/ops/token-development-validate" +path = "packages/core/services/game/ops/token-development-validate" [workspace.dependencies.game-validate] -path = "packages/services/game/ops/validate" +path = "packages/core/services/game/ops/validate" [workspace.dependencies.game-version-create] -path = "packages/services/game/ops/version-create" +path = "packages/core/services/game/ops/version-create" [workspace.dependencies.game-version-get] -path = "packages/services/game/ops/version-get" +path = "packages/core/services/game/ops/version-get" [workspace.dependencies.game-version-list] -path = "packages/services/game/ops/version-list" +path = "packages/core/services/game/ops/version-list" [workspace.dependencies.game-version-validate] -path = "packages/services/game/ops/version-validate" +path = "packages/core/services/game/ops/version-validate" [workspace.dependencies.ip-info] -path = "packages/services/ip/ops/info" +path = "packages/core/services/ip/ops/info" [workspace.dependencies.job-log-read] -path = "packages/services/job-log/ops/read" +path = "packages/core/services/job-log/ops/read" [workspace.dependencies.job-log-worker] -path = "packages/services/job-log/worker" +path = "packages/core/services/job-log/worker" [workspace.dependencies.job-run] -path = "packages/services/job-run" +path = "packages/core/services/job-run" [workspace.dependencies.job-gc] -path = "packages/services/job/standalone/gc" +path = "packages/core/services/job/standalone/gc" [workspace.dependencies.rivet-util-job] -path = "packages/services/job/util" +path = "packages/core/services/job/util" [workspace.dependencies.util-job] package = "rivet-util-job" -path = "packages/services/job/util" +path = "packages/core/services/job/util" [workspace.dependencies.linode] -path = "packages/services/linode" +path = "packages/core/services/linode" [workspace.dependencies.linode-gc] -path = "packages/services/linode/standalone/gc" +path = "packages/core/services/linode/standalone/gc" [workspace.dependencies.load-test-api-cloud] -path = "packages/services/load-test/standalone/api-cloud" +path = "packages/core/services/load-test/standalone/api-cloud" [workspace.dependencies.load-test-mm] -path = "packages/services/load-test/standalone/mm" +path = "packages/core/services/load-test/standalone/mm" [workspace.dependencies.load-test-mm-sustain] -path = "packages/services/load-test/standalone/mm-sustain" +path = "packages/core/services/load-test/standalone/mm-sustain" [workspace.dependencies.load-test-sqlx] -path = "packages/services/load-test/standalone/sqlx" +path = "packages/core/services/load-test/standalone/sqlx" [workspace.dependencies.load-test-watch-requests] -path = "packages/services/load-test/standalone/watch-requests" +path = "packages/core/services/load-test/standalone/watch-requests" [workspace.dependencies.mm-config-game-get] -path = "packages/services/mm-config/ops/game-get" +path = "packages/core/services/mm-config/ops/game-get" [workspace.dependencies.mm-config-game-upsert] -path = "packages/services/mm-config/ops/game-upsert" +path = "packages/core/services/mm-config/ops/game-upsert" [workspace.dependencies.mm-config-lobby-group-get] -path = "packages/services/mm-config/ops/lobby-group-get" +path = "packages/core/services/mm-config/ops/lobby-group-get" [workspace.dependencies.mm-config-lobby-group-resolve-name-id] -path = "packages/services/mm-config/ops/lobby-group-resolve-name-id" +path = "packages/core/services/mm-config/ops/lobby-group-resolve-name-id" [workspace.dependencies.mm-config-lobby-group-resolve-version] -path = "packages/services/mm-config/ops/lobby-group-resolve-version" +path = "packages/core/services/mm-config/ops/lobby-group-resolve-version" [workspace.dependencies.mm-config-namespace-config-set] -path = "packages/services/mm-config/ops/namespace-config-set" +path = "packages/core/services/mm-config/ops/namespace-config-set" [workspace.dependencies.mm-config-namespace-config-validate] -path = "packages/services/mm-config/ops/namespace-config-validate" +path = "packages/core/services/mm-config/ops/namespace-config-validate" [workspace.dependencies.mm-config-namespace-create] -path = "packages/services/mm-config/ops/namespace-create" +path = "packages/core/services/mm-config/ops/namespace-create" [workspace.dependencies.mm-config-namespace-get] -path = "packages/services/mm-config/ops/namespace-get" +path = "packages/core/services/mm-config/ops/namespace-get" [workspace.dependencies.mm-config-version-get] -path = "packages/services/mm-config/ops/version-get" +path = "packages/core/services/mm-config/ops/version-get" [workspace.dependencies.mm-config-version-prepare] -path = "packages/services/mm-config/ops/version-prepare" +path = "packages/core/services/mm-config/ops/version-prepare" [workspace.dependencies.mm-config-version-publish] -path = "packages/services/mm-config/ops/version-publish" +path = "packages/core/services/mm-config/ops/version-publish" [workspace.dependencies.mm-dev-player-token-create] -path = "packages/services/mm/ops/dev-player-token-create" +path = "packages/core/services/mm/ops/dev-player-token-create" [workspace.dependencies.mm-lobby-find-fail] -path = "packages/services/mm/ops/lobby-find-fail" +path = "packages/core/services/mm/ops/lobby-find-fail" [workspace.dependencies.mm-lobby-find-lobby-query-list] -path = "packages/services/mm/ops/lobby-find-lobby-query-list" +path = "packages/core/services/mm/ops/lobby-find-lobby-query-list" [workspace.dependencies.mm-lobby-find-try-complete] -path = "packages/services/mm/ops/lobby-find-try-complete" +path = "packages/core/services/mm/ops/lobby-find-try-complete" [workspace.dependencies.mm-lobby-for-run-id] -path = "packages/services/mm/ops/lobby-for-run-id" +path = "packages/core/services/mm/ops/lobby-for-run-id" [workspace.dependencies.mm-lobby-get] -path = "packages/services/mm/ops/lobby-get" +path = "packages/core/services/mm/ops/lobby-get" [workspace.dependencies.mm-lobby-history] -path = "packages/services/mm/ops/lobby-history" +path = "packages/core/services/mm/ops/lobby-history" [workspace.dependencies.mm-lobby-idle-update] -path = "packages/services/mm/ops/lobby-idle-update" +path = "packages/core/services/mm/ops/lobby-idle-update" [workspace.dependencies.mm-lobby-list-for-namespace] -path = "packages/services/mm/ops/lobby-list-for-namespace" +path = "packages/core/services/mm/ops/lobby-list-for-namespace" [workspace.dependencies.mm-lobby-list-for-user-id] -path = "packages/services/mm/ops/lobby-list-for-user-id" +path = "packages/core/services/mm/ops/lobby-list-for-user-id" [workspace.dependencies.mm-lobby-player-count] -path = "packages/services/mm/ops/lobby-player-count" +path = "packages/core/services/mm/ops/lobby-player-count" [workspace.dependencies.mm-lobby-runtime-aggregate] -path = "packages/services/mm/ops/lobby-runtime-aggregate" +path = "packages/core/services/mm/ops/lobby-runtime-aggregate" [workspace.dependencies.mm-lobby-state-get] -path = "packages/services/mm/ops/lobby-state-get" +path = "packages/core/services/mm/ops/lobby-state-get" [workspace.dependencies.mm-player-count-for-namespace] -path = "packages/services/mm/ops/player-count-for-namespace" +path = "packages/core/services/mm/ops/player-count-for-namespace" [workspace.dependencies.mm-player-get] -path = "packages/services/mm/ops/player-get" +path = "packages/core/services/mm/ops/player-get" [workspace.dependencies.mm-gc] -path = "packages/services/mm/standalone/gc" +path = "packages/core/services/mm/standalone/gc" [workspace.dependencies.rivet-util-mm] -path = "packages/services/mm/util" +path = "packages/core/services/mm/util" [workspace.dependencies.util-mm] package = "rivet-util-mm" -path = "packages/services/mm/util" +path = "packages/core/services/mm/util" [workspace.dependencies.mm-worker] -path = "packages/services/mm/worker" +path = "packages/core/services/mm/worker" [workspace.dependencies.monolith-worker] -path = "packages/services/monolith/standalone/worker" +path = "packages/core/services/monolith/standalone/worker" [workspace.dependencies.monolith-workflow-worker] -path = "packages/services/monolith/standalone/workflow-worker" +path = "packages/core/services/monolith/standalone/workflow-worker" [workspace.dependencies.nomad-monitor] -path = "packages/services/nomad/standalone/monitor" +path = "packages/core/services/nomad/standalone/monitor" [workspace.dependencies.pegboard] -path = "packages/services/pegboard" +path = "packages/core/services/pegboard" [workspace.dependencies.pegboard-dc-init] -path = "packages/services/pegboard/standalone/dc-init" +path = "packages/core/services/pegboard/standalone/dc-init" [workspace.dependencies.pegboard-gc] -path = "packages/services/pegboard/standalone/gc" +path = "packages/core/services/pegboard/standalone/gc" [workspace.dependencies.pegboard-metrics-publish] -path = "packages/services/pegboard/standalone/metrics-publish" +path = "packages/core/services/pegboard/standalone/metrics-publish" [workspace.dependencies.pegboard-ws] -path = "packages/services/pegboard/standalone/ws" +path = "packages/core/services/pegboard/standalone/ws" [workspace.dependencies.region-get] -path = "packages/services/region/ops/get" +path = "packages/core/services/region/ops/get" [workspace.dependencies.region-list] -path = "packages/services/region/ops/list" +path = "packages/core/services/region/ops/list" [workspace.dependencies.region-list-for-game] -path = "packages/services/region/ops/list-for-game" +path = "packages/core/services/region/ops/list-for-game" [workspace.dependencies.region-recommend] -path = "packages/services/region/ops/recommend" +path = "packages/core/services/region/ops/recommend" [workspace.dependencies.region-resolve] -path = "packages/services/region/ops/resolve" +path = "packages/core/services/region/ops/resolve" [workspace.dependencies.region-resolve-for-game] -path = "packages/services/region/ops/resolve-for-game" +path = "packages/core/services/region/ops/resolve-for-game" [workspace.dependencies.server-spec] -path = "packages/services/server-spec" +path = "packages/core/services/server-spec" [workspace.dependencies.team-invite-get] -path = "packages/services/team-invite/ops/get" +path = "packages/core/services/team-invite/ops/get" [workspace.dependencies.team-invite-worker] -path = "packages/services/team-invite/worker" +path = "packages/core/services/team-invite/worker" [workspace.dependencies.team-avatar-upload-complete] -path = "packages/services/team/ops/avatar-upload-complete" +path = "packages/core/services/team/ops/avatar-upload-complete" [workspace.dependencies.team-get] -path = "packages/services/team/ops/get" +path = "packages/core/services/team/ops/get" [workspace.dependencies.team-join-request-list] -path = "packages/services/team/ops/join-request-list" +path = "packages/core/services/team/ops/join-request-list" [workspace.dependencies.team-member-count] -path = "packages/services/team/ops/member-count" +path = "packages/core/services/team/ops/member-count" [workspace.dependencies.team-member-get] -path = "packages/services/team/ops/member-get" +path = "packages/core/services/team/ops/member-get" [workspace.dependencies.team-member-list] -path = "packages/services/team/ops/member-list" +path = "packages/core/services/team/ops/member-list" [workspace.dependencies.team-member-relationship-get] -path = "packages/services/team/ops/member-relationship-get" +path = "packages/core/services/team/ops/member-relationship-get" [workspace.dependencies.team-profile-validate] -path = "packages/services/team/ops/profile-validate" +path = "packages/core/services/team/ops/profile-validate" [workspace.dependencies.team-recommend] -path = "packages/services/team/ops/recommend" +path = "packages/core/services/team/ops/recommend" [workspace.dependencies.team-resolve-display-name] -path = "packages/services/team/ops/resolve-display-name" +path = "packages/core/services/team/ops/resolve-display-name" [workspace.dependencies.team-user-ban-get] -path = "packages/services/team/ops/user-ban-get" +path = "packages/core/services/team/ops/user-ban-get" [workspace.dependencies.team-user-ban-list] -path = "packages/services/team/ops/user-ban-list" +path = "packages/core/services/team/ops/user-ban-list" [workspace.dependencies.team-validate] -path = "packages/services/team/ops/validate" +path = "packages/core/services/team/ops/validate" [workspace.dependencies.rivet-util-team] -path = "packages/services/team/util" +path = "packages/core/services/team/util" [workspace.dependencies.util-team] package = "rivet-util-team" -path = "packages/services/team/util" +path = "packages/core/services/team/util" [workspace.dependencies.team-worker] -path = "packages/services/team/worker" +path = "packages/core/services/team/worker" [workspace.dependencies.telemetry-beacon] -path = "packages/services/telemetry/standalone/beacon" +path = "packages/core/services/telemetry/standalone/beacon" [workspace.dependencies.tier] -path = "packages/services/tier" +path = "packages/core/services/tier" [workspace.dependencies.token-create] -path = "packages/services/token/ops/create" +path = "packages/core/services/token/ops/create" [workspace.dependencies.token-exchange] -path = "packages/services/token/ops/exchange" +path = "packages/core/services/token/ops/exchange" [workspace.dependencies.token-get] -path = "packages/services/token/ops/get" +path = "packages/core/services/token/ops/get" [workspace.dependencies.token-revoke] -path = "packages/services/token/ops/revoke" +path = "packages/core/services/token/ops/revoke" [workspace.dependencies.upload-complete] -path = "packages/services/upload/ops/complete" +path = "packages/core/services/upload/ops/complete" [workspace.dependencies.upload-file-list] -path = "packages/services/upload/ops/file-list" +path = "packages/core/services/upload/ops/file-list" [workspace.dependencies.upload-get] -path = "packages/services/upload/ops/get" +path = "packages/core/services/upload/ops/get" [workspace.dependencies.upload-list-for-user] -path = "packages/services/upload/ops/list-for-user" +path = "packages/core/services/upload/ops/list-for-user" [workspace.dependencies.upload-prepare] -path = "packages/services/upload/ops/prepare" +path = "packages/core/services/upload/ops/prepare" [workspace.dependencies.upload-worker] -path = "packages/services/upload/worker" +path = "packages/core/services/upload/worker" [workspace.dependencies.user] -path = "packages/services/user" +path = "packages/core/services/user" [workspace.dependencies.user-identity-create] -path = "packages/services/user-identity/ops/create" +path = "packages/core/services/user-identity/ops/create" [workspace.dependencies.user-identity-delete] -path = "packages/services/user-identity/ops/delete" +path = "packages/core/services/user-identity/ops/delete" [workspace.dependencies.user-identity-get] -path = "packages/services/user-identity/ops/get" +path = "packages/core/services/user-identity/ops/get" [workspace.dependencies.user-avatar-upload-complete] -path = "packages/services/user/ops/avatar-upload-complete" +path = "packages/core/services/user/ops/avatar-upload-complete" [workspace.dependencies.user-get] -path = "packages/services/user/ops/get" +path = "packages/core/services/user/ops/get" [workspace.dependencies.user-pending-delete-toggle] -path = "packages/services/user/ops/pending-delete-toggle" +path = "packages/core/services/user/ops/pending-delete-toggle" [workspace.dependencies.user-profile-validate] -path = "packages/services/user/ops/profile-validate" +path = "packages/core/services/user/ops/profile-validate" [workspace.dependencies.user-resolve-email] -path = "packages/services/user/ops/resolve-email" +path = "packages/core/services/user/ops/resolve-email" [workspace.dependencies.user-team-list] -path = "packages/services/user/ops/team-list" +path = "packages/core/services/user/ops/team-list" [workspace.dependencies.user-token-create] -path = "packages/services/user/ops/token-create" +path = "packages/core/services/user/ops/token-create" [workspace.dependencies.user-delete-pending] -path = "packages/services/user/standalone/delete-pending" +path = "packages/core/services/user/standalone/delete-pending" [workspace.dependencies.user-worker] -path = "packages/services/user/worker" +path = "packages/core/services/user/worker" + +[workspace.dependencies.api-edge-actor] +path = "packages/edge/api/actor" + +[workspace.dependencies.api-edge-intercom] +path = "packages/edge/api/intercom" + +[workspace.dependencies.api-edge-monolith-edge] +path = "packages/edge/api/monolith-edge" + +[workspace.dependencies.api-edge-monolith-public] +path = "packages/edge/api/monolith-public" + +[workspace.dependencies.api-edge-traefik-provider] +path = "packages/edge/api/traefik-provider" + +[workspace.dependencies.rivet-edge-server] +path = "packages/edge/infra/edge-server" + +[workspace.dependencies.edge-ds] +path = "packages/edge/services/ds" + +[workspace.dependencies.edge-monolith-workflow-worker] +path = "packages/edge/services/monolith/standalone/workflow-worker" + +[workspace.dependencies.edge-pegboard] +path = "packages/edge/services/pegboard" + +[workspace.dependencies.edge-pegboard-ws] +path = "packages/edge/services/pegboard/standalone/ws" [workspace.dependencies.rivet-actors-sdk-embed] path = "packages/toolchain/actors-sdk-embed" diff --git a/docker/dev-full/rivet-edge-server/config.yaml b/docker/dev-full/rivet-edge-server/config.yaml new file mode 100644 index 0000000000..0b110e00c4 --- /dev/null +++ b/docker/dev-full/rivet-edge-server/config.yaml @@ -0,0 +1,69 @@ +server: + rivet: + auth: + access_kind: development + + ui: + public_origin_regex: .* + + guard: + # TLS not configured for local development + tls_enabled: false + # Corresponds to the ports configured in the `docker-compose.yml` + http_port: 7080 + https_port: 7443 + min_ingress_port_tcp: 7500 + max_ingress_port_tcp: 7599 + min_ingress_port_udp: 7500 + max_ingress_port_udp: 7599 + + # Enable status checks if testing status check project + status: + token: local + system_test_isolate_project: default + system_test_isolate_environment: default + cockroachdb: + url: postgresql://cockroachdb:26257/defaultdb?sslmode=disable + username: root + redis: + ephemeral: + url: redis://redis:6379 + password: password + persistent: + url: redis://redis:6379 + password: password + clickhouse: + http_url: http://clickhouse:8123 + native_url: clickhouse://clickhouse:9000 + username: default + password: default + provision_users: + vector: + username: vector + password: vector + role: write + s3: + region: us-east-1 + endpoint_internal: http://seaweedfs:9000 + endpoint_edge_internal: http://seaweedfs:9000 + endpoint_external: http://127.0.0.1:9000 + access_key_id: admin + secret_access_key: admin + nats: + urls: + - nats://nats:4222 + + # IMPORTANT: + # - Generate your own JWT tokens before shipping to production as seen in the + # self-hosting documentation. + # - Do not include the private key in this file. Instead, use the env var + # `RIVET__SERVER__JWT__PRIVATE`. + jwt: + public: | + -----BEGIN PUBLIC KEY----- + MCowBQYDK2VwAyEAx7S9ab9ErA50y0tVfFro919+BBxFSuwMKmcJ5QI853Y= + -----END PUBLIC KEY----- + private: | + -----BEGIN PRIVATE KEY----- + MC4CAQAwBQYDK2VwBCIEIDI+WHFytxvdtfGot36NMCI26s2Yp0+E5u9OiPf3NQX3 + -----END PRIVATE KEY----- diff --git a/docker/dev-full/rivet-server/config.yaml b/docker/dev-full/rivet-server/config.yaml index 0b110e00c4..5826b3f891 100644 --- a/docker/dev-full/rivet-server/config.yaml +++ b/docker/dev-full/rivet-server/config.yaml @@ -1,27 +1,10 @@ server: rivet: - auth: - access_kind: development - - ui: - public_origin_regex: .* - - guard: - # TLS not configured for local development - tls_enabled: false - # Corresponds to the ports configured in the `docker-compose.yml` - http_port: 7080 - https_port: 7443 - min_ingress_port_tcp: 7500 - max_ingress_port_tcp: 7599 - min_ingress_port_udp: 7500 - max_ingress_port_udp: 7599 - - # Enable status checks if testing status check project - status: - token: local - system_test_isolate_project: default - system_test_isolate_environment: default + edge: + # TODO: + cluster_id: f288913c-735d-4188-bf9b-2fcf6eac7b9c + datacenter_id: f288913c-735d-4188-bf9b-2fcf6eac7b9c + server_token: foo cockroachdb: url: postgresql://cockroachdb:26257/defaultdb?sslmode=disable username: root diff --git a/docker/test/clickhouse/config.xml b/docker/test/clickhouse/config.xml new file mode 100644 index 0000000000..5d716f5468 --- /dev/null +++ b/docker/test/clickhouse/config.xml @@ -0,0 +1,50 @@ + + + + + + + + + + localhost + 9181 + + + + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 10000 + 30000 + warning + + + + + 1 + localhost + 9234 + + + + + + /clickhouse/tables/{shard}/{database}/{table} + {replica} + + + + cluster1 + replica1 + 01 + + diff --git a/docker/test/clickhouse/users.xml b/docker/test/clickhouse/users.xml new file mode 100644 index 0000000000..5cc16cef4d --- /dev/null +++ b/docker/test/clickhouse/users.xml @@ -0,0 +1,54 @@ + + + + + + 1 + + + default + + + default + + ::/0 + + + + default + + + 1 + 1 + 1 + + + + .* + + + + + + + + 10000000000 + 300 + 1000000000 + + + + + + + + 3600 + 0 + 0 + 0 + 0 + 0 + + + + diff --git a/docker/test/docker-compose.yml b/docker/test/docker-compose.yml new file mode 100644 index 0000000000..5f08b1db5b --- /dev/null +++ b/docker/test/docker-compose.yml @@ -0,0 +1,297 @@ +services: + rivet-server: + build: + context: ../.. + dockerfile: docker/universal/Dockerfile + target: server-full + platform: linux/amd64 + restart: unless-stopped + command: /usr/bin/rivet-server start + environment: + - RUST_BACKTRACE=1 + - RUST_LOG=debug,hyper=info + - RUST_LOG_TARGET=1 + - RUST_LOG_SPAN_PATH=1 + stop_grace_period: 0s + ports: + # API + - "8080:8080" + # API edge + - "8081:8081" + # Pegboard + - "8082:8082" + depends_on: + cockroachdb: + condition: service_healthy + redis: + condition: service_healthy + clickhouse: + condition: service_healthy + nats: + condition: service_healthy + seaweedfs: + condition: service_healthy + vector-server: + condition: service_started + volumes: + - ./rivet-server:/etc/rivet-server:ro + networks: + - rivet-network + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8090/health/liveness"] + interval: 2s + timeout: 10s + retries: 10 + + rivet-edge-server: + build: + context: ../.. + dockerfile: docker/universal/Dockerfile + target: edge-server + platform: linux/amd64 + restart: unless-stopped + command: /usr/bin/rivet-edge-server start + environment: + - RUST_BACKTRACE=1 + - RUST_LOG=debug,hyper=info + - RUST_LOG_TARGET=1 + - RUST_LOG_SPAN_PATH=1 + - RUST_LOG_ANSI_COLOR=1 + stop_grace_period: 0s + ports: + # API + - "8083:8080" + depends_on: + rivet-server: + condition: service_healthy + cockroachdb: + condition: service_healthy + redis: + condition: service_healthy + nats: + condition: service_healthy + seaweedfs: + condition: service_healthy + vector-server: + condition: service_started + volumes: + - ./rivet-edge-server:/etc/rivet-server:ro + - sqlite-data:/var/lib/rivet-sqlite:rw + networks: + - rivet-network + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8090/health/liveness"] + interval: 2s + timeout: 10s + retries: 10 + + rivet-shell: + build: + context: ../.. + dockerfile: docker/universal/Dockerfile + target: server-full + platform: linux/amd64 + restart: unless-stopped + command: sleep infinity + environment: + - RUST_BACKTRACE=1 + stop_grace_period: 0s + volumes: + - ./rivet-server:/etc/rivet-server:ro + networks: + - rivet-network + + # rivet-guard: + # restart: unless-stopped + # image: traefik:v3.2.1 + # command: --configFile=/etc/rivet-guard/traefik.yaml + # volumes: + # - ./rivet-guard:/etc/rivet-guard:ro + # ports: + # # HTTP + # - "7080:7080" + # # HTTPS + # - "7443:7443" + # # Dashboard + # - "9980:9980" + # # Enable TCP & UDP port ranges. + # # + # # Corresponds to `server.rivet.guard.min_ingress_port_tcp` and + # # `actor.network.wan_port_range_max` in `rivet-server/config.yaml`. + # # + # # We only reserve 100 ports instead of the default 22,000 since each + # # individual port converts to an iptable rule when using Docker, which + # # can cause unexpected side effects. This limits the number of actors + # # using host networking to 100. + # - "7500-7599:7500-7599" + # depends_on: + # rivet-server: + # condition: service_healthy + # networks: + # - rivet-network + + cockroachdb: + restart: unless-stopped + image: cockroachdb/cockroach:v24.2.3 + command: start-single-node --insecure + volumes: + - cockroach-data:/cockroach/cockroach-data + networks: + - rivet-network + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8080/health?ready=1"] + interval: 2s + timeout: 10s + retries: 10 + + rivet-client: + build: + context: ../.. + dockerfile: docker/universal/Dockerfile + target: client-full + # TODO(RVT-4168): Compile libfdb from scratch for ARM + platform: linux/amd64 + restart: unless-stopped + command: -c /etc/rivet-client/config.yaml + environment: + - RUST_BACKTRACE=1 + stop_grace_period: 0s + depends_on: + rivet-edge-server: + condition: service_healthy + foundationdb: + condition: service_healthy + volumes: + - ./rivet-client:/etc/rivet-client:ro + - client-data:/var/lib/rivet-client + ports: + # Enable host networking for actors + # + # Corresponds to `actor.network.wan_port_range_min` and + # `actor.network.wan_port_range_max` in `rivet-client/config.yaml`. + # + # We only reserve 100 ports instead of the default 22,000. See + # rivet-guard for explanation. + - "7600-7699:7600-7699" + networks: + - rivet-network + + redis: + restart: unless-stopped + image: bitnami/valkey:8.0.1 + # TODO: Remove root user + user: root + volumes: + - redis-data:/data + command: redis-server --requirepass password --save 60 1 --appendonly yes + networks: + - rivet-network + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 2s + timeout: 10s + retries: 10 + + clickhouse: + restart: unless-stopped + image: clickhouse/clickhouse-server:23.10.1 + volumes: + - clickhouse-data:/var/lib/clickhouse + - ./clickhouse/config.xml:/etc/clickhouse-server/config.d/config.xml + - ./clickhouse/users.xml:/etc/clickhouse-server/users.d/users.xml + networks: + - rivet-network + healthcheck: + test: ["CMD", "clickhouse-client", "--password", "default", "--query", "SELECT 1"] + interval: 2s + timeout: 10s + retries: 10 + + nats: + restart: unless-stopped + image: nats:2.10.22-scratch + networks: + - rivet-network + healthcheck: + test: ["CMD", "nats-server", "--health"] + interval: 2s + timeout: 10s + retries: 10 + + seaweedfs: + restart: unless-stopped + image: chrislusf/seaweedfs:3.79 + # TODO: Remove root user + user: root + # `raftHashicorp` speeds up initial leader election + command: | + server \ + -dir /var/lib/seaweedfs \ + -master.raftBootstrap -master.raftHashicorp \ + -s3 -s3.config /etc/seaweedfs/s3.json -s3.port=9000 -s3.allowEmptyFolder=false -s3.allowDeleteBucketNotEmpty=false + volumes: + - ./seaweedfs:/etc/seaweedfs:ro + - seaweedfs-data:/var/lib/seaweedfs + ports: + # S3 + - "9000:9000" + networks: + - rivet-network + healthcheck: + test: ["CMD", "nc", "-z", "127.0.0.1", "9000"] + interval: 2s + timeout: 10s + + foundationdb: + restart: unless-stopped + # See docs-internal/infrastructure/fdb/AVX.md + image: foundationdb/foundationdb:7.1.60 + platform: linux/amd64 + entrypoint: ["/usr/bin/tini", "-g", "--", "/usr/local/bin/entrypoint.sh"] + volumes: + - ./foundationdb/entrypoint.sh:/usr/local/bin/entrypoint.sh + - foundationdb-data:/var/fdb:rw + - foundationdb-storage-data:/var/fdb/data:rw + healthcheck: + test: ["CMD", "fdbcli", "--exec", "status"] + interval: 2s + timeout: 10s + retries: 10 + networks: + - rivet-network + + vector-client: + restart: unless-stopped + image: timberio/vector:0.42.0-distroless-static + command: -C /etc/vector + volumes: + - ./vector-client:/etc/vector + # Mount client data to read logs + - client-data:/var/lib/rivet-client + networks: + - rivet-network + + vector-server: + restart: unless-stopped + image: timberio/vector:0.42.0-distroless-static + command: -C /etc/vector + volumes: + - vector-server-data:/var/lib/vector + - ./vector-server:/etc/vector + networks: + - rivet-network + +networks: + rivet-network: + driver: bridge + +volumes: + client-data: + cockroach-data: + redis-data: + clickhouse-data: + seaweedfs-data: + vector-server-data: + foundationdb-data: + foundationdb-storage-data: + sqlite-data: diff --git a/docker/test/foundationdb/entrypoint.sh b/docker/test/foundationdb/entrypoint.sh new file mode 100755 index 0000000000..9336a40029 --- /dev/null +++ b/docker/test/foundationdb/entrypoint.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +function configure_database() { + echo "Configuring database..." + until fdbcli --exec 'configure new single ssd' --timeout 10; do + sleep 2 + done + echo "Database configured." +} + +# Background process will wait until FoundationDB is up and configure it. +if [ ! -e /var/fdb/fdb.cluster ]; then + configure_database & +else + echo "Database already configured." +fi + +# This will automatically populate the file contents with `docker:docker@$PUBLIC_IP:$FDB_PORT` +export FDB_NETWORKING_MODE=container +exec /var/fdb/scripts/fdb.bash "$@" diff --git a/docker/test/rivet-client/config.yaml b/docker/test/rivet-client/config.yaml new file mode 100644 index 0000000000..8165fcb6aa --- /dev/null +++ b/docker/test/rivet-client/config.yaml @@ -0,0 +1,36 @@ +client: + runner: + flavor: isolate + # Enables running in non-privileged Docker containers + use_mounts: false + cluster: + # This is safe to hardcode + client_id: fc67e54e-5d6a-4726-ab23-77b0e54f068f + # This is hardcoded to match the value in rivet-edge-server/config.yaml + datacenter_id: f288913c-735d-4188-bf9b-2fcf6eac7b9c + api_endpoint: http://rivet-edge-server:8080 + pegboard_endpoint: ws://rivet-edge-server:8082 + network: + bind_ip: 127.0.0.1 + # Point to DNS name inside Docker container + lan_hostname: rivet-client + # Point to localhost since this is a dev instance + wan_hostname: 127.0.0.1 + # Corresponds to the port range configured in the `docker-compose.yml` + wan_port_range_min: 7600 + wan_port_range_max: 7699 + cni: + network_interface: eth0 + # Don't reserve any resources on dev instances + reserved_resources: + cpu: 0 + memory: 0 + logs: + redirect_logs: true + foundationdb: + cluster_description: docker + cluster_id: docker + addresses: !static + - "foundationdb:4500" + vector: + address: vector-server:6100 diff --git a/docker/test/rivet-edge-server/config.yaml b/docker/test/rivet-edge-server/config.yaml new file mode 100644 index 0000000000..269eebfeb9 --- /dev/null +++ b/docker/test/rivet-edge-server/config.yaml @@ -0,0 +1,74 @@ +server: + rivet: + auth: + access_kind: development + + edge: + # TODO: + cluster_id: f288913c-735d-4188-bf9b-2fcf6eac7b9c + datacenter_id: f288913c-735d-4188-bf9b-2fcf6eac7b9c + intercom_endpoint: http://rivet-server:8081 + + guard: + # TLS not configured for local development + tls_enabled: false + # Corresponds to the ports configured in the `docker-compose.yml` + http_port: 7080 + https_port: 7443 + min_ingress_port_tcp: 7500 + max_ingress_port_tcp: 7599 + min_ingress_port_udp: 7500 + max_ingress_port_udp: 7599 + + # Enable status checks if testing status check project + status: + token: local + system_test_isolate_project: default + system_test_isolate_environment: default + foundationdb: + connection: docker:docker@foundationdb:4500 + cockroachdb: + url: postgresql://cockroachdb:26257/defaultdb?sslmode=disable + username: root + redis: + ephemeral: + url: redis://redis:6379 + password: password + persistent: + url: redis://redis:6379 + password: password + clickhouse: + http_url: http://clickhouse:8123 + native_url: clickhouse://clickhouse:9000 + username: default + password: default + provision_users: + vector: + username: vector + password: vector + role: write + s3: + region: us-east-1 + endpoint_internal: http://seaweedfs:9000 + endpoint_edge_internal: http://seaweedfs:9000 + endpoint_external: http://127.0.0.1:9000 + access_key_id: admin + secret_access_key: admin + nats: + urls: + - nats://nats:4222 + + # IMPORTANT: + # - Generate your own JWT tokens before shipping to production as seen in the + # self-hosting documentation. + # - Do not include the private key in this file. Instead, use the env var + # `RIVET__SERVER__JWT__PRIVATE`. + jwt: + public: | + -----BEGIN PUBLIC KEY----- + MCowBQYDK2VwAyEAx7S9ab9ErA50y0tVfFro919+BBxFSuwMKmcJ5QI853Y= + -----END PUBLIC KEY----- + private: | + -----BEGIN PRIVATE KEY----- + MC4CAQAwBQYDK2VwBCIEIDI+WHFytxvdtfGot36NMCI26s2Yp0+E5u9OiPf3NQX3 + -----END PRIVATE KEY----- \ No newline at end of file diff --git a/docker/test/rivet-guard/traefik.yaml b/docker/test/rivet-guard/traefik.yaml new file mode 100644 index 0000000000..610b9b918e --- /dev/null +++ b/docker/test/rivet-guard/traefik.yaml @@ -0,0 +1,1122 @@ +# DO NOT MODIFY +# +# Generated with scripts/docker/generate_configs.ts + +entryPoints: + traefik: + address: ':9980' + lb-7080: + address: ':7080' + lb-7443: + address: ':7443' + lb-7500-tcp: + address: ':7500/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7500-udp: + address: ':7500/udp' + udp: + timeout: 15s + lb-7501-tcp: + address: ':7501/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7501-udp: + address: ':7501/udp' + udp: + timeout: 15s + lb-7502-tcp: + address: ':7502/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7502-udp: + address: ':7502/udp' + udp: + timeout: 15s + lb-7503-tcp: + address: ':7503/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7503-udp: + address: ':7503/udp' + udp: + timeout: 15s + lb-7504-tcp: + address: ':7504/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7504-udp: + address: ':7504/udp' + udp: + timeout: 15s + lb-7505-tcp: + address: ':7505/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7505-udp: + address: ':7505/udp' + udp: + timeout: 15s + lb-7506-tcp: + address: ':7506/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7506-udp: + address: ':7506/udp' + udp: + timeout: 15s + lb-7507-tcp: + address: ':7507/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7507-udp: + address: ':7507/udp' + udp: + timeout: 15s + lb-7508-tcp: + address: ':7508/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7508-udp: + address: ':7508/udp' + udp: + timeout: 15s + lb-7509-tcp: + address: ':7509/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7509-udp: + address: ':7509/udp' + udp: + timeout: 15s + lb-7510-tcp: + address: ':7510/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7510-udp: + address: ':7510/udp' + udp: + timeout: 15s + lb-7511-tcp: + address: ':7511/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7511-udp: + address: ':7511/udp' + udp: + timeout: 15s + lb-7512-tcp: + address: ':7512/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7512-udp: + address: ':7512/udp' + udp: + timeout: 15s + lb-7513-tcp: + address: ':7513/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7513-udp: + address: ':7513/udp' + udp: + timeout: 15s + lb-7514-tcp: + address: ':7514/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7514-udp: + address: ':7514/udp' + udp: + timeout: 15s + lb-7515-tcp: + address: ':7515/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7515-udp: + address: ':7515/udp' + udp: + timeout: 15s + lb-7516-tcp: + address: ':7516/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7516-udp: + address: ':7516/udp' + udp: + timeout: 15s + lb-7517-tcp: + address: ':7517/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7517-udp: + address: ':7517/udp' + udp: + timeout: 15s + lb-7518-tcp: + address: ':7518/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7518-udp: + address: ':7518/udp' + udp: + timeout: 15s + lb-7519-tcp: + address: ':7519/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7519-udp: + address: ':7519/udp' + udp: + timeout: 15s + lb-7520-tcp: + address: ':7520/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7520-udp: + address: ':7520/udp' + udp: + timeout: 15s + lb-7521-tcp: + address: ':7521/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7521-udp: + address: ':7521/udp' + udp: + timeout: 15s + lb-7522-tcp: + address: ':7522/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7522-udp: + address: ':7522/udp' + udp: + timeout: 15s + lb-7523-tcp: + address: ':7523/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7523-udp: + address: ':7523/udp' + udp: + timeout: 15s + lb-7524-tcp: + address: ':7524/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7524-udp: + address: ':7524/udp' + udp: + timeout: 15s + lb-7525-tcp: + address: ':7525/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7525-udp: + address: ':7525/udp' + udp: + timeout: 15s + lb-7526-tcp: + address: ':7526/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7526-udp: + address: ':7526/udp' + udp: + timeout: 15s + lb-7527-tcp: + address: ':7527/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7527-udp: + address: ':7527/udp' + udp: + timeout: 15s + lb-7528-tcp: + address: ':7528/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7528-udp: + address: ':7528/udp' + udp: + timeout: 15s + lb-7529-tcp: + address: ':7529/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7529-udp: + address: ':7529/udp' + udp: + timeout: 15s + lb-7530-tcp: + address: ':7530/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7530-udp: + address: ':7530/udp' + udp: + timeout: 15s + lb-7531-tcp: + address: ':7531/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7531-udp: + address: ':7531/udp' + udp: + timeout: 15s + lb-7532-tcp: + address: ':7532/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7532-udp: + address: ':7532/udp' + udp: + timeout: 15s + lb-7533-tcp: + address: ':7533/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7533-udp: + address: ':7533/udp' + udp: + timeout: 15s + lb-7534-tcp: + address: ':7534/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7534-udp: + address: ':7534/udp' + udp: + timeout: 15s + lb-7535-tcp: + address: ':7535/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7535-udp: + address: ':7535/udp' + udp: + timeout: 15s + lb-7536-tcp: + address: ':7536/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7536-udp: + address: ':7536/udp' + udp: + timeout: 15s + lb-7537-tcp: + address: ':7537/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7537-udp: + address: ':7537/udp' + udp: + timeout: 15s + lb-7538-tcp: + address: ':7538/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7538-udp: + address: ':7538/udp' + udp: + timeout: 15s + lb-7539-tcp: + address: ':7539/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7539-udp: + address: ':7539/udp' + udp: + timeout: 15s + lb-7540-tcp: + address: ':7540/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7540-udp: + address: ':7540/udp' + udp: + timeout: 15s + lb-7541-tcp: + address: ':7541/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7541-udp: + address: ':7541/udp' + udp: + timeout: 15s + lb-7542-tcp: + address: ':7542/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7542-udp: + address: ':7542/udp' + udp: + timeout: 15s + lb-7543-tcp: + address: ':7543/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7543-udp: + address: ':7543/udp' + udp: + timeout: 15s + lb-7544-tcp: + address: ':7544/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7544-udp: + address: ':7544/udp' + udp: + timeout: 15s + lb-7545-tcp: + address: ':7545/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7545-udp: + address: ':7545/udp' + udp: + timeout: 15s + lb-7546-tcp: + address: ':7546/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7546-udp: + address: ':7546/udp' + udp: + timeout: 15s + lb-7547-tcp: + address: ':7547/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7547-udp: + address: ':7547/udp' + udp: + timeout: 15s + lb-7548-tcp: + address: ':7548/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7548-udp: + address: ':7548/udp' + udp: + timeout: 15s + lb-7549-tcp: + address: ':7549/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7549-udp: + address: ':7549/udp' + udp: + timeout: 15s + lb-7550-tcp: + address: ':7550/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7550-udp: + address: ':7550/udp' + udp: + timeout: 15s + lb-7551-tcp: + address: ':7551/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7551-udp: + address: ':7551/udp' + udp: + timeout: 15s + lb-7552-tcp: + address: ':7552/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7552-udp: + address: ':7552/udp' + udp: + timeout: 15s + lb-7553-tcp: + address: ':7553/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7553-udp: + address: ':7553/udp' + udp: + timeout: 15s + lb-7554-tcp: + address: ':7554/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7554-udp: + address: ':7554/udp' + udp: + timeout: 15s + lb-7555-tcp: + address: ':7555/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7555-udp: + address: ':7555/udp' + udp: + timeout: 15s + lb-7556-tcp: + address: ':7556/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7556-udp: + address: ':7556/udp' + udp: + timeout: 15s + lb-7557-tcp: + address: ':7557/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7557-udp: + address: ':7557/udp' + udp: + timeout: 15s + lb-7558-tcp: + address: ':7558/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7558-udp: + address: ':7558/udp' + udp: + timeout: 15s + lb-7559-tcp: + address: ':7559/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7559-udp: + address: ':7559/udp' + udp: + timeout: 15s + lb-7560-tcp: + address: ':7560/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7560-udp: + address: ':7560/udp' + udp: + timeout: 15s + lb-7561-tcp: + address: ':7561/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7561-udp: + address: ':7561/udp' + udp: + timeout: 15s + lb-7562-tcp: + address: ':7562/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7562-udp: + address: ':7562/udp' + udp: + timeout: 15s + lb-7563-tcp: + address: ':7563/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7563-udp: + address: ':7563/udp' + udp: + timeout: 15s + lb-7564-tcp: + address: ':7564/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7564-udp: + address: ':7564/udp' + udp: + timeout: 15s + lb-7565-tcp: + address: ':7565/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7565-udp: + address: ':7565/udp' + udp: + timeout: 15s + lb-7566-tcp: + address: ':7566/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7566-udp: + address: ':7566/udp' + udp: + timeout: 15s + lb-7567-tcp: + address: ':7567/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7567-udp: + address: ':7567/udp' + udp: + timeout: 15s + lb-7568-tcp: + address: ':7568/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7568-udp: + address: ':7568/udp' + udp: + timeout: 15s + lb-7569-tcp: + address: ':7569/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7569-udp: + address: ':7569/udp' + udp: + timeout: 15s + lb-7570-tcp: + address: ':7570/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7570-udp: + address: ':7570/udp' + udp: + timeout: 15s + lb-7571-tcp: + address: ':7571/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7571-udp: + address: ':7571/udp' + udp: + timeout: 15s + lb-7572-tcp: + address: ':7572/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7572-udp: + address: ':7572/udp' + udp: + timeout: 15s + lb-7573-tcp: + address: ':7573/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7573-udp: + address: ':7573/udp' + udp: + timeout: 15s + lb-7574-tcp: + address: ':7574/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7574-udp: + address: ':7574/udp' + udp: + timeout: 15s + lb-7575-tcp: + address: ':7575/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7575-udp: + address: ':7575/udp' + udp: + timeout: 15s + lb-7576-tcp: + address: ':7576/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7576-udp: + address: ':7576/udp' + udp: + timeout: 15s + lb-7577-tcp: + address: ':7577/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7577-udp: + address: ':7577/udp' + udp: + timeout: 15s + lb-7578-tcp: + address: ':7578/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7578-udp: + address: ':7578/udp' + udp: + timeout: 15s + lb-7579-tcp: + address: ':7579/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7579-udp: + address: ':7579/udp' + udp: + timeout: 15s + lb-7580-tcp: + address: ':7580/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7580-udp: + address: ':7580/udp' + udp: + timeout: 15s + lb-7581-tcp: + address: ':7581/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7581-udp: + address: ':7581/udp' + udp: + timeout: 15s + lb-7582-tcp: + address: ':7582/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7582-udp: + address: ':7582/udp' + udp: + timeout: 15s + lb-7583-tcp: + address: ':7583/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7583-udp: + address: ':7583/udp' + udp: + timeout: 15s + lb-7584-tcp: + address: ':7584/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7584-udp: + address: ':7584/udp' + udp: + timeout: 15s + lb-7585-tcp: + address: ':7585/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7585-udp: + address: ':7585/udp' + udp: + timeout: 15s + lb-7586-tcp: + address: ':7586/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7586-udp: + address: ':7586/udp' + udp: + timeout: 15s + lb-7587-tcp: + address: ':7587/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7587-udp: + address: ':7587/udp' + udp: + timeout: 15s + lb-7588-tcp: + address: ':7588/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7588-udp: + address: ':7588/udp' + udp: + timeout: 15s + lb-7589-tcp: + address: ':7589/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7589-udp: + address: ':7589/udp' + udp: + timeout: 15s + lb-7590-tcp: + address: ':7590/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7590-udp: + address: ':7590/udp' + udp: + timeout: 15s + lb-7591-tcp: + address: ':7591/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7591-udp: + address: ':7591/udp' + udp: + timeout: 15s + lb-7592-tcp: + address: ':7592/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7592-udp: + address: ':7592/udp' + udp: + timeout: 15s + lb-7593-tcp: + address: ':7593/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7593-udp: + address: ':7593/udp' + udp: + timeout: 15s + lb-7594-tcp: + address: ':7594/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7594-udp: + address: ':7594/udp' + udp: + timeout: 15s + lb-7595-tcp: + address: ':7595/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7595-udp: + address: ':7595/udp' + udp: + timeout: 15s + lb-7596-tcp: + address: ':7596/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7596-udp: + address: ':7596/udp' + udp: + timeout: 15s + lb-7597-tcp: + address: ':7597/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7597-udp: + address: ':7597/udp' + udp: + timeout: 15s + lb-7598-tcp: + address: ':7598/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7598-udp: + address: ':7598/udp' + udp: + timeout: 15s + lb-7599-tcp: + address: ':7599/tcp' + transport: + respondingTimeouts: + readTimeout: 12h + writeTimeout: 12h + idleTimeout: 30s + lb-7599-udp: + address: ':7599/udp' + udp: + timeout: 15s +api: + insecure: true +log: + level: INFO +accessLog: {} +providers: + providersThrottleDuration: 0.025s + http: + endpoint: >- + http://rivet-server:8081/traefik-provider/config/game-guard?datacenter=f288913c-735d-4188-bf9b-2fcf6eac7b9c + pollInterval: 0.5s diff --git a/docker/test/rivet-server/config.yaml b/docker/test/rivet-server/config.yaml new file mode 100644 index 0000000000..12a00abb6a --- /dev/null +++ b/docker/test/rivet-server/config.yaml @@ -0,0 +1,71 @@ +server: + rivet: + auth: + access_kind: development + + ui: + public_origin_regex: .* + + guard: + # TLS not configured for local development + tls_enabled: false + # Corresponds to the ports configured in the `docker-compose.yml` + http_port: 7080 + https_port: 7443 + min_ingress_port_tcp: 7500 + max_ingress_port_tcp: 7599 + min_ingress_port_udp: 7500 + max_ingress_port_udp: 7599 + + # Enable status checks if testing status check project + status: + token: local + system_test_isolate_project: default + system_test_isolate_environment: default + foundationdb: + connection: docker:docker@foundationdb:4500 + cockroachdb: + url: postgresql://cockroachdb:26257/defaultdb?sslmode=disable + username: root + redis: + ephemeral: + url: redis://redis:6379 + password: password + persistent: + url: redis://redis:6379 + password: password + clickhouse: + http_url: http://clickhouse:8123 + native_url: clickhouse://clickhouse:9000 + username: default + password: default + provision_users: + vector: + username: vector + password: vector + role: write + s3: + region: us-east-1 + endpoint_internal: http://seaweedfs:9000 + endpoint_edge_internal: http://seaweedfs:9000 + endpoint_external: http://127.0.0.1:9000 + access_key_id: admin + secret_access_key: admin + nats: + urls: + - nats://nats:4222 + + # IMPORTANT: + # - Generate your own JWT tokens before shipping to production as seen in the + # self-hosting documentation. + # - Do not include the private key in this file. Instead, use the env var + # `RIVET__SERVER__JWT__PRIVATE`. + jwt: + public: | + -----BEGIN PUBLIC KEY----- + MCowBQYDK2VwAyEAx7S9ab9ErA50y0tVfFro919+BBxFSuwMKmcJ5QI853Y= + -----END PUBLIC KEY----- + private: | + -----BEGIN PRIVATE KEY----- + MC4CAQAwBQYDK2VwBCIEIDI+WHFytxvdtfGot36NMCI26s2Yp0+E5u9OiPf3NQX3 + -----END PRIVATE KEY----- \ No newline at end of file diff --git a/docker/test/seaweedfs/s3.json b/docker/test/seaweedfs/s3.json new file mode 100644 index 0000000000..9b80248742 --- /dev/null +++ b/docker/test/seaweedfs/s3.json @@ -0,0 +1,22 @@ +{ + "identities": [ + { + "name": "admin", + "credentials": [ + { + "accessKey": "admin", + "secretKey": "admin" + } + ], + "actions": [ + "Admin", + "Read", + "ReadAcp", + "List", + "Tagging", + "Write", + "WriteAcp" + ] + } + ] +} diff --git a/docker/test/vector-client/vector.yaml b/docker/test/vector-client/vector.yaml new file mode 100644 index 0000000000..278ae90592 --- /dev/null +++ b/docker/test/vector-client/vector.yaml @@ -0,0 +1,106 @@ +# See production config at +# ee/packages/services/cluster/src/workflows/server/install/install_scripts/components/vector.rs + +api: + enabled: true + +sources: + prometheus_pegboard: + type: prometheus_scrape + endpoints: + - http://rivet-client:6090 + scrape_interval_secs: 15 + + pegboard_manager: + type: file + include: + - /var/lib/rivet-client/log + + pegboard_v8_isolate_runner: + type: file + include: + - /var/lib/rivet-client/runner/log + + pegboard_container_runners: + type: file + include: + - /var/lib/rivet-client/actors/*/log + +transforms: + filter_metrics: + type: filter + inputs: + - prometheus_pegboard + condition: '!starts_with!(.name, "go_") && !starts_with!(.name, "promhttp_")' + + metrics_add_meta: + type: remap + inputs: + - filter_metrics + source: | + .tags.server_id = "fc67e54e-5d6a-4726-ab23-77b0e54f068f" + .tags.datacenter_id = "f288913c-735d-4188-bf9b-2fcf6eac7b9c" + .tags.cluster_id = "unknown" + .tags.pool_type = "pegboard_isolate" + .tags.public_ip = "127.0.0.1" + + pegboard_manager_add_meta: + type: remap + inputs: + - pegboard_manager + source: | + .source = "pegboard_manager" + + .client_id = "fc67e54e-5d6a-4726-ab23-77b0e54f068f" + .server_id = "fc67e54e-5d6a-4726-ab23-77b0e54f068f" + .datacenter_id = "f288913c-735d-4188-bf9b-2fcf6eac7b9c" + .tags.cluster_id = "unknown" + .pool_type = "pegboard_isolate" + .public_ip = "127.0.0.1" + + pegboard_v8_isolate_runner_add_meta: + type: remap + inputs: + - pegboard_v8_isolate_runner + source: | + .source = "pegboard_v8_isolate_runner" + + .client_id = "fc67e54e-5d6a-4726-ab23-77b0e54f068f" + .server_id = "fc67e54e-5d6a-4726-ab23-77b0e54f068f" + .datacenter_id = "f288913c-735d-4188-bf9b-2fcf6eac7b9c" + .tags.cluster_id = "unknown" + .pool_type = "pegboard_isolate" + .public_ip = "127.0.0.1" + + pegboard_container_runner_add_meta: + type: remap + inputs: + - pegboard_container_runners + source: | + .source = "pegboard_container_runner" + .actor_id = parse_regex!(.file, r'/etc/pegboard/actors/(?P[0-9a-fA-F-]+)/log').actor_id + + .client_id = "fc67e54e-5d6a-4726-ab23-77b0e54f068f" + .server_id = "fc67e54e-5d6a-4726-ab23-77b0e54f068f" + .datacenter_id = "f288913c-735d-4188-bf9b-2fcf6eac7b9c" + .cluster_id = "unknown" + .pool_type = "pegboard_isolate" + .public_ip = "127.0.0.1" + +sinks: + vector_sink: + type: vector + inputs: + - metrics_add_meta + - pegboard_manager_add_meta + - pegboard_v8_isolate_runner_add_meta + - pegboard_container_runner_add_meta + address: vector-server:6000 + healthcheck: + enabled: false + compression: true + buffer: + type: disk + max_size: 268435488 + when_full: block + diff --git a/docker/test/vector-server/vector.yaml b/docker/test/vector-server/vector.yaml new file mode 100644 index 0000000000..bfbf752d8c --- /dev/null +++ b/docker/test/vector-server/vector.yaml @@ -0,0 +1,121 @@ +# See production config at ee/infra/tf/vector/vector.tf + +data_dir: /var/lib/vector + +api: + enabled: true + address: 0.0.0.0:8686 + playground: false + +sources: + vector: + type: vector + address: 0.0.0.0:6000 + + tcp_json: + type: socket + mode: tcp + address: 0.0.0.0:6100 + decoding: + codec: json + + vector_metrics: + type: internal_metrics + + vector_logs: + type: internal_logs + +transforms: + dynamic_servers: + type: filter + inputs: + - vector + - tcp_json + condition: + type: vrl + source: .source == "dynamic_servers" + + job_run: + type: filter + inputs: + - vector + - tcp_json + condition: + type: vrl + source: .source == "job_run" + + pegboard: + type: filter + inputs: + - vector + condition: + type: vrl + source: .source == "pegboard_manager" || .source == "pegboard_v8_isolate_runner" + + pegboard_container_runner: + type: filter + inputs: + - vector + condition: + type: vrl + source: .source == "pegboard_container_runner" + +sinks: + prom_exporter: + type: prometheus_exporter + inputs: + - vector + - vector_metrics + address: 0.0.0.0:9598 + + console: + type: console + inputs: + - vector_logs + encoding: + codec: text + + clickhouse_ds_logs: + type: clickhouse + inputs: + - dynamic_servers + compression: gzip + database: db_ds_log + endpoint: http://clickhouse:8123 + table: server_logs + auth: + strategy: basic + user: vector + password: vector + batch: + timeout_secs: 1.0 + + clickhouse_job_run_logs: + type: clickhouse + inputs: + - job_run + compression: gzip + database: db_job_log + endpoint: http://clickhouse:8123 + table: run_logs + auth: + strategy: basic + user: vector + password: vector + batch: + timeout_secs: 1.0 + + pegboard_logs: + type: "file" + inputs: ["pegboard"] + path: "/var/log/vector/pegboard/%Y-%m-%d.log" + encoding: + codec: "text" + + pegboard_container_runner_logs: + type: "file" + inputs: ["pegboard_container_runner"] + path: "/var/log/vector/pegboard_container_runner/%Y-%m-%d.log" + encoding: + codec: "text" + diff --git a/docker/universal/Dockerfile b/docker/universal/Dockerfile index ce54c4abf6..a0a5f61832 100644 --- a/docker/universal/Dockerfile +++ b/docker/universal/Dockerfile @@ -51,9 +51,9 @@ RUN \ --mount=type=cache,target=/root/.cache,id=universal-user-cache \ --mount=type=cache,target=/root/.npm,id=universal-user-npm \ --mount=type=cache,target=/root/.yarn,id=universal-user-yarn \ - RUSTFLAGS="--cfg tokio_unstable" cargo build --bin rivet-server --bin rivet-client --bin rivet-isolate-v8-runner --bin rivet-container-runner && \ + RUSTFLAGS="--cfg tokio_unstable" cargo build --bin rivet-server --bin rivet-edge-server --bin rivet-client --bin rivet-isolate-v8-runner --bin rivet-container-runner && \ mkdir /app/dist/ && \ - cp target/debug/rivet-server target/debug/rivet-client target/debug/rivet-isolate-v8-runner target/debug/rivet-container-runner /app/dist/ + cp target/debug/rivet-server target/debug/rivet-edge-server target/debug/rivet-client target/debug/rivet-isolate-v8-runner target/debug/rivet-container-runner /app/dist/ # MARK: Server (Full) FROM debian:12.9-slim AS server-full @@ -78,7 +78,8 @@ RUN apt-get update -y && \ (curl -L https://github.com/golang-migrate/migrate/releases/download/v4.18.1/migrate.linux-amd64.tar.gz | tar xvz) && \ mv migrate /usr/local/bin/migrate && \ apt-get clean && \ - rm -rf /var/lib/apt/lists/* + rm -rf /var/lib/apt/lists/* && \ + curl -Lf -o /lib/libfdb_c.so "https://github.com/apple/foundationdb/releases/download/7.1.60/libfdb_c.x86_64.so" COPY --from=builder /app/dist/rivet-server /usr/bin/rivet-server @@ -91,12 +92,43 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update -y && \ apt-get install -y ca-certificates openssl && \ apt-get clean && \ - rm -rf /var/lib/apt/lists/* + rm -rf /var/lib/apt/lists/* && \ + curl -Lf -o /lib/libfdb_c.so "https://github.com/apple/foundationdb/releases/download/7.1.60/libfdb_c.x86_64.so" COPY --from=builder /app/dist/rivet-server /usr/bin/rivet-server CMD ["/usr/bin/rivet-server"] +# MARK: Edge server +FROM debian:12.1-slim AS edge-server + +ENV DEBIAN_FRONTEND=noninteractive +# - Install curl for health checks +# - Install go-migrate for running migrations +# - Install database clients to be able to run `rivet db shell ...` (Redis, Postgres, ClickHouse) +RUN apt-get update -y && \ + apt-get install -y \ + ca-certificates \ + openssl \ + curl \ + redis-tools \ + postgresql-client \ + gpg \ + dirmngr && \ + curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg && \ + echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | tee /etc/apt/sources.list.d/clickhouse.list && \ + apt-get update -y && \ + apt-get install -y clickhouse-client && \ + (curl -L https://github.com/golang-migrate/migrate/releases/download/v4.18.1/migrate.linux-amd64.tar.gz | tar xvz) && \ + mv migrate /usr/local/bin/migrate && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + curl -Lf -o /lib/libfdb_c.so "https://github.com/apple/foundationdb/releases/download/7.1.60/libfdb_c.x86_64.so" + +COPY --from=builder /app/dist/rivet-edge-server /usr/bin/rivet-edge-server + +CMD ["/usr/bin/rivet-edge-server"] + # MARK: Runner base FROM --platform=linux/amd64 debian:12.9-slim AS base-runner ENV DEBIAN_FRONTEND=noninteractive diff --git a/frontend/apps/hub/vite.config.ts.timestamp-1738365317822-49270a449d6b9.mjs b/frontend/apps/hub/vite.config.ts.timestamp-1738365317822-49270a449d6b9.mjs new file mode 100644 index 0000000000..053ff055aa --- /dev/null +++ b/frontend/apps/hub/vite.config.ts.timestamp-1738365317822-49270a449d6b9.mjs @@ -0,0 +1,108 @@ +// vite.config.ts +import * as crypto from "node:crypto"; +import path from "node:path"; +import { sentryVitePlugin } from "file:///home/rivet/rivet-ee/oss/node_modules/@sentry/vite-plugin/dist/esm/index.mjs"; +import { transformerNotationFocus } from "file:///home/rivet/rivet-ee/oss/node_modules/@shikijs/transformers/dist/index.mjs"; +import { TanStackRouterVite } from "file:///home/rivet/rivet-ee/oss/node_modules/@tanstack/router-vite-plugin/dist/esm/index.js"; +import react from "file:///home/rivet/rivet-ee/oss/node_modules/@vitejs/plugin-react/dist/index.mjs"; +import * as shiki from "file:///home/rivet/rivet-ee/oss/node_modules/shiki/dist/index.mjs"; +import { defineConfig } from "file:///home/rivet/rivet-ee/oss/node_modules/vite/dist/node/index.js"; +import vitePluginFaviconsInject from "file:///home/rivet/rivet-ee/oss/node_modules/vite-plugin-favicons-inject/dist/cjs/index.js"; +var __vite_injected_original_dirname = "/home/rivet/rivet-ee/oss/frontend/apps/hub"; +var GIT_BRANCH = process.env.CF_PAGES_BRANCH; +var GIT_SHA = process.env.CF_PAGES_COMMIT_SHA; +var vite_config_default = defineConfig({ + base: "./", + plugins: [ + react(), + TanStackRouterVite(), + vitePluginFaviconsInject( + path.resolve(__vite_injected_original_dirname, "public", "icon-white.svg"), + { + appName: "Rivet Hub", + theme_color: "#ff4f00" + } + ), + shikiTransformer(), + process.env.SENTRY_AUTH_TOKEN ? sentryVitePlugin({ + org: "rivet-gaming", + project: "hub", + authToken: process.env.SENTRY_AUTH_TOKEN, + release: GIT_BRANCH === "main" ? { name: GIT_SHA } : void 0 + }) : null + ], + server: { + port: 5080 + }, + define: { + // Provide a unique build ID for cache busting + __APP_BUILD_ID__: JSON.stringify( + `${(/* @__PURE__ */ new Date()).toISOString()}@${crypto.randomUUID()}` + ) + }, + resolve: { + alias: { + "@": path.resolve(__vite_injected_original_dirname, "./src") + } + }, + build: { + sourcemap: true, + commonjsOptions: { + include: [/@rivet-gg\/components/, /node_modules/] + } + }, + worker: { + format: "es" + } +}); +async function shikiTransformer() { + const cssVariableTheme = shiki.createCssVariablesTheme({ + name: "css-variables", + variablePrefix: "--shiki-", + variableDefaults: {}, + fontStyle: true + }); + let highlighter; + return { + name: "shiki", + async transform(code, id) { + if (id.includes("?shiki")) { + highlighter ??= await shiki.getSingletonHighlighter({ + themes: [cssVariableTheme], + langs: [ + "bash", + "batch", + "cpp", + "csharp", + "docker", + "gdscript", + "html", + "ini", + "js", + "json", + "json", + "powershell", + "ts", + "typescript", + "yaml", + "http", + "prisma" + ] + }); + const params = new URLSearchParams(id.split("?")[1]); + const output = highlighter.codeToHtml(code, { + lang: params.get("lang") ?? "bash", + theme: "css-variables", + transformers: [transformerNotationFocus()] + }); + return `export default ${JSON.stringify( + output + )};export const source = ${JSON.stringify(code)}`; + } + } + }; +} +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9yaXZldC9yaXZldC1lZS9vc3MvZnJvbnRlbmQvYXBwcy9odWJcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9ob21lL3JpdmV0L3JpdmV0LWVlL29zcy9mcm9udGVuZC9hcHBzL2h1Yi92aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vaG9tZS9yaXZldC9yaXZldC1lZS9vc3MvZnJvbnRlbmQvYXBwcy9odWIvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBzZW50cnlWaXRlUGx1Z2luIH0gZnJvbSBcIkBzZW50cnkvdml0ZS1wbHVnaW5cIjtcbmltcG9ydCB7IHRyYW5zZm9ybWVyTm90YXRpb25Gb2N1cyB9IGZyb20gXCJAc2hpa2lqcy90cmFuc2Zvcm1lcnNcIjtcbmltcG9ydCB7IFRhblN0YWNrUm91dGVyVml0ZSB9IGZyb20gXCJAdGFuc3RhY2svcm91dGVyLXZpdGUtcGx1Z2luXCI7XG5pbXBvcnQgcmVhY3QgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXJlYWN0XCI7XG5pbXBvcnQgKiBhcyBzaGlraSBmcm9tIFwic2hpa2lcIjtcbmltcG9ydCB7IHR5cGUgUGx1Z2luLCBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHZpdGVQbHVnaW5GYXZpY29uc0luamVjdCBmcm9tIFwidml0ZS1wbHVnaW4tZmF2aWNvbnMtaW5qZWN0XCI7XG5cbi8vIFRoZXNlIGFyZSBvbmx5IG5lZWRlZCBpbiBDSS4gVGhleSdsbCBiZSB1bmRlZmluZWQgaW4gZGV2LlxuY29uc3QgR0lUX0JSQU5DSCA9IHByb2Nlc3MuZW52LkNGX1BBR0VTX0JSQU5DSDtcbmNvbnN0IEdJVF9TSEEgPSBwcm9jZXNzLmVudi5DRl9QQUdFU19DT01NSVRfU0hBO1xuXG4vLyBodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnL1xuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcblx0YmFzZTogXCIuL1wiLFxuXHRwbHVnaW5zOiBbXG5cdFx0cmVhY3QoKSxcblx0XHRUYW5TdGFja1JvdXRlclZpdGUoKSxcblx0XHR2aXRlUGx1Z2luRmF2aWNvbnNJbmplY3QoXG5cdFx0XHRwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInB1YmxpY1wiLCBcImljb24td2hpdGUuc3ZnXCIpLFxuXHRcdFx0e1xuXHRcdFx0XHRhcHBOYW1lOiBcIlJpdmV0IEh1YlwiLFxuXHRcdFx0XHR0aGVtZV9jb2xvcjogXCIjZmY0ZjAwXCIsXG5cdFx0XHR9LFxuXHRcdCksXG5cdFx0c2hpa2lUcmFuc2Zvcm1lcigpLFxuXHRcdHByb2Nlc3MuZW52LlNFTlRSWV9BVVRIX1RPS0VOXG5cdFx0XHQ/IHNlbnRyeVZpdGVQbHVnaW4oe1xuXHRcdFx0XHRcdG9yZzogXCJyaXZldC1nYW1pbmdcIixcblx0XHRcdFx0XHRwcm9qZWN0OiBcImh1YlwiLFxuXHRcdFx0XHRcdGF1dGhUb2tlbjogcHJvY2Vzcy5lbnYuU0VOVFJZX0FVVEhfVE9LRU4sXG5cdFx0XHRcdFx0cmVsZWFzZTpcblx0XHRcdFx0XHRcdEdJVF9CUkFOQ0ggPT09IFwibWFpblwiID8geyBuYW1lOiBHSVRfU0hBIH0gOiB1bmRlZmluZWQsXG5cdFx0XHRcdH0pXG5cdFx0XHQ6IG51bGwsXG5cdF0sXG5cdHNlcnZlcjoge1xuXHRcdHBvcnQ6IDUwODAsXG5cdH0sXG5cdGRlZmluZToge1xuXHRcdC8vIFByb3ZpZGUgYSB1bmlxdWUgYnVpbGQgSUQgZm9yIGNhY2hlIGJ1c3Rpbmdcblx0XHRfX0FQUF9CVUlMRF9JRF9fOiBKU09OLnN0cmluZ2lmeShcblx0XHRcdGAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1AJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWAsXG5cdFx0KSxcblx0fSxcblx0cmVzb2x2ZToge1xuXHRcdGFsaWFzOiB7XG5cdFx0XHRcIkBcIjogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyY1wiKSxcblx0XHR9LFxuXHR9LFxuXHRidWlsZDoge1xuXHRcdHNvdXJjZW1hcDogdHJ1ZSxcblx0XHRjb21tb25qc09wdGlvbnM6IHtcblx0XHRcdGluY2x1ZGU6IFsvQHJpdmV0LWdnXFwvY29tcG9uZW50cy8sIC9ub2RlX21vZHVsZXMvXSxcblx0XHR9LFxuXHR9LFxuXHR3b3JrZXI6IHtcblx0XHRmb3JtYXQ6IFwiZXNcIixcblx0fSxcbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBzaGlraVRyYW5zZm9ybWVyKCk6IFByb21pc2U8UGx1Z2luPiB7XG5cdGNvbnN0IGNzc1ZhcmlhYmxlVGhlbWUgPSBzaGlraS5jcmVhdGVDc3NWYXJpYWJsZXNUaGVtZSh7XG5cdFx0bmFtZTogXCJjc3MtdmFyaWFibGVzXCIsXG5cdFx0dmFyaWFibGVQcmVmaXg6IFwiLS1zaGlraS1cIixcblx0XHR2YXJpYWJsZURlZmF1bHRzOiB7fSxcblx0XHRmb250U3R5bGU6IHRydWUsXG5cdH0pO1xuXG5cdGxldCBoaWdobGlnaHRlcjogc2hpa2kuSGlnaGxpZ2h0ZXIgfCB1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcInNoaWtpXCIsXG5cdFx0YXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG5cdFx0XHRpZiAoaWQuaW5jbHVkZXMoXCI/c2hpa2lcIikpIHtcblx0XHRcdFx0aGlnaGxpZ2h0ZXIgPz89IGF3YWl0IHNoaWtpLmdldFNpbmdsZXRvbkhpZ2hsaWdodGVyKHtcblx0XHRcdFx0XHR0aGVtZXM6IFtjc3NWYXJpYWJsZVRoZW1lXSxcblx0XHRcdFx0XHRsYW5nczogW1xuXHRcdFx0XHRcdFx0XCJiYXNoXCIsXG5cdFx0XHRcdFx0XHRcImJhdGNoXCIsXG5cdFx0XHRcdFx0XHRcImNwcFwiLFxuXHRcdFx0XHRcdFx0XCJjc2hhcnBcIixcblx0XHRcdFx0XHRcdFwiZG9ja2VyXCIsXG5cdFx0XHRcdFx0XHRcImdkc2NyaXB0XCIsXG5cdFx0XHRcdFx0XHRcImh0bWxcIixcblx0XHRcdFx0XHRcdFwiaW5pXCIsXG5cdFx0XHRcdFx0XHRcImpzXCIsXG5cdFx0XHRcdFx0XHRcImpzb25cIixcblx0XHRcdFx0XHRcdFwianNvblwiLFxuXHRcdFx0XHRcdFx0XCJwb3dlcnNoZWxsXCIsXG5cdFx0XHRcdFx0XHRcInRzXCIsXG5cdFx0XHRcdFx0XHRcInR5cGVzY3JpcHRcIixcblx0XHRcdFx0XHRcdFwieWFtbFwiLFxuXHRcdFx0XHRcdFx0XCJodHRwXCIsXG5cdFx0XHRcdFx0XHRcInByaXNtYVwiLFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoaWQuc3BsaXQoXCI/XCIpWzFdKTtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0ID0gaGlnaGxpZ2h0ZXIuY29kZVRvSHRtbChjb2RlLCB7XG5cdFx0XHRcdFx0bGFuZzogcGFyYW1zLmdldChcImxhbmdcIikgPz8gXCJiYXNoXCIsXG5cdFx0XHRcdFx0dGhlbWU6IFwiY3NzLXZhcmlhYmxlc1wiLFxuXHRcdFx0XHRcdHRyYW5zZm9ybWVyczogW3RyYW5zZm9ybWVyTm90YXRpb25Gb2N1cygpXSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBgZXhwb3J0IGRlZmF1bHQgJHtKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHRvdXRwdXQsXG5cdFx0XHRcdCl9O2V4cG9ydCBjb25zdCBzb3VyY2UgPSAke0pTT04uc3RyaW5naWZ5KGNvZGUpfWA7XG5cdFx0XHR9XG5cdFx0fSxcblx0fTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBZ1QsWUFBWSxZQUFZO0FBQ3hVLE9BQU8sVUFBVTtBQUNqQixTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGdDQUFnQztBQUN6QyxTQUFTLDBCQUEwQjtBQUNuQyxPQUFPLFdBQVc7QUFDbEIsWUFBWSxXQUFXO0FBQ3ZCLFNBQXNCLG9CQUFvQjtBQUMxQyxPQUFPLDhCQUE4QjtBQVJyQyxJQUFNLG1DQUFtQztBQVd6QyxJQUFNLGFBQWEsUUFBUSxJQUFJO0FBQy9CLElBQU0sVUFBVSxRQUFRLElBQUk7QUFHNUIsSUFBTyxzQkFBUSxhQUFhO0FBQUEsRUFDM0IsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sbUJBQW1CO0FBQUEsSUFDbkI7QUFBQSxNQUNDLEtBQUssUUFBUSxrQ0FBVyxVQUFVLGdCQUFnQjtBQUFBLE1BQ2xEO0FBQUEsUUFDQyxTQUFTO0FBQUEsUUFDVCxhQUFhO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLElBQ2pCLFFBQVEsSUFBSSxvQkFDVCxpQkFBaUI7QUFBQSxNQUNqQixLQUFLO0FBQUEsTUFDTCxTQUFTO0FBQUEsTUFDVCxXQUFXLFFBQVEsSUFBSTtBQUFBLE1BQ3ZCLFNBQ0MsZUFBZSxTQUFTLEVBQUUsTUFBTSxRQUFRLElBQUk7QUFBQSxJQUM5QyxDQUFDLElBQ0E7QUFBQSxFQUNKO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsUUFBUTtBQUFBO0FBQUEsSUFFUCxrQkFBa0IsS0FBSztBQUFBLE1BQ3RCLElBQUcsb0JBQUksS0FBSyxHQUFFLFlBQVksQ0FBQyxJQUFXLGtCQUFXLENBQUM7QUFBQSxJQUNuRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLE9BQU87QUFBQSxNQUNOLEtBQUssS0FBSyxRQUFRLGtDQUFXLE9BQU87QUFBQSxJQUNyQztBQUFBLEVBQ0Q7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLGlCQUFpQjtBQUFBLE1BQ2hCLFNBQVMsQ0FBQyx5QkFBeUIsY0FBYztBQUFBLElBQ2xEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLEVBQ1Q7QUFDRCxDQUFDO0FBRUQsZUFBZSxtQkFBb0M7QUFDbEQsUUFBTSxtQkFBeUIsOEJBQXdCO0FBQUEsSUFDdEQsTUFBTTtBQUFBLElBQ04sZ0JBQWdCO0FBQUEsSUFDaEIsa0JBQWtCLENBQUM7QUFBQSxJQUNuQixXQUFXO0FBQUEsRUFDWixDQUFDO0FBRUQsTUFBSTtBQUVKLFNBQU87QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE1BQU0sVUFBVSxNQUFNLElBQUk7QUFDekIsVUFBSSxHQUFHLFNBQVMsUUFBUSxHQUFHO0FBQzFCLHdCQUFnQixNQUFZLDhCQUF3QjtBQUFBLFVBQ25ELFFBQVEsQ0FBQyxnQkFBZ0I7QUFBQSxVQUN6QixPQUFPO0FBQUEsWUFDTjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQUEsUUFDRCxDQUFDO0FBRUQsY0FBTSxTQUFTLElBQUksZ0JBQWdCLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELGNBQU0sU0FBUyxZQUFZLFdBQVcsTUFBTTtBQUFBLFVBQzNDLE1BQU0sT0FBTyxJQUFJLE1BQU0sS0FBSztBQUFBLFVBQzVCLE9BQU87QUFBQSxVQUNQLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQztBQUFBLFFBQzFDLENBQUM7QUFDRCxlQUFPLGtCQUFrQixLQUFLO0FBQUEsVUFDN0I7QUFBQSxRQUNELENBQUMsMEJBQTBCLEtBQUssVUFBVSxJQUFJLENBQUM7QUFBQSxNQUNoRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQ0Q7IiwKICAibmFtZXMiOiBbXQp9Cg== diff --git a/frontend/packages/components/package.json b/frontend/packages/components/package.json index aa1dbc6eb2..19d0730947 100644 --- a/frontend/packages/components/package.json +++ b/frontend/packages/components/package.json @@ -3,7 +3,11 @@ "private": true, "version": "1.0.0", "type": "module", - "files": ["dist", "src", "public"], + "files": [ + "dist", + "src", + "public" + ], "main": "./dist/index.cjs", "module": "./dist/index.js", "sideEffects": false, diff --git a/frontend/packages/icons/package.json b/frontend/packages/icons/package.json index f5f2f849a7..a38c7a569f 100644 --- a/frontend/packages/icons/package.json +++ b/frontend/packages/icons/package.json @@ -2,7 +2,12 @@ "name": "@rivet-gg/icons", "version": "1.0.0", "sideEffects": false, - "files": ["scripts", "manifest.json", "src", "dist"], + "files": [ + "scripts", + "manifest.json", + "src", + "dist" + ], "scripts": { "postinstall": "node scripts/postinstall.js" }, diff --git a/packages/api/actor/Cargo.toml b/packages/api/actor/Cargo.toml deleted file mode 100644 index 3a18e44134..0000000000 --- a/packages/api/actor/Cargo.toml +++ /dev/null @@ -1,73 +0,0 @@ -[package] -name = "api-actor" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -api-helper.workspace = true -chirp-client.workspace = true -rivet-operation.workspace = true -chrono = "0.4" -http = "0.2" -hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } -lazy_static = "1.4" -rivet-api.workspace = true -rivet-cache.workspace = true -rivet-claims.workspace = true -rivet-health-checks.workspace = true -rivet-convert.workspace = true -rivet-pools.workspace = true -s3-util.workspace = true -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -base64 = "0.13" -tokio = { version = "1.40" } -tracing = "0.1" -tracing-futures = "0.2" -tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt", "json", "ansi"] } -url = "2.2.2" -util-team.workspace = true -uuid = { version = "1", features = ["v4"] } - -build-create.workspace = true -build-get.workspace = true -build-list-for-env.workspace = true -build.workspace = true -cluster.workspace = true -ds-log-export.workspace = true -ds-log-read.workspace = true -ds.workspace = true -game-get.workspace = true -game-namespace-get.workspace = true -game-namespace-resolve-name-id.workspace = true -game-resolve-name-id.workspace = true -game-version-get.workspace = true -pegboard.workspace = true -region-recommend.workspace = true -rivet-config.workspace = true -rivet-env.workspace = true -team-get.workspace = true -token-create.workspace = true -token-revoke.workspace = true -upload-complete.workspace = true -upload-get.workspace = true -user-get.workspace = true -user-identity-get.workspace = true -user-team-list.workspace = true - -[dev-dependencies] -rivet-connection.workspace = true -reqwest = "0.11" - -cdn-namespace-domain-create.workspace = true -cloud-namespace-token-development-create.workspace = true -cloud-namespace-token-public-create.workspace = true -faker-build.workspace = true -faker-game-namespace.workspace = true -faker-game-version.workspace = true -faker-game.workspace = true -faker-region.workspace = true -game-get.workspace = true -region-get.workspace = true diff --git a/packages/api/actor/src/route/actors.rs b/packages/api/actor/src/route/actors.rs deleted file mode 100644 index e3462230b9..0000000000 --- a/packages/api/actor/src/route/actors.rs +++ /dev/null @@ -1,1054 +0,0 @@ -use std::collections::{HashMap, HashSet}; - -use api_helper::{anchor::WatchIndexQuery, ctx::Ctx}; -use futures_util::{StreamExt, TryStreamExt}; -use proto::backend; -use rivet_api::models; -use rivet_convert::{ApiInto, ApiTryInto}; -use rivet_operation::prelude::*; -use serde::Deserialize; -use serde_json::json; - -use crate::{ - assert, - auth::{Auth, CheckOpts, CheckOutput}, - utils::build_global_query_compat, -}; - -use super::GlobalQuery; - -#[derive(Debug, Clone, Deserialize)] -pub struct GlobalEndpointTypeQuery { - #[serde(flatten)] - global: GlobalQuery, - endpoint_type: Option, -} - -// MARK: GET /actors/{} -pub async fn get( - ctx: Ctx, - actor_id: Uuid, - watch_index: WatchIndexQuery, - query: GlobalEndpointTypeQuery, -) -> GlobalResult { - get_inner(&ctx, actor_id, watch_index, query).await -} - -async fn get_inner( - ctx: &Ctx, - actor_id: Uuid, - _watch_index: WatchIndexQuery, - query: GlobalEndpointTypeQuery, -) -> GlobalResult { - let CheckOutput { env_id, .. } = ctx - .auth() - .check( - ctx.op_ctx(), - CheckOpts { - query: &query.global, - allow_service_token: true, - opt_auth: false, - }, - ) - .await?; - - // Get the server - let servers_res = ctx - .op(ds::ops::server::get::Input { - server_ids: vec![actor_id], - endpoint_type: query.endpoint_type.map(ApiInto::api_into), - }) - .await?; - let server = unwrap_with!(servers_res.servers.first(), ACTOR_NOT_FOUND); - - // Get the datacenter - let dc_res = ctx - .op(cluster::ops::datacenter::get::Input { - datacenter_ids: vec![server.datacenter_id], - }) - .await?; - let dc = unwrap!(dc_res.datacenters.first()); - - // Validate token can access server - ensure_with!(server.env_id == env_id, ACTOR_NOT_FOUND); - - Ok(models::ActorGetActorResponse { - actor: Box::new(ds::types::convert_actor_to_api(server.clone(), dc)?), - }) -} - -pub async fn get_deprecated( - ctx: Ctx, - game_id: Uuid, - env_id: Uuid, - actor_id: Uuid, - watch_index: WatchIndexQuery, -) -> GlobalResult { - let global = build_global_query_compat(&ctx, game_id, env_id).await?; - let get_res = get_inner( - &ctx, - actor_id, - watch_index, - GlobalEndpointTypeQuery { - global, - endpoint_type: None, - }, - ) - .await?; - - let game_res = ctx - .op(cluster::ops::get_for_game::Input { - game_ids: vec![game_id], - }) - .await?; - let game = unwrap!(game_res.games.first()); - - let dc_resolve_res = ctx - .op(cluster::ops::datacenter::resolve_for_name_id::Input { - cluster_id: game.cluster_id, - name_ids: vec![get_res.actor.region.clone()], - }) - .await?; - let dc_id = unwrap!(dc_resolve_res.datacenters.first()).datacenter_id; - - let dc_res = ctx - .op(cluster::ops::datacenter::get::Input { - datacenter_ids: vec![dc_id], - }) - .await?; - let dc = unwrap!(dc_res.datacenters.first()); - - Ok(models::ServersGetServerResponse { - server: Box::new(legacy_convert_actor_to_server(*get_res.actor, dc)?), - }) -} - -// MARK: POST /actors -pub async fn create( - ctx: Ctx, - body: models::ActorCreateActorRequest, - query: GlobalEndpointTypeQuery, -) -> GlobalResult { - let CheckOutput { game_id, env_id } = ctx - .auth() - .check( - ctx.op_ctx(), - CheckOpts { - query: &query.global, - allow_service_token: true, - opt_auth: false, - }, - ) - .await?; - - let (clusters_res, game_configs_res, build) = tokio::try_join!( - ctx.op(cluster::ops::get_for_game::Input { - game_ids: vec![game_id], - }), - ctx.op(ds::ops::game_config::get::Input { - game_ids: vec![game_id], - }), - resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()), - )?; - let cluster_id = unwrap!(clusters_res.games.first()).cluster_id; - let game_config = unwrap!(game_configs_res.game_configs.first()); - - let datacenter_id = resolve_dc_id(&ctx, cluster_id, body.region.clone()).await?; - - let tags = unwrap_with!( - serde_json::from_value(body.tags.unwrap_or_default()).ok(), - API_BAD_BODY, - error = "`tags` must be `Map`" - ); - - let resources = match build.kind { - build::types::BuildKind::DockerImage | build::types::BuildKind::OciBundle => { - let resources = unwrap_with!( - body.resources, - API_BAD_BODY, - error = "`resources` must be set for actors using Docker builds" - ); - - (*resources).api_into() - } - build::types::BuildKind::JavaScript => { - ensure_with!( - body.resources.is_none(), - API_BAD_BODY, - error = "actors using JavaScript builds cannot set `resources`" - ); - - ds::types::ServerResources::default_isolate() - } - }; - - tracing::info!(?tags, "creating server with tags"); - - let server_id = Uuid::new_v4(); - - let mut ready_sub = ctx - .subscribe::(("server_id", server_id)) - .await?; - let mut fail_sub = ctx - .subscribe::(("server_id", server_id)) - .await?; - let mut destroy_sub = ctx - .subscribe::(("server_id", server_id)) - .await?; - - let network = body.network.unwrap_or_default(); - - ctx.workflow(ds::workflows::server::Input { - server_id, - env_id, - datacenter_id, - cluster_id, - runtime: game_config.runtime, - tags, - resources, - lifecycle: body.lifecycle.map(|x| (*x).api_into()).unwrap_or_else(|| { - ds::types::ServerLifecycle { - kill_timeout_ms: 0, - durable: false, - } - }), - image_id: build.build_id, - root_user_enabled: game_config.root_user_enabled, - // args: body.runtime.arguments.unwrap_or_default(), - args: Vec::new(), - network_mode: network.mode.unwrap_or_default().api_into(), - environment: body.runtime.and_then(|r| r.environment).unwrap_or_default(), - network_ports: unwrap!(network - .ports - .unwrap_or_default() - .into_iter() - .map(|(s, p)| GlobalResult::Ok(( - s.clone(), - ds::workflows::server::Port { - internal_port: p.internal_port.map(TryInto::try_into).transpose()?, - routing: if let Some(routing) = p.routing { - match *routing { - models::ActorPortRouting { - guard: Some(_gg), - host: None, - } => ds::types::Routing::GameGuard { - protocol: p.protocol.api_into(), - // Temporarily disabled - // authorization: match gg.authorization.as_deref() { - // Some(models::ActorPortAuthorization { - // bearer: Some(token), - // .. - // }) => ds::types::PortAuthorization::Bearer(token.clone()), - // Some(models::ActorPortAuthorization { - // query: Some(query), - // .. - // }) => ds::types::PortAuthorization::Query( - // query.key.clone(), - // query.value.clone(), - // ), - // _ => ds::types::PortAuthorization::None, - // }, - authorization: ds::types::PortAuthorization::None, - }, - models::ActorPortRouting { - guard: None, - host: Some(_), - } => ds::types::Routing::Host { - protocol: match p.protocol.api_try_into() { - Err(err) if GlobalError::is(&err, formatted_error::code::ACTOR_FAILED_TO_CREATE) => { - // Add location - bail_with!( - ACTOR_FAILED_TO_CREATE, - error = format!("network.ports[{s:?}].protocol: Host port protocol must be either TCP or UDP.") - ); - } - x => x?, - }, - }, - models::ActorPortRouting { .. } => { - bail_with!( - ACTOR_FAILED_TO_CREATE, - error = format!("network.ports[{s:?}].routing: Must specify either `guard` or `host` routing type.") - ); - } - } - } else { - ds::types::Routing::GameGuard { - protocol: p.protocol.api_into(), - authorization: ds::types::PortAuthorization::None, - } - } - } - ))) - .collect::>>()), - }) - .tag("server_id", server_id) - .dispatch() - .await?; - - // Wait for ready, fail, or destroy - tokio::select! { - res = ready_sub.next() => { res?; }, - res = fail_sub.next() => { - let msg = res?; - bail_with!(ACTOR_FAILED_TO_CREATE, error = msg.message); - } - res = destroy_sub.next() => { - res?; - bail_with!(ACTOR_FAILED_TO_CREATE, error = "Actor failed before reaching a ready state."); - } - } - - let servers_res = ctx - .op(ds::ops::server::get::Input { - server_ids: vec![server_id], - endpoint_type: query.endpoint_type.map(ApiInto::api_into), - }) - .await?; - let server = unwrap_with!(servers_res.servers.first(), ACTOR_NOT_FOUND); - - let dc_res = ctx - .op(cluster::ops::datacenter::get::Input { - datacenter_ids: vec![server.datacenter_id], - }) - .await?; - let dc = unwrap!(dc_res.datacenters.first()); - - Ok(models::ActorCreateActorResponse { - actor: Box::new(ds::types::convert_actor_to_api(server.clone(), dc)?), - }) -} - -pub async fn create_deprecated( - ctx: Ctx, - game_id: Uuid, - env_id: Uuid, - body: models::ServersCreateServerRequest, -) -> GlobalResult { - // Resolve region slug - let dc_res = ctx - .op(cluster::ops::datacenter::get::Input { - datacenter_ids: vec![body.datacenter], - }) - .await?; - let dc = unwrap!(dc_res.datacenters.first()); - - let global = build_global_query_compat(&ctx, game_id, env_id).await?; - let create_res = create( - ctx, - models::ActorCreateActorRequest { - region: Some(dc.name_id.clone()), - lifecycle: body.lifecycle.map(|l| { - Box::new(models::ActorLifecycle { - kill_timeout: l.kill_timeout, - durable: Some(false), - }) - }), - network: Some(Box::new(models::ActorCreateActorNetworkRequest { - mode: body.network.mode.map(|n| match n { - models::ServersNetworkMode::Host => models::ActorNetworkMode::Host, - models::ServersNetworkMode::Bridge => models::ActorNetworkMode::Bridge, - }), - ports: Some( - body.network - .ports - .into_iter() - .map(|(k, p)| { - ( - k, - models::ActorCreateActorPortRequest { - internal_port: p.internal_port, - protocol: match p.protocol { - models::ServersPortProtocol::Http => { - models::ActorPortProtocol::Http - } - models::ServersPortProtocol::Https => { - models::ActorPortProtocol::Https - } - models::ServersPortProtocol::Tcp => { - models::ActorPortProtocol::Tcp - } - models::ServersPortProtocol::TcpTls => { - models::ActorPortProtocol::TcpTls - } - models::ServersPortProtocol::Udp => { - models::ActorPortProtocol::Udp - } - }, - routing: p.routing.map(|r| { - Box::new(models::ActorPortRouting { - // Temporarily disabled - // guard: r.game_guard.map(|_| { - // Box::new(models::ActorGuardRouting::default()) - // }), - guard: r.game_guard.map(|_| json!({})), - host: r.host.map(|_| json!({})), - }) - }), - }, - ) - }) - .collect(), - ), - })), - resources: Some(Box::new(models::ActorResources { - cpu: body.resources.cpu, - memory: body.resources.memory, - })), - runtime: Some(Box::new(models::ActorCreateActorRuntimeRequest { - environment: body.runtime.environment, - })), - build: Some(body.runtime.build), - build_tags: None, - tags: body.tags, - }, - GlobalEndpointTypeQuery { - global, - endpoint_type: None, - }, - ) - .await?; - - Ok(models::ServersCreateServerResponse { - server: Box::new(legacy_convert_actor_to_server(*create_res.actor, &dc)?), - }) -} - -// MARK: DELETE /actors/{} -#[derive(Debug, Clone, Deserialize)] -pub struct DeleteQuery { - #[serde(flatten)] - global: GlobalQuery, - override_kill_timeout: Option, -} - -pub async fn destroy( - ctx: Ctx, - actor_id: Uuid, - query: DeleteQuery, -) -> GlobalResult { - let CheckOutput { game_id, env_id } = ctx - .auth() - .check( - ctx.op_ctx(), - CheckOpts { - query: &query.global, - allow_service_token: true, - opt_auth: false, - }, - ) - .await?; - - ensure_with!( - query.override_kill_timeout.unwrap_or(0) >= 0, - API_BAD_QUERY_PARAMETER, - parameter = "override_kill_timeout", - error = "must be positive" - ); - ensure_with!( - query.override_kill_timeout.unwrap_or(0) < 2 * 60 * 60 * 1000, - API_BAD_QUERY_PARAMETER, - parameter = "override_kill_timeout", - error = "cannot be longer than 2 hours" - ); - - let mut sub = ctx - .subscribe::(("server_id", actor_id)) - .await?; - - // Get server after sub is created - let server = assert::server_for_env(&ctx, actor_id, game_id, env_id, None).await?; - - // Already destroyed - if server.destroy_ts.is_some() { - return Ok(json!({})); - } - - ctx.signal(ds::workflows::server::Destroy { - override_kill_timeout_ms: query.override_kill_timeout, - }) - .tag("server_id", actor_id) - .send() - .await?; - - sub.next().await?; - - Ok(json!({})) -} - -pub async fn destroy_deprecated( - ctx: Ctx, - game_id: Uuid, - env_id: Uuid, - actor_id: Uuid, - query: DeleteQuery, -) -> GlobalResult { - let global = build_global_query_compat(&ctx, game_id, env_id).await?; - destroy( - ctx, - actor_id, - DeleteQuery { - global, - override_kill_timeout: query.override_kill_timeout, - }, - ) - .await -} - -// MARK: POST /actors/{}/upgrade -pub async fn upgrade( - ctx: Ctx, - actor_id: Uuid, - body: models::ActorUpgradeActorRequest, - query: GlobalQuery, -) -> GlobalResult { - let CheckOutput { game_id, env_id } = ctx - .auth() - .check( - ctx.op_ctx(), - CheckOpts { - query: &query, - allow_service_token: true, - opt_auth: false, - }, - ) - .await?; - - assert::server_for_env(&ctx, actor_id, game_id, env_id, None).await?; - - let build = resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()).await?; - - // TODO: Add back once we figure out how to cleanly handle if a wf is already complete when - // upgrading - // let mut sub = ctx - // .subscribe::(("server_id", actor_id)) - // .await?; - - ctx.signal(ds::workflows::server::Upgrade { - image_id: build.build_id, - }) - .tag("server_id", actor_id) - .send() - .await?; - - // sub.next().await?; - - Ok(json!({})) -} - -// MARK: POST /actors/upgrade -pub async fn upgrade_all( - ctx: Ctx, - body: models::ActorUpgradeAllActorsRequest, - query: GlobalQuery, -) -> GlobalResult { - let CheckOutput { game_id, env_id } = ctx - .auth() - .check( - ctx.op_ctx(), - CheckOpts { - query: &query, - allow_service_token: true, - opt_auth: false, - }, - ) - .await?; - - let tags = unwrap_with!(body.tags, API_BAD_BODY, error = "missing property `tags`"); - - ensure_with!( - tags.as_object().map(|x| x.len()).unwrap_or_default() <= 8, - API_BAD_BODY, - error = "Too many tags (max 8)." - ); - - let tags = unwrap_with!( - serde_json::from_value::>(tags).ok(), - API_BAD_BODY, - error = "`tags` must be `Map`" - ); - - for (k, v) in &tags { - ensure_with!( - !k.is_empty(), - API_BAD_BODY, - error = "tags[]: Tag label cannot be empty." - ); - ensure_with!( - k.len() <= 32, - API_BAD_BODY, - error = format!( - "tags[{:?}]: Tag label too large (max 32 bytes).", - util::safe_slice(k, 0, 32), - ), - ); - ensure_with!( - !v.is_empty(), - API_BAD_BODY, - error = format!("tags[{k:?}]: Tag value cannot be empty.") - ); - ensure_with!( - v.len() <= 1024, - API_BAD_BODY, - error = format!("tags[{k:?}]: Tag value too large (max 1024 bytes)."), - ); - } - - let build = resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()).await?; - - // Work in batches - let mut count = 0; - let mut cursor = None; - loop { - let list_res = ctx - .op(ds::ops::server::list_for_env::Input { - env_id, - tags: tags.clone(), - include_destroyed: false, - cursor, - limit: 10_000, - }) - .await?; - - count += list_res.server_ids.len(); - cursor = list_res.server_ids.last().cloned(); - - // TODO: Add back once we figure out how to cleanly handle if a wf is already complete when - // upgrading - // let subs = futures_util::stream::iter(list_res.server_ids.clone()) - // .map(|server_id| { - // ctx.subscribe::(("server_id", server_id)) - // }) - // .buffer_unordered(32) - // .try_collect::>() - // .await?; - - futures_util::stream::iter(list_res.server_ids) - .map(|server_id| { - ctx.signal(ds::workflows::server::Upgrade { - image_id: build.build_id, - }) - .tag("server_id", server_id) - .send() - }) - .buffer_unordered(32) - .try_collect::>() - .await?; - - // futures_util::stream::iter(subs) - // .map(|mut sub| async move { sub.next().await }) - // .buffer_unordered(32) - // .try_collect::>() - // .await?; - - if count < 10_000 { - break; - } - } - - Ok(models::ActorUpgradeAllActorsResponse { - count: count.try_into()?, - }) -} - -// MARK: GET /actors -#[derive(Debug, Clone, Deserialize)] -pub struct ListQuery { - #[serde(flatten)] - global_endpoint_type: GlobalEndpointTypeQuery, - tags_json: Option, - include_destroyed: Option, - cursor: Option, -} - -pub async fn list_actors( - ctx: Ctx, - watch_index: WatchIndexQuery, - query: ListQuery, -) -> GlobalResult { - list_actors_inner(&ctx, watch_index, query).await -} - -async fn list_actors_inner( - ctx: &Ctx, - _watch_index: WatchIndexQuery, - query: ListQuery, -) -> GlobalResult { - let CheckOutput { env_id, .. } = ctx - .auth() - .check( - ctx.op_ctx(), - CheckOpts { - query: &query.global_endpoint_type.global, - allow_service_token: true, - opt_auth: false, - }, - ) - .await?; - - let include_destroyed = query.include_destroyed.unwrap_or(false); - - let tags = unwrap_with!( - query - .tags_json - .as_deref() - .map_or(Ok(HashMap::new()), serde_json::from_str) - .ok(), - API_BAD_QUERY_PARAMETER, - parameter = "tags_json", - error = "must be `Map`" - ); - - let list_res = ctx - .op(ds::ops::server::list_for_env::Input { - env_id, - tags, - include_destroyed, - cursor: query.cursor, - // HACK: Until we have webhooks, there needs to be a good way to get all of the most - // recent crashed actors. 10k is a high limit intentionally. - limit: if include_destroyed { 64 } else { 10_000 }, - }) - .await?; - - let servers_res = ctx - .op(ds::ops::server::get::Input { - server_ids: list_res.server_ids.clone(), - endpoint_type: query - .global_endpoint_type - .endpoint_type - .map(ApiInto::api_into), - }) - .await?; - - let datacenter_ids = servers_res - .servers - .iter() - .map(|s| s.datacenter_id) - .collect::>() - .into_iter() - .collect::>(); - let dc_res = ctx - .op(cluster::ops::datacenter::get::Input { datacenter_ids }) - .await?; - - let servers = servers_res - .servers - .into_iter() - .map(|a| { - let dc = unwrap!(dc_res - .datacenters - .iter() - .find(|dc| dc.datacenter_id == a.datacenter_id)); - ds::types::convert_actor_to_api(a, &dc) - }) - .collect::>>()?; - - Ok(models::ActorListActorsResponse { actors: servers }) -} - -pub async fn list_servers_deprecated( - ctx: Ctx, - game_id: Uuid, - env_id: Uuid, - watch_index: WatchIndexQuery, - query: ListQuery, -) -> GlobalResult { - let global = build_global_query_compat(&ctx, game_id, env_id).await?; - let actors_res = list_actors_inner( - &ctx, - watch_index, - ListQuery { - global_endpoint_type: GlobalEndpointTypeQuery { - global, - ..query.global_endpoint_type - }, - ..query - }, - ) - .await?; - - let clusters_res = ctx - .op(cluster::ops::get_for_game::Input { - game_ids: vec![game_id], - }) - .await?; - let cluster_id = unwrap!(clusters_res.games.first()).cluster_id; - - let dc_name_ids = actors_res - .actors - .iter() - .map(|s| s.region.clone()) - .collect::>() - .into_iter() - .collect::>(); - let dc_resolve_res = ctx - .op(cluster::ops::datacenter::resolve_for_name_id::Input { - cluster_id, - name_ids: dc_name_ids, - }) - .await?; - - let dc_res = ctx - .op(cluster::ops::datacenter::get::Input { - datacenter_ids: dc_resolve_res - .datacenters - .iter() - .map(|x| x.datacenter_id) - .collect::>(), - }) - .await?; - - Ok(models::ServersListServersResponse { - servers: actors_res - .actors - .into_iter() - .map(|a| { - let dc = unwrap!(dc_res.datacenters.iter().find(|dc| dc.name_id == a.region)); - legacy_convert_actor_to_server(a, dc) - }) - .collect::, _>>()?, - }) -} - -fn legacy_convert_actor_to_server( - a: models::ActorActor, - datacenter: &cluster::types::Datacenter, -) -> GlobalResult { - Ok(models::ServersServer { - created_at: a - .created_at - .parse::>()? - .timestamp_millis(), - datacenter: datacenter.datacenter_id, - destroyed_at: a - .destroyed_at - .map(|ts| { - GlobalResult::Ok( - ts.parse::>()? - .timestamp_millis(), - ) - }) - .transpose()?, - environment: Uuid::nil(), - id: a.id, - lifecycle: Box::new(models::ServersLifecycle { - kill_timeout: a.lifecycle.kill_timeout, - }), - network: Box::new(models::ServersNetwork { - mode: Some(match a.network.mode { - models::ActorNetworkMode::Host => models::ServersNetworkMode::Host, - models::ActorNetworkMode::Bridge => models::ServersNetworkMode::Bridge, - }), - ports: a - .network - .ports - .into_iter() - .map(|(k, p)| { - ( - k, - models::ServersPort { - internal_port: p.internal_port, - protocol: match p.protocol { - models::ActorPortProtocol::Http => { - models::ServersPortProtocol::Http - } - models::ActorPortProtocol::Https => { - models::ServersPortProtocol::Https - } - models::ActorPortProtocol::Tcp => models::ServersPortProtocol::Tcp, - models::ActorPortProtocol::TcpTls => { - models::ServersPortProtocol::TcpTls - } - models::ActorPortProtocol::Udp => models::ServersPortProtocol::Udp, - }, - public_hostname: p.hostname, - public_port: p.port, - routing: Box::new(models::ServersPortRouting { - game_guard: p.routing.guard.map(|_| json!({})), - host: p.routing.host.map(|_| json!({})), - }), - }, - ) - }) - .collect(), - }), - resources: Box::new(models::ServersResources { - cpu: a.resources.cpu, - memory: a.resources.memory, - }), - runtime: Box::new(models::ServersRuntime { - arguments: a.runtime.arguments, - build: a.runtime.build, - environment: a.runtime.environment, - }), - started_at: a - .started_at - .map(|ts| { - GlobalResult::Ok( - ts.parse::>()? - .timestamp_millis(), - ) - }) - .transpose()?, - tags: a.tags, - }) -} - -async fn resolve_build( - ctx: &Ctx, - game_id: Uuid, - env_id: Uuid, - build_id: Option, - build_tags: Option, -) -> GlobalResult { - match (build_id, build_tags) { - (Some(build_id), None) => { - let builds_res = ctx - .op(build::ops::get::Input { - build_ids: vec![build_id], - }) - .await?; - let build = unwrap_with!(builds_res.builds.into_iter().next(), BUILD_NOT_FOUND); - - // Ensure build belongs to this game/env - if let Some(build_game_id) = build.game_id { - ensure_with!(build_game_id == game_id, BUILD_NOT_FOUND); - } else if let Some(build_env_id) = build.env_id { - ensure_with!(build_env_id == env_id, BUILD_NOT_FOUND); - } - - Ok(build) - } - // Resolve build from tags - (None, Some(build_tags)) => { - let build_tags = unwrap_with!( - serde_json::from_value::>(build_tags).ok(), - API_BAD_BODY, - error = "`build_tags` must be `Map`" - ); - - ensure_with!( - build_tags.len() < 8, - API_BAD_BODY, - error = "Too many build tags (max 8)." - ); - - for (k, v) in &build_tags { - ensure_with!( - !k.is_empty(), - API_BAD_BODY, - error = "build_tags[]: Build tag label cannot be empty." - ); - ensure_with!( - k.len() < 32, - API_BAD_BODY, - error = format!( - "build_tags[{:?}]: Build tag label too large (max 32 bytes).", - util::safe_slice(k, 0, 32), - ) - ); - ensure_with!( - !v.is_empty(), - API_BAD_BODY, - error = format!("build_tags[{k:?}]: Build tag value cannot be empty.") - ); - ensure_with!( - v.len() < 256, - API_BAD_BODY, - error = - format!("build_tags[{k:?}]: Build tag value too large (max 256 bytes).") - ); - } - - let builds_res = ctx - .op(build::ops::resolve_for_tags::Input { - env_id, - tags: build_tags, - }) - .await?; - - let build = unwrap_with!( - builds_res.builds.into_iter().next(), - BUILD_NOT_FOUND_WITH_TAGS - ); - - // Ensure build belongs to this game/env - if let Some(build_game_id) = build.game_id { - ensure_with!(build_game_id == game_id, BUILD_NOT_FOUND); - } else if let Some(build_env_id) = build.env_id { - ensure_with!(build_env_id == env_id, BUILD_NOT_FOUND); - } - - Ok(build) - } - _ => { - bail_with!( - API_BAD_BODY, - error = "must have either `build` or `build_tags`" - ); - } - } -} - -async fn resolve_dc_id( - ctx: &Ctx, - cluster_id: Uuid, - region: Option, -) -> GlobalResult { - if let Some(region) = region { - let dcs_res = ctx - .op(cluster::ops::datacenter::resolve_for_name_id::Input { - cluster_id, - name_ids: vec![region], - }) - .await?; - let dc = unwrap_with!( - dcs_res.datacenters.first(), - ACTOR_FAILED_TO_CREATE, - error = "Region not found." - ); - - Ok(dc.datacenter_id) - } - // Auto-select the closest region - else { - let clusters_res = ctx - .op(cluster::ops::datacenter::list::Input { - cluster_ids: vec![cluster_id], - }) - .await?; - let cluster = unwrap!(clusters_res.clusters.first()); - - if let Some((lat, long)) = ctx.coords() { - let recommend_res = op!([ctx] region_recommend { - region_ids: cluster - .datacenter_ids - .iter() - .cloned() - .map(Into::into) - .collect(), - coords: Some(backend::net::Coordinates { - latitude: lat, - longitude: long, - }), - ..Default::default() - }) - .await?; - let primary_region = unwrap!(recommend_res.regions.first()); - let primary_region_id = unwrap_ref!(primary_region.region_id).as_uuid(); - - Ok(primary_region_id) - } else { - tracing::warn!("coords not provided to select region"); - - let datacenter_id = *unwrap_with!( - cluster.datacenter_ids.first(), - ACTOR_FAILED_TO_CREATE, - error = "No regions found." - ); - - Ok(datacenter_id) - } - } -} diff --git a/packages/api/actor/src/route/mod.rs b/packages/api/actor/src/route/mod.rs deleted file mode 100644 index 599081c7f0..0000000000 --- a/packages/api/actor/src/route/mod.rs +++ /dev/null @@ -1,282 +0,0 @@ -use api_helper::{define_router, util::CorsConfigBuilder}; -use hyper::{Body, Request, Response}; -use rivet_api::models; -use rivet_operation::prelude::*; -use serde::Deserialize; -use uuid::Uuid; - -pub mod actors; -pub mod builds; -pub mod logs; -pub mod regions; - -#[derive(Debug, Clone, Deserialize)] -pub struct GlobalQuery { - /// Slug of the project. - /// - /// If provided, `environment` must also be provided. - pub project: Option, - - /// Slug of the environment. - pub environment: Option, -} - -impl GlobalQuery { - /// Returns both the project and environment. - /// - /// Validates that the project can only be specified with the environment. - pub fn project_and_env(&self) -> GlobalResult<(Option<&str>, Option<&str>)> { - if let Some(environment) = &self.environment { - Ok((self.project.as_deref(), Some(environment))) - } else { - // Don't allow just the project - if self.project.is_some() { - bail_with!( - API_BAD_QUERY, - parameter = "project", - error = "Must provide both `project` and `environment` query together." - ) - } else { - Ok((None, None)) - } - } - } -} - -define_router! { - cors: |config| CorsConfigBuilder::public().build(), - routes: { - "actors": { - GET: actors::list_actors( - query: actors::ListQuery, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - POST: actors::create( - query: actors::GlobalEndpointTypeQuery, - body: models::ActorCreateActorRequest, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 1_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "actors" / "upgrade": { - POST: actors::upgrade_all( - query: GlobalQuery, - body: models::ActorUpgradeAllActorsRequest, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 1_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "actors" / Uuid: { - GET: actors::get( - query: actors::GlobalEndpointTypeQuery, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - - ), - DELETE: actors::destroy( - query: actors::DeleteQuery, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 10_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "actors" / Uuid / "upgrade": { - POST: actors::upgrade( - query: GlobalQuery, - body: models::ActorUpgradeActorRequest, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 1_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "actors" / Uuid / "logs": { - GET: logs::get_logs( - query: logs::GetActorLogsQuery, - opt_auth: true, - ), - }, - - - "builds": { - GET: builds::list( - query: builds::ListQuery, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "builds" / Uuid: { - GET: builds::get( - query: GlobalQuery, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "builds" / Uuid / "tags": { - PATCH: builds::patch_tags( - query: GlobalQuery, - body: models::ActorPatchBuildTagsRequest, - opt_auth: true, - ), - }, - - "builds" / "prepare": { - POST: builds::create_build( - query: GlobalQuery, - body: models::ActorPrepareBuildRequest, - opt_auth: true, - ), - }, - - "builds" / Uuid / "complete": { - POST: builds::complete_build( - query: GlobalQuery, - body: serde_json::Value, - opt_auth: true, - ), - }, - - // MARK: Regions - "regions": { - GET: regions::list( - query: GlobalQuery, - opt_auth: true, - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - "regions" / "resolve": { - GET: regions::resolve( - query: regions::ResolveQuery, - opt_auth: true, - ), - }, - - // MARK: Deprecated - "games" / Uuid / "environments" / Uuid / "servers": { - GET: actors::list_servers_deprecated( - query: actors::ListQuery, - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - POST: actors::create_deprecated( - body: models::ServersCreateServerRequest, - rate_limit: { - buckets: [ - { count: 1_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "games" / Uuid / "environments" / Uuid / "servers" / Uuid: { - GET: actors::get_deprecated( - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - - ), - DELETE: actors::destroy_deprecated( - query: actors::DeleteQuery, - rate_limit: { - buckets: [ - { count: 10_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "games" / Uuid / "environments" / Uuid / "servers" / Uuid / "logs" : { - GET: logs::get_logs_deprecated( - query: logs::GetActorLogsQuery, - ), - }, - - "games" / Uuid / "environments" / Uuid / "builds": { - GET: builds::list_deprecated( - query: builds::ListQuery, - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "games" / Uuid / "environments" / Uuid / "builds" / Uuid: { - GET: builds::get_deprecated( - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - - "games" / Uuid / "environments" / Uuid / "builds" / Uuid / "tags": { - PATCH: builds::patch_tags_deprecated(body: models::ServersPatchBuildTagsRequest), - }, - - "games" / Uuid / "environments" / Uuid / "builds" / "prepare": { - POST: builds::create_build_deprecated(body: models::ServersCreateBuildRequest), - }, - - "games" / Uuid / "environments" / Uuid / "builds" / Uuid / "complete": { - POST: builds::complete_build_deprecated(body: serde_json::Value), - }, - - "games" / Uuid / "environments" / Uuid / "datacenters": { - GET: regions::list_deprecated( - rate_limit: { - buckets: [ - { count: 60_000, bucket: duration::minutes(1) }, - ], - }, - ), - }, - }, -} diff --git a/packages/api/monolith-edge/Cargo.toml b/packages/api/monolith-edge/Cargo.toml deleted file mode 100644 index bb47886f19..0000000000 --- a/packages/api/monolith-edge/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "api-monolith-edge" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -api-helper.workspace = true -async-trait = "0.1" -chirp-client.workspace = true -http = "0.2" -hyper = { version = "0.14", features = ["server", "http1", "tcp"] } -rivet-operation.workspace = true -tokio = { version = "1.40" } -tracing = "0.1" -tracing-subscriber = { version = "0.3", default-features = false, features = [ - "fmt", - "json", - "ansi", -] } -url = "2.2.2" - -api-traefik-provider.workspace = true -api-provision.workspace = true -rivet-config.workspace = true -rivet-env.workspace = true diff --git a/packages/api/monolith-edge/src/route/mod.rs b/packages/api/monolith-edge/src/route/mod.rs deleted file mode 100644 index 2488ab2dc3..0000000000 --- a/packages/api/monolith-edge/src/route/mod.rs +++ /dev/null @@ -1,40 +0,0 @@ -use api_helper::define_router; -use hyper::{Body, Request, Response}; -use rivet_operation::prelude::*; - -pub async fn handle( - shared_client: chirp_client::SharedClientHandle, - config: rivet_config::Config, - pools: rivet_pools::Pools, - cache: rivet_cache::Cache, - ray_id: uuid::Uuid, - request: Request, -) -> Result, http::Error> { - let response = Response::builder(); - - // Handle route - Router::handle( - shared_client, - config, - pools, - cache, - ray_id, - request, - response, - ) - .await -} - -define_router! { - routes: {}, - mounts: [ - { - path: api_traefik_provider::route::Router, - prefix: "traefik-provider", - }, - { - path: api_provision::route::Router, - prefix: "provision", - }, - ], -} diff --git a/packages/api/monolith-public/Cargo.toml b/packages/api/monolith-public/Cargo.toml deleted file mode 100644 index c8918b0166..0000000000 --- a/packages/api/monolith-public/Cargo.toml +++ /dev/null @@ -1,37 +0,0 @@ -[package] -name = "api-monolith-public" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -api-helper.workspace = true -async-trait = "0.1" -chirp-client.workspace = true -http = "0.2" -hyper = { version = "0.14", features = ["server", "http1", "tcp"] } -rivet-operation.workspace = true -tokio = { version = "1.40" } -tracing = "0.1" -tracing-subscriber = { version = "0.3", default-features = false, features = [ - "fmt", - "json", - "ansi", -] } -url = "2.2.2" - -api-actor.workspace = true -api-auth.workspace = true -api-cf-verification.workspace = true -api-cloud.workspace = true -api-games.workspace = true -api-group.workspace = true -api-identity.workspace = true -api-job.workspace = true -api-matchmaker.workspace = true -api-portal.workspace = true -api-status.workspace = true -rivet-config.workspace = true -rivet-env.workspace = true -api-ui.workspace = true diff --git a/packages/api/monolith-public/src/route/mod.rs b/packages/api/monolith-public/src/route/mod.rs deleted file mode 100644 index 74e86447c4..0000000000 --- a/packages/api/monolith-public/src/route/mod.rs +++ /dev/null @@ -1,77 +0,0 @@ -use api_helper::define_router; -use hyper::{Body, Request, Response}; -use rivet_operation::prelude::*; - -pub async fn handle( - shared_client: chirp_client::SharedClientHandle, - config: rivet_config::Config, - pools: rivet_pools::Pools, - cache: rivet_cache::Cache, - ray_id: uuid::Uuid, - request: Request, -) -> Result, http::Error> { - let response = Response::builder(); - - // Handle route - Router::handle( - shared_client, - config, - pools, - cache, - ray_id, - request, - response, - ) - .await -} - -define_router! { - routes: {}, - mounts: [ - { - path: api_ui::route::Router, - }, - { - path: api_auth::route::Router, - prefix: "auth", - }, - { - path: api_cf_verification::route::Router, - prefix: "cf-verification", - }, - { - path: api_cloud::route::Router, - prefix: "cloud", - }, - { - path: api_games::route::Router, - }, - { - path: api_group::route::Router, - prefix: "group", - }, - { - path: api_identity::route::Router, - prefix: "identity", - }, - { - path: api_job::route::Router, - prefix: "job", - }, - { - path: api_matchmaker::route::Router, - prefix: "matchmaker", - }, - { - path: api_portal::route::Router, - prefix: "portal", - }, - { - path: api_status::route::Router, - prefix: "status", - }, - { - path: api_actor::route::Router, - }, - ], -} diff --git a/packages/api/provision/src/auth.rs b/packages/api/provision/src/auth.rs deleted file mode 100644 index ce8e259174..0000000000 --- a/packages/api/provision/src/auth.rs +++ /dev/null @@ -1,55 +0,0 @@ -use api_helper::{ - auth::{ApiAuth, AuthRateLimitCtx}, - util::as_auth_expired, -}; -use proto::claims::Claims; -use rivet_claims::ClaimsDecode; -use rivet_operation::prelude::*; - -/// Information derived from the authentication middleware. -pub struct Auth { - config: rivet_config::Config, - claims: Option, -} - -#[async_trait] -impl ApiAuth for Auth { - async fn new( - config: rivet_config::Config, - api_token: Option, - rate_limit_ctx: AuthRateLimitCtx<'_>, - ) -> GlobalResult { - Self::rate_limit(&config, rate_limit_ctx).await?; - - Ok(Auth { - config: config.clone(), - claims: if let Some(api_token) = api_token { - Some(as_auth_expired(rivet_claims::decode( - &config.server()?.jwt.public, - &api_token, - )?)?) - } else { - None - }, - }) - } - - async fn rate_limit( - config: &rivet_config::Config, - _rate_limit_ctx: AuthRateLimitCtx<'_>, - ) -> GlobalResult<()> { - Ok(()) - } -} - -impl Auth { - pub fn claims(&self) -> GlobalResult<&Claims> { - self.claims - .as_ref() - .ok_or_else(|| err_code!(API_UNAUTHORIZED, reason = "No bearer token provided.")) - } - - pub fn server(&self) -> GlobalResult { - self.claims()?.as_provisioned_server() - } -} diff --git a/packages/api/traefik-provider/Cargo.toml b/packages/api/traefik-provider/Cargo.toml deleted file mode 100644 index e7285ba4a2..0000000000 --- a/packages/api/traefik-provider/Cargo.toml +++ /dev/null @@ -1,64 +0,0 @@ -[package] -name = "api-traefik-provider" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -rivet-convert.workspace = true -api-helper.workspace = true -async_once = "0.2" -async-trait = "0.1" -chirp-client.workspace = true -rivet-operation.workspace = true -chrono = "0.4" -http = "0.2" -hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } -lazy_static = "1.4" -prost = "0.10" -rivet-cache.workspace = true -rivet-claims.workspace = true -rivet-health-checks.workspace = true -rivet-pools.workspace = true -s3-util.workspace = true -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -thiserror = "1.0" -tokio = { version = "1.40" } -tracing = "0.1" -tracing-subscriber = { version = "0.3", default-features = false, features = [ - "fmt", - "json", - "ansi", -] } -url = "2.2.2" -util-cdn.workspace = true -util-job.workspace = true -uuid = { version = "1", features = ["v4"] } - -cluster.workspace = true -ds.workspace = true -rivet-config.workspace = true -rivet-env.workspace = true - -[dependencies.sqlx] -workspace = true -features = ["json"] - - -[dev-dependencies] -rivet-connection.workspace = true -rivet-route.workspace = true -base64 = "0.13" -reqwest = "0.11" - -cdn-namespace-auth-user-update.workspace = true -cdn-namespace-domain-create.workspace = true -faker-cdn-site.workspace = true -faker-game.workspace = true -faker-game-namespace.workspace = true -faker-game-version.workspace = true -faker-job-run.workspace = true -faker-region.workspace = true -game-get.workspace = true diff --git a/packages/api/traefik-provider/src/route/game_guard/mod.rs b/packages/api/traefik-provider/src/route/game_guard/mod.rs deleted file mode 100644 index 1cef260432..0000000000 --- a/packages/api/traefik-provider/src/route/game_guard/mod.rs +++ /dev/null @@ -1,66 +0,0 @@ -use api_helper::{anchor::WatchIndexQuery, ctx::Ctx}; -use dynamic_servers::build_ds; -use job::build_job; -use rivet_operation::prelude::*; -use serde::{Deserialize, Serialize}; - -use crate::{auth::Auth, types}; - -pub mod dynamic_servers; -pub mod job; - -#[derive(Debug, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct ConfigQuery { - token: Option, - datacenter: Uuid, - server: Option, -} - -#[tracing::instrument(skip(ctx))] -pub async fn config( - ctx: Ctx, - _watch_index: WatchIndexQuery, - ConfigQuery { - token, - datacenter, - server, - }: ConfigQuery, -) -> GlobalResult { - ctx.auth().token(&token).await?; - - // Fetch configs and catch any errors - let mut config = types::TraefikConfigResponse::default(); - build_job(&ctx, datacenter, &mut config).await?; - let latest_ds_create_ts = build_ds(&ctx, datacenter, server, &mut config).await?; - - // Publish message when the request is complete - if let Some(latest_ds_create_ts) = latest_ds_create_ts { - ctx.msg(ds::workflows::server::pegboard::TraefikPoll { - server_id: server, - latest_ds_create_ts, - }) - .tag("datacenter_id", datacenter) - .send() - .await?; - } - - tracing::debug!( - http_services = ?config.http.services.len(), - http_routers = config.http.routers.len(), - http_middlewares = ?config.http.middlewares.len(), - tcp_services = ?config.tcp.services.len(), - tcp_routers = config.tcp.routers.len(), - tcp_middlewares = ?config.tcp.middlewares.len(), - udp_services = ?config.udp.services.len(), - udp_routers = config.udp.routers.len(), - udp_middlewares = ?config.udp.middlewares.len(), - "traefik config" - ); - - Ok(types::TraefikConfigResponseNullified { - http: config.http.nullified(), - tcp: config.tcp.nullified(), - udp: config.udp.nullified(), - }) -} diff --git a/packages/api/traefik-provider/src/route/mod.rs b/packages/api/traefik-provider/src/route/mod.rs deleted file mode 100644 index 20fd4f3f6b..0000000000 --- a/packages/api/traefik-provider/src/route/mod.rs +++ /dev/null @@ -1,32 +0,0 @@ -use api_helper::define_router; -use hyper::{Body, Request, Response}; - -pub mod core; -pub mod game_guard; -pub mod tunnel; - -define_router! { - routes: { - "config" / "core": { - GET: core::config( - query: core::ConfigQuery, - internal_endpoint: true, - opt_auth: true, - ), - }, - "config" / "tunnel": { - GET: tunnel::config( - query: tunnel::ConfigQuery, - internal_endpoint: true, - opt_auth: true, - ), - }, - "config" / "game-guard": { - GET: game_guard::config( - query: game_guard::ConfigQuery, - internal_endpoint: true, - opt_auth: true, - ), - } - } -} diff --git a/packages/common/api-helper/build/src/macro_util.rs b/packages/common/api-helper/build/src/macro_util.rs index c78f97dc30..6fe74203f4 100644 --- a/packages/common/api-helper/build/src/macro_util.rs +++ b/packages/common/api-helper/build/src/macro_util.rs @@ -18,6 +18,8 @@ use crate::{ ctx::Ctx, }; +pub type DefaultDbDriver = chirp_workflow::db::DatabaseCrdbNats; + pub mod __metrics { pub use crate::metrics::*; } @@ -235,7 +237,10 @@ pub fn __deserialize_query(route: &Url) -> GlobalRes } #[doc(hidden)] -pub async fn __with_ctx( +pub async fn __with_ctx< + A: auth::ApiAuth + Send, + DB: chirp_workflow::db::Database + Sync + 'static, +>( shared_client: chirp_client::SharedClientHandle, config: rivet_config::Config, pools: rivet_pools::Pools, @@ -342,7 +347,7 @@ pub async fn __with_ctx( }], ); let conn = rivet_connection::Connection::new(client, pools.clone(), cache.clone()); - let db = chirp_workflow::compat::db_from_pools(&pools).await?; + let db = DB::from_pools(pools.clone())?; let internal_ctx = ApiCtx::new( db, config.clone(), diff --git a/packages/common/api-helper/macros/src/lib.rs b/packages/common/api-helper/macros/src/lib.rs index b9c244f2ad..095ea46ba3 100644 --- a/packages/common/api-helper/macros/src/lib.rs +++ b/packages/common/api-helper/macros/src/lib.rs @@ -39,6 +39,7 @@ struct EndpointRouter { routes: Punctuated, cors_config: Option, mounts: Punctuated, + db_driver: Option, } impl Parse for EndpointRouter { @@ -46,6 +47,7 @@ impl Parse for EndpointRouter { let mut routes = None; let mut cors_config = None; let mut mounts = None; + let mut db_driver = None; // Loop through all keys in the object loop { @@ -92,11 +94,21 @@ impl Parse for EndpointRouter { )); } } + "db_driver" => { + if db_driver.is_none() { + db_driver = Some(input.parse()?); + } else { + return Err(syn::Error::new( + key.span(), + format!("Duplicate key `{}`.", key), + )); + } + } _ => { return Err(syn::Error::new( key.span(), format!( - "Unexpected key `{}`. Try `routes`, `cors`, or `mounts`.", + "Unexpected key `{}`. Try `routes`, `cors`, `mounts`, or `db_driver`.", key ), )); @@ -125,6 +137,7 @@ impl Parse for EndpointRouter { routes, cors_config, mounts, + db_driver, }) } } @@ -134,7 +147,7 @@ impl EndpointRouter { let endpoints = self .routes .into_iter() - .map(|endpoint| endpoint.render(self.cors_config.clone())) + .map(|endpoint| endpoint.render(self.cors_config.clone(), self.db_driver.clone())) .collect::>>()?; let mounts = self @@ -466,7 +479,11 @@ impl Parse for Endpoint { } impl Endpoint { - fn render(self, cors_config: Option) -> syn::Result { + fn render( + self, + cors_config: Option, + db_driver: Option, + ) -> syn::Result { // Check cors at the endpoint level let cors = if let Some(cors_config) = cors_config { quote! { @@ -530,7 +547,7 @@ impl Endpoint { let arms = self .functions .into_iter() - .map(|func| func.render(arg_list.clone(), metrics_path.clone())) + .map(|func| func.render(db_driver.clone(), arg_list.clone(), metrics_path.clone())) .collect::>>()?; Ok(quote! { @@ -651,6 +668,7 @@ impl Parse for EndpointFunction { impl EndpointFunction { fn render( self, + db_driver: Option, mut arg_list: Vec, metrics_path: Literal, ) -> syn::Result { @@ -849,7 +867,7 @@ impl EndpointFunction { arg_list.push(arg_name.to_token_stream()); Ok(quote! { - let #arg_name = macro_util::__deserialize_query::<#value>( + let #arg_name = api_helper::macro_util::__deserialize_query::<#value>( &router_config.route )?; }) @@ -858,7 +876,7 @@ impl EndpointFunction { arg_list.push(arg_name.to_token_stream()); Ok(quote! { - let #arg_name = macro_util::__deserialize_cookies(&request); + let #arg_name = api_helper::macro_util::__deserialize_cookies(&request); }) } else if arg.label == "header" { let value = arg.value.expect_expr()?; @@ -872,7 +890,7 @@ impl EndpointFunction { .unwrap_or_else(|| quote! { _ }); Ok(quote! { - let #arg_name = macro_util::__deserialize_header::<#associated_type, _>(&request, #value)?; + let #arg_name = api_helper::macro_util::__deserialize_header::<#associated_type, _>(&request, #value)?; }) } else { // NOTE: This scope is not unreachable, certain arguments such as body or rate limit are @@ -882,12 +900,18 @@ impl EndpointFunction { }) .collect::>>()?; + let db_driver = if let Some(db_driver) = db_driver { + quote! { #db_driver } + } else { + quote! { api_helper::macro_util::DefaultDbDriver } + }; + // Format single endpoint Ok(quote! { &http::Method::#req_type => { #(#args)* - let ctx = macro_util::__with_ctx( + let ctx = macro_util::__with_ctx::<_, #db_driver>( shared_client.clone(), config.clone(), pools.clone(), diff --git a/packages/common/chirp-workflow/core/src/compat.rs b/packages/common/chirp-workflow/core/src/compat.rs index 2d1c8192f9..7f036ea763 100644 --- a/packages/common/chirp-workflow/core/src/compat.rs +++ b/packages/common/chirp-workflow/core/src/compat.rs @@ -12,9 +12,10 @@ use crate::{ message::{MessageCtx, SubscriptionHandle}, }, db::{Database, DatabaseCrdbNats, DatabaseHandle}, - message::{AsTags, Message}, + message::Message, operation::{Operation, OperationInput}, signal::Signal, + utils::tags::AsTags, workflow::{Workflow, WorkflowInput}, }; @@ -119,9 +120,3 @@ async fn db_from_ctx( .map(|db| db as DatabaseHandle) .map_err(Into::into) } - -pub async fn db_from_pools(pools: &rivet_pools::Pools) -> GlobalResult { - DatabaseCrdbNats::from_pools(pools.clone()) - .map(|db| db as DatabaseHandle) - .map_err(Into::into) -} diff --git a/packages/common/chirp-workflow/core/src/ctx/activity.rs b/packages/common/chirp-workflow/core/src/ctx/activity.rs index ce4b9d4c30..f04bfc2aa1 100644 --- a/packages/common/chirp-workflow/core/src/ctx/activity.rs +++ b/packages/common/chirp-workflow/core/src/ctx/activity.rs @@ -9,8 +9,9 @@ use crate::{ }, db::DatabaseHandle, error::WorkflowResult, - message::{AsTags, Message, NatsMessage}, + message::{Message, NatsMessage}, operation::{Operation, OperationInput}, + utils::tags::AsTags, }; #[derive(Clone)] @@ -223,6 +224,21 @@ impl ActivityCtx { self.conn.clickhouse().await } + pub async fn fdb(&self) -> Result { + self.conn.fdb().await + } + + /// Access the SQLite database for this workflow. This cannot access any other database. + pub async fn sqlite(&self) -> Result { + self.conn + .sqlite(format!("{}-data", self.workflow_id), false) + .await + } + + pub async fn sqlite_for_workflow(&self, workflow_id: Uuid) -> GlobalResult { + common::sqlite_for_workflow(&self.db, &self.conn, workflow_id, false).await + } + // Backwards compatibility pub fn op_ctx(&self) -> &rivet_operation::OperationContext<()> { &self.op_ctx diff --git a/packages/common/chirp-workflow/core/src/ctx/api.rs b/packages/common/chirp-workflow/core/src/ctx/api.rs index 0e8be48ebd..b20e723ccf 100644 --- a/packages/common/chirp-workflow/core/src/ctx/api.rs +++ b/packages/common/chirp-workflow/core/src/ctx/api.rs @@ -11,9 +11,10 @@ use crate::{ }, db::DatabaseHandle, error::WorkflowResult, - message::{AsTags, Message, NatsMessage}, + message::{Message, NatsMessage}, operation::{Operation, OperationInput}, signal::Signal, + utils::tags::AsTags, workflow::{Workflow, WorkflowInput}, }; @@ -232,6 +233,10 @@ impl ApiCtx { self.conn.clickhouse().await } + pub async fn sqlite_for_workflow(&self, workflow_id: Uuid) -> GlobalResult { + common::sqlite_for_workflow(&self.db, &self.conn, workflow_id, true).await + } + // Backwards compatibility pub fn op_ctx(&self) -> &rivet_operation::OperationContext<()> { &self.op_ctx diff --git a/packages/common/chirp-workflow/core/src/ctx/common.rs b/packages/common/chirp-workflow/core/src/ctx/common.rs index 4f4bea8730..67e3394bb4 100644 --- a/packages/common/chirp-workflow/core/src/ctx/common.rs +++ b/packages/common/chirp-workflow/core/src/ctx/common.rs @@ -1,10 +1,13 @@ use std::time::Duration; use global_error::{GlobalError, GlobalResult}; +use rivet_pools::prelude::*; use uuid::Uuid; +use crate::utils::tags::AsTags; + /// Poll interval when polling for a sub workflow in-process -pub const SUB_WORKFLOW_RETRY: Duration = Duration::from_millis(500); +pub const SUB_WORKFLOW_RETRY: Duration = Duration::from_millis(350); /// Time to delay a workflow from retrying after an error pub const RETRY_TIMEOUT_MS: usize = 2000; pub const WORKFLOW_TIMEOUT: Duration = Duration::from_secs(60); @@ -46,6 +49,16 @@ pub async fn wait_for_workflow( .await? } +/// Finds the first workflow with the given tags. +pub async fn find_workflow( + db: &DatabaseHandle, + tags: impl AsTags, +) -> GlobalResult> { + db.find_workflow(W::NAME, &tags.as_tags()?) + .await + .map_err(GlobalError::raw) +} + pub async fn op( db: &DatabaseHandle, config: &rivet_config::Config, @@ -83,3 +96,21 @@ where res } + +pub async fn sqlite_for_workflow( + db: &DatabaseHandle, + conn: &rivet_connection::Connection, + workflow_id: Uuid, + read_only: bool, +) -> GlobalResult { + // Validate workflow exists + db.get_workflow(workflow_id) + .await + .map_err(GlobalError::raw)? + .ok_or(WorkflowError::WorkflowNotFound) + .map_err(GlobalError::raw)?; + + conn.sqlite(format!("{}-data", workflow_id), read_only) + .await + .map_err(Into::into) +} diff --git a/packages/common/chirp-workflow/core/src/ctx/message.rs b/packages/common/chirp-workflow/core/src/ctx/message.rs index f5088293f6..d8f32c3f40 100644 --- a/packages/common/chirp-workflow/core/src/ctx/message.rs +++ b/packages/common/chirp-workflow/core/src/ctx/message.rs @@ -13,8 +13,8 @@ use uuid::Uuid; use crate::{ error::{WorkflowError, WorkflowResult}, - message::{redis_keys, AsTags, Message, NatsMessage, NatsMessageWrapper}, - utils, + message::{redis_keys, Message, NatsMessage, NatsMessageWrapper}, + utils::{self, tags::AsTags}, }; /// Time (in ms) that we subtract from the anchor grace period in order to diff --git a/packages/common/chirp-workflow/core/src/ctx/mod.rs b/packages/common/chirp-workflow/core/src/ctx/mod.rs index 59c09ca367..ee2d54e138 100644 --- a/packages/common/chirp-workflow/core/src/ctx/mod.rs +++ b/packages/common/chirp-workflow/core/src/ctx/mod.rs @@ -1,6 +1,5 @@ mod activity; pub(crate) mod api; -mod backfill; pub(crate) mod common; mod listen; pub mod message; @@ -11,7 +10,6 @@ mod versioned_workflow; pub(crate) mod workflow; pub use activity::ActivityCtx; pub use api::ApiCtx; -pub use backfill::BackfillCtx; pub use listen::ListenCtx; pub use message::MessageCtx; pub use operation::OperationCtx; diff --git a/packages/common/chirp-workflow/core/src/ctx/operation.rs b/packages/common/chirp-workflow/core/src/ctx/operation.rs index 3ae1439ad7..1950e4cac5 100644 --- a/packages/common/chirp-workflow/core/src/ctx/operation.rs +++ b/packages/common/chirp-workflow/core/src/ctx/operation.rs @@ -12,9 +12,10 @@ use crate::{ }, db::DatabaseHandle, error::WorkflowResult, - message::{AsTags, Message, NatsMessage}, + message::{Message, NatsMessage}, operation::{Operation, OperationInput}, signal::Signal, + utils::tags::AsTags, workflow::{Workflow, WorkflowInput}, }; @@ -99,6 +100,14 @@ impl OperationCtx { ) } + /// Finds the first workflow with the given tags. + pub async fn find_workflow( + &self, + tags: impl AsTags, + ) -> GlobalResult> { + common::find_workflow::(&self.db, tags).await + } + /// Creates a signal builder. pub fn signal(&self, body: T) -> builder::signal::SignalBuilder { // TODO: Add check for from_workflow so you cant dispatch a signal @@ -125,7 +134,7 @@ impl OperationCtx { &self.conn, self.ray_id, self.op_ctx.req_ts(), - self.op_ctx.from_workflow(), + self.op_ctx.from_workflow, input, ) .await @@ -243,6 +252,20 @@ impl OperationCtx { self.conn.clickhouse().await } + pub async fn fdb(&self) -> Result { + self.conn.fdb().await + } + + pub async fn sqlite_for_workflow(&self, workflow_id: Uuid) -> GlobalResult { + common::sqlite_for_workflow( + &self.db, + &self.conn, + workflow_id, + !self.op_ctx.from_workflow, + ) + .await + } + // Backwards compatibility pub fn op_ctx(&self) -> &rivet_operation::OperationContext<()> { &self.op_ctx diff --git a/packages/common/chirp-workflow/core/src/ctx/standalone.rs b/packages/common/chirp-workflow/core/src/ctx/standalone.rs index 414ff93948..373bf6448f 100644 --- a/packages/common/chirp-workflow/core/src/ctx/standalone.rs +++ b/packages/common/chirp-workflow/core/src/ctx/standalone.rs @@ -12,9 +12,10 @@ use crate::{ }, db::DatabaseHandle, error::WorkflowResult, - message::{AsTags, Message, NatsMessage}, + message::{Message, NatsMessage}, operation::{Operation, OperationInput}, signal::Signal, + utils::tags::AsTags, workflow::{Workflow, WorkflowInput}, }; @@ -237,6 +238,10 @@ impl StandaloneCtx { self.conn.clickhouse().await } + pub async fn sqlite_for_workflow(&self, workflow_id: Uuid) -> GlobalResult { + common::sqlite_for_workflow(&self.db, &self.conn, workflow_id, true).await + } + // Backwards compatibility pub fn op_ctx(&self) -> &rivet_operation::OperationContext<()> { &self.op_ctx diff --git a/packages/common/chirp-workflow/core/src/ctx/test.rs b/packages/common/chirp-workflow/core/src/ctx/test.rs index 118fc3ea96..a3c471017a 100644 --- a/packages/common/chirp-workflow/core/src/ctx/test.rs +++ b/packages/common/chirp-workflow/core/src/ctx/test.rs @@ -11,10 +11,10 @@ use crate::{ MessageCtx, }, db::{Database, DatabaseHandle}, - message::{AsTags, Message, NatsMessage}, + message::{Message, NatsMessage}, operation::{Operation, OperationInput}, signal::Signal, - utils, + utils::{self, tags::AsTags}, workflow::{Workflow, WorkflowInput}, }; @@ -260,6 +260,10 @@ impl TestCtx { self.conn.clickhouse().await } + pub async fn sqlite_for_workflow(&self, workflow_id: Uuid) -> GlobalResult { + common::sqlite_for_workflow(&self.db, &self.conn, workflow_id, true).await + } + // Backwards compatibility pub fn op_ctx(&self) -> &rivet_operation::OperationContext<()> { &self.op_ctx diff --git a/packages/common/chirp-workflow/core/src/ctx/workflow.rs b/packages/common/chirp-workflow/core/src/ctx/workflow.rs index 5fd5d544ea..2e4136808e 100644 --- a/packages/common/chirp-workflow/core/src/ctx/workflow.rs +++ b/packages/common/chirp-workflow/core/src/ctx/workflow.rs @@ -633,7 +633,7 @@ impl WorkflowCtx { T::parse(&signal.name, &signal.body).map_err(GlobalError::raw)? } - // Listen for new messages + // Listen for new signal else { tracing::debug!(name=%self.name, id=%self.workflow_id, "listening for signal"); @@ -688,7 +688,7 @@ impl WorkflowCtx { T::parse(&signal.name, &signal.body).map_err(GlobalError::raw)? } - // Listen for new messages + // Listen for new signal else { tracing::debug!(name=%self.name, id=%self.workflow_id, "listening for signal"); @@ -959,8 +959,7 @@ impl WorkflowCtx { Ok(()) } - /// Listens for a signal for a short time with a timeout before setting the workflow to sleep. Once the - /// signal is received, the workflow will be woken up and continue. + /// Listens for a signal with a timeout. Returns `None` if the timeout is reached. /// /// Internally this is a sleep event and a signal event. pub async fn listen_with_timeout( @@ -968,6 +967,20 @@ impl WorkflowCtx { duration: impl DurationToMillis, ) -> GlobalResult> { let time = (rivet_util::timestamp::now() as u64 + duration.to_millis()?) as i64; + + self.listen_until(time).await + } + + // TODO: Potential bad transaction: if the signal gets pulled and saved in history but an error occurs + // before the sleep event state is set to "interrupted", the next time this workflow is run it will error + // because it tries to pull a signal again + /// Listens for a signal until the given timestamp. Returns `None` if the timestamp is reached. + /// + /// Internally this is a sleep event and a signal event. + pub async fn listen_until( + &mut self, + time: impl TsToMillis, + ) -> GlobalResult> { let history_res = self .cursor .compare_sleep(self.version) diff --git a/packages/common/chirp-workflow/core/src/db/crdb_nats.rs b/packages/common/chirp-workflow/core/src/db/crdb_nats.rs index 8cd0283d0a..97c1b8637a 100644 --- a/packages/common/chirp-workflow/core/src/db/crdb_nats.rs +++ b/packages/common/chirp-workflow/core/src/db/crdb_nats.rs @@ -226,6 +226,8 @@ impl Database for DatabaseCrdbNats { total_workflows=%rows.len(), "handled failover", ); + + self.wake_worker(); } // Clear lock diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/mod.rs b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/mod.rs index 90ef073a91..e9d0a473c9 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/mod.rs +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/mod.rs @@ -1,28 +1,4 @@ -// TODO: Use concrete error types -use anyhow::*; -use foundationdb::future::FdbValue; - pub mod signal; pub mod wake; pub mod worker_instance; pub mod workflow; - -pub trait FormalKey { - type Value; - - fn deserialize(&self, raw: &[u8]) -> Result; - - fn serialize(&self, value: Self::Value) -> Result>; -} - -pub trait FormalChunkedKey { - type Value; - type ChunkKey; - - fn chunk(&self, chunk: usize) -> Self::ChunkKey; - - /// Assumes chunks are in order. - fn combine(&self, chunks: Vec) -> Result; - - // fn split(&self, value: Self::Value) -> Result>>; -} diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/signal.rs b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/signal.rs index 76078c654c..766d46f577 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/signal.rs +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/signal.rs @@ -1,15 +1,9 @@ -use std::{borrow::Cow, result::Result::Ok}; +use std::result::Result::Ok; -// TODO: Use concrete error types use anyhow::*; -use foundationdb::{ - future::FdbValue, - tuple::{PackResult, TupleDepth, TuplePack, TupleUnpack, VersionstampOffset}, -}; +use fdb_util::prelude::*; use uuid::Uuid; -use super::{FormalChunkedKey, FormalKey}; - pub struct BodyKey { signal_id: Uuid, } @@ -47,9 +41,9 @@ impl FormalChunkedKey for BodyKey { .map_err(Into::into) } - // fn split(&self, value: Self::Value) -> Result>> { - // self.split_ref(value.as_ref()) - // } + fn split(&self, value: Self::Value) -> Result>> { + self.split_ref(value.as_ref()) + } } impl TuplePack for BodyKey { diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/wake.rs b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/wake.rs index 49b32cbb2a..be103f437b 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/wake.rs +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/wake.rs @@ -1,15 +1,10 @@ -use std::{borrow::Cow, result::Result::Ok}; +use std::result::Result::Ok; -// TODO: Use concrete error types use anyhow::*; -use foundationdb::tuple::{ - PackError, PackResult, TupleDepth, TuplePack, TupleUnpack, VersionstampOffset, -}; +use fdb_util::prelude::*; use serde::{Deserialize, Serialize}; use uuid::Uuid; -use super::FormalKey; - #[derive(Debug)] pub enum WakeCondition { Immediate, @@ -19,6 +14,27 @@ pub enum WakeCondition { TaggedSignal { signal_id: Uuid }, } +impl WakeCondition { + fn variant(&self) -> WakeConditionVariant { + match self { + WakeCondition::Immediate => WakeConditionVariant::Immediate, + WakeCondition::Deadline { .. } => WakeConditionVariant::Deadline, + WakeCondition::SubWorkflow { .. } => WakeConditionVariant::SubWorkflow, + WakeCondition::Signal { .. } => WakeConditionVariant::Signal, + WakeCondition::TaggedSignal { .. } => WakeConditionVariant::TaggedSignal, + } + } +} + +#[derive(strum::FromRepr)] +enum WakeConditionVariant { + Immediate = 0, + Deadline = 1, + SubWorkflow = 2, + Signal = 3, + TaggedSignal = 4, +} + #[derive(Debug)] pub struct WorkflowWakeConditionKey { pub workflow_name: String, @@ -77,7 +93,7 @@ impl TuplePack for WorkflowWakeConditionKey { &self.workflow_name, self.ts, self.workflow_id, - "immediate", + self.condition.variant() as usize, ); t.pack(w, tuple_depth) } @@ -89,7 +105,7 @@ impl TuplePack for WorkflowWakeConditionKey { // Already matches deadline ts, see `WorkflowWakeConditionKey::new` self.ts, self.workflow_id, - "deadline", + self.condition.variant() as usize, ); t.pack(w, tuple_depth) } @@ -100,7 +116,7 @@ impl TuplePack for WorkflowWakeConditionKey { &self.workflow_name, self.ts, self.workflow_id, - "sub_workflow", + self.condition.variant() as usize, sub_workflow_id, ); t.pack(w, tuple_depth) @@ -112,7 +128,7 @@ impl TuplePack for WorkflowWakeConditionKey { &self.workflow_name, self.ts, self.workflow_id, - "signal", + self.condition.variant() as usize, signal_id, ); t.pack(w, tuple_depth) @@ -124,7 +140,7 @@ impl TuplePack for WorkflowWakeConditionKey { &self.workflow_name, self.ts, self.workflow_id, - "tagged_signal", + self.condition.variant() as usize, signal_id, ); t.pack(w, tuple_depth) @@ -135,11 +151,18 @@ impl TuplePack for WorkflowWakeConditionKey { impl<'de> TupleUnpack<'de> for WorkflowWakeConditionKey { fn unpack(input: &[u8], tuple_depth: TupleDepth) -> PackResult<(&[u8], Self)> { - let (input, (_, _, workflow_name, ts, workflow_id, condition_name)) = - <(Cow, Cow, String, i64, Uuid, String)>::unpack(input, tuple_depth)?; + let (input, (_, _, workflow_name, ts, workflow_id, wake_condition_variant)) = + <(Cow, Cow, String, i64, Uuid, usize)>::unpack(input, tuple_depth)?; + let wake_condition_variant = WakeConditionVariant::from_repr(wake_condition_variant) + .ok_or_else(|| { + PackError::Message( + format!("invalid wake condition variant `{wake_condition_variant}` in key") + .into(), + ) + })?; - let (input, v) = match &*condition_name { - "immediate" => ( + let (input, v) = match wake_condition_variant { + WakeConditionVariant::Immediate => ( input, WorkflowWakeConditionKey { workflow_name, @@ -148,7 +171,7 @@ impl<'de> TupleUnpack<'de> for WorkflowWakeConditionKey { condition: WakeCondition::Immediate, }, ), - "deadline" => ( + WakeConditionVariant::Deadline => ( input, WorkflowWakeConditionKey { workflow_name, @@ -160,7 +183,7 @@ impl<'de> TupleUnpack<'de> for WorkflowWakeConditionKey { }, }, ), - "sub_workflow" => { + WakeConditionVariant::SubWorkflow => { let (input, sub_workflow_id) = Uuid::unpack(input, tuple_depth)?; ( @@ -173,7 +196,7 @@ impl<'de> TupleUnpack<'de> for WorkflowWakeConditionKey { }, ) } - "signal" => { + WakeConditionVariant::Signal => { let (input, signal_id) = Uuid::unpack(input, tuple_depth)?; ( @@ -186,7 +209,7 @@ impl<'de> TupleUnpack<'de> for WorkflowWakeConditionKey { }, ) } - "tagged_signal" => { + WakeConditionVariant::TaggedSignal => { let (input, signal_id) = Uuid::unpack(input, tuple_depth)?; ( @@ -199,11 +222,6 @@ impl<'de> TupleUnpack<'de> for WorkflowWakeConditionKey { }, ) } - _ => { - return Err(PackError::Message( - format!("invalid wake condition type {condition_name:?} in key").into(), - )) - } }; Ok((input, v)) diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/worker_instance.rs b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/worker_instance.rs index 072cb2ca04..41d2c13729 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/worker_instance.rs +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/worker_instance.rs @@ -1,12 +1,9 @@ -use std::{borrow::Cow, result::Result::Ok}; +use std::result::Result::Ok; -// TODO: Use concrete error types use anyhow::*; -use foundationdb::tuple::{PackResult, TupleDepth, TuplePack, TupleUnpack, VersionstampOffset}; +use fdb_util::prelude::*; use uuid::Uuid; -use super::FormalKey; - #[derive(Debug)] pub struct LastPingTsKey { worker_instance_id: Uuid, diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/workflow.rs b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/workflow.rs index 1a58f8fe5b..c5c2797887 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/workflow.rs +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/keys/workflow.rs @@ -1,15 +1,10 @@ -use std::{borrow::Cow, result::Result::Ok}; +use std::result::Result::Ok; -// TODO: Use concrete error types use anyhow::*; -use foundationdb::{ - future::FdbValue, - tuple::{PackResult, TupleDepth, TuplePack, TupleUnpack, VersionstampOffset}, -}; +use fdb_util::prelude::*; use uuid::Uuid; -use super::{FormalChunkedKey, FormalKey}; - +#[derive(Debug)] pub struct LeaseKey { pub workflow_id: Uuid, } @@ -191,9 +186,9 @@ impl FormalChunkedKey for InputKey { .map_err(Into::into) } - // fn split(&self, value: Self::Value) -> Result>> { - // self.split_ref(value.as_ref()) - // } + fn split(&self, value: Self::Value) -> Result>> { + self.split_ref(value.as_ref()) + } } impl TuplePack for InputKey { @@ -270,9 +265,9 @@ impl FormalChunkedKey for OutputKey { .map_err(Into::into) } - // fn split(&self, value: Self::Value) -> Result>> { - // self.split_ref(value.as_ref()) - // } + fn split(&self, value: Self::Value) -> Result>> { + self.split_ref(value.as_ref()) + } } impl TuplePack for OutputKey { diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/mod.rs b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/mod.rs index 17a88a4a23..5ba661c561 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/mod.rs +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/mod.rs @@ -18,7 +18,8 @@ use foundationdb::{ use futures_util::{StreamExt, TryStreamExt}; use indoc::indoc; use rivet_pools::prelude::*; -use sqlite_util::SqliteConnectionExt; +use serde_json::json; +use sqlite_util::SqlitePoolExt; use tokio::sync::Mutex; use tracing::Instrument; use uuid::Uuid; @@ -32,7 +33,7 @@ use crate::{ }, metrics, worker, }; -use keys::{FormalChunkedKey, FormalKey}; +use fdb_util::{FormalChunkedKey, FormalKey, SERIALIZABLE, SNAPSHOT}; mod keys; mod sqlite; @@ -52,9 +53,6 @@ const METRICS_LOCK_TIMEOUT_MS: i64 = rivet_util::duration::seconds(30); const CONTEXT_NAME: &str = "chirp_workflow_fdb_sqlite_nats_engine"; /// For NATS wake mechanism. const WORKER_WAKE_SUBJECT: &str = "chirp.workflow.fdb_sqlite_nats.worker.wake"; -/// Makes the code blatantly obvious if its using a snapshot read. -const SNAPSHOT: bool = true; -const SERIALIZABLE: bool = false; /// Once tagged signals get removed, this and all of their code can be as well. This allows us to gradually /// move off of tagged signals and makes it clear which code relates to tagged signals @@ -255,6 +253,8 @@ impl Database for DatabaseFdbSqliteNats { expired_workflow_count += 1; expired_worker_instance_ids.push(worker_instance_id); + + tracing::debug!(?lease_key.workflow_id, "failed over wf"); } } @@ -268,6 +268,8 @@ impl Database for DatabaseFdbSqliteNats { total_workflows=%expired_workflow_count, "handled failover", ); + + self.wake_worker(); } Ok(()) @@ -387,10 +389,16 @@ impl Database for DatabaseFdbSqliteNats { input: &serde_json::value::RawValue, unique: bool, ) -> WorkflowResult { - assert!( - !unique, - "unique dispatch unimplemented for fdb_sqlite_nats driver" - ); + if unique { + let empty_tags = json!({}); + + if let Some(existing_workflow_id) = self + .find_workflow(workflow_name, tags.unwrap_or(&empty_tags)) + .await? + { + return Ok(existing_workflow_id); + } + } self.pools .fdb()? @@ -587,9 +595,9 @@ impl Database for DatabaseFdbSqliteNats { } } - /// Returns the first workflow with the given name and tags, first meaning the one with the lowest uuid - /// value (interpreted as u128) because its in a KV store. There is no way to get any other workflow - /// besides the first. + /// Returns the first incomplete workflow with the given name and tags, first meaning the one with the + /// lowest uuid value (interpreted as u128) because its in a KV store. There is no way to get any other + /// workflow besides the first. async fn find_workflow( &self, workflow_name: &str, @@ -626,7 +634,7 @@ impl Database for DatabaseFdbSqliteNats { )) } else { // No tags provided, use null subspace. Every workflow has a null key for its tags - // under the `ByNameAndTagKey` + // under the `ByNameAndTagKey` subspace self.subspace .subspace(&keys::workflow::ByNameAndTagKey::null_subspace( workflow_name.to_string(), @@ -659,7 +667,7 @@ impl Database for DatabaseFdbSqliteNats { .deserialize(entry.value()) .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; - // Compute intersection between wf tags and signal tags + // Compute intersection between wf tags and input let tags_match = rest_of_tags.iter().all(|(k, v)| { wf_rest_of_tags .iter() @@ -791,18 +799,15 @@ impl Database for DatabaseFdbSqliteNats { }) // TODO: How to get rid of this buffer? .buffer_unordered(1024) - .try_filter_map(|x| async move { Ok(x) }) + .try_filter_map(|x| std::future::ready(Ok(x))) .try_collect::>() .await?; // TODO: Split this txn into two after checking leases here? - for (raw_key, key) in &entries { - // Check if leased - if !leased_wf_ids.iter().any(|wf_id| wf_id == &key.workflow_id) { - continue; - } + let entries_with_lease = entries.into_iter().filter(|(_, key)| leased_wf_ids.iter().any(|wf_id| wf_id == &key.workflow_id)).collect::>(); + for (raw_key, key) in &entries_with_lease { // Clear fetched wake conditions tx.clear(raw_key); @@ -842,7 +847,7 @@ impl Database for DatabaseFdbSqliteNats { } // Read required data for each leased wf - futures_util::stream::iter(entries) + futures_util::stream::iter(entries_with_lease) .map(|(_, key)| { let tx = tx.clone(); async move { @@ -914,12 +919,15 @@ impl Database for DatabaseFdbSqliteNats { // Set up sqlite let pulled_workflows = futures_util::stream::iter(partial_workflows) .map(|partial| async move { - let pool = self.pools.sqlite(db_name(partial.workflow_id)).await?; - sqlite::init(partial.workflow_id, &pool).await?; + let pool = &self + .pools + .sqlite(db_name(partial.workflow_id), false) + .await?; + sqlite::init(partial.workflow_id, pool).await?; // Fetch all events let events = sql_fetch_all!( - [self, sqlite::AmalgamEventRow, &pool] + [self, sqlite::AmalgamEventRow, pool] " -- Activity events SELECT @@ -1030,7 +1038,7 @@ impl Database for DatabaseFdbSqliteNats { NULL AS auxiliary_id, NULL AS hash, json(state) AS input, - output, + json(output) AS output, NULL AS create_ts, NULL AS error_count, iteration, @@ -1196,6 +1204,56 @@ impl Database for DatabaseFdbSqliteNats { tx.clear(entry.key()); } + let tags_subspace = self + .subspace + .subspace(&keys::workflow::TagKey::subspace(workflow_id)); + + // Read tags + let tag_keys = tx + .get_ranges_keyvalues( + fdb::RangeOption { + mode: StreamingMode::WantAll, + ..(&tags_subspace).into() + }, + SERIALIZABLE, + ) + .map(|res| match res { + Ok(entry) => self + .subspace + .unpack::(entry.key()) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into())), + Err(err) => Err(Into::::into(err)), + }) + .try_collect::>() + .await?; + + // TODO: Waking a workflow that already completed will result in it not having this index + // Clear "by name and first tag" secondary index + for key in tag_keys { + let by_name_and_tag_key = keys::workflow::ByNameAndTagKey::new( + workflow_name.to_string(), + key.k, + key.v, + workflow_id, + ); + tx.clear(&self.subspace.pack(&by_name_and_tag_key)); + } + + // Clear null key + { + let by_name_and_tag_key = keys::workflow::ByNameAndTagKey::null( + workflow_name.to_string(), + workflow_id, + ); + tx.clear(&self.subspace.pack(&by_name_and_tag_key)); + } + + // Clear all previous wake signals in list + let wake_signals_subspace = self + .subspace + .subspace(&keys::workflow::WakeSignalKey::subspace(workflow_id)); + tx.clear_subspace_range(&wake_signals_subspace); + // Get and clear the pending deadline wake condition, if any. We have to clear here because // the `pull_workflows` function might not have pulled the condition if its in the future. let wake_deadline_key = keys::workflow::WakeDeadlineKey::new(workflow_id); @@ -1230,6 +1288,12 @@ impl Database for DatabaseFdbSqliteNats { tx.set(&chunk_key, &chunk); } + // Clear lease + let lease_key = self + .subspace + .pack(&keys::workflow::LeaseKey::new(workflow_id)); + tx.clear(&lease_key); + Ok(()) }) .await?; @@ -1407,7 +1471,7 @@ impl Database for DatabaseFdbSqliteNats { version: usize, loop_location: Option<&Location>, ) -> WorkflowResult> { - let pool = self.pools.sqlite(db_name(workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(workflow_id), false).await?; let owned_filter = filter .into_iter() @@ -2018,7 +2082,6 @@ impl Database for DatabaseFdbSqliteNats { SNAPSHOT, ); - // TODO: This is almost a full scan while let Some(entry) = stream.try_next().await.unwrap() { let signal_wake_key = self .subspace @@ -2077,12 +2140,12 @@ impl Database for DatabaseFdbSqliteNats { body: &serde_json::value::RawValue, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; // Insert history event self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_signal_send_events ( location, version, signal_id, signal_name, body, create_ts, loop_location @@ -2108,7 +2171,7 @@ impl Database for DatabaseFdbSqliteNats { // Undo history if FDB failed self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " DELETE FROM workflow_signal_send_events WHERE location = ? @@ -2138,12 +2201,12 @@ impl Database for DatabaseFdbSqliteNats { loop_location: Option<&Location>, ) -> WorkflowResult<()> { if TAGGED_SIGNALS_ENABLED { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; // Insert history event self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_signal_send_events ( location, version, signal_id, signal_name, body, create_ts, loop_location @@ -2169,7 +2232,7 @@ impl Database for DatabaseFdbSqliteNats { // Undo history if FDB failed self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " DELETE FROM workflow_signal_send_events WHERE location = ? @@ -2202,12 +2265,12 @@ impl Database for DatabaseFdbSqliteNats { loop_location: Option<&Location>, unique: bool, ) -> WorkflowResult { - let pool = self.pools.sqlite(db_name(workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(workflow_id), false).await?; // Insert history event self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_sub_workflow_events ( location, version, sub_workflow_id, sub_workflow_name, create_ts, loop_location @@ -2241,7 +2304,7 @@ impl Database for DatabaseFdbSqliteNats { // Undo history if FDB failed self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " DELETE FROM workflow_sub_workflow_events WHERE location = ? @@ -2364,14 +2427,14 @@ impl Database for DatabaseFdbSqliteNats { res: Result<&serde_json::value::RawValue, &str>, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(workflow_id), false).await?; let input_hash = event_id.input_hash.to_be_bytes(); match res { Ok(output) => { self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_activity_events ( location, @@ -2402,14 +2465,7 @@ impl Database for DatabaseFdbSqliteNats { } Err(err) => { self.query(|| async { - // Attempt to use an existing connection - let mut conn = if let Some(conn) = pool.try_acquire() { - conn - } else { - // Create a new connection - pool.acquire().await? - }; - let mut tx = conn.begin_immediate().await?; + let mut tx = pool.begin_immediate().await?; sql_execute!( [self, @tx &mut tx] @@ -2470,11 +2526,11 @@ impl Database for DatabaseFdbSqliteNats { body: &serde_json::value::RawValue, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_message_send_events ( location, version, tags, message_name, body, create_ts, loop_location @@ -2506,17 +2562,10 @@ impl Database for DatabaseFdbSqliteNats { output: Option<&serde_json::value::RawValue>, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(workflow_id), false).await?; self.query(|| async { - // Attempt to use an existing connection - let mut conn = if let Some(conn) = pool.try_acquire() { - conn - } else { - // Create a new connection - pool.acquire().await? - }; - let mut tx = conn.begin_immediate().await?; + let mut tx = pool.begin_immediate().await?; sql_execute!( [self, @tx &mut tx] @@ -2680,11 +2729,11 @@ impl Database for DatabaseFdbSqliteNats { deadline_ts: i64, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_sleep_events ( location, version, deadline_ts, create_ts, state, loop_location @@ -2711,15 +2760,15 @@ impl Database for DatabaseFdbSqliteNats { location: &Location, state: SleepState, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " UPDATE workflow_sleep_events SET state = ? - WHERE location = ? + WHERE location = jsonb(?) ", state as i64, location, @@ -2738,11 +2787,11 @@ impl Database for DatabaseFdbSqliteNats { version: usize, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_branch_events ( location, version, create_ts, loop_location @@ -2769,11 +2818,11 @@ impl Database for DatabaseFdbSqliteNats { event_name: Option<&str>, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_removed_events ( location, event_type, event_name, create_ts, loop_location @@ -2800,11 +2849,11 @@ impl Database for DatabaseFdbSqliteNats { version: usize, loop_location: Option<&Location>, ) -> WorkflowResult<()> { - let pool = self.pools.sqlite(db_name(from_workflow_id)).await?; + let pool = &self.pools.sqlite(db_name(from_workflow_id), false).await?; self.query(|| async { sql_execute!( - [self, &pool] + [self, pool] " INSERT INTO workflow_version_check_events ( location, version, create_ts, loop_location diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/migrations/20250122212060_init.sql b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/migrations/20250122212060_init.sql index c4d39bf94f..cd47dc3bc3 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/migrations/20250122212060_init.sql +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/migrations/20250122212060_init.sql @@ -21,10 +21,11 @@ ON workflow_activity_events (loop_location) WHERE NOT forgotten; CREATE TABLE workflow_activity_errors ( - location BLOB PRIMARY KEY, -- JSONB + location BLOB NOT NULL, -- JSONB activity_name TEXT NOT NULL, error TEXT NOT NULL, ts INT NOT NULL, + FOREIGN KEY (location) REFERENCES workflow_activity_events (location) ) STRICT; diff --git a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/mod.rs b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/mod.rs index 905d3a19a2..8edaad968e 100644 --- a/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/mod.rs +++ b/packages/common/chirp-workflow/core/src/db/fdb_sqlite_nats/sqlite/mod.rs @@ -3,6 +3,7 @@ use std::collections::HashMap; use include_dir::{include_dir, Dir, File}; use indoc::indoc; use rivet_pools::prelude::*; +use sqlite_util::{SqliteConnectionExt, SqlitePoolExt}; use uuid::Uuid; use crate::{ @@ -170,18 +171,24 @@ pub async fn init(workflow_id: Uuid, pool: &SqlitePool) -> WorkflowResult<()> { } async fn run_migrations(pool: &SqlitePool, last_index: i64) -> WorkflowResult<()> { + let mut conn = pool.conn().await?; + for (idx, file) in &*MIGRATIONS.files { // Skip already applied migrations if *idx <= last_index { continue; } + let mut tx = conn.begin_immediate().await?; + sql_execute!( - [SqlStub {}, pool] + [SqlStub {}, @tx &mut tx] file.contents_utf8().unwrap(), ) .await .map_err(WorkflowError::into_migration_err)?; + + tx.commit().await?; } Ok(()) diff --git a/packages/common/chirp-workflow/core/src/db/mod.rs b/packages/common/chirp-workflow/core/src/db/mod.rs index 1e1648e5b2..af5229de51 100644 --- a/packages/common/chirp-workflow/core/src/db/mod.rs +++ b/packages/common/chirp-workflow/core/src/db/mod.rs @@ -26,18 +26,9 @@ pub trait Database: Send { where Self: Sized; - /// When using a wake worker instead of a polling worker, this function will return once the worker - /// should fetch the database again. - async fn wake(&self) -> WorkflowResult<()> { - tracing::debug!( - "{} does not implement Database::wake", - std::any::type_name::(), - ); - - std::future::pending::<()>().await; - - Ok(()) - } + /// This function will return once the worker should fetch the database again. Works alongside a polling + /// timer. + async fn wake(&self) -> WorkflowResult<()>; /// Releases workflows that were leased by workers that have since expired (their last ping has passed /// the expired threshold), making them eligible to be run again. Called periodically. @@ -284,6 +275,7 @@ impl WorkflowData { } } +#[derive(Debug)] pub struct PulledWorkflow { pub workflow_id: Uuid, pub workflow_name: String, diff --git a/packages/common/chirp-workflow/core/src/history/event.rs b/packages/common/chirp-workflow/core/src/history/event.rs index 646515246d..4fc725b7f0 100644 --- a/packages/common/chirp-workflow/core/src/history/event.rs +++ b/packages/common/chirp-workflow/core/src/history/event.rs @@ -191,9 +191,9 @@ pub struct SleepEvent { #[derive(Debug, Clone, Hash, Copy, PartialEq, Eq, FromRepr)] pub enum SleepState { - Normal, - Uninterrupted, - Interrupted, + Normal = 0, + Uninterrupted = 1, + Interrupted = 2, } impl std::fmt::Display for SleepState { diff --git a/packages/common/chirp-workflow/core/src/message.rs b/packages/common/chirp-workflow/core/src/message.rs index 89ea1c8c6c..de60fbd363 100644 --- a/packages/common/chirp-workflow/core/src/message.rs +++ b/packages/common/chirp-workflow/core/src/message.rs @@ -1,4 +1,4 @@ -use std::fmt::{Debug, Display}; +use std::fmt::Debug; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use uuid::Uuid; @@ -14,56 +14,6 @@ pub trait Message: Debug + Send + Sync + Serialize + DeserializeOwned + 'static } } -pub trait AsTags: Send + Sync { - fn as_tags(&self) -> WorkflowResult; - fn as_cjson_tags(&self) -> WorkflowResult; -} - -impl AsTags for (T, U) { - fn as_tags(&self) -> WorkflowResult { - let (k, v) = self; - Ok(serde_json::Value::Object( - IntoIterator::into_iter([( - k.to_string(), - serde_json::to_value(v).map_err(WorkflowError::SerializeTags)?, - )]) - .collect(), - )) - } - - fn as_cjson_tags(&self) -> WorkflowResult { - cjson::to_string(&self.as_tags()?).map_err(WorkflowError::CjsonSerializeTags) - } -} - -impl AsTags for serde_json::Value { - fn as_tags(&self) -> WorkflowResult { - match self { - serde_json::Value::Object(_) => Ok(self.clone()), - _ => Err(WorkflowError::InvalidTags("must be an object".to_string())), - } - } - - fn as_cjson_tags(&self) -> WorkflowResult { - match self { - serde_json::Value::Object(_) => { - cjson::to_string(&self).map_err(WorkflowError::CjsonSerializeTags) - } - _ => Err(WorkflowError::InvalidTags("must be an object".to_string())), - } - } -} - -impl AsTags for &T { - fn as_tags(&self) -> WorkflowResult { - (*self).as_tags() - } - - fn as_cjson_tags(&self) -> WorkflowResult { - (*self).as_cjson_tags() - } -} - /// A message received from a NATS subscription. #[derive(Debug)] pub struct NatsMessage diff --git a/packages/common/chirp-workflow/core/src/utils.rs b/packages/common/chirp-workflow/core/src/utils.rs index 0ba16c2191..e7717018ae 100644 --- a/packages/common/chirp-workflow/core/src/utils.rs +++ b/packages/common/chirp-workflow/core/src/utils.rs @@ -119,6 +119,64 @@ pub mod time { } } +pub mod tags { + use std::fmt::Display; + + use serde::Serialize; + + use crate::error::{WorkflowError, WorkflowResult}; + + pub trait AsTags: Send + Sync { + fn as_tags(&self) -> WorkflowResult; + fn as_cjson_tags(&self) -> WorkflowResult; + } + + impl AsTags for (T, U) { + fn as_tags(&self) -> WorkflowResult { + let (k, v) = self; + Ok(serde_json::Value::Object( + IntoIterator::into_iter([( + k.to_string(), + serde_json::to_value(v).map_err(WorkflowError::SerializeTags)?, + )]) + .collect(), + )) + } + + fn as_cjson_tags(&self) -> WorkflowResult { + cjson::to_string(&self.as_tags()?).map_err(WorkflowError::CjsonSerializeTags) + } + } + + impl AsTags for serde_json::Value { + fn as_tags(&self) -> WorkflowResult { + match self { + serde_json::Value::Object(_) => Ok(self.clone()), + _ => Err(WorkflowError::InvalidTags("must be an object".to_string())), + } + } + + fn as_cjson_tags(&self) -> WorkflowResult { + match self { + serde_json::Value::Object(_) => { + cjson::to_string(&self).map_err(WorkflowError::CjsonSerializeTags) + } + _ => Err(WorkflowError::InvalidTags("must be an object".to_string())), + } + } + } + + impl AsTags for &T { + fn as_tags(&self) -> WorkflowResult { + (*self).as_tags() + } + + fn as_cjson_tags(&self) -> WorkflowResult { + (*self).as_cjson_tags() + } + } +} + pub(crate) fn new_conn( shared_client: &chirp_client::SharedClientHandle, pools: &rivet_pools::Pools, diff --git a/packages/common/chirp-workflow/core/src/worker.rs b/packages/common/chirp-workflow/core/src/worker.rs index 15597cbc48..5b32f08ef3 100644 --- a/packages/common/chirp-workflow/core/src/worker.rs +++ b/packages/common/chirp-workflow/core/src/worker.rs @@ -49,7 +49,7 @@ impl Worker { let mut interval = tokio::time::interval(TICK_INTERVAL); interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip); - // Regular tick interval to clear expired leases + // Regular tick interval to clear expired leases and publish metrics let mut gc_interval = tokio::time::interval(GC_INTERVAL); gc_interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip); diff --git a/packages/common/chirp-workflow/core/tests/common.rs b/packages/common/chirp-workflow/core/tests/common.rs index 54c9537c77..8acdb05010 100644 --- a/packages/common/chirp-workflow/core/tests/common.rs +++ b/packages/common/chirp-workflow/core/tests/common.rs @@ -109,12 +109,17 @@ pub async fn create_fdb_db() { static SETUP_DEPENDENCIES: AtomicBool = AtomicBool::new(false); -pub async fn setup_dependencies() { +pub async fn setup_dependencies(fdb: bool) { if !SETUP_DEPENDENCIES.swap(true, Ordering::SeqCst) { tokio::spawn(start_nats()); tokio::spawn(start_redis()); - tokio::spawn(start_fdb()); - create_fdb_db().await; + + if fdb { + tokio::spawn(start_fdb()); + create_fdb_db().await; + } else { + tokio::time::sleep(std::time::Duration::from_millis(500)).await; + } } } @@ -125,7 +130,7 @@ pub fn setup_tracing() { .with( tracing_logfmt::builder() .layer() - .with_filter(tracing_subscriber::filter::LevelFilter::INFO), + .with_filter(tracing_subscriber::filter::LevelFilter::DEBUG), ) .init(); }); diff --git a/packages/common/chirp-workflow/core/tests/integration.rs b/packages/common/chirp-workflow/core/tests/integration.rs index 492668ea9e..4b2ac142be 100644 --- a/packages/common/chirp-workflow/core/tests/integration.rs +++ b/packages/common/chirp-workflow/core/tests/integration.rs @@ -8,7 +8,7 @@ use common::*; #[tokio::test(flavor = "multi_thread")] async fn fdb_sqlite_nats_driver() { setup_tracing(); - setup_dependencies().await; + setup_dependencies(true).await; let ctx = chirp_workflow::prelude::TestCtx::from_env::( "fdb_sqlite_nats_driver", @@ -81,7 +81,7 @@ async fn fdb_sqlite_nats_driver() { // Start worker tokio::select! { - res = worker.poll_start(config, pools) => res.unwrap(), + res = worker.start(config, pools) => res.unwrap(), res = tokio::signal::ctrl_c() => res.unwrap(), } } diff --git a/packages/common/config/src/config/server/mod.rs b/packages/common/config/src/config/server/mod.rs index c33026452c..ac90fd31d7 100644 --- a/packages/common/config/src/config/server/mod.rs +++ b/packages/common/config/src/config/server/mod.rs @@ -35,7 +35,7 @@ pub struct Server { #[serde(default)] pub prometheus: Option, #[serde(default)] - pub fdb: Fdb, + pub foundationdb: FoundationDb, // Services #[serde(default)] @@ -448,11 +448,11 @@ impl ClickHouseUserRole { #[derive(Debug, Serialize, Deserialize, Clone, JsonSchema)] #[serde(rename_all = "snake_case", deny_unknown_fields)] -pub struct Fdb { +pub struct FoundationDb { pub connection: String, } -impl Default for Fdb { +impl Default for FoundationDb { fn default() -> Self { Self { connection: "fdb:fdb@127.0.0.1:4500".to_string(), diff --git a/packages/common/config/src/config/server/rivet/mod.rs b/packages/common/config/src/config/server/rivet/mod.rs index 57e8a7f11b..b8c579b47e 100644 --- a/packages/common/config/src/config/server/rivet/mod.rs +++ b/packages/common/config/src/config/server/rivet/mod.rs @@ -119,6 +119,10 @@ pub struct Rivet { #[serde(default)] pub cdn: Option, + + /// Configuration for edge clusters. Should be null on the core cluster. + #[serde(default)] + pub edge: Option, } impl Default for Rivet { @@ -145,6 +149,7 @@ impl Default for Rivet { billing: None, backend: None, test_builds: Default::default(), + edge: None, } } } @@ -228,6 +233,10 @@ impl Rivet { pub fn status(&self) -> GlobalResult<&Status> { Ok(unwrap_ref!(self.status, "status api disabled")) } + + pub fn edge(&self) -> GlobalResult<&Edge> { + Ok(unwrap_ref!(self.edge, "edge disabled")) + } } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, JsonSchema)] @@ -687,3 +696,13 @@ impl Default for Telemetry { Telemetry { enable: true } } } + +/// Configuration for edge clusters. +#[derive(Debug, Serialize, Deserialize, Clone, JsonSchema)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Edge { + pub cluster_id: Uuid, + pub datacenter_id: Uuid, + pub server_token: Option>, + pub intercom_endpoint: String, +} diff --git a/packages/common/connection/src/lib.rs b/packages/common/connection/src/lib.rs index da43d8a19f..26630dff33 100644 --- a/packages/common/connection/src/lib.rs +++ b/packages/common/connection/src/lib.rs @@ -94,6 +94,18 @@ impl Connection { self.pools.redis("ephemeral") } + pub async fn fdb(&self) -> Result { + self.pools.fdb() + } + + pub async fn sqlite( + &self, + key: impl AsRef, + read_only: bool, + ) -> Result { + self.pools.sqlite(key, read_only).await + } + pub fn perf(&self) -> &chirp_perf::PerfCtx { self.client.perf() } diff --git a/packages/common/fdb-util/Cargo.toml b/packages/common/fdb-util/Cargo.toml index 12d78b122f..f07d554863 100644 --- a/packages/common/fdb-util/Cargo.toml +++ b/packages/common/fdb-util/Cargo.toml @@ -8,6 +8,7 @@ edition.workspace = true [dependencies] anyhow = "1.0" foundationdb.workspace = true +global-error.workspace = true lazy_static = "1.4" tokio = { version = "1.40.0", features = ["full"] } tracing = "0.1.40" diff --git a/packages/common/fdb-util/src/lib.rs b/packages/common/fdb-util/src/lib.rs index bbb36a0e14..f66d620bf0 100644 --- a/packages/common/fdb-util/src/lib.rs +++ b/packages/common/fdb-util/src/lib.rs @@ -1,7 +1,15 @@ -use std::{path::{PathBuf, Path}, result::Result::Ok, time::Duration}; +use std::{ + path::{Path, PathBuf}, + result::Result::Ok, + time::Duration, +}; use anyhow::*; -use foundationdb::{self as fdb, options::DatabaseOption}; +use foundationdb::{self as fdb, future::FdbValue, options::DatabaseOption}; + +/// Makes the code blatantly obvious if its using a snapshot read. +pub const SNAPSHOT: bool = true; +pub const SERIALIZABLE: bool = false; lazy_static::lazy_static! { /// Must only be created once per program and must not be dropped until the program is over otherwise all @@ -9,6 +17,26 @@ lazy_static::lazy_static! { static ref FDB_NETWORK: fdb::api::NetworkAutoStop = unsafe { fdb::boot() }; } +pub trait FormalKey { + type Value; + + fn deserialize(&self, raw: &[u8]) -> Result; + + fn serialize(&self, value: Self::Value) -> Result>; +} + +pub trait FormalChunkedKey { + type Value; + type ChunkKey; + + fn chunk(&self, chunk: usize) -> Self::ChunkKey; + + /// Assumes chunks are in order. + fn combine(&self, chunks: Vec) -> Result; + + fn split(&self, value: Self::Value) -> Result>>; +} + pub fn handle(fdb_cluster_path: &Path) -> Result { let db = fdb::Database::from_path( &fdb_cluster_path @@ -34,7 +62,7 @@ pub async fn fdb_health_check(fdb_cluster_path: PathBuf) -> Result<()> { let db = handle(&fdb_cluster_path)?; loop { - match ::tokio::time::timeout( + match tokio::time::timeout( Duration::from_secs(3), db.run(|trx, _maybe_committed| async move { Ok(trx.get(b"", true).await?) }), ) @@ -46,6 +74,17 @@ pub async fn fdb_health_check(fdb_cluster_path: PathBuf) -> Result<()> { Err(_) => tracing::error!("fdb missed ping"), } - ::tokio::time::sleep(Duration::from_secs(3)).await; + tokio::time::sleep(Duration::from_secs(3)).await; } } + +pub mod prelude { + pub use std::{borrow::Cow, result::Result::Ok}; + + pub use foundationdb::{ + future::FdbValue, + tuple::{PackError, PackResult, TupleDepth, TuplePack, TupleUnpack, VersionstampOffset}, + }; + + pub use super::{FormalChunkedKey, FormalKey}; +} diff --git a/packages/common/operation/core/src/lib.rs b/packages/common/operation/core/src/lib.rs index 7f9cf30cb3..d61890518b 100644 --- a/packages/common/operation/core/src/lib.rs +++ b/packages/common/operation/core/src/lib.rs @@ -240,6 +240,7 @@ where self.conn.cache_handle() } + /// Used by compat layer for chirp workflow. pub fn pools(&self) -> &rivet_pools::Pools { self.conn.pools() } diff --git a/packages/common/pools/Cargo.toml b/packages/common/pools/Cargo.toml index 3a03fd6862..d2da4ab657 100644 --- a/packages/common/pools/Cargo.toml +++ b/packages/common/pools/Cargo.toml @@ -21,6 +21,7 @@ lazy_static = "1.4" rand = "0.8" rivet-config.workspace = true rivet-metrics.workspace = true +sqlite-util.workspace = true tempfile = "3.13.0" thiserror = "1.0" tokio = { version = "1.40", features = ["tracing"] } diff --git a/packages/common/pools/src/db/fdb.rs b/packages/common/pools/src/db/fdb.rs index 23b92762a6..34525368f1 100644 --- a/packages/common/pools/src/db/fdb.rs +++ b/packages/common/pools/src/db/fdb.rs @@ -23,7 +23,11 @@ impl Deref for FdbPool { #[tracing::instrument(skip(config))] pub async fn setup(config: Config) -> Result { - let connection = &config.server().map_err(Error::Global)?.fdb.connection; + let connection = &config + .server() + .map_err(Error::Global)? + .foundationdb + .connection; let temp_file = tempfile::NamedTempFile::new().map_err(Error::BuildFdbConnectionFile)?; fs::write(temp_file.path(), connection.as_bytes()) diff --git a/packages/common/pools/src/db/sqlite.rs b/packages/common/pools/src/db/sqlite.rs index 73dc363f30..77f7798995 100644 --- a/packages/common/pools/src/db/sqlite.rs +++ b/packages/common/pools/src/db/sqlite.rs @@ -1,6 +1,7 @@ use std::{collections::HashMap, sync::Arc, time::Duration}; use futures_util::{StreamExt, TryStreamExt}; +use sqlite_util::SqlitePoolExt; use sqlx::{ migrate::MigrateDatabase, sqlite::{SqliteConnectOptions, SqlitePoolOptions}, @@ -12,10 +13,16 @@ use crate::Error; pub type SqlitePool = sqlx::SqlitePool; +#[derive(Debug, Hash, Eq, PartialEq)] +struct Key { + key: String, + read_only: bool, +} + #[derive(Clone)] pub struct SqlitePoolManager { // TODO: Somehow remove old pools - pools: Arc>>, + pools: Arc>>, } impl SqlitePoolManager { @@ -26,14 +33,19 @@ impl SqlitePoolManager { } /// Get or creates an sqlite pool for the given key - pub async fn get(&self, key: &str) -> Result { + pub async fn get(&self, key: &str, read_only: bool) -> Result { let mut pools_guard = self.pools.lock().await; - let pool = if let Some(pool) = pools_guard.get(key) { + let key = Key { + key: key.to_string(), + read_only, + }; + + let pool = if let Some(pool) = pools_guard.get(&key) { pool.clone() } else { // TODO: Hardcoded for testing - let db_url = format!("sqlite:///home/rivet/rivet-ee/oss/packages/common/chirp-workflow/core/tests/db/{key}.db"); + let db_url = format!("sqlite:///var/lib/rivet-sqlite/{}.db", key.key); tracing::debug!(?key, "sqlite connecting"); @@ -47,7 +59,10 @@ impl SqlitePoolManager { .map_err(Error::BuildSqlx)?; } - let opts: SqliteConnectOptions = db_url.parse().map_err(Error::BuildSqlx)?; + let opts = db_url + .parse::() + .map_err(Error::BuildSqlx)? + .read_only(read_only); let pool = SqlitePoolOptions::new() .max_lifetime_jitter(Duration::from_secs(90)) @@ -60,10 +75,10 @@ impl SqlitePoolManager { // Run at the start of every connection setup_pragma(&pool).await.map_err(Error::BuildSqlx)?; - pools_guard.insert(key.to_string(), pool.clone()); - tracing::debug!(?key, "sqlite connected"); + pools_guard.insert(key, pool.clone()); + pool }; @@ -91,15 +106,7 @@ async fn setup_pragma(pool: &SqlitePool) -> Result<(), sqlx::Error> { .map(|setting| { let pool = pool.clone(); async move { - // Attempt to use an existing connection - let mut conn = if let Some(conn) = pool.try_acquire() { - conn - } else { - // Create a new connection - pool.acquire().await? - }; - // Result::<_, sqlx::Error>::Ok(()) - + let mut conn = pool.conn().await?; sqlx::query(&setting).execute(&mut *conn).await } }) diff --git a/packages/common/pools/src/pools.rs b/packages/common/pools/src/pools.rs index 985600352b..2b68ae6d2f 100644 --- a/packages/common/pools/src/pools.rs +++ b/packages/common/pools/src/pools.rs @@ -167,8 +167,8 @@ impl Pools { self.0.fdb.clone().ok_or(Error::MissingFdbPool) } - pub async fn sqlite(&self, key: impl AsRef) -> Result { - self.0.sqlite.get(key.as_ref()).await + pub async fn sqlite(&self, key: impl AsRef, read_only: bool) -> Result { + self.0.sqlite.get(key.as_ref(), read_only).await } #[tracing::instrument(skip_all)] diff --git a/packages/common/sqlite-util/src/lib.rs b/packages/common/sqlite-util/src/lib.rs index 821558bbb4..378a0e3755 100644 --- a/packages/common/sqlite-util/src/lib.rs +++ b/packages/common/sqlite-util/src/lib.rs @@ -4,17 +4,47 @@ use std::{ }; use sqlx::sqlite::SqliteQueryResult; -use sqlx::{Executor, SqliteConnection}; +use sqlx::{ + pool::PoolConnection, Executor, Sqlite, SqliteConnection, SqlitePool, TransactionManager, +}; + +pub trait SqlitePoolExt { + fn conn(&self) -> impl Future>>; + fn begin_immediate<'a, 'b>(&'a self) -> impl Future>>; +} + +impl SqlitePoolExt for SqlitePool { + async fn conn(&self) -> sqlx::Result> { + // Attempt to use an existing connection + if let Some(conn) = self.try_acquire() { + Ok(conn) + } else { + // Create a new connection + self.acquire().await + } + } + + async fn begin_immediate<'a, 'b>(&'a self) -> sqlx::Result> { + let mut conn = self.conn().await?; + + conn.execute("BEGIN IMMEDIATE").await?; + + Ok(Transaction { + conn: Conn::Owned(conn), + is_open: true, + }) + } +} pub trait SqliteConnectionExt { fn begin_immediate(&mut self) -> impl Future>; } -impl SqliteConnectionExt for SqliteConnection { +impl SqliteConnectionExt for PoolConnection { async fn begin_immediate(&mut self) -> sqlx::Result { - let conn = &mut *self; + let mut conn = Conn::Borrowed(self); - conn.execute("BEGIN IMMEDIATE;").await?; + conn.execute("BEGIN IMMEDIATE").await?; Ok(Transaction { conn, @@ -23,15 +53,40 @@ impl SqliteConnectionExt for SqliteConnection { } } +enum Conn<'b> { + Owned(PoolConnection), + Borrowed(&'b mut PoolConnection), +} + +impl<'c> Deref for Conn<'c> { + type Target = PoolConnection; + + fn deref(&self) -> &Self::Target { + match self { + Conn::Owned(conn) => &conn, + Conn::Borrowed(conn) => conn, + } + } +} + +impl<'c> DerefMut for Conn<'c> { + fn deref_mut(&mut self) -> &mut Self::Target { + match self { + Conn::Owned(conn) => conn, + Conn::Borrowed(conn) => conn, + } + } +} + pub struct Transaction<'c> { - conn: &'c mut SqliteConnection, + conn: Conn<'c>, /// is the transaction open? is_open: bool, } impl<'c> Transaction<'c> { pub async fn commit(mut self) -> sqlx::Result { - let res = self.conn.execute("COMMIT;").await; + let res = self.conn.execute("COMMIT").await; if res.is_ok() { self.is_open = false; @@ -44,10 +99,7 @@ impl<'c> Transaction<'c> { impl<'c> Drop for Transaction<'c> { fn drop(&mut self) { if self.is_open { - let handle = tokio::runtime::Handle::current(); - handle.block_on(async move { - let _ = self.execute("ROLLBACK").await; - }); + ::TransactionManager::start_rollback(&mut self.conn); } } } @@ -56,12 +108,12 @@ impl<'c> Deref for Transaction<'c> { type Target = SqliteConnection; fn deref(&self) -> &Self::Target { - self.conn + &*self.conn } } impl<'c> DerefMut for Transaction<'c> { fn deref_mut(&mut self) -> &mut Self::Target { - self.conn + &mut *self.conn } } diff --git a/packages/common/types-proto/build/src/lib.rs b/packages/common/types-proto/build/src/lib.rs index b16f6c8003..3f2deada1f 100644 --- a/packages/common/types-proto/build/src/lib.rs +++ b/packages/common/types-proto/build/src/lib.rs @@ -39,7 +39,7 @@ where // Add protos from all services for project_root in &project_roots { - for entry in fs::read_dir(project_root.join("packages").join("services"))? { + for entry in fs::read_dir(project_root.join("packages").join("core").join("services"))? { let entry = entry?; let proto_path = entry.path().join("proto"); diff --git a/packages/common/util/Cargo.lock b/packages/common/util/Cargo.lock deleted file mode 100644 index 4aedb2863a..0000000000 --- a/packages/common/util/Cargo.lock +++ /dev/null @@ -1,1988 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" - -[[package]] -name = "arraydeque" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" - -[[package]] -name = "async-trait" -version = "0.1.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", -] - -[[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "backtrace" -version = "0.3.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bcrypt" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e7c93a3fb23b2fdde989b2c9ec4dd153063ec81f408507f84c090cd91c6641" -dependencies = [ - "base64 0.13.1", - "blowfish", - "getrandom", - "zeroize", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - -[[package]] -name = "blowfish" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" -dependencies = [ - "byteorder", - "cipher", -] - -[[package]] -name = "bolt-config" -version = "0.1.0" -dependencies = [ - "heck 0.3.3", - "serde", - "serde_json", - "strum", - "strum_macros", - "toml 0.7.8", - "uuid", -] - -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" - -[[package]] -name = "cc" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chirp-types" -version = "0.1.0" -dependencies = [ - "prost 0.10.4", -] - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-targets 0.52.6", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "encoding_rs" -version = "0.8.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "formatted-error" -version = "0.1.0" -dependencies = [ - "gray_matter", - "hashbrown 0.12.3", - "http", - "indoc", - "lazy_static", - "serde", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-macro", - "futures-task", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" - -[[package]] -name = "global-error" -version = "0.1.5" -dependencies = [ - "async-trait", - "formatted-error", - "http", - "reqwest", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "gray_matter" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ee6a6070bad7c953b0c8be9367e9372181fed69f3e026c4eb5160d8b3c0222" -dependencies = [ - "serde", - "serde_json", - "toml 0.5.11", - "yaml-rust2", -] - -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash 0.8.11", - "allocator-api2", -] - -[[package]] -name = "hashlink" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown 0.14.5", - "serde", -] - -[[package]] -name = "indoc" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" -dependencies = [ - "serde", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "js-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "object" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "openssl" -version = "0.10.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" -dependencies = [ - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "proc-macro2" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e" -dependencies = [ - "bytes", - "prost-derive 0.10.1", -] - -[[package]] -name = "prost" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" -dependencies = [ - "bytes", - "prost-derive 0.11.9", -] - -[[package]] -name = "prost-build" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" -dependencies = [ - "bytes", - "heck 0.4.1", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost 0.11.9", - "prost-types 0.11.9", - "regex", - "syn 1.0.109", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "prost-derive" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "prost-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" -dependencies = [ - "bytes", - "prost 0.10.4", -] - -[[package]] -name = "prost-types" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" -dependencies = [ - "prost 0.11.9", -] - -[[package]] -name = "quote" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "redox_syscall" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "regex" -version = "1.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "system-configuration", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "rivet-util" -version = "0.1.0" -dependencies = [ - "async-trait", - "bcrypt", - "chrono", - "formatted-error", - "futures-util", - "global-error", - "indexmap", - "ipnet", - "lazy_static", - "rand", - "regex", - "reqwest", - "rivet-util-env", - "rivet-util-macros", - "serde", - "serde_json", - "thiserror", - "tokio", - "types-proto", - "uuid", -] - -[[package]] -name = "rivet-util-env" -version = "0.1.0" -dependencies = [ - "lazy_static", - "serde", - "serde_json", - "thiserror", - "types-proto", - "uuid", -] - -[[package]] -name = "rivet-util-macros" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "rivet-util-search" -version = "0.1.0" -dependencies = [ - "uuid", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustversion" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "schemac" -version = "0.1.0" -dependencies = [ - "lazy_static", - "prost-build", - "regex", - "tempfile", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "serde" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", -] - -[[package]] -name = "serde_json" -version = "1.0.120" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_spanned" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.71", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "thiserror" -version = "1.0.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", -] - -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.38.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-macros" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "types-proto" -version = "0.1.0" -dependencies = [ - "chirp-types", - "http", - "prost 0.10.4", - "prost-types 0.10.1", - "serde", - "serde_json", - "thiserror", - "types-proto-build", - "uuid", -] - -[[package]] -name = "types-proto-build" -version = "0.1.0" -dependencies = [ - "bolt-config", - "heck 0.3.3", - "indoc", - "prost-build", - "regex", - "schemac", - "serde", - "toml 0.7.8", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" - -[[package]] -name = "url" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "uuid" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" -dependencies = [ - "getrandom", - "serde", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.71", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[package]] -name = "web-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "yaml-rust2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" -dependencies = [ - "arraydeque", - "encoding_rs", - "hashlink", -] - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.71", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/packages/common/util/core/src/lib.rs b/packages/common/util/core/src/lib.rs index b2bbf0b4d0..e51a3ffb6a 100644 --- a/packages/common/util/core/src/lib.rs +++ b/packages/common/util/core/src/lib.rs @@ -123,8 +123,7 @@ impl Backoff { tokio::time::sleep_until(self.sleep_until).await; - let next_wait = self.wait * 2usize.pow(self.i.min(self.max_exponent) as u32) - + rand::thread_rng().gen_range(0..self.randomness); + let next_wait = self.current_duration() + rand::thread_rng().gen_range(0..self.randomness); self.sleep_until += Duration::from_millis(next_wait as u64); self.i += 1; @@ -149,6 +148,10 @@ impl Backoff { Some(self.sleep_until) } + pub fn current_duration(&self) -> usize { + self.wait * 2usize.pow(self.i.min(self.max_exponent) as u32) + } + pub fn default_infinite() -> Backoff { Backoff::new(8, None, 1_000, 1_000) } diff --git a/packages/core/api/actor/Cargo.toml b/packages/core/api/actor/Cargo.toml new file mode 100644 index 0000000000..9e1da10688 --- /dev/null +++ b/packages/core/api/actor/Cargo.toml @@ -0,0 +1,73 @@ +[package] +name = "api-core-actor" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +chirp-client.workspace = true +rivet-operation.workspace = true +chrono = "0.4" +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } +lazy_static = "1.4" +rivet-api.workspace = true +rivet-cache.workspace = true +rivet-claims.workspace = true +rivet-health-checks.workspace = true +rivet-convert.workspace = true +rivet-pools.workspace = true +s3-util.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +base64 = "0.13" +tokio = { version = "1.40" } +tracing = "0.1" +tracing-futures = "0.2" +tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt", "json", "ansi"] } +url = "2.2.2" +util-team.workspace = true +uuid = { version = "1", features = ["v4"] } + +build-create.workspace = true +build-get.workspace = true +build-list-for-env.workspace = true +build.workspace = true +cluster.workspace = true +ds-log-export.workspace = true +ds-log-read.workspace = true +ds.workspace = true +game-get.workspace = true +game-namespace-get.workspace = true +game-namespace-resolve-name-id.workspace = true +game-resolve-name-id.workspace = true +game-version-get.workspace = true +pegboard.workspace = true +region-recommend.workspace = true +rivet-config.workspace = true +rivet-env.workspace = true +team-get.workspace = true +token-create.workspace = true +token-revoke.workspace = true +upload-complete.workspace = true +upload-get.workspace = true +user-get.workspace = true +user-identity-get.workspace = true +user-team-list.workspace = true + +[dev-dependencies] +rivet-connection.workspace = true +reqwest = "0.11" + +cdn-namespace-domain-create.workspace = true +cloud-namespace-token-development-create.workspace = true +cloud-namespace-token-public-create.workspace = true +faker-build.workspace = true +faker-game-namespace.workspace = true +faker-game-version.workspace = true +faker-game.workspace = true +faker-region.workspace = true +game-get.workspace = true +region-get.workspace = true diff --git a/packages/api/actor/src/assert.rs b/packages/core/api/actor/src/assert.rs similarity index 100% rename from packages/api/actor/src/assert.rs rename to packages/core/api/actor/src/assert.rs diff --git a/packages/api/actor/src/auth.rs b/packages/core/api/actor/src/auth.rs similarity index 100% rename from packages/api/actor/src/auth.rs rename to packages/core/api/actor/src/auth.rs diff --git a/packages/api/actor/src/lib.rs b/packages/core/api/actor/src/lib.rs similarity index 100% rename from packages/api/actor/src/lib.rs rename to packages/core/api/actor/src/lib.rs diff --git a/packages/core/api/actor/src/route/actors.rs b/packages/core/api/actor/src/route/actors.rs new file mode 100644 index 0000000000..b84b2ea2d8 --- /dev/null +++ b/packages/core/api/actor/src/route/actors.rs @@ -0,0 +1,1054 @@ +use std::collections::{HashMap, HashSet}; + +use api_helper::{anchor::WatchIndexQuery, ctx::Ctx}; +use futures_util::{StreamExt, TryStreamExt}; +use proto::backend; +use rivet_api::models; +use rivet_convert::{ApiInto, ApiTryInto}; +use rivet_operation::prelude::*; +use serde::Deserialize; +use serde_json::json; + +use crate::{ + assert, + auth::{Auth, CheckOpts, CheckOutput}, + utils::build_global_query_compat, +}; + +use super::GlobalQuery; + +#[derive(Debug, Clone, Deserialize)] +pub struct GlobalEndpointTypeQuery { + #[serde(flatten)] + global: GlobalQuery, + endpoint_type: Option, +} + +// MARK: GET /actors/{} +pub async fn get( + ctx: Ctx, + actor_id: Uuid, + watch_index: WatchIndexQuery, + query: GlobalEndpointTypeQuery, +) -> GlobalResult { + get_inner(&ctx, actor_id, watch_index, query).await +} + +async fn get_inner( + ctx: &Ctx, + actor_id: Uuid, + _watch_index: WatchIndexQuery, + query: GlobalEndpointTypeQuery, +) -> GlobalResult { + let CheckOutput { env_id, .. } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + // Get the server + let servers_res = ctx + .op(ds::ops::server::get::Input { + server_ids: vec![actor_id], + endpoint_type: query.endpoint_type.map(ApiInto::api_into), + }) + .await?; + let server = unwrap_with!(servers_res.servers.first(), ACTOR_NOT_FOUND); + + // Get the datacenter + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![server.datacenter_id], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + // Validate token can access server + ensure_with!(server.env_id == env_id, ACTOR_NOT_FOUND); + + Ok(models::ActorGetActorResponse { + actor: Box::new(ds::types::convert_actor_to_api(server.clone(), dc)?), + }) +} + +pub async fn get_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + actor_id: Uuid, + watch_index: WatchIndexQuery, +) -> GlobalResult { + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + let get_res = get_inner( + &ctx, + actor_id, + watch_index, + GlobalEndpointTypeQuery { + global, + endpoint_type: None, + }, + ) + .await?; + + let game_res = ctx + .op(cluster::ops::get_for_game::Input { + game_ids: vec![game_id], + }) + .await?; + let game = unwrap!(game_res.games.first()); + + let dc_resolve_res = ctx + .op(cluster::ops::datacenter::resolve_for_name_id::Input { + cluster_id: game.cluster_id, + name_ids: vec![get_res.actor.region.clone()], + }) + .await?; + let dc_id = unwrap!(dc_resolve_res.datacenters.first()).datacenter_id; + + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![dc_id], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + Ok(models::ServersGetServerResponse { + server: Box::new(legacy_convert_actor_to_server(*get_res.actor, dc)?), + }) +} + +// MARK: POST /actors +pub async fn create( + ctx: Ctx, + body: models::ActorCreateActorRequest, + query: GlobalEndpointTypeQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + let (clusters_res, game_configs_res, build) = tokio::try_join!( + ctx.op(cluster::ops::get_for_game::Input { + game_ids: vec![game_id], + }), + ctx.op(ds::ops::game_config::get::Input { + game_ids: vec![game_id], + }), + resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()), + )?; + let cluster_id = unwrap!(clusters_res.games.first()).cluster_id; + let game_config = unwrap!(game_configs_res.game_configs.first()); + + let datacenter_id = resolve_dc_id(&ctx, cluster_id, body.region.clone()).await?; + + let tags = unwrap_with!( + serde_json::from_value(body.tags.unwrap_or_default()).ok(), + API_BAD_BODY, + error = "`tags` must be `Map`" + ); + + let resources = match build.kind { + build::types::BuildKind::DockerImage | build::types::BuildKind::OciBundle => { + let resources = unwrap_with!( + body.resources, + API_BAD_BODY, + error = "`resources` must be set for actors using Docker builds" + ); + + (*resources).api_into() + } + build::types::BuildKind::JavaScript => { + ensure_with!( + body.resources.is_none(), + API_BAD_BODY, + error = "actors using JavaScript builds cannot set `resources`" + ); + + ds::types::ServerResources::default_isolate() + } + }; + + tracing::info!(?tags, "creating server with tags"); + + let server_id = Uuid::new_v4(); + + let mut ready_sub = ctx + .subscribe::(("server_id", server_id)) + .await?; + let mut fail_sub = ctx + .subscribe::(("server_id", server_id)) + .await?; + let mut destroy_sub = ctx + .subscribe::(("server_id", server_id)) + .await?; + + let network = body.network.unwrap_or_default(); + + ctx.workflow(ds::workflows::server::Input { + server_id, + env_id, + datacenter_id, + cluster_id, + runtime: game_config.runtime, + tags, + resources, + lifecycle: body.lifecycle.map(|x| (*x).api_into()).unwrap_or_else(|| { + ds::types::ServerLifecycle { + kill_timeout_ms: 0, + durable: false, + } + }), + image_id: build.build_id, + root_user_enabled: game_config.root_user_enabled, + // args: body.runtime.arguments.unwrap_or_default(), + args: Vec::new(), + network_mode: network.mode.unwrap_or_default().api_into(), + environment: body.runtime.and_then(|r| r.environment).unwrap_or_default(), + network_ports: unwrap!(network + .ports + .unwrap_or_default() + .into_iter() + .map(|(s, p)| GlobalResult::Ok(( + s.clone(), + ds::workflows::server::Port { + internal_port: p.internal_port.map(TryInto::try_into).transpose()?, + routing: if let Some(routing) = p.routing { + match *routing { + models::ActorPortRouting { + guard: Some(_gg), + host: None, + } => ds::types::Routing::GameGuard { + protocol: p.protocol.api_into(), + // Temporarily disabled + // authorization: match gg.authorization.as_deref() { + // Some(models::ActorPortAuthorization { + // bearer: Some(token), + // .. + // }) => ds::types::PortAuthorization::Bearer(token.clone()), + // Some(models::ActorPortAuthorization { + // query: Some(query), + // .. + // }) => ds::types::PortAuthorization::Query( + // query.key.clone(), + // query.value.clone(), + // ), + // _ => ds::types::PortAuthorization::None, + // }, + authorization: ds::types::PortAuthorization::None, + }, + models::ActorPortRouting { + guard: None, + host: Some(_), + } => ds::types::Routing::Host { + protocol: match p.protocol.api_try_into() { + Err(err) if GlobalError::is(&err, formatted_error::code::ACTOR_FAILED_TO_CREATE) => { + // Add location + bail_with!( + ACTOR_FAILED_TO_CREATE, + error = format!("network.ports[{s:?}].protocol: Host port protocol must be either TCP or UDP.") + ); + } + x => x?, + }, + }, + models::ActorPortRouting { .. } => { + bail_with!( + ACTOR_FAILED_TO_CREATE, + error = format!("network.ports[{s:?}].routing: Must specify either `guard` or `host` routing type.") + ); + } + } + } else { + ds::types::Routing::GameGuard { + protocol: p.protocol.api_into(), + authorization: ds::types::PortAuthorization::None, + } + } + } + ))) + .collect::>>()), + }) + .tag("server_id", server_id) + .dispatch() + .await?; + + // Wait for ready, fail, or destroy + tokio::select! { + res = ready_sub.next() => { res?; }, + res = fail_sub.next() => { + let msg = res?; + bail_with!(ACTOR_FAILED_TO_CREATE, error = msg.message); + } + res = destroy_sub.next() => { + res?; + bail_with!(ACTOR_FAILED_TO_CREATE, error = "Actor failed before reaching a ready state."); + } + } + + let servers_res = ctx + .op(ds::ops::server::get::Input { + server_ids: vec![server_id], + endpoint_type: query.endpoint_type.map(ApiInto::api_into), + }) + .await?; + let server = unwrap_with!(servers_res.servers.first(), ACTOR_NOT_FOUND); + + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![server.datacenter_id], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + Ok(models::ActorCreateActorResponse { + actor: Box::new(ds::types::convert_actor_to_api(server.clone(), dc)?), + }) +} + +pub async fn create_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + body: models::ServersCreateServerRequest, +) -> GlobalResult { + // Resolve region slug + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![body.datacenter], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + let create_res = create( + ctx, + models::ActorCreateActorRequest { + region: Some(dc.name_id.clone()), + lifecycle: body.lifecycle.map(|l| { + Box::new(models::ActorLifecycle { + kill_timeout: l.kill_timeout, + durable: Some(false), + }) + }), + network: Some(Box::new(models::ActorCreateActorNetworkRequest { + mode: body.network.mode.map(|n| match n { + models::ServersNetworkMode::Host => models::ActorNetworkMode::Host, + models::ServersNetworkMode::Bridge => models::ActorNetworkMode::Bridge, + }), + ports: Some( + body.network + .ports + .into_iter() + .map(|(k, p)| { + ( + k, + models::ActorCreateActorPortRequest { + internal_port: p.internal_port, + protocol: match p.protocol { + models::ServersPortProtocol::Http => { + models::ActorPortProtocol::Http + } + models::ServersPortProtocol::Https => { + models::ActorPortProtocol::Https + } + models::ServersPortProtocol::Tcp => { + models::ActorPortProtocol::Tcp + } + models::ServersPortProtocol::TcpTls => { + models::ActorPortProtocol::TcpTls + } + models::ServersPortProtocol::Udp => { + models::ActorPortProtocol::Udp + } + }, + routing: p.routing.map(|r| { + Box::new(models::ActorPortRouting { + // Temporarily disabled + // guard: r.game_guard.map(|_| { + // Box::new(models::ActorGuardRouting::default()) + // }), + guard: r.game_guard.map(|_| json!({})), + host: r.host.map(|_| json!({})), + }) + }), + }, + ) + }) + .collect(), + ), + })), + resources: Some(Box::new(models::ActorResources { + cpu: body.resources.cpu, + memory: body.resources.memory, + })), + runtime: Some(Box::new(models::ActorCreateActorRuntimeRequest { + environment: body.runtime.environment, + })), + build: Some(body.runtime.build), + build_tags: None, + tags: body.tags, + }, + GlobalEndpointTypeQuery { + global, + endpoint_type: None, + }, + ) + .await?; + + Ok(models::ServersCreateServerResponse { + server: Box::new(legacy_convert_actor_to_server(*create_res.actor, &dc)?), + }) +} + +// MARK: DELETE /actors/{} +#[derive(Debug, Clone, Deserialize)] +pub struct DeleteQuery { + #[serde(flatten)] + global: GlobalQuery, + override_kill_timeout: Option, +} + +pub async fn destroy( + ctx: Ctx, + actor_id: Uuid, + query: DeleteQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + ensure_with!( + query.override_kill_timeout.unwrap_or(0) >= 0, + API_BAD_QUERY_PARAMETER, + parameter = "override_kill_timeout", + error = "must be positive" + ); + ensure_with!( + query.override_kill_timeout.unwrap_or(0) < 2 * 60 * 60 * 1000, + API_BAD_QUERY_PARAMETER, + parameter = "override_kill_timeout", + error = "cannot be longer than 2 hours" + ); + + let mut sub = ctx + .subscribe::(("server_id", actor_id)) + .await?; + + // Get server after sub is created + let server = assert::server_for_env(&ctx, actor_id, game_id, env_id, None).await?; + + // Already destroyed + if server.destroy_ts.is_some() { + return Ok(json!({})); + } + + ctx.signal(ds::workflows::server::Destroy { + override_kill_timeout_ms: query.override_kill_timeout, + }) + .tag("server_id", actor_id) + .send() + .await?; + + sub.next().await?; + + Ok(json!({})) +} + +pub async fn destroy_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + actor_id: Uuid, + query: DeleteQuery, +) -> GlobalResult { + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + destroy( + ctx, + actor_id, + DeleteQuery { + global, + override_kill_timeout: query.override_kill_timeout, + }, + ) + .await +} + +// MARK: POST /actors/{}/upgrade +pub async fn upgrade( + ctx: Ctx, + actor_id: Uuid, + body: models::ActorUpgradeActorRequest, + query: GlobalQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + assert::server_for_env(&ctx, actor_id, game_id, env_id, None).await?; + + let build = resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()).await?; + + // TODO: Add back once we figure out how to cleanly handle if a wf is already complete when + // upgrading + // let mut sub = ctx + // .subscribe::(("server_id", actor_id)) + // .await?; + + ctx.signal(ds::workflows::server::Upgrade { + image_id: build.build_id, + }) + .tag("server_id", actor_id) + .send() + .await?; + + // sub.next().await?; + + Ok(json!({})) +} + +// MARK: POST /actors/upgrade +pub async fn upgrade_all( + ctx: Ctx, + body: models::ActorUpgradeAllActorsRequest, + query: GlobalQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + let tags = unwrap_with!(body.tags, API_BAD_BODY, error = "missing property `tags`"); + + ensure_with!( + tags.as_object().map(|x| x.len()).unwrap_or_default() <= 8, + API_BAD_BODY, + error = "Too many tags (max 8)." + ); + + let tags = unwrap_with!( + serde_json::from_value::>(tags).ok(), + API_BAD_BODY, + error = "`tags` must be `Map`" + ); + + for (k, v) in &tags { + ensure_with!( + !k.is_empty(), + API_BAD_BODY, + error = "tags[]: Tag label cannot be empty." + ); + ensure_with!( + k.len() <= 32, + API_BAD_BODY, + error = format!( + "tags[{:?}]: Tag label too large (max 32 bytes).", + util::safe_slice(k, 0, 32), + ), + ); + ensure_with!( + !v.is_empty(), + API_BAD_BODY, + error = format!("tags[{k:?}]: Tag value cannot be empty.") + ); + ensure_with!( + v.len() <= 1024, + API_BAD_BODY, + error = format!("tags[{k:?}]: Tag value too large (max 1024 bytes)."), + ); + } + + let build = resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()).await?; + + // Work in batches + let mut count = 0; + let mut cursor = None; + loop { + let list_res = ctx + .op(ds::ops::server::list_for_env::Input { + env_id, + tags: tags.clone(), + include_destroyed: false, + cursor, + limit: 10_000, + }) + .await?; + + count += list_res.server_ids.len(); + cursor = list_res.server_ids.last().cloned(); + + // TODO: Add back once we figure out how to cleanly handle if a wf is already complete when + // upgrading + // let subs = futures_util::stream::iter(list_res.server_ids.clone()) + // .map(|server_id| { + // ctx.subscribe::(("server_id", server_id)) + // }) + // .buffer_unordered(32) + // .try_collect::>() + // .await?; + + futures_util::stream::iter(list_res.server_ids) + .map(|server_id| { + ctx.signal(ds::workflows::server::Upgrade { + image_id: build.build_id, + }) + .tag("server_id", server_id) + .send() + }) + .buffer_unordered(32) + .try_collect::>() + .await?; + + // futures_util::stream::iter(subs) + // .map(|mut sub| async move { sub.next().await }) + // .buffer_unordered(32) + // .try_collect::>() + // .await?; + + if count < 10_000 { + break; + } + } + + Ok(models::ActorUpgradeAllActorsResponse { + count: count.try_into()?, + }) +} + +// MARK: GET /actors +#[derive(Debug, Clone, Deserialize)] +pub struct ListQuery { + #[serde(flatten)] + global_endpoint_type: GlobalEndpointTypeQuery, + tags_json: Option, + include_destroyed: Option, + cursor: Option, +} + +pub async fn list_actors( + ctx: Ctx, + watch_index: WatchIndexQuery, + query: ListQuery, +) -> GlobalResult { + list_actors_inner(&ctx, watch_index, query).await +} + +async fn list_actors_inner( + ctx: &Ctx, + _watch_index: WatchIndexQuery, + query: ListQuery, +) -> GlobalResult { + let CheckOutput { env_id, .. } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global_endpoint_type.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + let include_destroyed = query.include_destroyed.unwrap_or(false); + + let tags = unwrap_with!( + query + .tags_json + .as_deref() + .map_or(Ok(HashMap::new()), serde_json::from_str) + .ok(), + API_BAD_QUERY_PARAMETER, + parameter = "tags_json", + error = "must be `Map`" + ); + + let list_res = ctx + .op(ds::ops::server::list_for_env::Input { + env_id, + tags, + include_destroyed, + cursor: query.cursor, + // HACK: Until we have webhooks, there needs to be a good way to get all of the most + // recent crashed actors. 10k is a high limit intentionally. + limit: if include_destroyed { 64 } else { 10_000 }, + }) + .await?; + + let servers_res = ctx + .op(ds::ops::server::get::Input { + server_ids: list_res.server_ids.clone(), + endpoint_type: query + .global_endpoint_type + .endpoint_type + .map(ApiInto::api_into), + }) + .await?; + + let datacenter_ids = servers_res + .servers + .iter() + .map(|s| s.datacenter_id) + .collect::>() + .into_iter() + .collect::>(); + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { datacenter_ids }) + .await?; + + let servers = servers_res + .servers + .into_iter() + .map(|a| { + let dc = unwrap!(dc_res + .datacenters + .iter() + .find(|dc| dc.datacenter_id == a.datacenter_id)); + ds::types::convert_actor_to_api(a, &dc) + }) + .collect::>>()?; + + Ok(models::ActorListActorsResponse { actors: servers }) +} + +pub async fn list_servers_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + watch_index: WatchIndexQuery, + query: ListQuery, +) -> GlobalResult { + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + let actors_res = list_actors_inner( + &ctx, + watch_index, + ListQuery { + global_endpoint_type: GlobalEndpointTypeQuery { + global, + ..query.global_endpoint_type + }, + ..query + }, + ) + .await?; + + let clusters_res = ctx + .op(cluster::ops::get_for_game::Input { + game_ids: vec![game_id], + }) + .await?; + let cluster_id = unwrap!(clusters_res.games.first()).cluster_id; + + let dc_name_ids = actors_res + .actors + .iter() + .map(|s| s.region.clone()) + .collect::>() + .into_iter() + .collect::>(); + let dc_resolve_res = ctx + .op(cluster::ops::datacenter::resolve_for_name_id::Input { + cluster_id, + name_ids: dc_name_ids, + }) + .await?; + + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: dc_resolve_res + .datacenters + .iter() + .map(|x| x.datacenter_id) + .collect::>(), + }) + .await?; + + Ok(models::ServersListServersResponse { + servers: actors_res + .actors + .into_iter() + .map(|a| { + let dc = unwrap!(dc_res.datacenters.iter().find(|dc| dc.name_id == a.region)); + legacy_convert_actor_to_server(a, dc) + }) + .collect::, _>>()?, + }) +} + +fn legacy_convert_actor_to_server( + a: models::ActorActor, + datacenter: &cluster::types::Datacenter, +) -> GlobalResult { + Ok(models::ServersServer { + created_at: a + .created_at + .parse::>()? + .timestamp_millis(), + datacenter: datacenter.datacenter_id, + destroyed_at: a + .destroyed_at + .map(|ts| { + GlobalResult::Ok( + ts.parse::>()? + .timestamp_millis(), + ) + }) + .transpose()?, + environment: Uuid::nil(), + id: a.id, + lifecycle: Box::new(models::ServersLifecycle { + kill_timeout: a.lifecycle.kill_timeout, + }), + network: Box::new(models::ServersNetwork { + mode: Some(match a.network.mode { + models::ActorNetworkMode::Host => models::ServersNetworkMode::Host, + models::ActorNetworkMode::Bridge => models::ServersNetworkMode::Bridge, + }), + ports: a + .network + .ports + .into_iter() + .map(|(k, p)| { + ( + k, + models::ServersPort { + internal_port: p.internal_port, + protocol: match p.protocol { + models::ActorPortProtocol::Http => { + models::ServersPortProtocol::Http + } + models::ActorPortProtocol::Https => { + models::ServersPortProtocol::Https + } + models::ActorPortProtocol::Tcp => models::ServersPortProtocol::Tcp, + models::ActorPortProtocol::TcpTls => { + models::ServersPortProtocol::TcpTls + } + models::ActorPortProtocol::Udp => models::ServersPortProtocol::Udp, + }, + public_hostname: p.hostname, + public_port: p.port, + routing: Box::new(models::ServersPortRouting { + game_guard: p.routing.guard.map(|_| json!({})), + host: p.routing.host.map(|_| json!({})), + }), + }, + ) + }) + .collect(), + }), + resources: Box::new(models::ServersResources { + cpu: a.resources.cpu, + memory: a.resources.memory, + }), + runtime: Box::new(models::ServersRuntime { + arguments: a.runtime.arguments, + build: a.runtime.build, + environment: a.runtime.environment, + }), + started_at: a + .started_at + .map(|ts| { + GlobalResult::Ok( + ts.parse::>()? + .timestamp_millis(), + ) + }) + .transpose()?, + tags: a.tags, + }) +} + +async fn resolve_build( + ctx: &Ctx, + game_id: Uuid, + env_id: Uuid, + build_id: Option, + build_tags: Option, +) -> GlobalResult { + match (build_id, build_tags) { + (Some(build_id), None) => { + let builds_res = ctx + .op(build::ops::get::Input { + build_ids: vec![build_id], + }) + .await?; + let build = unwrap_with!(builds_res.builds.into_iter().next(), BUILD_NOT_FOUND); + + // Ensure build belongs to this game/env + if let Some(build_game_id) = build.game_id { + ensure_with!(build_game_id == game_id, BUILD_NOT_FOUND); + } else if let Some(build_env_id) = build.env_id { + ensure_with!(build_env_id == env_id, BUILD_NOT_FOUND); + } + + Ok(build) + } + // Resolve build from tags + (None, Some(build_tags)) => { + let build_tags = unwrap_with!( + serde_json::from_value::>(build_tags).ok(), + API_BAD_BODY, + error = "`build_tags` must be `Map`" + ); + + ensure_with!( + build_tags.len() < 8, + API_BAD_BODY, + error = "Too many build tags (max 8)." + ); + + for (k, v) in &build_tags { + ensure_with!( + !k.is_empty(), + API_BAD_BODY, + error = "build_tags[]: Build tag label cannot be empty." + ); + ensure_with!( + k.len() < 32, + API_BAD_BODY, + error = format!( + "build_tags[{:?}]: Build tag label too large (max 32 bytes).", + util::safe_slice(k, 0, 32), + ) + ); + ensure_with!( + !v.is_empty(), + API_BAD_BODY, + error = format!("build_tags[{k:?}]: Build tag value cannot be empty.") + ); + ensure_with!( + v.len() < 256, + API_BAD_BODY, + error = + format!("build_tags[{k:?}]: Build tag value too large (max 256 bytes).") + ); + } + + let builds_res = ctx + .op(build::ops::resolve_for_tags::Input { + env_id, + tags: build_tags, + }) + .await?; + + let build = unwrap_with!( + builds_res.builds.into_iter().next(), + BUILD_NOT_FOUND_WITH_TAGS + ); + + // Ensure build belongs to this game/env + if let Some(build_game_id) = build.game_id { + ensure_with!(build_game_id == game_id, BUILD_NOT_FOUND); + } else if let Some(build_env_id) = build.env_id { + ensure_with!(build_env_id == env_id, BUILD_NOT_FOUND); + } + + Ok(build) + } + _ => { + bail_with!( + API_BAD_BODY, + error = "must have either `build` or `build_tags`" + ); + } + } +} + +async fn resolve_dc_id( + ctx: &Ctx, + cluster_id: Uuid, + region: Option, +) -> GlobalResult { + if let Some(region) = region { + let dcs_res = ctx + .op(cluster::ops::datacenter::resolve_for_name_id::Input { + cluster_id, + name_ids: vec![region], + }) + .await?; + let dc = unwrap_with!( + dcs_res.datacenters.first(), + ACTOR_FAILED_TO_CREATE, + error = "Region not found." + ); + + Ok(dc.datacenter_id) + } + // Auto-select the closest region + else { + let clusters_res = ctx + .op(cluster::ops::datacenter::list::Input { + cluster_ids: vec![cluster_id], + }) + .await?; + let cluster = unwrap!(clusters_res.clusters.first()); + + if let Some((lat, long)) = ctx.coords() { + let recommend_res = op!([ctx] region_recommend { + region_ids: cluster + .datacenter_ids + .iter() + .cloned() + .map(Into::into) + .collect(), + coords: Some(backend::net::Coordinates { + latitude: lat, + longitude: long, + }), + ..Default::default() + }) + .await?; + let primary_region = unwrap!(recommend_res.regions.first()); + let primary_region_id = unwrap_ref!(primary_region.region_id).as_uuid(); + + Ok(primary_region_id) + } else { + tracing::warn!("coords not provided to select region"); + + let datacenter_id = *unwrap_with!( + cluster.datacenter_ids.first(), + ACTOR_FAILED_TO_CREATE, + error = "No regions found." + ); + + Ok(datacenter_id) + } + } +} diff --git a/packages/api/actor/src/route/builds.rs b/packages/core/api/actor/src/route/builds.rs similarity index 100% rename from packages/api/actor/src/route/builds.rs rename to packages/core/api/actor/src/route/builds.rs diff --git a/packages/api/actor/src/route/logs.rs b/packages/core/api/actor/src/route/logs.rs similarity index 100% rename from packages/api/actor/src/route/logs.rs rename to packages/core/api/actor/src/route/logs.rs diff --git a/packages/core/api/actor/src/route/mod.rs b/packages/core/api/actor/src/route/mod.rs new file mode 100644 index 0000000000..da3be06909 --- /dev/null +++ b/packages/core/api/actor/src/route/mod.rs @@ -0,0 +1,282 @@ +use api_helper::{define_router, util::CorsConfigBuilder}; +use hyper::{Body, Request, Response}; +use rivet_api::models; +use rivet_operation::prelude::*; +use serde::Deserialize; +use uuid::Uuid; + +pub mod actors; +pub mod builds; +pub mod logs; +pub mod regions; + +#[derive(Debug, Clone, Deserialize)] +pub struct GlobalQuery { + /// Slug of the project. + /// + /// If provided, `environment` must also be provided. + pub project: Option, + + /// Slug of the environment. + pub environment: Option, +} + +impl GlobalQuery { + /// Returns both the project and environment. + /// + /// Validates that the project can only be specified with the environment. + pub fn project_and_env(&self) -> GlobalResult<(Option<&str>, Option<&str>)> { + if let Some(environment) = &self.environment { + Ok((self.project.as_deref(), Some(environment))) + } else { + // Don't allow just the project + if self.project.is_some() { + bail_with!( + API_BAD_QUERY, + parameter = "project", + error = "Must provide both `project` and `environment` query together." + ) + } else { + Ok((None, None)) + } + } + } +} + +define_router! { + cors: |_config| CorsConfigBuilder::public().build(), + routes: { + "actors": { + GET: actors::list_actors( + query: actors::ListQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + POST: actors::create( + query: actors::GlobalEndpointTypeQuery, + body: models::ActorCreateActorRequest, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 1_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / "upgrade": { + POST: actors::upgrade_all( + query: GlobalQuery, + body: models::ActorUpgradeAllActorsRequest, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 1_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / Uuid: { + GET: actors::get( + query: actors::GlobalEndpointTypeQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + + ), + DELETE: actors::destroy( + query: actors::DeleteQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 10_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / Uuid / "upgrade": { + POST: actors::upgrade( + query: GlobalQuery, + body: models::ActorUpgradeActorRequest, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 1_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / Uuid / "logs": { + GET: logs::get_logs( + query: logs::GetActorLogsQuery, + opt_auth: true, + ), + }, + + + "builds": { + GET: builds::list( + query: builds::ListQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "builds" / Uuid: { + GET: builds::get( + query: GlobalQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "builds" / Uuid / "tags": { + PATCH: builds::patch_tags( + query: GlobalQuery, + body: models::ActorPatchBuildTagsRequest, + opt_auth: true, + ), + }, + + "builds" / "prepare": { + POST: builds::create_build( + query: GlobalQuery, + body: models::ActorPrepareBuildRequest, + opt_auth: true, + ), + }, + + "builds" / Uuid / "complete": { + POST: builds::complete_build( + query: GlobalQuery, + body: serde_json::Value, + opt_auth: true, + ), + }, + + // MARK: Regions + "regions": { + GET: regions::list( + query: GlobalQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + "regions" / "resolve": { + GET: regions::resolve( + query: regions::ResolveQuery, + opt_auth: true, + ), + }, + + // MARK: Deprecated + "games" / Uuid / "environments" / Uuid / "servers": { + GET: actors::list_servers_deprecated( + query: actors::ListQuery, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + POST: actors::create_deprecated( + body: models::ServersCreateServerRequest, + rate_limit: { + buckets: [ + { count: 1_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "games" / Uuid / "environments" / Uuid / "servers" / Uuid: { + GET: actors::get_deprecated( + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + + ), + DELETE: actors::destroy_deprecated( + query: actors::DeleteQuery, + rate_limit: { + buckets: [ + { count: 10_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "games" / Uuid / "environments" / Uuid / "servers" / Uuid / "logs" : { + GET: logs::get_logs_deprecated( + query: logs::GetActorLogsQuery, + ), + }, + + "games" / Uuid / "environments" / Uuid / "builds": { + GET: builds::list_deprecated( + query: builds::ListQuery, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "games" / Uuid / "environments" / Uuid / "builds" / Uuid: { + GET: builds::get_deprecated( + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "games" / Uuid / "environments" / Uuid / "builds" / Uuid / "tags": { + PATCH: builds::patch_tags_deprecated(body: models::ServersPatchBuildTagsRequest), + }, + + "games" / Uuid / "environments" / Uuid / "builds" / "prepare": { + POST: builds::create_build_deprecated(body: models::ServersCreateBuildRequest), + }, + + "games" / Uuid / "environments" / Uuid / "builds" / Uuid / "complete": { + POST: builds::complete_build_deprecated(body: serde_json::Value), + }, + + "games" / Uuid / "environments" / Uuid / "datacenters": { + GET: regions::list_deprecated( + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + }, +} diff --git a/packages/api/actor/src/route/regions.rs b/packages/core/api/actor/src/route/regions.rs similarity index 100% rename from packages/api/actor/src/route/regions.rs rename to packages/core/api/actor/src/route/regions.rs diff --git a/packages/api/actor/src/utils.rs b/packages/core/api/actor/src/utils.rs similarity index 100% rename from packages/api/actor/src/utils.rs rename to packages/core/api/actor/src/utils.rs diff --git a/packages/api/actor/tests/basic.rs b/packages/core/api/actor/tests/basic.rs similarity index 100% rename from packages/api/actor/tests/basic.rs rename to packages/core/api/actor/tests/basic.rs diff --git a/packages/api/auth/Cargo.toml b/packages/core/api/auth/Cargo.toml similarity index 100% rename from packages/api/auth/Cargo.toml rename to packages/core/api/auth/Cargo.toml diff --git a/packages/api/auth/src/auth.rs b/packages/core/api/auth/src/auth.rs similarity index 100% rename from packages/api/auth/src/auth.rs rename to packages/core/api/auth/src/auth.rs diff --git a/packages/api/auth/src/lib.rs b/packages/core/api/auth/src/lib.rs similarity index 100% rename from packages/api/auth/src/lib.rs rename to packages/core/api/auth/src/lib.rs diff --git a/packages/api/auth/src/route/identity.rs b/packages/core/api/auth/src/route/identity.rs similarity index 100% rename from packages/api/auth/src/route/identity.rs rename to packages/core/api/auth/src/route/identity.rs diff --git a/packages/api/auth/src/route/mod.rs b/packages/core/api/auth/src/route/mod.rs similarity index 100% rename from packages/api/auth/src/route/mod.rs rename to packages/core/api/auth/src/route/mod.rs diff --git a/packages/api/auth/src/route/tokens.rs b/packages/core/api/auth/src/route/tokens.rs similarity index 100% rename from packages/api/auth/src/route/tokens.rs rename to packages/core/api/auth/src/route/tokens.rs diff --git a/packages/api/auth/src/utils.rs b/packages/core/api/auth/src/utils.rs similarity index 100% rename from packages/api/auth/src/utils.rs rename to packages/core/api/auth/src/utils.rs diff --git a/packages/api/auth/tests/basic.rs b/packages/core/api/auth/tests/basic.rs similarity index 100% rename from packages/api/auth/tests/basic.rs rename to packages/core/api/auth/tests/basic.rs diff --git a/packages/api/cf-verification/Cargo.toml b/packages/core/api/cf-verification/Cargo.toml similarity index 100% rename from packages/api/cf-verification/Cargo.toml rename to packages/core/api/cf-verification/Cargo.toml diff --git a/packages/api/cf-verification/src/auth.rs b/packages/core/api/cf-verification/src/auth.rs similarity index 100% rename from packages/api/cf-verification/src/auth.rs rename to packages/core/api/cf-verification/src/auth.rs diff --git a/packages/api/cf-verification/src/lib.rs b/packages/core/api/cf-verification/src/lib.rs similarity index 100% rename from packages/api/cf-verification/src/lib.rs rename to packages/core/api/cf-verification/src/lib.rs diff --git a/packages/api/cf-verification/src/route/mod.rs b/packages/core/api/cf-verification/src/route/mod.rs similarity index 100% rename from packages/api/cf-verification/src/route/mod.rs rename to packages/core/api/cf-verification/src/route/mod.rs diff --git a/packages/api/cf-verification/src/route/verification.rs b/packages/core/api/cf-verification/src/route/verification.rs similarity index 100% rename from packages/api/cf-verification/src/route/verification.rs rename to packages/core/api/cf-verification/src/route/verification.rs diff --git a/packages/api/cf-verification/tests/basic.rs b/packages/core/api/cf-verification/tests/basic.rs similarity index 100% rename from packages/api/cf-verification/tests/basic.rs rename to packages/core/api/cf-verification/tests/basic.rs diff --git a/packages/api/cloud/Cargo.toml b/packages/core/api/cloud/Cargo.toml similarity index 100% rename from packages/api/cloud/Cargo.toml rename to packages/core/api/cloud/Cargo.toml diff --git a/packages/api/cloud/default-site/img/frog.svg b/packages/core/api/cloud/default-site/img/frog.svg similarity index 100% rename from packages/api/cloud/default-site/img/frog.svg rename to packages/core/api/cloud/default-site/img/frog.svg diff --git a/packages/api/cloud/default-site/img/logo.svg b/packages/core/api/cloud/default-site/img/logo.svg similarity index 100% rename from packages/api/cloud/default-site/img/logo.svg rename to packages/core/api/cloud/default-site/img/logo.svg diff --git a/packages/api/cloud/default-site/index.html b/packages/core/api/cloud/default-site/index.html similarity index 100% rename from packages/api/cloud/default-site/index.html rename to packages/core/api/cloud/default-site/index.html diff --git a/packages/api/cloud/default-site/styles.css b/packages/core/api/cloud/default-site/styles.css similarity index 100% rename from packages/api/cloud/default-site/styles.css rename to packages/core/api/cloud/default-site/styles.css diff --git a/packages/api/cloud/src/assert.rs b/packages/core/api/cloud/src/assert.rs similarity index 100% rename from packages/api/cloud/src/assert.rs rename to packages/core/api/cloud/src/assert.rs diff --git a/packages/api/cloud/src/auth.rs b/packages/core/api/cloud/src/auth.rs similarity index 100% rename from packages/api/cloud/src/auth.rs rename to packages/core/api/cloud/src/auth.rs diff --git a/packages/api/cloud/src/lib.rs b/packages/core/api/cloud/src/lib.rs similarity index 100% rename from packages/api/cloud/src/lib.rs rename to packages/core/api/cloud/src/lib.rs diff --git a/packages/api/cloud/src/route/auth.rs b/packages/core/api/cloud/src/route/auth.rs similarity index 100% rename from packages/api/cloud/src/route/auth.rs rename to packages/core/api/cloud/src/route/auth.rs diff --git a/packages/api/cloud/src/route/bootstrap.rs b/packages/core/api/cloud/src/route/bootstrap.rs similarity index 100% rename from packages/api/cloud/src/route/bootstrap.rs rename to packages/core/api/cloud/src/route/bootstrap.rs diff --git a/packages/api/cloud/src/route/devices/links.rs b/packages/core/api/cloud/src/route/devices/links.rs similarity index 100% rename from packages/api/cloud/src/route/devices/links.rs rename to packages/core/api/cloud/src/route/devices/links.rs diff --git a/packages/api/cloud/src/route/devices/mod.rs b/packages/core/api/cloud/src/route/devices/mod.rs similarity index 100% rename from packages/api/cloud/src/route/devices/mod.rs rename to packages/core/api/cloud/src/route/devices/mod.rs diff --git a/packages/api/cloud/src/route/games/avatars.rs b/packages/core/api/cloud/src/route/games/avatars.rs similarity index 100% rename from packages/api/cloud/src/route/games/avatars.rs rename to packages/core/api/cloud/src/route/games/avatars.rs diff --git a/packages/api/cloud/src/route/games/builds.rs b/packages/core/api/cloud/src/route/games/builds.rs similarity index 100% rename from packages/api/cloud/src/route/games/builds.rs rename to packages/core/api/cloud/src/route/games/builds.rs diff --git a/packages/api/cloud/src/route/games/cdn.rs b/packages/core/api/cloud/src/route/games/cdn.rs similarity index 100% rename from packages/api/cloud/src/route/games/cdn.rs rename to packages/core/api/cloud/src/route/games/cdn.rs diff --git a/packages/api/cloud/src/route/games/matchmaker.rs b/packages/core/api/cloud/src/route/games/matchmaker.rs similarity index 100% rename from packages/api/cloud/src/route/games/matchmaker.rs rename to packages/core/api/cloud/src/route/games/matchmaker.rs diff --git a/packages/api/cloud/src/route/games/mod.rs b/packages/core/api/cloud/src/route/games/mod.rs similarity index 100% rename from packages/api/cloud/src/route/games/mod.rs rename to packages/core/api/cloud/src/route/games/mod.rs diff --git a/packages/api/cloud/src/route/games/namespaces/analytics.rs b/packages/core/api/cloud/src/route/games/namespaces/analytics.rs similarity index 100% rename from packages/api/cloud/src/route/games/namespaces/analytics.rs rename to packages/core/api/cloud/src/route/games/namespaces/analytics.rs diff --git a/packages/api/cloud/src/route/games/namespaces/logs.rs b/packages/core/api/cloud/src/route/games/namespaces/logs.rs similarity index 100% rename from packages/api/cloud/src/route/games/namespaces/logs.rs rename to packages/core/api/cloud/src/route/games/namespaces/logs.rs diff --git a/packages/api/cloud/src/route/games/namespaces/mod.rs b/packages/core/api/cloud/src/route/games/namespaces/mod.rs similarity index 100% rename from packages/api/cloud/src/route/games/namespaces/mod.rs rename to packages/core/api/cloud/src/route/games/namespaces/mod.rs diff --git a/packages/api/cloud/src/route/games/tokens.rs b/packages/core/api/cloud/src/route/games/tokens.rs similarity index 100% rename from packages/api/cloud/src/route/games/tokens.rs rename to packages/core/api/cloud/src/route/games/tokens.rs diff --git a/packages/api/cloud/src/route/games/versions.rs b/packages/core/api/cloud/src/route/games/versions.rs similarity index 100% rename from packages/api/cloud/src/route/games/versions.rs rename to packages/core/api/cloud/src/route/games/versions.rs diff --git a/packages/api/cloud/src/route/groups.rs b/packages/core/api/cloud/src/route/groups.rs similarity index 100% rename from packages/api/cloud/src/route/groups.rs rename to packages/core/api/cloud/src/route/groups.rs diff --git a/packages/api/cloud/src/route/mod.rs b/packages/core/api/cloud/src/route/mod.rs similarity index 100% rename from packages/api/cloud/src/route/mod.rs rename to packages/core/api/cloud/src/route/mod.rs diff --git a/packages/api/cloud/src/route/tiers.rs b/packages/core/api/cloud/src/route/tiers.rs similarity index 100% rename from packages/api/cloud/src/route/tiers.rs rename to packages/core/api/cloud/src/route/tiers.rs diff --git a/packages/api/cloud/src/route/uploads.rs b/packages/core/api/cloud/src/route/uploads.rs similarity index 100% rename from packages/api/cloud/src/route/uploads.rs rename to packages/core/api/cloud/src/route/uploads.rs diff --git a/packages/api/cloud/tests/basic.rs b/packages/core/api/cloud/tests/basic.rs similarity index 100% rename from packages/api/cloud/tests/basic.rs rename to packages/core/api/cloud/tests/basic.rs diff --git a/packages/api/games/Cargo.toml b/packages/core/api/games/Cargo.toml similarity index 100% rename from packages/api/games/Cargo.toml rename to packages/core/api/games/Cargo.toml diff --git a/packages/api/games/src/assert.rs b/packages/core/api/games/src/assert.rs similarity index 100% rename from packages/api/games/src/assert.rs rename to packages/core/api/games/src/assert.rs diff --git a/packages/api/games/src/auth.rs b/packages/core/api/games/src/auth.rs similarity index 100% rename from packages/api/games/src/auth.rs rename to packages/core/api/games/src/auth.rs diff --git a/packages/api/games/src/lib.rs b/packages/core/api/games/src/lib.rs similarity index 100% rename from packages/api/games/src/lib.rs rename to packages/core/api/games/src/lib.rs diff --git a/packages/api/games/src/route/envs/mod.rs b/packages/core/api/games/src/route/envs/mod.rs similarity index 100% rename from packages/api/games/src/route/envs/mod.rs rename to packages/core/api/games/src/route/envs/mod.rs diff --git a/packages/api/games/src/route/envs/tokens.rs b/packages/core/api/games/src/route/envs/tokens.rs similarity index 100% rename from packages/api/games/src/route/envs/tokens.rs rename to packages/core/api/games/src/route/envs/tokens.rs diff --git a/packages/api/games/src/route/mod.rs b/packages/core/api/games/src/route/mod.rs similarity index 100% rename from packages/api/games/src/route/mod.rs rename to packages/core/api/games/src/route/mod.rs diff --git a/packages/api/group/Cargo.toml b/packages/core/api/group/Cargo.toml similarity index 100% rename from packages/api/group/Cargo.toml rename to packages/core/api/group/Cargo.toml diff --git a/packages/api/group/src/assert.rs b/packages/core/api/group/src/assert.rs similarity index 100% rename from packages/api/group/src/assert.rs rename to packages/core/api/group/src/assert.rs diff --git a/packages/api/group/src/auth.rs b/packages/core/api/group/src/auth.rs similarity index 100% rename from packages/api/group/src/auth.rs rename to packages/core/api/group/src/auth.rs diff --git a/packages/api/group/src/convert/group.rs b/packages/core/api/group/src/convert/group.rs similarity index 100% rename from packages/api/group/src/convert/group.rs rename to packages/core/api/group/src/convert/group.rs diff --git a/packages/api/group/src/convert/identity.rs b/packages/core/api/group/src/convert/identity.rs similarity index 100% rename from packages/api/group/src/convert/identity.rs rename to packages/core/api/group/src/convert/identity.rs diff --git a/packages/api/group/src/convert/mod.rs b/packages/core/api/group/src/convert/mod.rs similarity index 100% rename from packages/api/group/src/convert/mod.rs rename to packages/core/api/group/src/convert/mod.rs diff --git a/packages/api/group/src/fetch/group.rs b/packages/core/api/group/src/fetch/group.rs similarity index 100% rename from packages/api/group/src/fetch/group.rs rename to packages/core/api/group/src/fetch/group.rs diff --git a/packages/api/group/src/fetch/identity.rs b/packages/core/api/group/src/fetch/identity.rs similarity index 100% rename from packages/api/group/src/fetch/identity.rs rename to packages/core/api/group/src/fetch/identity.rs diff --git a/packages/api/group/src/fetch/mod.rs b/packages/core/api/group/src/fetch/mod.rs similarity index 100% rename from packages/api/group/src/fetch/mod.rs rename to packages/core/api/group/src/fetch/mod.rs diff --git a/packages/api/group/src/lib.rs b/packages/core/api/group/src/lib.rs similarity index 100% rename from packages/api/group/src/lib.rs rename to packages/core/api/group/src/lib.rs diff --git a/packages/api/group/src/route/groups.rs b/packages/core/api/group/src/route/groups.rs similarity index 100% rename from packages/api/group/src/route/groups.rs rename to packages/core/api/group/src/route/groups.rs diff --git a/packages/api/group/src/route/mod.rs b/packages/core/api/group/src/route/mod.rs similarity index 100% rename from packages/api/group/src/route/mod.rs rename to packages/core/api/group/src/route/mod.rs diff --git a/packages/api/group/src/utils.rs b/packages/core/api/group/src/utils.rs similarity index 100% rename from packages/api/group/src/utils.rs rename to packages/core/api/group/src/utils.rs diff --git a/packages/api/group/tests/basic.rs b/packages/core/api/group/tests/basic.rs similarity index 100% rename from packages/api/group/tests/basic.rs rename to packages/core/api/group/tests/basic.rs diff --git a/packages/api/identity/Cargo.toml b/packages/core/api/identity/Cargo.toml similarity index 100% rename from packages/api/identity/Cargo.toml rename to packages/core/api/identity/Cargo.toml diff --git a/packages/api/identity/src/assert.rs b/packages/core/api/identity/src/assert.rs similarity index 100% rename from packages/api/identity/src/assert.rs rename to packages/core/api/identity/src/assert.rs diff --git a/packages/api/identity/src/auth.rs b/packages/core/api/identity/src/auth.rs similarity index 100% rename from packages/api/identity/src/auth.rs rename to packages/core/api/identity/src/auth.rs diff --git a/packages/api/identity/src/lib.rs b/packages/core/api/identity/src/lib.rs similarity index 100% rename from packages/api/identity/src/lib.rs rename to packages/core/api/identity/src/lib.rs diff --git a/packages/api/identity/src/route/events.rs b/packages/core/api/identity/src/route/events.rs similarity index 100% rename from packages/api/identity/src/route/events.rs rename to packages/core/api/identity/src/route/events.rs diff --git a/packages/api/identity/src/route/identities.rs b/packages/core/api/identity/src/route/identities.rs similarity index 100% rename from packages/api/identity/src/route/identities.rs rename to packages/core/api/identity/src/route/identities.rs diff --git a/packages/api/identity/src/route/mod.rs b/packages/core/api/identity/src/route/mod.rs similarity index 100% rename from packages/api/identity/src/route/mod.rs rename to packages/core/api/identity/src/route/mod.rs diff --git a/packages/api/identity/src/utils.rs b/packages/core/api/identity/src/utils.rs similarity index 100% rename from packages/api/identity/src/utils.rs rename to packages/core/api/identity/src/utils.rs diff --git a/packages/api/identity/tests/basic.rs b/packages/core/api/identity/tests/basic.rs similarity index 100% rename from packages/api/identity/tests/basic.rs rename to packages/core/api/identity/tests/basic.rs diff --git a/packages/core/api/intercom/Cargo.toml b/packages/core/api/intercom/Cargo.toml new file mode 100644 index 0000000000..29e78a15ea --- /dev/null +++ b/packages/core/api/intercom/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "api-core-intercom" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +async-trait = "0.1" +chirp-client.workspace = true +chirp-workflow.workspace = true +chrono = "0.4" +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } +lazy_static = "1.4" +prost = "0.10" +rivet-api.workspace = true +rivet-cache.workspace = true +rivet-claims.workspace = true +rivet-config.workspace = true +rivet-convert.workspace = true +rivet-env.workspace = true +rivet-health-checks.workspace = true +rivet-operation.workspace = true +rivet-pools.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +thiserror = "1.0" +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt", "json", "ansi"] } +url = "2.2.2" +uuid = { version = "1", features = ["v4"] } + +edge-pegboard.workspace = true diff --git a/packages/core/api/intercom/src/auth.rs b/packages/core/api/intercom/src/auth.rs new file mode 100644 index 0000000000..7c64dfa5c0 --- /dev/null +++ b/packages/core/api/intercom/src/auth.rs @@ -0,0 +1,66 @@ +use api_helper::{ + auth::{ApiAuth, AuthRateLimitCtx}, + util::as_auth_expired, +}; +use chirp_workflow::prelude::ApiCtx; +use proto::claims::Claims; +use rivet_claims::ClaimsDecode; +use rivet_operation::prelude::*; + +/// Information derived from the authentication middleware. +pub struct Auth { + config: rivet_config::Config, + claims: Option, +} + +#[async_trait] +impl ApiAuth for Auth { + async fn new( + config: rivet_config::Config, + api_token: Option, + rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult { + Self::rate_limit(&config, rate_limit_ctx).await?; + + Ok(Auth { + config: config.clone(), + claims: if let Some(api_token) = api_token { + Some(as_auth_expired(rivet_claims::decode( + &config.server()?.jwt.public, + &api_token, + )?)?) + } else { + None + }, + }) + } + + async fn rate_limit( + _config: &rivet_config::Config, + _rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult<()> { + Ok(()) + } +} + +impl Auth { + pub fn claims(&self) -> GlobalResult<&Claims> { + self.claims + .as_ref() + .ok_or_else(|| err_code!(API_UNAUTHORIZED, reason = "No bearer token provided.")) + } + + pub fn server(&self, ctx: &ApiCtx) -> GlobalResult<()> { + let is_development = ctx.config().server()?.rivet.auth.access_kind + == rivet_config::config::rivet::AccessKind::Development; + + // Skip auth in development mode + if self.claims.is_none() && is_development { + return Ok(()); + } + + self.claims()?.as_provisioned_server()?; + + Ok(()) + } +} diff --git a/packages/api/job/src/lib.rs b/packages/core/api/intercom/src/lib.rs similarity index 100% rename from packages/api/job/src/lib.rs rename to packages/core/api/intercom/src/lib.rs diff --git a/packages/core/api/intercom/src/route/mod.rs b/packages/core/api/intercom/src/route/mod.rs new file mode 100644 index 0000000000..8762ceb48d --- /dev/null +++ b/packages/core/api/intercom/src/route/mod.rs @@ -0,0 +1,17 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; +use uuid::Uuid; + +pub mod pegboard; + +define_router! { + routes: { + "pegboard" / "client" / Uuid / "registered": { + POST: pegboard::client_registered( + body: serde_json::Value, + internal_endpoint: true, + opt_auth: true, + ), + } + }, +} diff --git a/packages/core/api/intercom/src/route/pegboard.rs b/packages/core/api/intercom/src/route/pegboard.rs new file mode 100644 index 0000000000..3d5b9ee01b --- /dev/null +++ b/packages/core/api/intercom/src/route/pegboard.rs @@ -0,0 +1,22 @@ +use api_helper::ctx::Ctx; +use rivet_api::models; +use rivet_operation::prelude::*; +use serde_json::json; + +use crate::auth::Auth; + +// MARK: POST /pegboard/client/registered +pub async fn client_registered( + ctx: Ctx, + client_id: Uuid, + _body: serde_json::Value, +) -> GlobalResult { + ctx.auth().server(&ctx)?; + + ctx.signal(edge_pegboard::workflows::client::Registered {}) + .tag("client_id", client_id) + .send() + .await?; + + Ok(json!({})) +} diff --git a/packages/api/monolith-edge/tests/basic.rs b/packages/core/api/intercom/tests/basic.rs similarity index 100% rename from packages/api/monolith-edge/tests/basic.rs rename to packages/core/api/intercom/tests/basic.rs diff --git a/packages/api/job/Cargo.toml b/packages/core/api/job/Cargo.toml similarity index 100% rename from packages/api/job/Cargo.toml rename to packages/core/api/job/Cargo.toml diff --git a/packages/api/job/src/auth.rs b/packages/core/api/job/src/auth.rs similarity index 100% rename from packages/api/job/src/auth.rs rename to packages/core/api/job/src/auth.rs diff --git a/packages/api/provision/src/lib.rs b/packages/core/api/job/src/lib.rs similarity index 100% rename from packages/api/provision/src/lib.rs rename to packages/core/api/job/src/lib.rs diff --git a/packages/api/job/src/route/mod.rs b/packages/core/api/job/src/route/mod.rs similarity index 100% rename from packages/api/job/src/route/mod.rs rename to packages/core/api/job/src/route/mod.rs diff --git a/packages/api/job/src/route/run.rs b/packages/core/api/job/src/route/run.rs similarity index 100% rename from packages/api/job/src/route/run.rs rename to packages/core/api/job/src/route/run.rs diff --git a/packages/api/job/tests/basic.rs b/packages/core/api/job/tests/basic.rs similarity index 100% rename from packages/api/job/tests/basic.rs rename to packages/core/api/job/tests/basic.rs diff --git a/packages/api/matchmaker/Cargo.toml b/packages/core/api/matchmaker/Cargo.toml similarity index 100% rename from packages/api/matchmaker/Cargo.toml rename to packages/core/api/matchmaker/Cargo.toml diff --git a/packages/api/matchmaker/src/auth.rs b/packages/core/api/matchmaker/src/auth.rs similarity index 100% rename from packages/api/matchmaker/src/auth.rs rename to packages/core/api/matchmaker/src/auth.rs diff --git a/packages/api/matchmaker/src/fetch/game.rs b/packages/core/api/matchmaker/src/fetch/game.rs similarity index 100% rename from packages/api/matchmaker/src/fetch/game.rs rename to packages/core/api/matchmaker/src/fetch/game.rs diff --git a/packages/api/matchmaker/src/fetch/mod.rs b/packages/core/api/matchmaker/src/fetch/mod.rs similarity index 100% rename from packages/api/matchmaker/src/fetch/mod.rs rename to packages/core/api/matchmaker/src/fetch/mod.rs diff --git a/packages/api/matchmaker/src/lib.rs b/packages/core/api/matchmaker/src/lib.rs similarity index 100% rename from packages/api/matchmaker/src/lib.rs rename to packages/core/api/matchmaker/src/lib.rs diff --git a/packages/api/matchmaker/src/route/lobbies.rs b/packages/core/api/matchmaker/src/route/lobbies.rs similarity index 100% rename from packages/api/matchmaker/src/route/lobbies.rs rename to packages/core/api/matchmaker/src/route/lobbies.rs diff --git a/packages/api/matchmaker/src/route/mod.rs b/packages/core/api/matchmaker/src/route/mod.rs similarity index 100% rename from packages/api/matchmaker/src/route/mod.rs rename to packages/core/api/matchmaker/src/route/mod.rs diff --git a/packages/api/matchmaker/src/route/players.rs b/packages/core/api/matchmaker/src/route/players.rs similarity index 100% rename from packages/api/matchmaker/src/route/players.rs rename to packages/core/api/matchmaker/src/route/players.rs diff --git a/packages/api/matchmaker/src/route/regions.rs b/packages/core/api/matchmaker/src/route/regions.rs similarity index 100% rename from packages/api/matchmaker/src/route/regions.rs rename to packages/core/api/matchmaker/src/route/regions.rs diff --git a/packages/api/matchmaker/src/utils.rs b/packages/core/api/matchmaker/src/utils.rs similarity index 100% rename from packages/api/matchmaker/src/utils.rs rename to packages/core/api/matchmaker/src/utils.rs diff --git a/packages/api/matchmaker/tests/auth.rs b/packages/core/api/matchmaker/tests/auth.rs similarity index 100% rename from packages/api/matchmaker/tests/auth.rs rename to packages/core/api/matchmaker/tests/auth.rs diff --git a/packages/api/matchmaker/tests/common.rs b/packages/core/api/matchmaker/tests/common.rs similarity index 100% rename from packages/api/matchmaker/tests/common.rs rename to packages/core/api/matchmaker/tests/common.rs diff --git a/packages/api/matchmaker/tests/custom_lobby.rs b/packages/core/api/matchmaker/tests/custom_lobby.rs similarity index 100% rename from packages/api/matchmaker/tests/custom_lobby.rs rename to packages/core/api/matchmaker/tests/custom_lobby.rs diff --git a/packages/api/matchmaker/tests/find.rs b/packages/core/api/matchmaker/tests/find.rs similarity index 100% rename from packages/api/matchmaker/tests/find.rs rename to packages/core/api/matchmaker/tests/find.rs diff --git a/packages/api/matchmaker/tests/lifecycle.rs b/packages/core/api/matchmaker/tests/lifecycle.rs similarity index 100% rename from packages/api/matchmaker/tests/lifecycle.rs rename to packages/core/api/matchmaker/tests/lifecycle.rs diff --git a/packages/api/matchmaker/tests/list.rs b/packages/core/api/matchmaker/tests/list.rs similarity index 100% rename from packages/api/matchmaker/tests/list.rs rename to packages/core/api/matchmaker/tests/list.rs diff --git a/packages/api/matchmaker/tests/regions.rs b/packages/core/api/matchmaker/tests/regions.rs similarity index 100% rename from packages/api/matchmaker/tests/regions.rs rename to packages/core/api/matchmaker/tests/regions.rs diff --git a/packages/core/api/monolith-edge/Cargo.toml b/packages/core/api/monolith-edge/Cargo.toml new file mode 100644 index 0000000000..aff4d6423c --- /dev/null +++ b/packages/core/api/monolith-edge/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "api-core-monolith-edge" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +async-trait = "0.1" +chirp-client.workspace = true +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "tcp"] } +rivet-config.workspace = true +rivet-env.workspace = true +rivet-operation.workspace = true +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "fmt", + "json", + "ansi", +] } +url = "2.2.2" + +api-core-intercom.workspace = true +api-provision.workspace = true +api-core-traefik-provider.workspace = true diff --git a/packages/api/monolith-edge/src/lib.rs b/packages/core/api/monolith-edge/src/lib.rs similarity index 100% rename from packages/api/monolith-edge/src/lib.rs rename to packages/core/api/monolith-edge/src/lib.rs diff --git a/packages/core/api/monolith-edge/src/route/mod.rs b/packages/core/api/monolith-edge/src/route/mod.rs new file mode 100644 index 0000000000..fa7bd6872b --- /dev/null +++ b/packages/core/api/monolith-edge/src/route/mod.rs @@ -0,0 +1,43 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; +use rivet_operation::prelude::*; + +pub async fn handle( + shared_client: chirp_client::SharedClientHandle, + config: rivet_config::Config, + pools: rivet_pools::Pools, + cache: rivet_cache::Cache, + ray_id: uuid::Uuid, + request: Request, +) -> Result, http::Error> { + let response = Response::builder(); + + // Handle route + Router::handle( + shared_client, + config, + pools, + cache, + ray_id, + request, + response, + ) + .await +} + +define_router! { + routes: {}, + mounts: [ + { + path: api_core_traefik_provider::route::Router, + prefix: "traefik-provider", + }, + { + path: api_provision::route::Router, + prefix: "provision", + }, + { + path: api_core_intercom::route::Router, + }, + ], +} diff --git a/packages/api/monolith-public/tests/basic.rs b/packages/core/api/monolith-edge/tests/basic.rs similarity index 100% rename from packages/api/monolith-public/tests/basic.rs rename to packages/core/api/monolith-edge/tests/basic.rs diff --git a/packages/core/api/monolith-public/Cargo.toml b/packages/core/api/monolith-public/Cargo.toml new file mode 100644 index 0000000000..6adcf951fe --- /dev/null +++ b/packages/core/api/monolith-public/Cargo.toml @@ -0,0 +1,37 @@ +[package] +name = "api-core-monolith-public" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +async-trait = "0.1" +chirp-client.workspace = true +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "tcp"] } +rivet-config.workspace = true +rivet-env.workspace = true +rivet-operation.workspace = true +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "fmt", + "json", + "ansi", +] } +url = "2.2.2" + +api-core-actor.workspace = true +api-auth.workspace = true +api-cf-verification.workspace = true +api-cloud.workspace = true +api-games.workspace = true +api-group.workspace = true +api-identity.workspace = true +api-job.workspace = true +api-matchmaker.workspace = true +api-portal.workspace = true +api-status.workspace = true +api-ui.workspace = true diff --git a/packages/api/monolith-public/src/lib.rs b/packages/core/api/monolith-public/src/lib.rs similarity index 100% rename from packages/api/monolith-public/src/lib.rs rename to packages/core/api/monolith-public/src/lib.rs diff --git a/packages/core/api/monolith-public/src/route/mod.rs b/packages/core/api/monolith-public/src/route/mod.rs new file mode 100644 index 0000000000..533d124469 --- /dev/null +++ b/packages/core/api/monolith-public/src/route/mod.rs @@ -0,0 +1,77 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; +use rivet_operation::prelude::*; + +pub async fn handle( + shared_client: chirp_client::SharedClientHandle, + config: rivet_config::Config, + pools: rivet_pools::Pools, + cache: rivet_cache::Cache, + ray_id: uuid::Uuid, + request: Request, +) -> Result, http::Error> { + let response = Response::builder(); + + // Handle route + Router::handle( + shared_client, + config, + pools, + cache, + ray_id, + request, + response, + ) + .await +} + +define_router! { + routes: {}, + mounts: [ + { + path: api_ui::route::Router, + }, + { + path: api_auth::route::Router, + prefix: "auth", + }, + { + path: api_cf_verification::route::Router, + prefix: "cf-verification", + }, + { + path: api_cloud::route::Router, + prefix: "cloud", + }, + { + path: api_games::route::Router, + }, + { + path: api_group::route::Router, + prefix: "group", + }, + { + path: api_identity::route::Router, + prefix: "identity", + }, + { + path: api_job::route::Router, + prefix: "job", + }, + { + path: api_matchmaker::route::Router, + prefix: "matchmaker", + }, + { + path: api_portal::route::Router, + prefix: "portal", + }, + { + path: api_status::route::Router, + prefix: "status", + }, + { + path: api_core_actor::route::Router, + }, + ], +} diff --git a/packages/api/provision/tests/basic.rs b/packages/core/api/monolith-public/tests/basic.rs similarity index 100% rename from packages/api/provision/tests/basic.rs rename to packages/core/api/monolith-public/tests/basic.rs diff --git a/packages/api/portal/Cargo.toml b/packages/core/api/portal/Cargo.toml similarity index 100% rename from packages/api/portal/Cargo.toml rename to packages/core/api/portal/Cargo.toml diff --git a/packages/api/portal/src/auth.rs b/packages/core/api/portal/src/auth.rs similarity index 100% rename from packages/api/portal/src/auth.rs rename to packages/core/api/portal/src/auth.rs diff --git a/packages/api/portal/src/build.rs b/packages/core/api/portal/src/build.rs similarity index 100% rename from packages/api/portal/src/build.rs rename to packages/core/api/portal/src/build.rs diff --git a/packages/api/portal/src/convert.rs b/packages/core/api/portal/src/convert.rs similarity index 100% rename from packages/api/portal/src/convert.rs rename to packages/core/api/portal/src/convert.rs diff --git a/packages/api/portal/src/lib.rs b/packages/core/api/portal/src/lib.rs similarity index 100% rename from packages/api/portal/src/lib.rs rename to packages/core/api/portal/src/lib.rs diff --git a/packages/api/portal/src/route/games.rs b/packages/core/api/portal/src/route/games.rs similarity index 100% rename from packages/api/portal/src/route/games.rs rename to packages/core/api/portal/src/route/games.rs diff --git a/packages/api/portal/src/route/mod.rs b/packages/core/api/portal/src/route/mod.rs similarity index 100% rename from packages/api/portal/src/route/mod.rs rename to packages/core/api/portal/src/route/mod.rs diff --git a/packages/api/portal/src/utils.rs b/packages/core/api/portal/src/utils.rs similarity index 100% rename from packages/api/portal/src/utils.rs rename to packages/core/api/portal/src/utils.rs diff --git a/packages/api/portal/tests/basic.rs b/packages/core/api/portal/tests/basic.rs similarity index 100% rename from packages/api/portal/tests/basic.rs rename to packages/core/api/portal/tests/basic.rs diff --git a/packages/api/provision/Cargo.toml b/packages/core/api/provision/Cargo.toml similarity index 100% rename from packages/api/provision/Cargo.toml rename to packages/core/api/provision/Cargo.toml diff --git a/packages/core/api/provision/src/auth.rs b/packages/core/api/provision/src/auth.rs new file mode 100644 index 0000000000..3304512fac --- /dev/null +++ b/packages/core/api/provision/src/auth.rs @@ -0,0 +1,55 @@ +use api_helper::{ + auth::{ApiAuth, AuthRateLimitCtx}, + util::as_auth_expired, +}; +use proto::claims::Claims; +use rivet_claims::ClaimsDecode; +use rivet_operation::prelude::*; + +/// Information derived from the authentication middleware. +pub struct Auth { + config: rivet_config::Config, + claims: Option, +} + +#[async_trait] +impl ApiAuth for Auth { + async fn new( + config: rivet_config::Config, + api_token: Option, + rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult { + Self::rate_limit(&config, rate_limit_ctx).await?; + + Ok(Auth { + config: config.clone(), + claims: if let Some(api_token) = api_token { + Some(as_auth_expired(rivet_claims::decode( + &config.server()?.jwt.public, + &api_token, + )?)?) + } else { + None + }, + }) + } + + async fn rate_limit( + _config: &rivet_config::Config, + _rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult<()> { + Ok(()) + } +} + +impl Auth { + pub fn claims(&self) -> GlobalResult<&Claims> { + self.claims + .as_ref() + .ok_or_else(|| err_code!(API_UNAUTHORIZED, reason = "No bearer token provided.")) + } + + pub fn server(&self) -> GlobalResult { + self.claims()?.as_provisioned_server() + } +} diff --git a/packages/api/status/src/lib.rs b/packages/core/api/provision/src/lib.rs similarity index 100% rename from packages/api/status/src/lib.rs rename to packages/core/api/provision/src/lib.rs diff --git a/packages/api/provision/src/route/datacenters.rs b/packages/core/api/provision/src/route/datacenters.rs similarity index 100% rename from packages/api/provision/src/route/datacenters.rs rename to packages/core/api/provision/src/route/datacenters.rs diff --git a/packages/api/provision/src/route/mod.rs b/packages/core/api/provision/src/route/mod.rs similarity index 100% rename from packages/api/provision/src/route/mod.rs rename to packages/core/api/provision/src/route/mod.rs diff --git a/packages/api/provision/src/route/servers.rs b/packages/core/api/provision/src/route/servers.rs similarity index 100% rename from packages/api/provision/src/route/servers.rs rename to packages/core/api/provision/src/route/servers.rs diff --git a/packages/api/provision/src/route/tunnel.rs b/packages/core/api/provision/src/route/tunnel.rs similarity index 100% rename from packages/api/provision/src/route/tunnel.rs rename to packages/core/api/provision/src/route/tunnel.rs diff --git a/packages/services/cluster/standalone/metrics-publish/tests/integration.rs b/packages/core/api/provision/tests/basic.rs similarity index 100% rename from packages/services/cluster/standalone/metrics-publish/tests/integration.rs rename to packages/core/api/provision/tests/basic.rs diff --git a/packages/api/status/Cargo.toml b/packages/core/api/status/Cargo.toml similarity index 100% rename from packages/api/status/Cargo.toml rename to packages/core/api/status/Cargo.toml diff --git a/packages/api/status/src/auth.rs b/packages/core/api/status/src/auth.rs similarity index 100% rename from packages/api/status/src/auth.rs rename to packages/core/api/status/src/auth.rs diff --git a/packages/core/api/status/src/lib.rs b/packages/core/api/status/src/lib.rs new file mode 100644 index 0000000000..eeaeaaafb7 --- /dev/null +++ b/packages/core/api/status/src/lib.rs @@ -0,0 +1,2 @@ +pub mod auth; +pub mod route; diff --git a/packages/api/status/src/route/actor_isolate.rs b/packages/core/api/status/src/route/actor_isolate.rs similarity index 100% rename from packages/api/status/src/route/actor_isolate.rs rename to packages/core/api/status/src/route/actor_isolate.rs diff --git a/packages/api/status/src/route/matchmaker.rs b/packages/core/api/status/src/route/matchmaker.rs similarity index 100% rename from packages/api/status/src/route/matchmaker.rs rename to packages/core/api/status/src/route/matchmaker.rs diff --git a/packages/api/status/src/route/mod.rs b/packages/core/api/status/src/route/mod.rs similarity index 100% rename from packages/api/status/src/route/mod.rs rename to packages/core/api/status/src/route/mod.rs diff --git a/packages/api/status/tests/basic.rs b/packages/core/api/status/tests/basic.rs similarity index 100% rename from packages/api/status/tests/basic.rs rename to packages/core/api/status/tests/basic.rs diff --git a/packages/core/api/traefik-provider/Cargo.toml b/packages/core/api/traefik-provider/Cargo.toml new file mode 100644 index 0000000000..bcf5c9f358 --- /dev/null +++ b/packages/core/api/traefik-provider/Cargo.toml @@ -0,0 +1,64 @@ +[package] +name = "api-core-traefik-provider" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +rivet-convert.workspace = true +api-helper.workspace = true +async_once = "0.2" +async-trait = "0.1" +chirp-client.workspace = true +rivet-operation.workspace = true +chrono = "0.4" +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } +lazy_static = "1.4" +prost = "0.10" +rivet-cache.workspace = true +rivet-claims.workspace = true +rivet-health-checks.workspace = true +rivet-pools.workspace = true +s3-util.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +thiserror = "1.0" +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "fmt", + "json", + "ansi", +] } +url = "2.2.2" +util-cdn.workspace = true +util-job.workspace = true +uuid = { version = "1", features = ["v4"] } + +cluster.workspace = true +ds.workspace = true +rivet-config.workspace = true +rivet-env.workspace = true + +[dependencies.sqlx] +workspace = true +features = ["json"] + + +[dev-dependencies] +rivet-connection.workspace = true +rivet-route.workspace = true +base64 = "0.13" +reqwest = "0.11" + +cdn-namespace-auth-user-update.workspace = true +cdn-namespace-domain-create.workspace = true +faker-cdn-site.workspace = true +faker-game.workspace = true +faker-game-namespace.workspace = true +faker-game-version.workspace = true +faker-job-run.workspace = true +faker-region.workspace = true +game-get.workspace = true diff --git a/packages/api/traefik-provider/src/auth.rs b/packages/core/api/traefik-provider/src/auth.rs similarity index 100% rename from packages/api/traefik-provider/src/auth.rs rename to packages/core/api/traefik-provider/src/auth.rs diff --git a/packages/api/traefik-provider/src/lib.rs b/packages/core/api/traefik-provider/src/lib.rs similarity index 100% rename from packages/api/traefik-provider/src/lib.rs rename to packages/core/api/traefik-provider/src/lib.rs diff --git a/packages/api/traefik-provider/src/route/core.rs b/packages/core/api/traefik-provider/src/route/core.rs similarity index 100% rename from packages/api/traefik-provider/src/route/core.rs rename to packages/core/api/traefik-provider/src/route/core.rs diff --git a/packages/core/api/traefik-provider/src/route/mod.rs b/packages/core/api/traefik-provider/src/route/mod.rs new file mode 100644 index 0000000000..33b631a6e7 --- /dev/null +++ b/packages/core/api/traefik-provider/src/route/mod.rs @@ -0,0 +1,24 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; + +pub mod core; +pub mod tunnel; + +define_router! { + routes: { + "config" / "core": { + GET: core::config( + query: core::ConfigQuery, + internal_endpoint: true, + opt_auth: true, + ), + }, + "config" / "tunnel": { + GET: tunnel::config( + query: tunnel::ConfigQuery, + internal_endpoint: true, + opt_auth: true, + ), + }, + } +} diff --git a/packages/api/traefik-provider/src/route/tunnel.rs b/packages/core/api/traefik-provider/src/route/tunnel.rs similarity index 100% rename from packages/api/traefik-provider/src/route/tunnel.rs rename to packages/core/api/traefik-provider/src/route/tunnel.rs diff --git a/packages/api/traefik-provider/src/types.rs b/packages/core/api/traefik-provider/src/types.rs similarity index 100% rename from packages/api/traefik-provider/src/types.rs rename to packages/core/api/traefik-provider/src/types.rs diff --git a/packages/api/traefik-provider/tests/basic.rs b/packages/core/api/traefik-provider/tests/basic.rs similarity index 100% rename from packages/api/traefik-provider/tests/basic.rs rename to packages/core/api/traefik-provider/tests/basic.rs diff --git a/packages/api/ui/Cargo.toml b/packages/core/api/ui/Cargo.toml similarity index 100% rename from packages/api/ui/Cargo.toml rename to packages/core/api/ui/Cargo.toml diff --git a/packages/api/ui/src/lib.rs b/packages/core/api/ui/src/lib.rs similarity index 100% rename from packages/api/ui/src/lib.rs rename to packages/core/api/ui/src/lib.rs diff --git a/packages/api/ui/src/route.rs b/packages/core/api/ui/src/route.rs similarity index 100% rename from packages/api/ui/src/route.rs rename to packages/core/api/ui/src/route.rs diff --git a/packages/infra/client/README.md b/packages/core/infra/client/README.md similarity index 100% rename from packages/infra/client/README.md rename to packages/core/infra/client/README.md diff --git a/packages/infra/client/actor-kv/Cargo.toml b/packages/core/infra/client/actor-kv/Cargo.toml similarity index 100% rename from packages/infra/client/actor-kv/Cargo.toml rename to packages/core/infra/client/actor-kv/Cargo.toml diff --git a/packages/infra/client/actor-kv/src/entry.rs b/packages/core/infra/client/actor-kv/src/entry.rs similarity index 100% rename from packages/infra/client/actor-kv/src/entry.rs rename to packages/core/infra/client/actor-kv/src/entry.rs diff --git a/packages/infra/client/actor-kv/src/key.rs b/packages/core/infra/client/actor-kv/src/key.rs similarity index 100% rename from packages/infra/client/actor-kv/src/key.rs rename to packages/core/infra/client/actor-kv/src/key.rs diff --git a/packages/core/infra/client/actor-kv/src/lib.rs b/packages/core/infra/client/actor-kv/src/lib.rs new file mode 100644 index 0000000000..0f4037c0b8 --- /dev/null +++ b/packages/core/infra/client/actor-kv/src/lib.rs @@ -0,0 +1,413 @@ +use std::{ + collections::HashMap, + result::Result::{Err, Ok}, +}; + +use anyhow::*; +use deno_core::JsBuffer; +pub use entry::Entry; +use entry::{EntryBuilder, SubKey}; +use foundationdb::{self as fdb, directory::Directory, tuple::Subspace}; +use futures_util::{StreamExt, TryStreamExt}; +use indexmap::IndexMap; +use key::Key; +use list_query::ListLimitReached; +pub use list_query::ListQuery; +pub use metadata::Metadata; +use pegboard::protocol; +use prost::Message; +use utils::{owner_segment, validate_entries, validate_keys, TransactionExt}; + +mod entry; +pub mod key; +mod list_query; +mod metadata; +mod utils; + +const MAX_KEY_SIZE: usize = 2 * 1024; +const MAX_VALUE_SIZE: usize = 128 * 1024; +const MAX_KEYS: usize = 128; +const MAX_PUT_PAYLOAD_SIZE: usize = 976 * 1024; +const MAX_STORAGE_SIZE: usize = 1024 * 1024 * 1024; // 1 GiB +const VALUE_CHUNK_SIZE: usize = 1000; // 1 KB, not KiB + +// Currently designed largely around the Deno runtime. More abstractions can be made later. +pub struct ActorKv { + version: &'static str, + db: fdb::Database, + owner: protocol::ActorOwner, + subspace: Option, +} + +impl ActorKv { + pub fn new(db: fdb::Database, owner: protocol::ActorOwner) -> Self { + Self { + version: env!("CARGO_PKG_VERSION"), + db, + owner, + subspace: None, + } + } + + /// Initializes actor's KV. + /// + /// If FDB is down, this will hang indefinitely until connected. + pub async fn init(&mut self) -> Result<()> { + tracing::info!("initializing actor KV"); + + let root = fdb::directory::DirectoryLayer::default(); + + let tx = self.db.create_trx()?; + let actor_dir = root + .create_or_open( + &tx, + &["pegboard".into(), owner_segment(&self.owner)], + None, + Some(b"partition"), + ) + .await + .map_err(|err| anyhow!("{err:?}"))?; + let kv_dir = actor_dir + .create_or_open(&tx, &["kv".into()], None, None) + .await + .map_err(|err| anyhow!("{err:?}"))?; + tx.commit().await.map_err(|err| anyhow!("{err:?}"))?; + + self.subspace = Some(kv_dir.subspace(&()).map_err(|err| anyhow!("{err:?}"))?); + + tracing::info!("successfully initialized KV"); + + Ok(()) + } + + /// Returns estimated size of the given subspace. + pub async fn get_subspace_size(&self, subspace: &Subspace) -> Result { + let (start, end) = subspace.range(); + + // This txn does not have to be committed because we are not modifying any data + let tx = self.db.create_trx()?; + tx.get_estimated_range_size_bytes(&start, &end) + .await + .map_err(Into::into) + } + + /// Gets keys from the KV store. + pub async fn get(&self, keys: Vec) -> Result> { + let subspace = self + .subspace + .as_ref() + .context("must call `ActorKv::init` before using KV operations")?; + + validate_keys(&keys)?; + + self.db + .run(|tx, _mc| { + let keys = keys.clone(); + async move { + futures_util::stream::iter(keys) + .map(|key| { + let tx = tx.clone(); + let key_subspace = subspace.subspace(&key); + + async move { + // Get all sub keys in the key subspace + let stream = tx.get_ranges_keyvalues_owned( + fdb::RangeOption { + mode: fdb::options::StreamingMode::WantAll, + ..key_subspace.range().into() + }, + false, + ); + + stream.map(move |res| { + match res { + Ok(value) => { + // Parse key as string + if let Ok(sub_key) = + key_subspace.unpack::(value.key()) + { + if sub_key != "metadata" { + bail!("unexpected sub key: {sub_key:?}"); + } + + Ok((key.clone(), SubKey::Metadata(value))) + } else { + // Parse sub key as idx + let (_, idx) = key_subspace + .unpack::<(String, usize)>(value.key())?; + + Ok((key.clone(), SubKey::Chunk(idx, value))) + } + } + Err(err) => Err(err.into()), + } + }) + } + }) + // Should remain in order + .buffered(32) + .flatten() + .try_fold(HashMap::new(), |mut acc, (key, sub_key)| async { + acc.entry(key) + .or_insert_with(EntryBuilder::default) + .add_sub_key(sub_key)?; + + Ok(acc) + }) + .await + .map_err(|x| fdb::FdbBindingError::CustomError(x.into())) + } + }) + .await + .map_err(Into::::into)? + .into_iter() + .map(|(key, builder)| { + let entry = builder.build(&key)?; + + Ok((key, entry)) + }) + .collect() + } + + /// Gets keys from the KV store. + pub async fn list( + &self, + query: ListQuery, + reverse: bool, + limit: Option, + ) -> Result> { + let subspace = self + .subspace + .as_ref() + .context("must call `ActorKv::init` before using KV operations")?; + + query.validate()?; + + let list_range = query.range(&subspace); + + let res = self + .db + .run(|tx, _mc| { + let list_range = list_range.clone(); + + async move { + // Get all sub keys in the key subspace + let stream = tx.get_ranges_keyvalues_owned( + fdb::RangeOption { + mode: if limit.is_some() { + fdb::options::StreamingMode::Iterator + } else { + fdb::options::StreamingMode::WantAll + }, + reverse, + ..list_range.into() + }, + false, + ); + + let stream = stream.map(move |res| { + match res { + Ok(value) => { + // Parse key as string + if let Ok((key, sub_key)) = + subspace.unpack::<(Key, String)>(value.key()) + { + if sub_key != "metadata" { + bail!("unexpected sub key: {sub_key:?}"); + } + + Ok((key, SubKey::Metadata(value))) + } else { + // Parse sub key as idx + let (key, _, idx) = + subspace.unpack::<(Key, String, usize)>(value.key())?; + + Ok((key, SubKey::Chunk(idx, value))) + } + } + Err(err) => Err(err.into()), + } + }); + + // With a limit, we short circuit out of the `try_fold` once the limit is reached + if let Some(limit) = limit { + stream + .try_fold(IndexMap::new(), |mut acc, (key, sub_key)| async { + let size = acc.len(); + let entry = acc.entry(key); + + // Short circuit when limit is reached. This relies on data from the stream + // being in order. + if size == limit && matches!(entry, indexmap::map::Entry::Vacant(_)) + { + return Err(ListLimitReached(acc).into()); + } + + entry + .or_insert_with(EntryBuilder::default) + .add_sub_key(sub_key)?; + + Ok(acc) + }) + .await + // The downcast further down doesn't work without this downcast, I have no idea why + .map_err(|x| match x.downcast::() { + Ok(err) => fdb::FdbBindingError::CustomError(err.into()), + Err(err) => fdb::FdbBindingError::CustomError(err.into()), + }) + } else { + stream + .try_fold(IndexMap::new(), |mut acc, (key, sub_key)| async { + acc.entry(key) + .or_insert_with(EntryBuilder::default) + .add_sub_key(sub_key)?; + + Ok(acc) + }) + .await + .map_err(|x| fdb::FdbBindingError::CustomError(x.into())) + } + } + }) + .await; + + let values = match res { + Ok(values) => values, + Err(fdb::FdbBindingError::CustomError(err)) => { + let ListLimitReached(values) = *err + .downcast::() + .map_err(fdb::FdbBindingError::CustomError)?; + + values + } + Err(err) => return Err(err.into()), + }; + + values + .into_iter() + .map(|(key, builder)| { + let entry = builder.build(&key)?; + + Ok((key, entry)) + }) + .collect() + } + + /// Puts keys into the KV store. + pub async fn put(&self, entries: HashMap) -> Result<()> { + let subspace = self + .subspace + .as_ref() + .context("must call `ActorKv::init` before using KV operations")?; + let total_size = self.get_subspace_size(subspace).await? as usize; + + validate_entries(&entries, total_size)?; + + self.db + .run(|tx, _mc| { + // TODO: Potentially costly clone + let entries = entries.clone(); + let subspace = subspace.clone(); + + async move { + futures_util::stream::iter(entries) + .map(|(key, value)| { + let tx = tx.clone(); + let key_subspace = subspace.subspace(&key); + + async move { + // Clear previous before setting + tx.clear_subspace_range(&key_subspace); + + let metadata = Metadata { + kv_version: self.version.as_bytes().to_vec(), + create_ts: utils::now(), + }; + let mut buf = Vec::new(); + metadata + .encode(&mut buf) + .map_err(|err| fdb::FdbBindingError::CustomError(err.into()))?; + + // Set metadata + tx.set(&key_subspace.pack(&"metadata"), &buf); + + // Set data + for start in (0..value.len()).step_by(VALUE_CHUNK_SIZE) { + let idx = start / VALUE_CHUNK_SIZE; + let end = (start + VALUE_CHUNK_SIZE).min(value.len()); + + tx.set( + &key_subspace.pack(&("data", idx)), + &value.get(start..end).context("bad slice").map_err( + |err| fdb::FdbBindingError::CustomError(err.into()), + )?, + ); + } + + Ok(()) + } + }) + .buffer_unordered(32) + .try_collect() + .await + } + }) + .await + .map_err(Into::into) + } + + /// Deletes keys from the KV store. + pub async fn delete(&self, keys: Vec) -> Result<()> { + let subspace = self + .subspace + .as_ref() + .context("must call `ActorKv::init` before using KV operations")?; + + validate_keys(&keys)?; + + self.db + .run(|tx, _mc| { + let keys = keys.clone(); + async move { + for key in keys { + let key_subspace = subspace.subspace(&key); + + tx.clear_subspace_range(&key_subspace); + } + + Ok(()) + } + }) + .await + .map_err(Into::into) + } + + /// Deletes all keys from the KV store. + pub async fn delete_all(&self) -> Result<()> { + let subspace = self + .subspace + .as_ref() + .context("must call `ActorKv::init` before using KV operations")?; + + self.db + .run(|tx, _mc| async move { + tx.clear_subspace_range(&subspace); + Ok(()) + }) + .await + .map_err(Into::into) + } + + /// **Destroys entire actor's KV. Cannot be undone.** + pub async fn destroy(self) -> Result<()> { + let root = fdb::directory::DirectoryLayer::default(); + + let tx = self.db.create_trx()?; + root.remove_if_exists(&tx, &["pegboard".into(), owner_segment(&self.owner)]) + .await + .map_err(|err| anyhow!("{err:?}"))?; + tx.commit().await.map_err(|err| anyhow!("{err:?}"))?; + + Ok(()) + } +} diff --git a/packages/infra/client/actor-kv/src/list_query.rs b/packages/core/infra/client/actor-kv/src/list_query.rs similarity index 100% rename from packages/infra/client/actor-kv/src/list_query.rs rename to packages/core/infra/client/actor-kv/src/list_query.rs diff --git a/packages/infra/client/actor-kv/src/metadata.rs b/packages/core/infra/client/actor-kv/src/metadata.rs similarity index 100% rename from packages/infra/client/actor-kv/src/metadata.rs rename to packages/core/infra/client/actor-kv/src/metadata.rs diff --git a/packages/core/infra/client/actor-kv/src/utils.rs b/packages/core/infra/client/actor-kv/src/utils.rs new file mode 100644 index 0000000000..87b0088d13 --- /dev/null +++ b/packages/core/infra/client/actor-kv/src/utils.rs @@ -0,0 +1,131 @@ +use std::{collections::HashMap, result::Result::Ok}; + +use anyhow::*; +use deno_core::JsBuffer; +use foundationdb as fdb; +use futures_util::{FutureExt, TryStreamExt}; +use pegboard::protocol; + +use crate::{ + key::Key, MAX_KEYS, MAX_KEY_SIZE, MAX_PUT_PAYLOAD_SIZE, MAX_STORAGE_SIZE, MAX_VALUE_SIZE, +}; + +pub trait TransactionExt { + /// Owned version of `Transaction.get_ranges` (self is owned). + fn get_ranges_owned<'a>( + self, + opt: fdb::RangeOption<'a>, + snapshot: bool, + ) -> impl futures_util::Stream> + + Send + + Sync + + Unpin + + 'a; + + /// Owned version of `Transaction.get_ranges_keyvalues` (self is owned). + fn get_ranges_keyvalues_owned<'a>( + self, + opt: fdb::RangeOption<'a>, + snapshot: bool, + ) -> impl futures_util::Stream> + Unpin + 'a; +} + +impl TransactionExt for fdb::RetryableTransaction { + fn get_ranges_owned<'a>( + self, + opt: fdb::RangeOption<'a>, + snapshot: bool, + ) -> impl futures_util::Stream> + + Send + + Sync + + Unpin + + 'a { + futures_util::stream::unfold((1, Some(opt)), move |(iteration, maybe_opt)| { + if let Some(opt) = maybe_opt { + futures_util::future::Either::Left( + self.get_range(&opt, iteration as usize, snapshot) + .map(move |maybe_values| { + let next_opt = match &maybe_values { + Ok(values) => opt.next_range(values), + Err(..) => None, + }; + Some((maybe_values, (iteration + 1, next_opt))) + }), + ) + } else { + futures_util::future::Either::Right(std::future::ready(None)) + } + }) + } + + fn get_ranges_keyvalues_owned<'a>( + self, + opt: fdb::RangeOption<'a>, + snapshot: bool, + ) -> impl futures_util::Stream> + Unpin + 'a { + self.get_ranges_owned(opt, snapshot) + .map_ok(|values| futures_util::stream::iter(values.into_iter().map(Ok))) + .try_flatten() + } +} + +pub fn now() -> i64 { + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_else(|err| unreachable!("time is broken: {}", err)) + .as_millis() + .try_into() + .expect("now doesn't fit in i64") +} + +pub fn owner_segment(owner: &protocol::ActorOwner) -> String { + match owner { + protocol::ActorOwner::DynamicServer { server_id, .. } => (*server_id).into(), + } +} + +pub fn validate_keys(keys: &[Key]) -> Result<()> { + ensure!(keys.len() <= MAX_KEYS, "a maximum of 128 keys is allowed"); + + for key in keys { + ensure!( + key.len() <= MAX_KEY_SIZE, + "key is too long (max 2048 bytes)" + ); + } + + Ok(()) +} + +pub fn validate_entries(entries: &HashMap, total_size: usize) -> Result<()> { + ensure!( + entries.len() <= MAX_KEYS, + "A maximum of 128 key-value entries is allowed" + ); + let payload_size = entries + .iter() + .fold(0, |acc, (k, v)| acc + k.len() + v.len()); + ensure!( + payload_size <= MAX_PUT_PAYLOAD_SIZE, + "total payload is too large (max 976 KiB)" + ); + + let storage_remaining = MAX_STORAGE_SIZE.saturating_sub(total_size); + ensure!( + payload_size <= storage_remaining, + "not enough space left in storage ({storage_remaining} bytes remaining, current payload is {payload_size} bytes)" + ); + + for (key, value) in entries { + ensure!( + key.len() <= MAX_KEY_SIZE, + "key is too long (max 2048 bytes)" + ); + ensure!( + value.len() <= MAX_VALUE_SIZE, + "value is too large (max 128 KiB)" + ); + } + + Ok(()) +} diff --git a/packages/infra/client/config/Cargo.toml b/packages/core/infra/client/config/Cargo.toml similarity index 100% rename from packages/infra/client/config/Cargo.toml rename to packages/core/infra/client/config/Cargo.toml diff --git a/packages/infra/client/config/src/isolate_runner/actor.rs b/packages/core/infra/client/config/src/isolate_runner/actor.rs similarity index 100% rename from packages/infra/client/config/src/isolate_runner/actor.rs rename to packages/core/infra/client/config/src/isolate_runner/actor.rs diff --git a/packages/infra/client/config/src/isolate_runner/mod.rs b/packages/core/infra/client/config/src/isolate_runner/mod.rs similarity index 100% rename from packages/infra/client/config/src/isolate_runner/mod.rs rename to packages/core/infra/client/config/src/isolate_runner/mod.rs diff --git a/packages/infra/client/config/src/lib.rs b/packages/core/infra/client/config/src/lib.rs similarity index 100% rename from packages/infra/client/config/src/lib.rs rename to packages/core/infra/client/config/src/lib.rs diff --git a/packages/infra/client/config/src/manager.rs b/packages/core/infra/client/config/src/manager.rs similarity index 100% rename from packages/infra/client/config/src/manager.rs rename to packages/core/infra/client/config/src/manager.rs diff --git a/packages/infra/client/config/src/runner_protocol.rs b/packages/core/infra/client/config/src/runner_protocol.rs similarity index 100% rename from packages/infra/client/config/src/runner_protocol.rs rename to packages/core/infra/client/config/src/runner_protocol.rs diff --git a/packages/infra/client/container-runner/Cargo.toml b/packages/core/infra/client/container-runner/Cargo.toml similarity index 100% rename from packages/infra/client/container-runner/Cargo.toml rename to packages/core/infra/client/container-runner/Cargo.toml diff --git a/packages/infra/client/container-runner/Dockerfile b/packages/core/infra/client/container-runner/Dockerfile similarity index 100% rename from packages/infra/client/container-runner/Dockerfile rename to packages/core/infra/client/container-runner/Dockerfile diff --git a/packages/infra/client/container-runner/Dockerfile.dockerignore b/packages/core/infra/client/container-runner/Dockerfile.dockerignore similarity index 100% rename from packages/infra/client/container-runner/Dockerfile.dockerignore rename to packages/core/infra/client/container-runner/Dockerfile.dockerignore diff --git a/packages/infra/client/container-runner/README.md b/packages/core/infra/client/container-runner/README.md similarity index 100% rename from packages/infra/client/container-runner/README.md rename to packages/core/infra/client/container-runner/README.md diff --git a/packages/infra/client/container-runner/src/container.rs b/packages/core/infra/client/container-runner/src/container.rs similarity index 100% rename from packages/infra/client/container-runner/src/container.rs rename to packages/core/infra/client/container-runner/src/container.rs diff --git a/packages/infra/client/container-runner/src/log_shipper.rs b/packages/core/infra/client/container-runner/src/log_shipper.rs similarity index 100% rename from packages/infra/client/container-runner/src/log_shipper.rs rename to packages/core/infra/client/container-runner/src/log_shipper.rs diff --git a/packages/infra/client/container-runner/src/main.rs b/packages/core/infra/client/container-runner/src/main.rs similarity index 100% rename from packages/infra/client/container-runner/src/main.rs rename to packages/core/infra/client/container-runner/src/main.rs diff --git a/packages/infra/client/container-runner/src/throttle.rs b/packages/core/infra/client/container-runner/src/throttle.rs similarity index 100% rename from packages/infra/client/container-runner/src/throttle.rs rename to packages/core/infra/client/container-runner/src/throttle.rs diff --git a/packages/infra/client/container-runner/src/utils.rs b/packages/core/infra/client/container-runner/src/utils.rs similarity index 100% rename from packages/infra/client/container-runner/src/utils.rs rename to packages/core/infra/client/container-runner/src/utils.rs diff --git a/packages/infra/client/container-runner/tests/basic.rs b/packages/core/infra/client/container-runner/tests/basic.rs similarity index 100% rename from packages/infra/client/container-runner/tests/basic.rs rename to packages/core/infra/client/container-runner/tests/basic.rs diff --git a/packages/infra/client/container-runner/tests/common/mock_vector.rs b/packages/core/infra/client/container-runner/tests/common/mock_vector.rs similarity index 100% rename from packages/infra/client/container-runner/tests/common/mock_vector.rs rename to packages/core/infra/client/container-runner/tests/common/mock_vector.rs diff --git a/packages/infra/client/container-runner/tests/common/mod.rs b/packages/core/infra/client/container-runner/tests/common/mod.rs similarity index 100% rename from packages/infra/client/container-runner/tests/common/mod.rs rename to packages/core/infra/client/container-runner/tests/common/mod.rs diff --git a/packages/infra/client/container-runner/tests/common/setup.rs b/packages/core/infra/client/container-runner/tests/common/setup.rs similarity index 100% rename from packages/infra/client/container-runner/tests/common/setup.rs rename to packages/core/infra/client/container-runner/tests/common/setup.rs diff --git a/packages/infra/client/echo/Cargo.toml b/packages/core/infra/client/echo/Cargo.toml similarity index 100% rename from packages/infra/client/echo/Cargo.toml rename to packages/core/infra/client/echo/Cargo.toml diff --git a/packages/infra/client/echo/Dockerfile b/packages/core/infra/client/echo/Dockerfile similarity index 100% rename from packages/infra/client/echo/Dockerfile rename to packages/core/infra/client/echo/Dockerfile diff --git a/packages/infra/client/echo/Dockerfile.dockerignore b/packages/core/infra/client/echo/Dockerfile.dockerignore similarity index 100% rename from packages/infra/client/echo/Dockerfile.dockerignore rename to packages/core/infra/client/echo/Dockerfile.dockerignore diff --git a/packages/infra/client/echo/README.md b/packages/core/infra/client/echo/README.md similarity index 100% rename from packages/infra/client/echo/README.md rename to packages/core/infra/client/echo/README.md diff --git a/packages/infra/client/echo/src/main.rs b/packages/core/infra/client/echo/src/main.rs similarity index 100% rename from packages/infra/client/echo/src/main.rs rename to packages/core/infra/client/echo/src/main.rs diff --git a/packages/infra/client/isolate-v8-runner/Cargo.toml b/packages/core/infra/client/isolate-v8-runner/Cargo.toml similarity index 100% rename from packages/infra/client/isolate-v8-runner/Cargo.toml rename to packages/core/infra/client/isolate-v8-runner/Cargo.toml diff --git a/packages/infra/client/isolate-v8-runner/Dockerfile b/packages/core/infra/client/isolate-v8-runner/Dockerfile similarity index 100% rename from packages/infra/client/isolate-v8-runner/Dockerfile rename to packages/core/infra/client/isolate-v8-runner/Dockerfile diff --git a/packages/infra/client/isolate-v8-runner/Dockerfile.dockerignore b/packages/core/infra/client/isolate-v8-runner/Dockerfile.dockerignore similarity index 100% rename from packages/infra/client/isolate-v8-runner/Dockerfile.dockerignore rename to packages/core/infra/client/isolate-v8-runner/Dockerfile.dockerignore diff --git a/packages/infra/client/isolate-v8-runner/README.md b/packages/core/infra/client/isolate-v8-runner/README.md similarity index 100% rename from packages/infra/client/isolate-v8-runner/README.md rename to packages/core/infra/client/isolate-v8-runner/README.md diff --git a/packages/infra/client/isolate-v8-runner/js/40_rivet_kv.js b/packages/core/infra/client/isolate-v8-runner/js/40_rivet_kv.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/js/40_rivet_kv.js rename to packages/core/infra/client/isolate-v8-runner/js/40_rivet_kv.js diff --git a/packages/infra/client/isolate-v8-runner/js/90_rivet_ns.js b/packages/core/infra/client/isolate-v8-runner/js/90_rivet_ns.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/js/90_rivet_ns.js rename to packages/core/infra/client/isolate-v8-runner/js/90_rivet_ns.js diff --git a/packages/infra/client/isolate-v8-runner/js/lib/fast-equals/comparator.js b/packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/comparator.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/js/lib/fast-equals/comparator.js rename to packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/comparator.js diff --git a/packages/infra/client/isolate-v8-runner/js/lib/fast-equals/equals.js b/packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/equals.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/js/lib/fast-equals/equals.js rename to packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/equals.js diff --git a/packages/infra/client/isolate-v8-runner/js/lib/fast-equals/index.js b/packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/index.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/js/lib/fast-equals/index.js rename to packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/index.js diff --git a/packages/infra/client/isolate-v8-runner/js/lib/fast-equals/internalTypes.js b/packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/internalTypes.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/js/lib/fast-equals/internalTypes.js rename to packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/internalTypes.js diff --git a/packages/infra/client/isolate-v8-runner/js/lib/fast-equals/utils.js b/packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/utils.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/js/lib/fast-equals/utils.js rename to packages/core/infra/client/isolate-v8-runner/js/lib/fast-equals/utils.js diff --git a/packages/infra/client/isolate-v8-runner/src/ext/kv.rs b/packages/core/infra/client/isolate-v8-runner/src/ext/kv.rs similarity index 100% rename from packages/infra/client/isolate-v8-runner/src/ext/kv.rs rename to packages/core/infra/client/isolate-v8-runner/src/ext/kv.rs diff --git a/packages/infra/client/isolate-v8-runner/src/ext/mod.rs b/packages/core/infra/client/isolate-v8-runner/src/ext/mod.rs similarity index 100% rename from packages/infra/client/isolate-v8-runner/src/ext/mod.rs rename to packages/core/infra/client/isolate-v8-runner/src/ext/mod.rs diff --git a/packages/infra/client/isolate-v8-runner/src/ext/runtime.rs b/packages/core/infra/client/isolate-v8-runner/src/ext/runtime.rs similarity index 100% rename from packages/infra/client/isolate-v8-runner/src/ext/runtime.rs rename to packages/core/infra/client/isolate-v8-runner/src/ext/runtime.rs diff --git a/packages/infra/client/isolate-v8-runner/src/isolate.rs b/packages/core/infra/client/isolate-v8-runner/src/isolate.rs similarity index 99% rename from packages/infra/client/isolate-v8-runner/src/isolate.rs rename to packages/core/infra/client/isolate-v8-runner/src/isolate.rs index ef5d8020f8..e138582c68 100644 --- a/packages/infra/client/isolate-v8-runner/src/isolate.rs +++ b/packages/core/infra/client/isolate-v8-runner/src/isolate.rs @@ -609,6 +609,7 @@ mod tests { .unwrap(), owner: protocol::ActorOwner::DynamicServer { server_id: actor_id, + workflow_id: Uuid::new_v4(), }, vector_socket_addr: Default::default(), }; diff --git a/packages/infra/client/isolate-v8-runner/src/log_shipper.rs b/packages/core/infra/client/isolate-v8-runner/src/log_shipper.rs similarity index 99% rename from packages/infra/client/isolate-v8-runner/src/log_shipper.rs rename to packages/core/infra/client/isolate-v8-runner/src/log_shipper.rs index ffe80ff072..b0ddaf4b15 100644 --- a/packages/infra/client/isolate-v8-runner/src/log_shipper.rs +++ b/packages/core/infra/client/isolate-v8-runner/src/log_shipper.rs @@ -109,7 +109,7 @@ impl LogShipper { while let Result::Ok(message) = self.msg_rx.recv() { let vector_message = match &self.owner { - protocol::ActorOwner::DynamicServer { server_id } => { + protocol::ActorOwner::DynamicServer { server_id, .. } => { VectorMessage::DynamicServers { server_id: server_id.to_string(), task: "main", // Backwards compatibility with logs diff --git a/packages/infra/client/isolate-v8-runner/src/main.rs b/packages/core/infra/client/isolate-v8-runner/src/main.rs similarity index 100% rename from packages/infra/client/isolate-v8-runner/src/main.rs rename to packages/core/infra/client/isolate-v8-runner/src/main.rs diff --git a/packages/infra/client/isolate-v8-runner/src/metadata.rs b/packages/core/infra/client/isolate-v8-runner/src/metadata.rs similarity index 100% rename from packages/infra/client/isolate-v8-runner/src/metadata.rs rename to packages/core/infra/client/isolate-v8-runner/src/metadata.rs diff --git a/packages/infra/client/isolate-v8-runner/src/throttle.rs b/packages/core/infra/client/isolate-v8-runner/src/throttle.rs similarity index 100% rename from packages/infra/client/isolate-v8-runner/src/throttle.rs rename to packages/core/infra/client/isolate-v8-runner/src/throttle.rs diff --git a/packages/infra/client/isolate-v8-runner/src/utils.rs b/packages/core/infra/client/isolate-v8-runner/src/utils.rs similarity index 100% rename from packages/infra/client/isolate-v8-runner/src/utils.rs rename to packages/core/infra/client/isolate-v8-runner/src/utils.rs diff --git a/packages/infra/client/isolate-v8-runner/tests/index.js b/packages/core/infra/client/isolate-v8-runner/tests/index.js similarity index 100% rename from packages/infra/client/isolate-v8-runner/tests/index.js rename to packages/core/infra/client/isolate-v8-runner/tests/index.js diff --git a/packages/infra/client/logs/Cargo.toml b/packages/core/infra/client/logs/Cargo.toml similarity index 100% rename from packages/infra/client/logs/Cargo.toml rename to packages/core/infra/client/logs/Cargo.toml diff --git a/packages/infra/client/logs/src/lib.rs b/packages/core/infra/client/logs/src/lib.rs similarity index 100% rename from packages/infra/client/logs/src/lib.rs rename to packages/core/infra/client/logs/src/lib.rs diff --git a/packages/core/infra/client/manager/Cargo.toml b/packages/core/infra/client/manager/Cargo.toml new file mode 100644 index 0000000000..57d035b1e4 --- /dev/null +++ b/packages/core/infra/client/manager/Cargo.toml @@ -0,0 +1,63 @@ +[package] +name = "pegboard-manager" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[[bin]] +name = "rivet-client" +path = "src/main.rs" + +[features] +# Enable this feature flag to build and run integration tests +test = [] + +[dependencies] +anyhow.workspace = true +bytes = "1.0" +futures-util = { version = "0.3" } +hyper = { version = "0.14", features = ["server", "http1", "tcp", "stream"] } +indoc = "2.0" +lazy_static = "1.4" +nix.workspace = true +notify = { version = "6.1.1", default-features = false, features = ["serde", "fsevent-sys"] } +prometheus = "0.13" +rand = "0.8" +rand_chacha = "0.3.1" +reqwest = { version = "0.11", default-features = false, features = ["stream", "rustls-tls", "json"] } +serde = { version = "1.0.195", features = ["derive"] } +serde_json = "1.0.111" +sqlite-util.workspace = true +sysinfo = "0.31.4" +tempfile = "3.2" +thiserror = "1.0" +tokio = { workspace = true, default-features = false, features = ["fs", "process", "macros", "rt", "rt-multi-thread"] } +tokio-tungstenite = "0.23.1" +tokio-util = { version = "0.7", default-features = false, features = ["io-util"] } +tracing-logfmt.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true +url = "2.4" +uuid = { version = "1.6.1", features = ["v4"] } + +pegboard = { path = "../../../services/pegboard", default-features = false } +pegboard-config.workspace = true +pegboard-logs.workspace = true +serde_yaml = "0.9.34" + +[dependencies.sqlx] +workspace = true +features = [ + "runtime-tokio", + "migrate", + "sqlite", + "uuid", + "json", + "ipnetwork", + "derive", +] + +[dev-dependencies] +portpicker = "0.1" +rivet-util.workspace = true diff --git a/packages/infra/client/manager/Dockerfile b/packages/core/infra/client/manager/Dockerfile similarity index 100% rename from packages/infra/client/manager/Dockerfile rename to packages/core/infra/client/manager/Dockerfile diff --git a/packages/infra/client/manager/Dockerfile.dockerignore b/packages/core/infra/client/manager/Dockerfile.dockerignore similarity index 100% rename from packages/infra/client/manager/Dockerfile.dockerignore rename to packages/core/infra/client/manager/Dockerfile.dockerignore diff --git a/packages/infra/client/manager/src/actor/mod.rs b/packages/core/infra/client/manager/src/actor/mod.rs similarity index 100% rename from packages/infra/client/manager/src/actor/mod.rs rename to packages/core/infra/client/manager/src/actor/mod.rs diff --git a/packages/infra/client/manager/src/actor/oci_config.rs b/packages/core/infra/client/manager/src/actor/oci_config.rs similarity index 100% rename from packages/infra/client/manager/src/actor/oci_config.rs rename to packages/core/infra/client/manager/src/actor/oci_config.rs diff --git a/packages/infra/client/manager/src/actor/partial_oci_config.rs b/packages/core/infra/client/manager/src/actor/partial_oci_config.rs similarity index 100% rename from packages/infra/client/manager/src/actor/partial_oci_config.rs rename to packages/core/infra/client/manager/src/actor/partial_oci_config.rs diff --git a/packages/infra/client/manager/src/actor/seccomp.rs b/packages/core/infra/client/manager/src/actor/seccomp.rs similarity index 100% rename from packages/infra/client/manager/src/actor/seccomp.rs rename to packages/core/infra/client/manager/src/actor/seccomp.rs diff --git a/packages/infra/client/manager/src/actor/setup.rs b/packages/core/infra/client/manager/src/actor/setup.rs similarity index 100% rename from packages/infra/client/manager/src/actor/setup.rs rename to packages/core/infra/client/manager/src/actor/setup.rs diff --git a/packages/infra/client/manager/src/ctx.rs b/packages/core/infra/client/manager/src/ctx.rs similarity index 100% rename from packages/infra/client/manager/src/ctx.rs rename to packages/core/infra/client/manager/src/ctx.rs diff --git a/packages/infra/client/manager/src/event_sender.rs b/packages/core/infra/client/manager/src/event_sender.rs similarity index 100% rename from packages/infra/client/manager/src/event_sender.rs rename to packages/core/infra/client/manager/src/event_sender.rs diff --git a/packages/infra/client/manager/src/lib.rs b/packages/core/infra/client/manager/src/lib.rs similarity index 100% rename from packages/infra/client/manager/src/lib.rs rename to packages/core/infra/client/manager/src/lib.rs diff --git a/packages/infra/client/manager/src/main.rs b/packages/core/infra/client/manager/src/main.rs similarity index 100% rename from packages/infra/client/manager/src/main.rs rename to packages/core/infra/client/manager/src/main.rs diff --git a/packages/infra/client/manager/src/metrics/buckets.rs b/packages/core/infra/client/manager/src/metrics/buckets.rs similarity index 100% rename from packages/infra/client/manager/src/metrics/buckets.rs rename to packages/core/infra/client/manager/src/metrics/buckets.rs diff --git a/packages/infra/client/manager/src/metrics/mod.rs b/packages/core/infra/client/manager/src/metrics/mod.rs similarity index 100% rename from packages/infra/client/manager/src/metrics/mod.rs rename to packages/core/infra/client/manager/src/metrics/mod.rs diff --git a/packages/infra/client/manager/src/metrics/registry.rs b/packages/core/infra/client/manager/src/metrics/registry.rs similarity index 100% rename from packages/infra/client/manager/src/metrics/registry.rs rename to packages/core/infra/client/manager/src/metrics/registry.rs diff --git a/packages/infra/client/manager/src/metrics/server.rs b/packages/core/infra/client/manager/src/metrics/server.rs similarity index 100% rename from packages/infra/client/manager/src/metrics/server.rs rename to packages/core/infra/client/manager/src/metrics/server.rs diff --git a/packages/infra/client/manager/src/pull_addr_handler.rs b/packages/core/infra/client/manager/src/pull_addr_handler.rs similarity index 100% rename from packages/infra/client/manager/src/pull_addr_handler.rs rename to packages/core/infra/client/manager/src/pull_addr_handler.rs diff --git a/packages/infra/client/manager/src/runner.rs b/packages/core/infra/client/manager/src/runner.rs similarity index 100% rename from packages/infra/client/manager/src/runner.rs rename to packages/core/infra/client/manager/src/runner.rs diff --git a/packages/infra/client/manager/src/system_info.rs b/packages/core/infra/client/manager/src/system_info.rs similarity index 100% rename from packages/infra/client/manager/src/system_info.rs rename to packages/core/infra/client/manager/src/system_info.rs diff --git a/packages/core/infra/client/manager/src/utils/mod.rs b/packages/core/infra/client/manager/src/utils/mod.rs new file mode 100644 index 0000000000..7ad6c2974c --- /dev/null +++ b/packages/core/infra/client/manager/src/utils/mod.rs @@ -0,0 +1,397 @@ +use std::{ + hash::{DefaultHasher, Hasher}, + net::Ipv4Addr, + path::Path, + result::Result::{Err, Ok}, + time::{self, Duration}, +}; + +use anyhow::*; +use futures_util::Stream; +use indoc::indoc; +use notify::{ + event::{AccessKind, AccessMode}, + Event, EventKind, RecommendedWatcher, RecursiveMode, Watcher, +}; +use pegboard::protocol; +use pegboard_config::{Addresses, Config}; +use rand::{prelude::SliceRandom, SeedableRng}; +use serde::Deserialize; +use sqlite_util::SqlitePoolExt; +use sqlx::{ + migrate::MigrateDatabase, + sqlite::{SqlitePool, SqlitePoolOptions}, + Sqlite, +}; +use tokio::{ + fs, + sync::mpsc::{channel, Receiver}, +}; +use url::Url; +use uuid::Uuid; + +use crate::ctx::Ctx; + +pub mod sql; + +pub async fn init_dir(config: &Config) -> Result<()> { + let data_dir = config.client.data_dir(); + + if fs::metadata(&data_dir).await.is_err() { + bail!("data dir `{}` does not exist", data_dir.display()); + } + + if config.client.runner.flavor == protocol::ClientFlavor::Container + && fs::metadata(&config.client.runner.container_runner_binary_path()) + .await + .is_err() + { + bail!( + "container runner binary `{}` does not exist", + config + .client + .runner + .container_runner_binary_path() + .display() + ); + } + + if config.client.runner.flavor == protocol::ClientFlavor::Isolate + && fs::metadata(&config.client.runner.isolate_runner_binary_path()) + .await + .is_err() + { + bail!( + "isolate runner binary `{}` does not exist", + config.client.runner.isolate_runner_binary_path().display() + ); + } + + // Create actors dir + match fs::create_dir(data_dir.join("actors")).await { + Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} + x => x.context("failed to create /actors dir in data dir")?, + } + + // Create runner dir + match fs::create_dir(data_dir.join("runner")).await { + Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} + x => x.context("failed to create /runner dir in data dir")?, + } + + // Create db dir + match fs::create_dir(data_dir.join("db")).await { + Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} + x => x.context("failed to create /db dir in data dir")?, + } + + Ok(()) +} + +pub async fn init_sqlite_db(db_url: &str) -> Result<()> { + if !Sqlite::database_exists(db_url).await? { + Sqlite::create_database(db_url).await?; + } + + Ok(()) +} + +pub async fn build_sqlite_pool(db_url: &str) -> Result { + SqlitePoolOptions::new() + .connect(db_url) + .await + .map_err(Into::into) +} + +pub async fn init_sqlite_schema(pool: &SqlitePool) -> Result<()> { + let mut conn = pool.conn().await?; + + let settings = [ + // Set the journal mode to Write-Ahead Logging for concurrency + "PRAGMA journal_mode = WAL", + // Set synchronous mode to NORMAL for performance and data safety balance + "PRAGMA synchronous = NORMAL", + // Set busy timeout to 5 seconds to avoid "database is locked" errors + "PRAGMA busy_timeout = 5000", + // Enable foreign key constraint enforcement + "PRAGMA foreign_keys = ON", + // Enable auto vacuuming and set it to incremental mode for gradual space reclaiming + "PRAGMA auto_vacuum = INCREMENTAL", + ]; + + for setting in settings { + sqlx::query(setting).execute(&mut *conn).await?; + } + + sqlx::query(indoc!( + " + CREATE TABLE IF NOT EXISTS state ( + last_event_idx INTEGER NOT NULL, + last_command_idx INTEGER NOT NULL, + + isolate_runner_pid INTEGER, + + -- Keeps this table having one row + _persistence INTEGER UNIQUE NOT NULL DEFAULT TRUE -- BOOLEAN + ) STRICT + ", + )) + .execute(&mut *conn) + .await?; + + sqlx::query(indoc!( + " + INSERT INTO state (last_event_idx, last_command_idx) + VALUES (-1, -1) + ON CONFLICT DO NOTHING + ", + )) + .execute(&mut *conn) + .await?; + + sqlx::query(indoc!( + " + CREATE TABLE IF NOT EXISTS events ( + idx INTEGER NOT NULL UNIQUE, + payload BLOB NOT NULL, + create_ts INTEGER NOT NULL + ) STRICT + ", + )) + .execute(&mut *conn) + .await?; + + sqlx::query(indoc!( + " + CREATE TABLE IF NOT EXISTS commands ( + idx INTEGER NOT NULL UNIQUE, + payload BLOB NOT NULL, + ack_ts INTEGER NOT NULL + ) STRICT + ", + )) + .execute(&mut *conn) + .await?; + + sqlx::query(indoc!( + " + CREATE TABLE IF NOT EXISTS actors ( + actor_id BLOB PRIMARY KEY, -- UUID + config BLOB NOT NULL, + + start_ts INTEGER NOT NULL, + running_ts INTEGER, + stop_ts INTEGER, + exit_ts INTEGER, + + pid INTEGER, + exit_code INTEGER + ) STRICT + ", + )) + .execute(&mut *conn) + .await?; + + sqlx::query(indoc!( + " + CREATE TABLE IF NOT EXISTS actor_ports ( + actor_id BLOB NOT NULL, -- UUID + port INT NOT NULL, + protocol INT NOT NULL, -- protocol::TransportProtocol + + delete_ts INT + ) STRICT + ", + )) + .execute(&mut *conn) + .await?; + + sqlx::query(indoc!( + " + CREATE INDEX IF NOT EXISTS actor_ports_id_idx + ON actor_ports(actor_id) + ", + )) + .execute(&mut *conn) + .await?; + + sqlx::query(indoc!( + " + CREATE UNIQUE INDEX IF NOT EXISTS actor_ports_unique_idx + ON actor_ports(port, protocol) + WHERE delete_ts IS NULL + ", + )) + .execute(&mut *conn) + .await?; + + Ok(()) +} + +#[derive(Deserialize)] +pub struct ApiResponse { + pub servers: Vec, +} + +#[derive(Deserialize)] +pub struct ApiServer { + pub lan_ip: Option, +} + +pub async fn init_fdb_config(config: &Config) -> Result<()> { + let ips = match &config.client.foundationdb.addresses { + Addresses::Dynamic { fetch_endpoint } => reqwest::get(fetch_endpoint.clone()) + .await? + .error_for_status()? + .json::() + .await? + .servers + .into_iter() + .filter_map(|server| server.lan_ip) + .map(|lan_ip| format!("{lan_ip}:4500")) + .collect::>(), + Addresses::Static(addresses) => addresses.clone(), + }; + + ensure!(!ips.is_empty(), "no fdb clusters found"); + + let joined = ips + .into_iter() + .map(|x| x.to_string()) + .collect::>() + .join(","); + + fs::write( + config.client.data_dir().join("fdb.cluster"), + format!( + "{cluster_description}:{cluster_id}@{joined}", + cluster_description = config.client.foundationdb.cluster_description, + cluster_id = config.client.foundationdb.cluster_id, + ), + ) + .await?; + + Ok(()) +} + +pub fn now() -> i64 { + time::SystemTime::now() + .duration_since(time::UNIX_EPOCH) + .unwrap_or_else(|err| unreachable!("time is broken: {}", err)) + .as_millis() + .try_into() + .expect("now doesn't fit in i64") +} + +/// Creates an async file watcher. +fn async_watcher() -> Result<(RecommendedWatcher, Receiver>)> { + let (tx, rx) = channel(1); + + // Automatically select the best implementation for your platform. + let watcher = RecommendedWatcher::new( + move |res| { + let tx = tx.clone(); + + // Send event. We ignore the result because the watcher and channel are dropped after the first + // `Create` event is received in wait_for_write + let _ = tx.blocking_send(res); + }, + notify::Config::default().with_poll_interval(Duration::from_secs(2)), + )?; + + Ok((watcher, rx)) +} + +pub async fn wait_for_write>(path: P) -> Result<()> { + let path = path.as_ref(); + let (mut watcher, mut rx) = async_watcher()?; + + // Watch parent + watcher.watch( + path.parent().context("path has no parent")?, + RecursiveMode::NonRecursive, + )?; + + // File already exists + if fs::metadata(&path).await.is_ok() { + return Ok(()); + } + + while let Some(res) = rx.recv().await { + let res = res?; + + // Wait for data to be written to path + if let EventKind::Access(AccessKind::Close(AccessMode::Write)) = res.kind { + if res.paths.iter().any(|p| p == path) { + break; + } + } + } + + Ok(()) +} + +/// Deterministically shuffles a list of available ATS URL's to download the image from based on the image +// ID and attempts to download from each URL until success. +pub async fn fetch_image_stream( + ctx: &Ctx, + image_id: Uuid, + image_artifact_url_stub: &str, + image_fallback_artifact_url: Option<&str>, +) -> Result>> { + // Get hash from image id + let mut hasher = DefaultHasher::new(); + hasher.write(image_id.as_bytes()); + let hash = hasher.finish(); + + let mut rng = rand_chacha::ChaCha12Rng::seed_from_u64(hash); + + // Shuffle based on hash + let mut addresses = ctx + .pull_addr_handler + .addresses(ctx.config()) + .await? + .iter() + .map(|addr| { + Ok(Url::parse(&format!("{addr}{}", image_artifact_url_stub)) + .context("failed to build artifact url")? + .to_string()) + }) + .collect::>>()?; + addresses.shuffle(&mut rng); + + // Add fallback url to the end if one is set + if let Some(fallback_artifact_url) = image_fallback_artifact_url { + addresses.push(fallback_artifact_url.to_string()); + } + + let mut iter = addresses.into_iter(); + while let Some(artifact_url) = iter.next() { + match reqwest::get(&artifact_url) + .await + .and_then(|res| res.error_for_status()) + { + Ok(res) => return Ok(res.bytes_stream()), + Err(err) => { + tracing::warn!( + ?image_id, + "failed to start download from {artifact_url}: {err}" + ); + } + } + } + + bail!("artifact url could not be resolved"); +} + +pub async fn prewarm_image(ctx: &Ctx, image_id: Uuid, image_artifact_url_stub: &str) { + tracing::debug!(?image_id, "prewarming"); + + match fetch_image_stream(ctx, image_id, image_artifact_url_stub, None).await { + Ok(_) => tracing::debug!(?image_id, "prewarm complete"), + Err(_) => tracing::warn!( + ?image_id, + "prewarm failed, artifact url could not be resolved" + ), + } +} diff --git a/packages/infra/client/manager/src/utils/sql.rs b/packages/core/infra/client/manager/src/utils/sql.rs similarity index 100% rename from packages/infra/client/manager/src/utils/sql.rs rename to packages/core/infra/client/manager/src/utils/sql.rs diff --git a/packages/infra/client/manager/tests/client_rebuild_state.rs b/packages/core/infra/client/manager/tests/client_rebuild_state.rs similarity index 100% rename from packages/infra/client/manager/tests/client_rebuild_state.rs rename to packages/core/infra/client/manager/tests/client_rebuild_state.rs diff --git a/packages/infra/client/manager/tests/client_state_external_kill.rs b/packages/core/infra/client/manager/tests/client_state_external_kill.rs similarity index 100% rename from packages/infra/client/manager/tests/client_state_external_kill.rs rename to packages/core/infra/client/manager/tests/client_state_external_kill.rs diff --git a/packages/core/infra/client/manager/tests/common.rs b/packages/core/infra/client/manager/tests/common.rs new file mode 100644 index 0000000000..d22a5d5b7b --- /dev/null +++ b/packages/core/infra/client/manager/tests/common.rs @@ -0,0 +1,676 @@ +use std::{ + convert::Infallible, + net::SocketAddr, + path::{Path, PathBuf}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, Once, + }, + time::Duration, +}; + +use anyhow::Context; +use futures_util::{stream::SplitSink, SinkExt, StreamExt}; +use hyper::{ + service::{make_service_fn, service_fn}, + Body, Response, Server, +}; +use pegboard::protocol; +use pegboard_config::*; +use pegboard_manager::{system_info, utils, Ctx}; +use tokio::{ + fs::File, + io::BufReader, + net::{TcpListener, TcpStream}, + process::Command, + sync::Mutex, +}; +use tokio_tungstenite::{tungstenite::protocol::Message, WebSocketStream}; +use tokio_util::io::ReaderStream; +use tracing_subscriber::prelude::*; +use url::Url; +use uuid::Uuid; + +pub const PROTOCOL_VERSION: u16 = 2; +pub const ARTIFACTS_PORT: u16 = 1234; + +pub async fn send_packet( + tx: &mut SplitSink, Message>, + packet: protocol::ToClient, +) { + let buf = packet.serialize(PROTOCOL_VERSION).unwrap(); + tx.send(Message::Binary(buf)).await.unwrap(); +} + +pub async fn send_command( + tx: &mut SplitSink, Message>, + cmd: protocol::Command, +) { + let packet = protocol::ToClient::Commands(vec![protocol::CommandWrapper { + index: utils::now(), + inner: protocol::Raw::new(&cmd).unwrap(), + }]); + + send_packet(tx, packet).await +} + +pub async fn send_init_packet(tx: &mut SplitSink, Message>) { + send_packet( + tx, + protocol::ToClient::Init { + last_event_idx: utils::now(), + }, + ) + .await +} + +pub async fn start_echo_actor( + tx: &mut SplitSink, Message>, + actor_id: Uuid, + port: u16, +) { + let cmd = protocol::Command::StartActor { + actor_id, + config: Box::new(protocol::ActorConfig { + image: protocol::Image { + id: Uuid::nil(), + artifact_url_stub: "/image".into(), + fallback_artifact_url: None, + kind: protocol::ImageKind::DockerImage, + compression: protocol::ImageCompression::None, + }, + root_user_enabled: false, + env: [("PORT".to_string(), port.to_string())] + .into_iter() + .collect(), + ports: [( + "main".to_string(), + protocol::Port { + target: None, + protocol: protocol::TransportProtocol::Tcp, + routing: protocol::PortRouting::Host, + }, + )] + .into_iter() + .collect(), + network_mode: protocol::NetworkMode::Host, + resources: protocol::Resources { + cpu: 100, + memory: 10 * 1024 * 1024, + memory_max: 15 * 1024 * 1024, + disk: 15, + }, + owner: protocol::ActorOwner::DynamicServer { + server_id: actor_id, + workflow_id: Uuid::new_v4(), + }, + metadata: protocol::Raw::new(&protocol::ActorMetadata { + actor: protocol::ActorMetadataActor { + actor_id, + tags: [("foo".to_string(), "bar".to_string())] + .into_iter() + .collect(), + create_ts: 0, + }, + project: protocol::ActorMetadataProject { + project_id: Uuid::nil(), + slug: "foo".to_string(), + }, + environment: protocol::ActorMetadataEnvironment { + env_id: Uuid::nil(), + slug: "foo".to_string(), + }, + datacenter: protocol::ActorMetadataDatacenter { + name_id: "local".to_string(), + display_name: "Local".to_string(), + }, + cluster: protocol::ActorMetadataCluster { + cluster_id: Uuid::nil(), + }, + build: protocol::ActorMetadataBuild { + build_id: Uuid::nil(), + }, + }) + .unwrap(), + }), + }; + + send_command(tx, cmd).await; +} + +pub async fn start_js_echo_actor( + tx: &mut SplitSink, Message>, + actor_id: Uuid, +) { + let cmd = protocol::Command::StartActor { + actor_id, + config: Box::new(protocol::ActorConfig { + image: protocol::Image { + id: Uuid::nil(), + artifact_url_stub: "/js-image".into(), + fallback_artifact_url: None, + kind: protocol::ImageKind::JavaScript, + compression: protocol::ImageCompression::None, + }, + root_user_enabled: false, + env: Default::default(), + ports: [( + "main".to_string(), + protocol::Port { + target: None, + protocol: protocol::TransportProtocol::Tcp, + routing: protocol::PortRouting::Host, + }, + )] + .into_iter() + .collect(), + network_mode: protocol::NetworkMode::Host, + resources: protocol::Resources { + cpu: 100, + memory: 10 * 1024 * 1024, + memory_max: 15 * 1024 * 1024, + disk: 15, + }, + owner: protocol::ActorOwner::DynamicServer { + server_id: actor_id, + workflow_id: Uuid::new_v4(), + }, + metadata: protocol::Raw::new(&protocol::ActorMetadata { + actor: protocol::ActorMetadataActor { + actor_id, + tags: [("foo".to_string(), "bar".to_string())] + .into_iter() + .collect(), + create_ts: 0, + }, + project: protocol::ActorMetadataProject { + project_id: Uuid::nil(), + slug: "foo".to_string(), + }, + environment: protocol::ActorMetadataEnvironment { + env_id: Uuid::nil(), + slug: "foo".to_string(), + }, + datacenter: protocol::ActorMetadataDatacenter { + name_id: "local".to_string(), + display_name: "Local".to_string(), + }, + cluster: protocol::ActorMetadataCluster { + cluster_id: Uuid::nil(), + }, + build: protocol::ActorMetadataBuild { + build_id: Uuid::nil(), + }, + }) + .unwrap(), + }), + }; + + send_command(tx, cmd).await; +} + +pub fn start_server( + ctx_wrapper: Arc>>>, + close_tx: Arc>, + port: u16, + handle_connection: F, +) where + F: Fn(Arc>>>, Arc>, TcpStream) -> Fut + + Send + + 'static, + Fut: std::future::Future + Send, +{ + tokio::spawn(async move { + let addr = SocketAddr::from(([0, 0, 0, 0], port)); + + let listener = TcpListener::bind(addr).await.unwrap(); + tracing::info!(?port, "server listening"); + + loop { + let (stream, _) = listener.accept().await.unwrap(); + + handle_connection(ctx_wrapper.clone(), close_tx.clone(), stream).await; + } + }); +} + +pub async fn init_client(gen_path: &Path, working_path: &Path) -> Config { + let container_runner_binary_path = working_path.join("bin").join("container-runner"); + let isolate_runner_binary_path = working_path.join("bin").join("isolate-runner"); + + tokio::fs::create_dir(working_path.join("bin")) + .await + .unwrap(); + + // Copy binaries + tokio::fs::copy( + container_runner_path(gen_path), + &container_runner_binary_path, + ) + .await + .unwrap(); + tokio::fs::copy( + isolate_v8_runner_path(gen_path), + &isolate_runner_binary_path, + ) + .await + .unwrap(); + + let config = Config { + client: Client { + data_dir: Some(working_path.to_path_buf()), + cluster: Cluster { + client_id: Uuid::new_v4(), + datacenter_id: Uuid::new_v4(), + pegboard_endpoint: Url::parse("ws://127.0.0.1:5030").unwrap(), + // Not necessary for the test + api_endpoint: Url::parse("http://127.0.0.1").unwrap(), + }, + runner: Runner { + // Not necessary for the test + flavor: protocol::ClientFlavor::Container, + port: None, + use_mounts: Some(false), + container_runner_binary_path: Some(container_runner_binary_path), + isolate_runner_binary_path: Some(isolate_runner_binary_path), + }, + images: Images { + // Should match the URL in `serve_binaries` + pull_addresses: Some(Addresses::Static(vec![format!( + "http://127.0.0.1:{ARTIFACTS_PORT}" + )])), + }, + network: Network { + bind_ip: "127.0.0.1".parse().unwrap(), + lan_hostname: "127.0.0.1".into(), + wan_hostname: "127.0.0.1".into(), + lan_port_range_min: None, + lan_port_range_max: None, + wan_port_range_min: None, + wan_port_range_max: None, + }, + cni: Default::default(), + reserved_resources: Default::default(), + logs: Logs { + redirect_logs: Some(false), + retention: None, + }, + metrics: Default::default(), + foundationdb: FoundationDb { + cluster_description: "fdb".into(), + cluster_id: "fdb".into(), + addresses: Addresses::Static(vec!["127.0.0.1:4500".into()]), + }, + vector: Some(Vector { + address: "127.0.0.1:5021".into(), + }), + }, + }; + + utils::init_dir(&config).await.unwrap(); + + config +} + +pub async fn start_client( + config: Config, + ctx_wrapper: Arc>>>, + mut close_rx: tokio::sync::watch::Receiver<()>, + port: u16, +) { + let system = system_info::fetch().await.unwrap(); + + // Init sqlite db + let sqlite_db_url = format!( + "sqlite://{}", + config + .client + .data_dir() + .join("db") + .join("database.db") + .display() + ); + utils::init_sqlite_db(&sqlite_db_url).await.unwrap(); + + // Connect to sqlite db + let pool = utils::build_sqlite_pool(&sqlite_db_url).await.unwrap(); + utils::init_sqlite_schema(&pool).await.unwrap(); + + // Init FDB config files + utils::init_fdb_config(&config).await.unwrap(); + + // Build WS connection URL + let mut url = Url::parse("ws://127.0.0.1").unwrap(); + url.set_port(Some(port)).unwrap(); + url.set_path(&format!("/v{PROTOCOL_VERSION}")); + url.query_pairs_mut() + .append_pair("client_id", &config.client.cluster.client_id.to_string()) + .append_pair( + "datacenter_id", + &config.client.cluster.datacenter_id.to_string(), + ); + + tracing::info!("connecting to ws: {url}"); + + // Connect to WS + let (ws_stream, _) = tokio_tungstenite::connect_async(url.to_string()) + .await + .context("failed to connect to websocket") + .unwrap(); + let (tx, rx) = ws_stream.split(); + + tracing::info!("connected"); + + let ctx = Ctx::new(config, system, pool, tx); + + // Share reference + { + *ctx_wrapper.lock().await = Some(ctx.clone()); + } + + tokio::select! { + res = ctx.run(rx) => res.unwrap(), + _ = close_rx.changed() => {} + } + + // Remove reference + { + *ctx_wrapper.lock().await = None; + } + + tracing::info!("client stopped"); +} + +pub async fn build_binaries(gen_path: &Path) { + let pkg_path = Path::new(env!("CARGO_MANIFEST_DIR")).join(".."); + let status = Command::new("docker") + .arg("build") + .arg("--platform") + .arg("linux/amd64") + .arg("-t") + .arg("pegboard-echo-server") + .arg("-f") + .arg(pkg_path.join(format!("echo")).join("Dockerfile")) + .arg(pkg_path.join("..").join("..").join("..")) + .status() + .await + .unwrap(); + + assert!(status.success()); + + tracing::info!("saving echo image"); + + let status = Command::new("docker") + .arg("save") + .arg("-o") + .arg(image_path(gen_path)) + .arg("pegboard-echo-server") + .status() + .await + .unwrap(); + + assert!(status.success()); + + // Js image + let status = Command::new("tar") + .arg("-cf") + .arg(js_image_path(gen_path)) + .arg("-C") + .arg(Path::new(env!("CARGO_MANIFEST_DIR")).join("tests")) + .arg("index.js") + .status() + .await + .unwrap(); + + assert!(status.success()); + + build_runner(gen_path, "container").await; + build_runner(gen_path, "isolate-v8").await; +} + +async fn build_runner(gen_path: &Path, variant: &str) { + tracing::info!("building {variant} runner"); + + let pkg_path = Path::new(env!("CARGO_MANIFEST_DIR")).join(".."); + let image_name = format!("pegboard-{variant}-runner"); + + // Build runner binary + let status = Command::new("docker") + .arg("build") + .arg("--platform") + .arg("linux/amd64") + .arg("-t") + .arg(&image_name) + .arg("-f") + .arg( + pkg_path + .join(format!("{variant}-runner")) + .join("Dockerfile"), + ) + .arg(pkg_path.join("..").join("..").join("..")) + .status() + .await + .unwrap(); + + assert!(status.success()); + + tracing::info!("copying runner image"); + + let container_name = format!("temp-pegboard-{variant}-runner-container"); + let binary_path_in_container = format!("/rivet-{variant}-runner"); + + // Create a temporary container + let status = Command::new("docker") + .arg("create") + .arg("--name") + .arg(&container_name) + .arg(&image_name) + .status() + .await + .expect("Failed to create container"); + assert!(status.success()); + + // Copy the binary from the container to the host + let status = Command::new("docker") + .arg("cp") + .arg(format!("{}:{}", container_name, binary_path_in_container)) + .arg(if variant == "container" { + container_runner_path(gen_path) + } else { + isolate_v8_runner_path(gen_path) + }) + .status() + .await + .expect("Failed to copy binary from container"); + assert!(status.success()); + + // Remove the temporary container + let status = Command::new("docker") + .arg("rm") + .arg(container_name) + .status() + .await + .expect("Failed to remove container"); + assert!(status.success()); +} + +pub async fn serve_binaries(gen_path: PathBuf) { + let make_svc = make_service_fn(|_conn| { + let gen_path = gen_path.clone(); + async move { + Ok::<_, Infallible>(service_fn(move |req| { + let gen_path = gen_path.clone(); + async move { + let gen_path = gen_path; + let path = req.uri().path(); + + let path = if path == "/image" { + image_path(&gen_path) + } else if path == "/js-image" { + js_image_path(&gen_path) + } else { + panic!("invalid path: {path}"); + }; + + let file = File::open(path).await?; + let stream = ReaderStream::new(BufReader::new(file)); + let body = Body::wrap_stream(stream); + + Result::<_, std::io::Error>::Ok(Response::new(body)) + } + })) + } + }); + + let server = Server::bind(&([127, 0, 0, 1], ARTIFACTS_PORT).into()).serve(make_svc); + + tracing::info!(port=?ARTIFACTS_PORT, "serving binaries"); + + server.await.unwrap(); +} + +pub async fn start_vector() { + let config_path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("tests") + .join("vector.json"); + + Command::new("docker") + .arg("rm") + .arg("test-vector") + .arg("--force") + .status() + .await + .unwrap(); + + let status = Command::new("docker") + .arg("run") + .arg("-v") + .arg(format!( + "{}:/etc/vector/vector.json:ro", + config_path.display() + )) + .arg("--rm") + .arg("-p") + .arg("5020:5020") + .arg("-p") + .arg("5021:5021") + .arg("--name") + .arg("test-vector") + .arg("timberio/vector:0.42.0-debian") + .arg("-c") + .arg("/etc/vector/vector.json") + .status() + .await + .unwrap(); + + assert!(status.success()); +} + +pub async fn start_fdb() { + Command::new("docker") + .arg("rm") + .arg("test-fdb") + .arg("--force") + .status() + .await + .unwrap(); + + let status = Command::new("docker") + .arg("run") + .arg("--rm") + .arg("-p") + .arg("4500:4500") + .arg("--name") + .arg("test-fdb") + .arg("-e") + .arg("FDB_CLUSTER_FILE_CONTENTS=fdb:fdb@127.0.0.1:4500") + // See docs-internal/infrastructure/fdb/AVX.md + .arg("foundationdb/foundationdb:7.1.60") + .status() + .await + .unwrap(); + + assert!(status.success()); +} + +pub async fn create_fdb_db() { + loop { + // Create db + let status = Command::new("docker") + .arg("exec") + .arg("test-fdb") + .arg("fdbcli") + .arg("--exec") + .arg(r#"configure new single ssd"#) + .status() + .await + .unwrap(); + + if status.success() { + break; + } else { + tracing::error!("failed to create fdb database"); + } + + tokio::time::sleep(Duration::from_secs(1)).await; + } +} + +static SETUP_DEPENDENCIES: AtomicBool = AtomicBool::new(false); +static mut TEMP_DIR_PATH: Option = None; + +pub async fn setup_dependencies() -> (Option, PathBuf) { + if !SETUP_DEPENDENCIES.swap(true, Ordering::SeqCst) { + let tmp_dir = tempfile::TempDir::new().unwrap(); + let tmp_dir_path = tmp_dir.path().to_path_buf(); + + // SAFETY: We are the only thread that can modify TEMP_DIR_PATH at this point, as we have just + // swapped SETUP_DEPENDENCIES to true. + unsafe { + TEMP_DIR_PATH = Some(tmp_dir_path.clone()); + } + + build_binaries(tmp_dir.path()).await; + + tokio::spawn(serve_binaries(tmp_dir.path().to_path_buf())); + + tokio::spawn(start_vector()); + + tokio::spawn(start_fdb()); + create_fdb_db().await; + + (Some(tmp_dir), tmp_dir_path) + } else { + // SAFETY: Once SETUP_DEPENDENCIES is true, TEMP_DIR_PATH is guaranteed to be initialized. + (None, unsafe { TEMP_DIR_PATH.clone().unwrap() }) + } +} + +pub fn container_runner_path(gen_path: &Path) -> PathBuf { + gen_path.join("pegboard-container-runner").to_path_buf() +} + +pub fn isolate_v8_runner_path(gen_path: &Path) -> PathBuf { + gen_path.join("pegboard-isolate-v8-runner").to_path_buf() +} + +pub fn image_path(gen_path: &Path) -> PathBuf { + gen_path.join("pegboard-echo-server").to_path_buf() +} + +pub fn js_image_path(gen_path: &Path) -> PathBuf { + gen_path.join("pegboard-js-echo-server.js").to_path_buf() +} + +static SETUP_TRACING: Once = Once::new(); +pub fn setup_tracing() { + SETUP_TRACING.call_once(|| { + tracing_subscriber::registry() + .with( + tracing_logfmt::builder() + .layer() + .with_filter(tracing_subscriber::filter::LevelFilter::INFO), + ) + .init(); + }); +} diff --git a/packages/infra/client/manager/tests/container_external_kill.rs b/packages/core/infra/client/manager/tests/container_external_kill.rs similarity index 100% rename from packages/infra/client/manager/tests/container_external_kill.rs rename to packages/core/infra/client/manager/tests/container_external_kill.rs diff --git a/packages/infra/client/manager/tests/container_lifecycle.rs b/packages/core/infra/client/manager/tests/container_lifecycle.rs similarity index 100% rename from packages/infra/client/manager/tests/container_lifecycle.rs rename to packages/core/infra/client/manager/tests/container_lifecycle.rs diff --git a/packages/infra/client/manager/tests/index.js b/packages/core/infra/client/manager/tests/index.js similarity index 100% rename from packages/infra/client/manager/tests/index.js rename to packages/core/infra/client/manager/tests/index.js diff --git a/packages/infra/client/manager/tests/isolate_lifecycle.rs b/packages/core/infra/client/manager/tests/isolate_lifecycle.rs similarity index 100% rename from packages/infra/client/manager/tests/isolate_lifecycle.rs rename to packages/core/infra/client/manager/tests/isolate_lifecycle.rs diff --git a/packages/infra/client/manager/tests/vector.json b/packages/core/infra/client/manager/tests/vector.json similarity index 100% rename from packages/infra/client/manager/tests/vector.json rename to packages/core/infra/client/manager/tests/vector.json diff --git a/packages/infra/legacy/job-runner/Cargo.toml b/packages/core/infra/legacy/job-runner/Cargo.toml similarity index 100% rename from packages/infra/legacy/job-runner/Cargo.toml rename to packages/core/infra/legacy/job-runner/Cargo.toml diff --git a/packages/infra/legacy/job-runner/Dockerfile b/packages/core/infra/legacy/job-runner/Dockerfile similarity index 100% rename from packages/infra/legacy/job-runner/Dockerfile rename to packages/core/infra/legacy/job-runner/Dockerfile diff --git a/packages/infra/legacy/job-runner/Dockerfile.dockerignore b/packages/core/infra/legacy/job-runner/Dockerfile.dockerignore similarity index 100% rename from packages/infra/legacy/job-runner/Dockerfile.dockerignore rename to packages/core/infra/legacy/job-runner/Dockerfile.dockerignore diff --git a/packages/infra/legacy/job-runner/README.md b/packages/core/infra/legacy/job-runner/README.md similarity index 100% rename from packages/infra/legacy/job-runner/README.md rename to packages/core/infra/legacy/job-runner/README.md diff --git a/packages/infra/legacy/job-runner/src/lib.rs b/packages/core/infra/legacy/job-runner/src/lib.rs similarity index 100% rename from packages/infra/legacy/job-runner/src/lib.rs rename to packages/core/infra/legacy/job-runner/src/lib.rs diff --git a/packages/infra/legacy/job-runner/src/log_shipper.rs b/packages/core/infra/legacy/job-runner/src/log_shipper.rs similarity index 100% rename from packages/infra/legacy/job-runner/src/log_shipper.rs rename to packages/core/infra/legacy/job-runner/src/log_shipper.rs diff --git a/packages/infra/legacy/job-runner/src/main.rs b/packages/core/infra/legacy/job-runner/src/main.rs similarity index 100% rename from packages/infra/legacy/job-runner/src/main.rs rename to packages/core/infra/legacy/job-runner/src/main.rs diff --git a/packages/infra/legacy/job-runner/src/throttle.rs b/packages/core/infra/legacy/job-runner/src/throttle.rs similarity index 100% rename from packages/infra/legacy/job-runner/src/throttle.rs rename to packages/core/infra/legacy/job-runner/src/throttle.rs diff --git a/packages/infra/legacy/job-runner/tests/basic.rs b/packages/core/infra/legacy/job-runner/tests/basic.rs similarity index 100% rename from packages/infra/legacy/job-runner/tests/basic.rs rename to packages/core/infra/legacy/job-runner/tests/basic.rs diff --git a/packages/infra/legacy/job-runner/tests/common/mock_vector.rs b/packages/core/infra/legacy/job-runner/tests/common/mock_vector.rs similarity index 100% rename from packages/infra/legacy/job-runner/tests/common/mock_vector.rs rename to packages/core/infra/legacy/job-runner/tests/common/mock_vector.rs diff --git a/packages/infra/legacy/job-runner/tests/common/mod.rs b/packages/core/infra/legacy/job-runner/tests/common/mod.rs similarity index 100% rename from packages/infra/legacy/job-runner/tests/common/mod.rs rename to packages/core/infra/legacy/job-runner/tests/common/mod.rs diff --git a/packages/infra/legacy/job-runner/tests/common/setup.rs b/packages/core/infra/legacy/job-runner/tests/common/setup.rs similarity index 100% rename from packages/infra/legacy/job-runner/tests/common/setup.rs rename to packages/core/infra/legacy/job-runner/tests/common/setup.rs diff --git a/packages/infra/schema-generator/Cargo.toml b/packages/core/infra/schema-generator/Cargo.toml similarity index 100% rename from packages/infra/schema-generator/Cargo.toml rename to packages/core/infra/schema-generator/Cargo.toml diff --git a/packages/infra/schema-generator/build.rs b/packages/core/infra/schema-generator/build.rs similarity index 100% rename from packages/infra/schema-generator/build.rs rename to packages/core/infra/schema-generator/build.rs diff --git a/packages/infra/schema-generator/src/lib.rs b/packages/core/infra/schema-generator/src/lib.rs similarity index 100% rename from packages/infra/schema-generator/src/lib.rs rename to packages/core/infra/schema-generator/src/lib.rs diff --git a/packages/core/infra/server/Cargo.toml b/packages/core/infra/server/Cargo.toml new file mode 100644 index 0000000000..ecca709265 --- /dev/null +++ b/packages/core/infra/server/Cargo.toml @@ -0,0 +1,54 @@ +[package] +name = "rivet-server" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[[bin]] +name = "rivet-server" +path = "src/main.rs" + +[dependencies] +anyhow = "1.0" +chirp-workflow.workspace = true +clap = { version = "4.3", features = ["derive"] } +include_dir = "0.7.4" +rivet-cache.workspace = true +rivet-config.workspace = true +rivet-connection.workspace = true +rivet-migrate.workspace = true +rivet-runtime.workspace = true +rivet-server-cli.workspace = true +rivet-service-manager.workspace = true +s3-util.workspace = true + +# Standalone +cluster-datacenter-tls-renew.workspace = true +cluster-gc.workspace = true +cluster-metrics-publish.workspace = true +job-gc.workspace = true +linode-gc.workspace = true +load-test-api-cloud.workspace = true +load-test-mm-sustain.workspace = true +load-test-mm.workspace = true +load-test-sqlx.workspace = true +load-test-watch-requests.workspace = true +mm-gc.workspace = true +monolith-worker.workspace = true +monolith-workflow-worker.workspace = true +nomad-monitor.workspace = true + +# Cron +telemetry-beacon.workspace = true +user-delete-pending.workspace = true + +# API +api-core-monolith-edge.workspace = true +api-core-monolith-public.workspace = true + +# Oneshot +build-default-create.workspace = true +chirp-client.workspace = true +cloud-default-create.workspace = true +cluster-default-update.workspace = true diff --git a/packages/infra/edge-server/src/lib.rs b/packages/core/infra/server/src/lib.rs similarity index 100% rename from packages/infra/edge-server/src/lib.rs rename to packages/core/infra/server/src/lib.rs diff --git a/packages/infra/server/src/main.rs b/packages/core/infra/server/src/main.rs similarity index 100% rename from packages/infra/server/src/main.rs rename to packages/core/infra/server/src/main.rs diff --git a/packages/core/infra/server/src/run_config.rs b/packages/core/infra/server/src/run_config.rs new file mode 100644 index 0000000000..9beeb8a984 --- /dev/null +++ b/packages/core/infra/server/src/run_config.rs @@ -0,0 +1,299 @@ +use anyhow::*; +use include_dir::include_dir; +use rivet_migrate::{SqlService, SqlServiceKind}; +use rivet_service_manager::{CronConfig, RunConfigData, Service, ServiceKind}; +use s3_util::S3Bucket; + +pub fn config(rivet_config: rivet_config::Config) -> Result { + let server_config = rivet_config.server().map_err(|err| anyhow!("{err:?}"))?; + + let mut services = vec![ + // API + Service::new( + "api_core_monolith_public", + ServiceKind::ApiPublic, + |config, pools| Box::pin(api_core_monolith_public::start(config, pools)), + ), + Service::new( + "api_core_monolith_edge", + ServiceKind::ApiEdge, + |config, pools| Box::pin(api_core_monolith_edge::start(config, pools)), + ), + Service::new( + "monolith_worker", + ServiceKind::Standalone, + |config, pools| Box::pin(monolith_worker::start(config, pools)), + ), + Service::new( + "monolith_workflow_worker", + ServiceKind::Standalone, + |config, pools| Box::pin(monolith_workflow_worker::start(config, pools)), + ), + Service::new("mm_gc", ServiceKind::Singleton, |config, pools| { + Box::pin(mm_gc::start(config, pools)) + }), + Service::new( + "build_default_create", + ServiceKind::Oneshot, + |config, pools| Box::pin(build_default_create::start(config, pools)), + ), + Service::new( + "user_delete_pending", + ServiceKind::Cron(CronConfig { + run_immediately: false, + schedule: "0 0 0 * * *".into(), + }), + |config, pools| Box::pin(user_delete_pending::start(config, pools)), + ), + Service::new( + "cluster_metrics_publish", + ServiceKind::Singleton, + |config, pools| Box::pin(cluster_metrics_publish::start(config, pools)), + ), + Service::new("cluster_gc", ServiceKind::Singleton, |config, pools| { + Box::pin(cluster_gc::start(config, pools)) + }), + Service::new( + "cluster_default_update", + ServiceKind::Oneshot, + |config, pools| Box::pin(cluster_default_update::start(config, pools)), + ), + ]; + + if server_config.is_tls_enabled() { + services.push(Service::new( + "cluster_datacenter_tls_renew", + ServiceKind::Singleton, + |config, pools| Box::pin(cluster_datacenter_tls_renew::start(config, pools)), + )); + } + + if server_config.rivet.auth.access_kind == rivet_config::config::rivet::AccessKind::Development + { + services.push(Service::new( + "cloud_default_create", + ServiceKind::Oneshot, + |config, pools| Box::pin(cloud_default_create::start(config, pools)), + )); + } + + if server_config.linode.is_some() { + services.push(Service::new( + "linode_gc", + ServiceKind::Singleton, + |config, pools| Box::pin(linode_gc::start(config, pools)), + )); + } + + if server_config.nomad.is_some() { + services.push(Service::new( + "nomad_monitor", + ServiceKind::Singleton, + |config, pools| Box::pin(nomad_monitor::start(config, pools)), + )); + } + + if server_config.nomad.is_some() && server_config.rivet.job_run.is_some() { + services.push(Service::new( + "job_gc", + ServiceKind::Singleton, + |config, pools| Box::pin(job_gc::start(config, pools)), + )); + } + + if server_config.rivet.telemetry.enable { + services.push(Service::new( + "telemetry_beacon", + ServiceKind::Cron(CronConfig { + run_immediately: true, + schedule: "0 0 * * * *".into(), + }), + |config, pools| Box::pin(telemetry_beacon::start(config, pools)), + )); + } + + let sql_services = vec![ + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/build/db/build"), + db_name: "db_build", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/captcha/db/captcha"), + db_name: "db_captcha", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/cdn/db/cdn"), + db_name: "db_cdn", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!( + "$CARGO_MANIFEST_DIR/../../services/cf-custom-hostname/db/cf-custom-hostname" + ), + db_name: "db_cf_custom_hostname", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/cloud/db/cloud"), + db_name: "db_cloud", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/cluster/db/cluster"), + db_name: "db_cluster", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!( + "$CARGO_MANIFEST_DIR/../../services/custom-user-avatar/db/custom-avatar" + ), + db_name: "db_custom_avatar", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!( + "$CARGO_MANIFEST_DIR/../../services/dynamic-config/db/dynamic-config" + ), + db_name: "db_dynamic_config", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!( + "$CARGO_MANIFEST_DIR/../../services/email-verification/db/email-verification" + ), + db_name: "db_email_verification", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/game/db/game"), + db_name: "db_game", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/ip/db/info"), + db_name: "db_ip_info", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/job/db/config"), + db_name: "db_job_config", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/job/db/state"), + db_name: "db_job_state", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/linode/db/linode"), + db_name: "db_linode", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/mm-config/db/mm-config"), + db_name: "db_mm_config", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/mm/db/state"), + db_name: "db_mm_state", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!( + "$CARGO_MANIFEST_DIR/../../services/team-invite/db/team-invite" + ), + db_name: "db_team_invite", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/team/db/team"), + db_name: "db_team", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/token/db/token"), + db_name: "db_token", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/upload/db/upload"), + db_name: "db_upload", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!( + "$CARGO_MANIFEST_DIR/../../services/user-identity/db/user-identity" + ), + db_name: "db_user_identity", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/user/db/user"), + db_name: "db_user", + }, + SqlService { + kind: SqlServiceKind::CockroachDB, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/workflow/db/workflow"), + db_name: "db_workflow", + }, + SqlService { + kind: SqlServiceKind::ClickHouse, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/ds-log/db/log"), + db_name: "db_ds_log", + }, + SqlService { + kind: SqlServiceKind::ClickHouse, + migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/job-log/db/log"), + db_name: "db_job_log", + }, + ]; + + let s3_buckets = vec![ + S3Bucket { + name: "bucket-build", + }, + S3Bucket { name: "bucket-cdn" }, + S3Bucket { + name: "bucket-export", + }, + S3Bucket { + name: "bucket-banner", + }, + S3Bucket { + name: "bucket-logo", + }, + S3Bucket { + name: "bucket-artifacts", + }, + S3Bucket { + name: "bucket-export", + }, + S3Bucket { name: "bucket-log" }, + S3Bucket { + name: "bucket-svc-build", + }, + S3Bucket { + name: "bucket-lobby-history-export", + }, + S3Bucket { name: "bucket-log" }, + S3Bucket { + name: "bucket-avatar", + }, + S3Bucket { + name: "bucket-billing", + }, + S3Bucket { + name: "bucket-avatar", + }, + ]; + + Ok(RunConfigData { + services, + sql_services, + s3_buckets, + }) +} diff --git a/packages/services/analytics/proto/msg/event-create.proto b/packages/core/services/analytics/proto/msg/event-create.proto similarity index 100% rename from packages/services/analytics/proto/msg/event-create.proto rename to packages/core/services/analytics/proto/msg/event-create.proto diff --git a/packages/services/build/Cargo.toml b/packages/core/services/build/Cargo.toml similarity index 100% rename from packages/services/build/Cargo.toml rename to packages/core/services/build/Cargo.toml diff --git a/packages/services/build/db/build/migrations/20200101000000_init.down.sql b/packages/core/services/build/db/build/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/build/db/build/migrations/20200101000000_init.down.sql rename to packages/core/services/build/db/build/migrations/20200101000000_init.down.sql diff --git a/packages/services/build/db/build/migrations/20200101000000_init.up.sql b/packages/core/services/build/db/build/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/build/db/build/migrations/20200101000000_init.up.sql rename to packages/core/services/build/db/build/migrations/20200101000000_init.up.sql diff --git a/packages/services/build/db/build/migrations/20210811184914_add_image_tag.down.sql b/packages/core/services/build/db/build/migrations/20210811184914_add_image_tag.down.sql similarity index 100% rename from packages/services/build/db/build/migrations/20210811184914_add_image_tag.down.sql rename to packages/core/services/build/db/build/migrations/20210811184914_add_image_tag.down.sql diff --git a/packages/services/build/db/build/migrations/20210811184914_add_image_tag.up.sql b/packages/core/services/build/db/build/migrations/20210811184914_add_image_tag.up.sql similarity index 100% rename from packages/services/build/db/build/migrations/20210811184914_add_image_tag.up.sql rename to packages/core/services/build/db/build/migrations/20210811184914_add_image_tag.up.sql diff --git a/packages/services/build/db/build/migrations/20220827122745_default_build.down.sql b/packages/core/services/build/db/build/migrations/20220827122745_default_build.down.sql similarity index 100% rename from packages/services/build/db/build/migrations/20220827122745_default_build.down.sql rename to packages/core/services/build/db/build/migrations/20220827122745_default_build.down.sql diff --git a/packages/services/build/db/build/migrations/20220827122745_default_build.up.sql b/packages/core/services/build/db/build/migrations/20220827122745_default_build.up.sql similarity index 100% rename from packages/services/build/db/build/migrations/20220827122745_default_build.up.sql rename to packages/core/services/build/db/build/migrations/20220827122745_default_build.up.sql diff --git a/packages/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.down.sql b/packages/core/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.down.sql similarity index 100% rename from packages/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.down.sql rename to packages/core/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.down.sql diff --git a/packages/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.up.sql b/packages/core/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.up.sql similarity index 100% rename from packages/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.up.sql rename to packages/core/services/build/db/build/migrations/20221221205705_drop_unique_game_id_upload_id.up.sql diff --git a/packages/services/build/db/build/migrations/20231018061659_build_kind.down.sql b/packages/core/services/build/db/build/migrations/20231018061659_build_kind.down.sql similarity index 100% rename from packages/services/build/db/build/migrations/20231018061659_build_kind.down.sql rename to packages/core/services/build/db/build/migrations/20231018061659_build_kind.down.sql diff --git a/packages/services/build/db/build/migrations/20231018061659_build_kind.up.sql b/packages/core/services/build/db/build/migrations/20231018061659_build_kind.up.sql similarity index 100% rename from packages/services/build/db/build/migrations/20231018061659_build_kind.up.sql rename to packages/core/services/build/db/build/migrations/20231018061659_build_kind.up.sql diff --git a/packages/services/build/db/build/migrations/20240717023701_add_build_tags.down.sql b/packages/core/services/build/db/build/migrations/20240717023701_add_build_tags.down.sql similarity index 100% rename from packages/services/build/db/build/migrations/20240717023701_add_build_tags.down.sql rename to packages/core/services/build/db/build/migrations/20240717023701_add_build_tags.down.sql diff --git a/packages/services/build/db/build/migrations/20240717023701_add_build_tags.up.sql b/packages/core/services/build/db/build/migrations/20240717023701_add_build_tags.up.sql similarity index 100% rename from packages/services/build/db/build/migrations/20240717023701_add_build_tags.up.sql rename to packages/core/services/build/db/build/migrations/20240717023701_add_build_tags.up.sql diff --git a/packages/services/build/db/build/migrations/20240812204859_env_owner.down.sql b/packages/core/services/build/db/build/migrations/20240812204859_env_owner.down.sql similarity index 100% rename from packages/services/build/db/build/migrations/20240812204859_env_owner.down.sql rename to packages/core/services/build/db/build/migrations/20240812204859_env_owner.down.sql diff --git a/packages/services/build/db/build/migrations/20240812204859_env_owner.up.sql b/packages/core/services/build/db/build/migrations/20240812204859_env_owner.up.sql similarity index 100% rename from packages/services/build/db/build/migrations/20240812204859_env_owner.up.sql rename to packages/core/services/build/db/build/migrations/20240812204859_env_owner.up.sql diff --git a/packages/services/build/ops/create/Cargo.toml b/packages/core/services/build/ops/create/Cargo.toml similarity index 100% rename from packages/services/build/ops/create/Cargo.toml rename to packages/core/services/build/ops/create/Cargo.toml diff --git a/packages/services/build/ops/create/README.md b/packages/core/services/build/ops/create/README.md similarity index 100% rename from packages/services/build/ops/create/README.md rename to packages/core/services/build/ops/create/README.md diff --git a/packages/services/build/ops/create/src/lib.rs b/packages/core/services/build/ops/create/src/lib.rs similarity index 100% rename from packages/services/build/ops/create/src/lib.rs rename to packages/core/services/build/ops/create/src/lib.rs diff --git a/packages/services/build/ops/create/tests/integration.rs b/packages/core/services/build/ops/create/tests/integration.rs similarity index 100% rename from packages/services/build/ops/create/tests/integration.rs rename to packages/core/services/build/ops/create/tests/integration.rs diff --git a/packages/services/build/ops/get/Cargo.toml b/packages/core/services/build/ops/get/Cargo.toml similarity index 100% rename from packages/services/build/ops/get/Cargo.toml rename to packages/core/services/build/ops/get/Cargo.toml diff --git a/packages/services/build/ops/get/README.md b/packages/core/services/build/ops/get/README.md similarity index 100% rename from packages/services/build/ops/get/README.md rename to packages/core/services/build/ops/get/README.md diff --git a/packages/services/build/ops/get/src/lib.rs b/packages/core/services/build/ops/get/src/lib.rs similarity index 100% rename from packages/services/build/ops/get/src/lib.rs rename to packages/core/services/build/ops/get/src/lib.rs diff --git a/packages/services/build/ops/get/tests/integration.rs b/packages/core/services/build/ops/get/tests/integration.rs similarity index 100% rename from packages/services/build/ops/get/tests/integration.rs rename to packages/core/services/build/ops/get/tests/integration.rs diff --git a/packages/services/build/ops/list-for-env/Cargo.toml b/packages/core/services/build/ops/list-for-env/Cargo.toml similarity index 100% rename from packages/services/build/ops/list-for-env/Cargo.toml rename to packages/core/services/build/ops/list-for-env/Cargo.toml diff --git a/packages/services/build/ops/list-for-env/README.md b/packages/core/services/build/ops/list-for-env/README.md similarity index 100% rename from packages/services/build/ops/list-for-env/README.md rename to packages/core/services/build/ops/list-for-env/README.md diff --git a/packages/services/build/ops/list-for-env/src/lib.rs b/packages/core/services/build/ops/list-for-env/src/lib.rs similarity index 100% rename from packages/services/build/ops/list-for-env/src/lib.rs rename to packages/core/services/build/ops/list-for-env/src/lib.rs diff --git a/packages/services/build/ops/list-for-game/Cargo.toml b/packages/core/services/build/ops/list-for-game/Cargo.toml similarity index 100% rename from packages/services/build/ops/list-for-game/Cargo.toml rename to packages/core/services/build/ops/list-for-game/Cargo.toml diff --git a/packages/services/build/ops/list-for-game/README.md b/packages/core/services/build/ops/list-for-game/README.md similarity index 100% rename from packages/services/build/ops/list-for-game/README.md rename to packages/core/services/build/ops/list-for-game/README.md diff --git a/packages/services/build/ops/list-for-game/src/lib.rs b/packages/core/services/build/ops/list-for-game/src/lib.rs similarity index 100% rename from packages/services/build/ops/list-for-game/src/lib.rs rename to packages/core/services/build/ops/list-for-game/src/lib.rs diff --git a/packages/services/build/ops/list-for-game/tests/integration.rs b/packages/core/services/build/ops/list-for-game/tests/integration.rs similarity index 100% rename from packages/services/build/ops/list-for-game/tests/integration.rs rename to packages/core/services/build/ops/list-for-game/tests/integration.rs diff --git a/packages/services/build/proto/create.proto b/packages/core/services/build/proto/create.proto similarity index 100% rename from packages/services/build/proto/create.proto rename to packages/core/services/build/proto/create.proto diff --git a/packages/services/build/proto/get.proto b/packages/core/services/build/proto/get.proto similarity index 100% rename from packages/services/build/proto/get.proto rename to packages/core/services/build/proto/get.proto diff --git a/packages/services/build/proto/list-for-env.proto b/packages/core/services/build/proto/list-for-env.proto similarity index 100% rename from packages/services/build/proto/list-for-env.proto rename to packages/core/services/build/proto/list-for-env.proto diff --git a/packages/services/build/proto/list-for-game.proto b/packages/core/services/build/proto/list-for-game.proto similarity index 100% rename from packages/services/build/proto/list-for-game.proto rename to packages/core/services/build/proto/list-for-game.proto diff --git a/packages/services/build/src/lib.rs b/packages/core/services/build/src/lib.rs similarity index 100% rename from packages/services/build/src/lib.rs rename to packages/core/services/build/src/lib.rs diff --git a/packages/services/build/src/ops/create.rs b/packages/core/services/build/src/ops/create.rs similarity index 100% rename from packages/services/build/src/ops/create.rs rename to packages/core/services/build/src/ops/create.rs diff --git a/packages/services/build/src/ops/get.rs b/packages/core/services/build/src/ops/get.rs similarity index 100% rename from packages/services/build/src/ops/get.rs rename to packages/core/services/build/src/ops/get.rs diff --git a/packages/services/build/src/ops/mod.rs b/packages/core/services/build/src/ops/mod.rs similarity index 100% rename from packages/services/build/src/ops/mod.rs rename to packages/core/services/build/src/ops/mod.rs diff --git a/packages/services/build/src/ops/patch_tags.rs b/packages/core/services/build/src/ops/patch_tags.rs similarity index 100% rename from packages/services/build/src/ops/patch_tags.rs rename to packages/core/services/build/src/ops/patch_tags.rs diff --git a/packages/services/build/src/ops/resolve_for_tags.rs b/packages/core/services/build/src/ops/resolve_for_tags.rs similarity index 100% rename from packages/services/build/src/ops/resolve_for_tags.rs rename to packages/core/services/build/src/ops/resolve_for_tags.rs diff --git a/packages/services/build/src/types.rs b/packages/core/services/build/src/types.rs similarity index 100% rename from packages/services/build/src/types.rs rename to packages/core/services/build/src/types.rs diff --git a/packages/services/build/src/utils.rs b/packages/core/services/build/src/utils.rs similarity index 100% rename from packages/services/build/src/utils.rs rename to packages/core/services/build/src/utils.rs diff --git a/packages/services/build/standalone/default-create/Cargo.toml b/packages/core/services/build/standalone/default-create/Cargo.toml similarity index 100% rename from packages/services/build/standalone/default-create/Cargo.toml rename to packages/core/services/build/standalone/default-create/Cargo.toml diff --git a/packages/services/build/standalone/default-create/README.md b/packages/core/services/build/standalone/default-create/README.md similarity index 100% rename from packages/services/build/standalone/default-create/README.md rename to packages/core/services/build/standalone/default-create/README.md diff --git a/packages/services/build/standalone/default-create/src/lib.rs b/packages/core/services/build/standalone/default-create/src/lib.rs similarity index 100% rename from packages/services/build/standalone/default-create/src/lib.rs rename to packages/core/services/build/standalone/default-create/src/lib.rs diff --git a/packages/services/build/standalone/default-create/tests/integration.rs b/packages/core/services/build/standalone/default-create/tests/integration.rs similarity index 100% rename from packages/services/build/standalone/default-create/tests/integration.rs rename to packages/core/services/build/standalone/default-create/tests/integration.rs diff --git a/packages/services/build/tests/patch_tags.rs b/packages/core/services/build/tests/patch_tags.rs similarity index 100% rename from packages/services/build/tests/patch_tags.rs rename to packages/core/services/build/tests/patch_tags.rs diff --git a/packages/services/build/util/Cargo.toml b/packages/core/services/build/util/Cargo.toml similarity index 100% rename from packages/services/build/util/Cargo.toml rename to packages/core/services/build/util/Cargo.toml diff --git a/packages/services/build/util/src/lib.rs b/packages/core/services/build/util/src/lib.rs similarity index 100% rename from packages/services/build/util/src/lib.rs rename to packages/core/services/build/util/src/lib.rs diff --git a/packages/services/captcha/db/captcha/migrations/20200101000000_init.down.sql b/packages/core/services/captcha/db/captcha/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/captcha/db/captcha/migrations/20200101000000_init.down.sql rename to packages/core/services/captcha/db/captcha/migrations/20200101000000_init.down.sql diff --git a/packages/services/captcha/db/captcha/migrations/20200101000000_init.up.sql b/packages/core/services/captcha/db/captcha/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/captcha/db/captcha/migrations/20200101000000_init.up.sql rename to packages/core/services/captcha/db/captcha/migrations/20200101000000_init.up.sql diff --git a/packages/services/captcha/ops/hcaptcha-config-get/Cargo.toml b/packages/core/services/captcha/ops/hcaptcha-config-get/Cargo.toml similarity index 100% rename from packages/services/captcha/ops/hcaptcha-config-get/Cargo.toml rename to packages/core/services/captcha/ops/hcaptcha-config-get/Cargo.toml diff --git a/packages/services/captcha/ops/hcaptcha-config-get/README.md b/packages/core/services/captcha/ops/hcaptcha-config-get/README.md similarity index 100% rename from packages/services/captcha/ops/hcaptcha-config-get/README.md rename to packages/core/services/captcha/ops/hcaptcha-config-get/README.md diff --git a/packages/services/captcha/ops/hcaptcha-config-get/src/lib.rs b/packages/core/services/captcha/ops/hcaptcha-config-get/src/lib.rs similarity index 100% rename from packages/services/captcha/ops/hcaptcha-config-get/src/lib.rs rename to packages/core/services/captcha/ops/hcaptcha-config-get/src/lib.rs diff --git a/packages/services/captcha/ops/hcaptcha-config-get/tests/integration.rs b/packages/core/services/captcha/ops/hcaptcha-config-get/tests/integration.rs similarity index 100% rename from packages/services/captcha/ops/hcaptcha-config-get/tests/integration.rs rename to packages/core/services/captcha/ops/hcaptcha-config-get/tests/integration.rs diff --git a/packages/services/captcha/ops/hcaptcha-verify/Cargo.toml b/packages/core/services/captcha/ops/hcaptcha-verify/Cargo.toml similarity index 100% rename from packages/services/captcha/ops/hcaptcha-verify/Cargo.toml rename to packages/core/services/captcha/ops/hcaptcha-verify/Cargo.toml diff --git a/packages/services/captcha/ops/hcaptcha-verify/README.md b/packages/core/services/captcha/ops/hcaptcha-verify/README.md similarity index 100% rename from packages/services/captcha/ops/hcaptcha-verify/README.md rename to packages/core/services/captcha/ops/hcaptcha-verify/README.md diff --git a/packages/services/captcha/ops/hcaptcha-verify/src/lib.rs b/packages/core/services/captcha/ops/hcaptcha-verify/src/lib.rs similarity index 100% rename from packages/services/captcha/ops/hcaptcha-verify/src/lib.rs rename to packages/core/services/captcha/ops/hcaptcha-verify/src/lib.rs diff --git a/packages/services/captcha/ops/hcaptcha-verify/tests/integration.rs b/packages/core/services/captcha/ops/hcaptcha-verify/tests/integration.rs similarity index 100% rename from packages/services/captcha/ops/hcaptcha-verify/tests/integration.rs rename to packages/core/services/captcha/ops/hcaptcha-verify/tests/integration.rs diff --git a/packages/services/captcha/ops/request/Cargo.toml b/packages/core/services/captcha/ops/request/Cargo.toml similarity index 100% rename from packages/services/captcha/ops/request/Cargo.toml rename to packages/core/services/captcha/ops/request/Cargo.toml diff --git a/packages/services/captcha/ops/request/README.md b/packages/core/services/captcha/ops/request/README.md similarity index 100% rename from packages/services/captcha/ops/request/README.md rename to packages/core/services/captcha/ops/request/README.md diff --git a/packages/services/captcha/ops/request/src/lib.rs b/packages/core/services/captcha/ops/request/src/lib.rs similarity index 100% rename from packages/services/captcha/ops/request/src/lib.rs rename to packages/core/services/captcha/ops/request/src/lib.rs diff --git a/packages/services/captcha/ops/request/tests/integration.rs b/packages/core/services/captcha/ops/request/tests/integration.rs similarity index 100% rename from packages/services/captcha/ops/request/tests/integration.rs rename to packages/core/services/captcha/ops/request/tests/integration.rs diff --git a/packages/services/captcha/ops/turnstile-config-get/Cargo.toml b/packages/core/services/captcha/ops/turnstile-config-get/Cargo.toml similarity index 100% rename from packages/services/captcha/ops/turnstile-config-get/Cargo.toml rename to packages/core/services/captcha/ops/turnstile-config-get/Cargo.toml diff --git a/packages/services/captcha/ops/turnstile-config-get/README.md b/packages/core/services/captcha/ops/turnstile-config-get/README.md similarity index 100% rename from packages/services/captcha/ops/turnstile-config-get/README.md rename to packages/core/services/captcha/ops/turnstile-config-get/README.md diff --git a/packages/services/captcha/ops/turnstile-config-get/src/lib.rs b/packages/core/services/captcha/ops/turnstile-config-get/src/lib.rs similarity index 100% rename from packages/services/captcha/ops/turnstile-config-get/src/lib.rs rename to packages/core/services/captcha/ops/turnstile-config-get/src/lib.rs diff --git a/packages/services/captcha/ops/turnstile-config-get/tests/integration.rs b/packages/core/services/captcha/ops/turnstile-config-get/tests/integration.rs similarity index 100% rename from packages/services/captcha/ops/turnstile-config-get/tests/integration.rs rename to packages/core/services/captcha/ops/turnstile-config-get/tests/integration.rs diff --git a/packages/services/captcha/ops/turnstile-verify/Cargo.toml b/packages/core/services/captcha/ops/turnstile-verify/Cargo.toml similarity index 100% rename from packages/services/captcha/ops/turnstile-verify/Cargo.toml rename to packages/core/services/captcha/ops/turnstile-verify/Cargo.toml diff --git a/packages/services/captcha/ops/turnstile-verify/README.md b/packages/core/services/captcha/ops/turnstile-verify/README.md similarity index 100% rename from packages/services/captcha/ops/turnstile-verify/README.md rename to packages/core/services/captcha/ops/turnstile-verify/README.md diff --git a/packages/services/captcha/ops/turnstile-verify/src/lib.rs b/packages/core/services/captcha/ops/turnstile-verify/src/lib.rs similarity index 100% rename from packages/services/captcha/ops/turnstile-verify/src/lib.rs rename to packages/core/services/captcha/ops/turnstile-verify/src/lib.rs diff --git a/packages/services/captcha/ops/turnstile-verify/tests/integration.rs b/packages/core/services/captcha/ops/turnstile-verify/tests/integration.rs similarity index 100% rename from packages/services/captcha/ops/turnstile-verify/tests/integration.rs rename to packages/core/services/captcha/ops/turnstile-verify/tests/integration.rs diff --git a/packages/services/captcha/ops/verify/Cargo.toml b/packages/core/services/captcha/ops/verify/Cargo.toml similarity index 100% rename from packages/services/captcha/ops/verify/Cargo.toml rename to packages/core/services/captcha/ops/verify/Cargo.toml diff --git a/packages/services/captcha/ops/verify/README.md b/packages/core/services/captcha/ops/verify/README.md similarity index 100% rename from packages/services/captcha/ops/verify/README.md rename to packages/core/services/captcha/ops/verify/README.md diff --git a/packages/services/captcha/ops/verify/src/lib.rs b/packages/core/services/captcha/ops/verify/src/lib.rs similarity index 100% rename from packages/services/captcha/ops/verify/src/lib.rs rename to packages/core/services/captcha/ops/verify/src/lib.rs diff --git a/packages/services/captcha/ops/verify/tests/integration.rs b/packages/core/services/captcha/ops/verify/tests/integration.rs similarity index 100% rename from packages/services/captcha/ops/verify/tests/integration.rs rename to packages/core/services/captcha/ops/verify/tests/integration.rs diff --git a/packages/services/captcha/proto/hcaptcha-config-get.proto b/packages/core/services/captcha/proto/hcaptcha-config-get.proto similarity index 100% rename from packages/services/captcha/proto/hcaptcha-config-get.proto rename to packages/core/services/captcha/proto/hcaptcha-config-get.proto diff --git a/packages/services/captcha/proto/hcaptcha-verify.proto b/packages/core/services/captcha/proto/hcaptcha-verify.proto similarity index 100% rename from packages/services/captcha/proto/hcaptcha-verify.proto rename to packages/core/services/captcha/proto/hcaptcha-verify.proto diff --git a/packages/services/captcha/proto/request.proto b/packages/core/services/captcha/proto/request.proto similarity index 100% rename from packages/services/captcha/proto/request.proto rename to packages/core/services/captcha/proto/request.proto diff --git a/packages/services/captcha/proto/turnstile-config-get.proto b/packages/core/services/captcha/proto/turnstile-config-get.proto similarity index 100% rename from packages/services/captcha/proto/turnstile-config-get.proto rename to packages/core/services/captcha/proto/turnstile-config-get.proto diff --git a/packages/services/captcha/proto/turnstile-verify.proto b/packages/core/services/captcha/proto/turnstile-verify.proto similarity index 100% rename from packages/services/captcha/proto/turnstile-verify.proto rename to packages/core/services/captcha/proto/turnstile-verify.proto diff --git a/packages/services/captcha/proto/verify.proto b/packages/core/services/captcha/proto/verify.proto similarity index 100% rename from packages/services/captcha/proto/verify.proto rename to packages/core/services/captcha/proto/verify.proto diff --git a/packages/services/captcha/util/Cargo.toml b/packages/core/services/captcha/util/Cargo.toml similarity index 100% rename from packages/services/captcha/util/Cargo.toml rename to packages/core/services/captcha/util/Cargo.toml diff --git a/packages/services/captcha/util/src/lib.rs b/packages/core/services/captcha/util/src/lib.rs similarity index 100% rename from packages/services/captcha/util/src/lib.rs rename to packages/core/services/captcha/util/src/lib.rs diff --git a/packages/services/cdn/db/cdn/migrations/20200101000000_init.down.sql b/packages/core/services/cdn/db/cdn/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20200101000000_init.down.sql rename to packages/core/services/cdn/db/cdn/migrations/20200101000000_init.down.sql diff --git a/packages/services/cdn/db/cdn/migrations/20200101000000_init.up.sql b/packages/core/services/cdn/db/cdn/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20200101000000_init.up.sql rename to packages/core/services/cdn/db/cdn/migrations/20200101000000_init.up.sql diff --git a/packages/services/cdn/db/cdn/migrations/20210618203829_game_ns.down.sql b/packages/core/services/cdn/db/cdn/migrations/20210618203829_game_ns.down.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20210618203829_game_ns.down.sql rename to packages/core/services/cdn/db/cdn/migrations/20210618203829_game_ns.down.sql diff --git a/packages/services/cdn/db/cdn/migrations/20210618203829_game_ns.up.sql b/packages/core/services/cdn/db/cdn/migrations/20210618203829_game_ns.up.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20210618203829_game_ns.up.sql rename to packages/core/services/cdn/db/cdn/migrations/20210618203829_game_ns.up.sql diff --git a/packages/services/cdn/db/cdn/migrations/20210803124842_custom_domains.down.sql b/packages/core/services/cdn/db/cdn/migrations/20210803124842_custom_domains.down.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20210803124842_custom_domains.down.sql rename to packages/core/services/cdn/db/cdn/migrations/20210803124842_custom_domains.down.sql diff --git a/packages/services/cdn/db/cdn/migrations/20210803124842_custom_domains.up.sql b/packages/core/services/cdn/db/cdn/migrations/20210803124842_custom_domains.up.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20210803124842_custom_domains.up.sql rename to packages/core/services/cdn/db/cdn/migrations/20210803124842_custom_domains.up.sql diff --git a/packages/services/cdn/db/cdn/migrations/20220817131026_auth.down.sql b/packages/core/services/cdn/db/cdn/migrations/20220817131026_auth.down.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20220817131026_auth.down.sql rename to packages/core/services/cdn/db/cdn/migrations/20220817131026_auth.down.sql diff --git a/packages/services/cdn/db/cdn/migrations/20220817131026_auth.up.sql b/packages/core/services/cdn/db/cdn/migrations/20220817131026_auth.up.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20220817131026_auth.up.sql rename to packages/core/services/cdn/db/cdn/migrations/20220817131026_auth.up.sql diff --git a/packages/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.down.sql b/packages/core/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.down.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.down.sql rename to packages/core/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.down.sql diff --git a/packages/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.up.sql b/packages/core/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.up.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.up.sql rename to packages/core/services/cdn/db/cdn/migrations/20220907171943_add_custom_headers.up.sql diff --git a/packages/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.down.sql b/packages/core/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.down.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.down.sql rename to packages/core/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.down.sql diff --git a/packages/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.up.sql b/packages/core/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.up.sql similarity index 100% rename from packages/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.up.sql rename to packages/core/services/cdn/db/cdn/migrations/20230111203454_custom_domain_create_ts.up.sql diff --git a/packages/services/cdn/ops/namespace-auth-user-remove/Cargo.toml b/packages/core/services/cdn/ops/namespace-auth-user-remove/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-remove/Cargo.toml rename to packages/core/services/cdn/ops/namespace-auth-user-remove/Cargo.toml diff --git a/packages/services/cdn/ops/namespace-auth-user-remove/README.md b/packages/core/services/cdn/ops/namespace-auth-user-remove/README.md similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-remove/README.md rename to packages/core/services/cdn/ops/namespace-auth-user-remove/README.md diff --git a/packages/services/cdn/ops/namespace-auth-user-remove/src/lib.rs b/packages/core/services/cdn/ops/namespace-auth-user-remove/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-remove/src/lib.rs rename to packages/core/services/cdn/ops/namespace-auth-user-remove/src/lib.rs diff --git a/packages/services/cdn/ops/namespace-auth-user-remove/tests/integration.rs b/packages/core/services/cdn/ops/namespace-auth-user-remove/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-remove/tests/integration.rs rename to packages/core/services/cdn/ops/namespace-auth-user-remove/tests/integration.rs diff --git a/packages/services/cdn/ops/namespace-auth-user-update/Cargo.toml b/packages/core/services/cdn/ops/namespace-auth-user-update/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-update/Cargo.toml rename to packages/core/services/cdn/ops/namespace-auth-user-update/Cargo.toml diff --git a/packages/services/cdn/ops/namespace-auth-user-update/README.md b/packages/core/services/cdn/ops/namespace-auth-user-update/README.md similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-update/README.md rename to packages/core/services/cdn/ops/namespace-auth-user-update/README.md diff --git a/packages/services/cdn/ops/namespace-auth-user-update/src/lib.rs b/packages/core/services/cdn/ops/namespace-auth-user-update/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-update/src/lib.rs rename to packages/core/services/cdn/ops/namespace-auth-user-update/src/lib.rs diff --git a/packages/services/cdn/ops/namespace-auth-user-update/tests/integration.rs b/packages/core/services/cdn/ops/namespace-auth-user-update/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/namespace-auth-user-update/tests/integration.rs rename to packages/core/services/cdn/ops/namespace-auth-user-update/tests/integration.rs diff --git a/packages/services/cdn/ops/namespace-create/Cargo.toml b/packages/core/services/cdn/ops/namespace-create/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/namespace-create/Cargo.toml rename to packages/core/services/cdn/ops/namespace-create/Cargo.toml diff --git a/packages/services/cdn/ops/namespace-create/README.md b/packages/core/services/cdn/ops/namespace-create/README.md similarity index 100% rename from packages/services/cdn/ops/namespace-create/README.md rename to packages/core/services/cdn/ops/namespace-create/README.md diff --git a/packages/services/cdn/ops/namespace-create/src/lib.rs b/packages/core/services/cdn/ops/namespace-create/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/namespace-create/src/lib.rs rename to packages/core/services/cdn/ops/namespace-create/src/lib.rs diff --git a/packages/services/cdn/ops/namespace-create/tests/integration.rs b/packages/core/services/cdn/ops/namespace-create/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/namespace-create/tests/integration.rs rename to packages/core/services/cdn/ops/namespace-create/tests/integration.rs diff --git a/packages/services/cdn/ops/namespace-domain-create/Cargo.toml b/packages/core/services/cdn/ops/namespace-domain-create/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/namespace-domain-create/Cargo.toml rename to packages/core/services/cdn/ops/namespace-domain-create/Cargo.toml diff --git a/packages/services/cdn/ops/namespace-domain-create/README.md b/packages/core/services/cdn/ops/namespace-domain-create/README.md similarity index 100% rename from packages/services/cdn/ops/namespace-domain-create/README.md rename to packages/core/services/cdn/ops/namespace-domain-create/README.md diff --git a/packages/services/cdn/ops/namespace-domain-create/src/lib.rs b/packages/core/services/cdn/ops/namespace-domain-create/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/namespace-domain-create/src/lib.rs rename to packages/core/services/cdn/ops/namespace-domain-create/src/lib.rs diff --git a/packages/services/cdn/ops/namespace-domain-create/tests/integration.rs b/packages/core/services/cdn/ops/namespace-domain-create/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/namespace-domain-create/tests/integration.rs rename to packages/core/services/cdn/ops/namespace-domain-create/tests/integration.rs diff --git a/packages/services/cdn/ops/namespace-domain-remove/Cargo.toml b/packages/core/services/cdn/ops/namespace-domain-remove/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/namespace-domain-remove/Cargo.toml rename to packages/core/services/cdn/ops/namespace-domain-remove/Cargo.toml diff --git a/packages/services/cdn/ops/namespace-domain-remove/README.md b/packages/core/services/cdn/ops/namespace-domain-remove/README.md similarity index 100% rename from packages/services/cdn/ops/namespace-domain-remove/README.md rename to packages/core/services/cdn/ops/namespace-domain-remove/README.md diff --git a/packages/services/cdn/ops/namespace-domain-remove/src/lib.rs b/packages/core/services/cdn/ops/namespace-domain-remove/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/namespace-domain-remove/src/lib.rs rename to packages/core/services/cdn/ops/namespace-domain-remove/src/lib.rs diff --git a/packages/services/cdn/ops/namespace-domain-remove/tests/integration.rs b/packages/core/services/cdn/ops/namespace-domain-remove/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/namespace-domain-remove/tests/integration.rs rename to packages/core/services/cdn/ops/namespace-domain-remove/tests/integration.rs diff --git a/packages/services/cdn/ops/namespace-get/Cargo.toml b/packages/core/services/cdn/ops/namespace-get/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/namespace-get/Cargo.toml rename to packages/core/services/cdn/ops/namespace-get/Cargo.toml diff --git a/packages/services/cdn/ops/namespace-get/README.md b/packages/core/services/cdn/ops/namespace-get/README.md similarity index 100% rename from packages/services/cdn/ops/namespace-get/README.md rename to packages/core/services/cdn/ops/namespace-get/README.md diff --git a/packages/services/cdn/ops/namespace-get/src/lib.rs b/packages/core/services/cdn/ops/namespace-get/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/namespace-get/src/lib.rs rename to packages/core/services/cdn/ops/namespace-get/src/lib.rs diff --git a/packages/services/cdn/ops/namespace-get/tests/integration.rs b/packages/core/services/cdn/ops/namespace-get/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/namespace-get/tests/integration.rs rename to packages/core/services/cdn/ops/namespace-get/tests/integration.rs diff --git a/packages/services/cdn/ops/namespace-resolve-domain/Cargo.toml b/packages/core/services/cdn/ops/namespace-resolve-domain/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/namespace-resolve-domain/Cargo.toml rename to packages/core/services/cdn/ops/namespace-resolve-domain/Cargo.toml diff --git a/packages/services/cdn/ops/namespace-resolve-domain/README.md b/packages/core/services/cdn/ops/namespace-resolve-domain/README.md similarity index 100% rename from packages/services/cdn/ops/namespace-resolve-domain/README.md rename to packages/core/services/cdn/ops/namespace-resolve-domain/README.md diff --git a/packages/services/cdn/ops/namespace-resolve-domain/src/lib.rs b/packages/core/services/cdn/ops/namespace-resolve-domain/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/namespace-resolve-domain/src/lib.rs rename to packages/core/services/cdn/ops/namespace-resolve-domain/src/lib.rs diff --git a/packages/services/cdn/ops/namespace-resolve-domain/tests/integration.rs b/packages/core/services/cdn/ops/namespace-resolve-domain/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/namespace-resolve-domain/tests/integration.rs rename to packages/core/services/cdn/ops/namespace-resolve-domain/tests/integration.rs diff --git a/packages/services/cdn/ops/ns-auth-type-set/Cargo.toml b/packages/core/services/cdn/ops/ns-auth-type-set/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/ns-auth-type-set/Cargo.toml rename to packages/core/services/cdn/ops/ns-auth-type-set/Cargo.toml diff --git a/packages/services/cdn/ops/ns-auth-type-set/README.md b/packages/core/services/cdn/ops/ns-auth-type-set/README.md similarity index 100% rename from packages/services/cdn/ops/ns-auth-type-set/README.md rename to packages/core/services/cdn/ops/ns-auth-type-set/README.md diff --git a/packages/services/cdn/ops/ns-auth-type-set/src/lib.rs b/packages/core/services/cdn/ops/ns-auth-type-set/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/ns-auth-type-set/src/lib.rs rename to packages/core/services/cdn/ops/ns-auth-type-set/src/lib.rs diff --git a/packages/services/cdn/ops/ns-auth-type-set/tests/integration.rs b/packages/core/services/cdn/ops/ns-auth-type-set/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/ns-auth-type-set/tests/integration.rs rename to packages/core/services/cdn/ops/ns-auth-type-set/tests/integration.rs diff --git a/packages/services/cdn/ops/ns-enable-domain-public-auth-set/Cargo.toml b/packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/ns-enable-domain-public-auth-set/Cargo.toml rename to packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/Cargo.toml diff --git a/packages/services/cdn/ops/ns-enable-domain-public-auth-set/README.md b/packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/README.md similarity index 100% rename from packages/services/cdn/ops/ns-enable-domain-public-auth-set/README.md rename to packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/README.md diff --git a/packages/services/cdn/ops/ns-enable-domain-public-auth-set/src/lib.rs b/packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/ns-enable-domain-public-auth-set/src/lib.rs rename to packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/src/lib.rs diff --git a/packages/services/cdn/ops/ns-enable-domain-public-auth-set/tests/integration.rs b/packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/ns-enable-domain-public-auth-set/tests/integration.rs rename to packages/core/services/cdn/ops/ns-enable-domain-public-auth-set/tests/integration.rs diff --git a/packages/services/cdn/ops/site-create/Cargo.toml b/packages/core/services/cdn/ops/site-create/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/site-create/Cargo.toml rename to packages/core/services/cdn/ops/site-create/Cargo.toml diff --git a/packages/services/cdn/ops/site-create/README.md b/packages/core/services/cdn/ops/site-create/README.md similarity index 100% rename from packages/services/cdn/ops/site-create/README.md rename to packages/core/services/cdn/ops/site-create/README.md diff --git a/packages/services/cdn/ops/site-create/src/lib.rs b/packages/core/services/cdn/ops/site-create/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/site-create/src/lib.rs rename to packages/core/services/cdn/ops/site-create/src/lib.rs diff --git a/packages/services/cdn/ops/site-create/tests/integration.rs b/packages/core/services/cdn/ops/site-create/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/site-create/tests/integration.rs rename to packages/core/services/cdn/ops/site-create/tests/integration.rs diff --git a/packages/services/cdn/ops/site-get/Cargo.toml b/packages/core/services/cdn/ops/site-get/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/site-get/Cargo.toml rename to packages/core/services/cdn/ops/site-get/Cargo.toml diff --git a/packages/services/cdn/ops/site-get/README.md b/packages/core/services/cdn/ops/site-get/README.md similarity index 100% rename from packages/services/cdn/ops/site-get/README.md rename to packages/core/services/cdn/ops/site-get/README.md diff --git a/packages/services/cdn/ops/site-get/src/lib.rs b/packages/core/services/cdn/ops/site-get/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/site-get/src/lib.rs rename to packages/core/services/cdn/ops/site-get/src/lib.rs diff --git a/packages/services/cdn/ops/site-get/tests/integration.rs b/packages/core/services/cdn/ops/site-get/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/site-get/tests/integration.rs rename to packages/core/services/cdn/ops/site-get/tests/integration.rs diff --git a/packages/services/cdn/ops/site-list-for-game/Cargo.toml b/packages/core/services/cdn/ops/site-list-for-game/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/site-list-for-game/Cargo.toml rename to packages/core/services/cdn/ops/site-list-for-game/Cargo.toml diff --git a/packages/services/cdn/ops/site-list-for-game/README.md b/packages/core/services/cdn/ops/site-list-for-game/README.md similarity index 100% rename from packages/services/cdn/ops/site-list-for-game/README.md rename to packages/core/services/cdn/ops/site-list-for-game/README.md diff --git a/packages/services/cdn/ops/site-list-for-game/src/lib.rs b/packages/core/services/cdn/ops/site-list-for-game/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/site-list-for-game/src/lib.rs rename to packages/core/services/cdn/ops/site-list-for-game/src/lib.rs diff --git a/packages/services/cdn/ops/site-list-for-game/tests/integration.rs b/packages/core/services/cdn/ops/site-list-for-game/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/site-list-for-game/tests/integration.rs rename to packages/core/services/cdn/ops/site-list-for-game/tests/integration.rs diff --git a/packages/services/cdn/ops/version-get/Cargo.toml b/packages/core/services/cdn/ops/version-get/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/version-get/Cargo.toml rename to packages/core/services/cdn/ops/version-get/Cargo.toml diff --git a/packages/services/cdn/ops/version-get/README.md b/packages/core/services/cdn/ops/version-get/README.md similarity index 100% rename from packages/services/cdn/ops/version-get/README.md rename to packages/core/services/cdn/ops/version-get/README.md diff --git a/packages/services/cdn/ops/version-get/src/lib.rs b/packages/core/services/cdn/ops/version-get/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/version-get/src/lib.rs rename to packages/core/services/cdn/ops/version-get/src/lib.rs diff --git a/packages/services/cdn/ops/version-get/tests/integration.rs b/packages/core/services/cdn/ops/version-get/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/version-get/tests/integration.rs rename to packages/core/services/cdn/ops/version-get/tests/integration.rs diff --git a/packages/services/cdn/ops/version-prepare/Cargo.toml b/packages/core/services/cdn/ops/version-prepare/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/version-prepare/Cargo.toml rename to packages/core/services/cdn/ops/version-prepare/Cargo.toml diff --git a/packages/services/cdn/ops/version-prepare/README.md b/packages/core/services/cdn/ops/version-prepare/README.md similarity index 100% rename from packages/services/cdn/ops/version-prepare/README.md rename to packages/core/services/cdn/ops/version-prepare/README.md diff --git a/packages/services/cdn/ops/version-prepare/src/lib.rs b/packages/core/services/cdn/ops/version-prepare/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/version-prepare/src/lib.rs rename to packages/core/services/cdn/ops/version-prepare/src/lib.rs diff --git a/packages/services/cdn/ops/version-prepare/tests/integration.rs b/packages/core/services/cdn/ops/version-prepare/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/version-prepare/tests/integration.rs rename to packages/core/services/cdn/ops/version-prepare/tests/integration.rs diff --git a/packages/services/cdn/ops/version-publish/Cargo.toml b/packages/core/services/cdn/ops/version-publish/Cargo.toml similarity index 100% rename from packages/services/cdn/ops/version-publish/Cargo.toml rename to packages/core/services/cdn/ops/version-publish/Cargo.toml diff --git a/packages/services/cdn/ops/version-publish/README.md b/packages/core/services/cdn/ops/version-publish/README.md similarity index 100% rename from packages/services/cdn/ops/version-publish/README.md rename to packages/core/services/cdn/ops/version-publish/README.md diff --git a/packages/services/cdn/ops/version-publish/src/lib.rs b/packages/core/services/cdn/ops/version-publish/src/lib.rs similarity index 100% rename from packages/services/cdn/ops/version-publish/src/lib.rs rename to packages/core/services/cdn/ops/version-publish/src/lib.rs diff --git a/packages/services/cdn/ops/version-publish/tests/integration.rs b/packages/core/services/cdn/ops/version-publish/tests/integration.rs similarity index 100% rename from packages/services/cdn/ops/version-publish/tests/integration.rs rename to packages/core/services/cdn/ops/version-publish/tests/integration.rs diff --git a/packages/services/cdn/proto/msg/ns-config-update.proto b/packages/core/services/cdn/proto/msg/ns-config-update.proto similarity index 100% rename from packages/services/cdn/proto/msg/ns-config-update.proto rename to packages/core/services/cdn/proto/msg/ns-config-update.proto diff --git a/packages/services/cdn/proto/namespace-auth-user-remove.proto b/packages/core/services/cdn/proto/namespace-auth-user-remove.proto similarity index 100% rename from packages/services/cdn/proto/namespace-auth-user-remove.proto rename to packages/core/services/cdn/proto/namespace-auth-user-remove.proto diff --git a/packages/services/cdn/proto/namespace-auth-user-update.proto b/packages/core/services/cdn/proto/namespace-auth-user-update.proto similarity index 100% rename from packages/services/cdn/proto/namespace-auth-user-update.proto rename to packages/core/services/cdn/proto/namespace-auth-user-update.proto diff --git a/packages/services/cdn/proto/namespace-create.proto b/packages/core/services/cdn/proto/namespace-create.proto similarity index 100% rename from packages/services/cdn/proto/namespace-create.proto rename to packages/core/services/cdn/proto/namespace-create.proto diff --git a/packages/services/cdn/proto/namespace-domain-create.proto b/packages/core/services/cdn/proto/namespace-domain-create.proto similarity index 100% rename from packages/services/cdn/proto/namespace-domain-create.proto rename to packages/core/services/cdn/proto/namespace-domain-create.proto diff --git a/packages/services/cdn/proto/namespace-domain-remove.proto b/packages/core/services/cdn/proto/namespace-domain-remove.proto similarity index 100% rename from packages/services/cdn/proto/namespace-domain-remove.proto rename to packages/core/services/cdn/proto/namespace-domain-remove.proto diff --git a/packages/services/cdn/proto/namespace-get.proto b/packages/core/services/cdn/proto/namespace-get.proto similarity index 100% rename from packages/services/cdn/proto/namespace-get.proto rename to packages/core/services/cdn/proto/namespace-get.proto diff --git a/packages/services/cdn/proto/namespace-resolve-domain.proto b/packages/core/services/cdn/proto/namespace-resolve-domain.proto similarity index 100% rename from packages/services/cdn/proto/namespace-resolve-domain.proto rename to packages/core/services/cdn/proto/namespace-resolve-domain.proto diff --git a/packages/services/cdn/proto/ns-auth-type-set.proto b/packages/core/services/cdn/proto/ns-auth-type-set.proto similarity index 100% rename from packages/services/cdn/proto/ns-auth-type-set.proto rename to packages/core/services/cdn/proto/ns-auth-type-set.proto diff --git a/packages/services/cdn/proto/ns-enable-domain-public-auth-set.proto b/packages/core/services/cdn/proto/ns-enable-domain-public-auth-set.proto similarity index 100% rename from packages/services/cdn/proto/ns-enable-domain-public-auth-set.proto rename to packages/core/services/cdn/proto/ns-enable-domain-public-auth-set.proto diff --git a/packages/services/cdn/proto/redis-cdn.proto b/packages/core/services/cdn/proto/redis-cdn.proto similarity index 100% rename from packages/services/cdn/proto/redis-cdn.proto rename to packages/core/services/cdn/proto/redis-cdn.proto diff --git a/packages/services/cdn/proto/site-create.proto b/packages/core/services/cdn/proto/site-create.proto similarity index 100% rename from packages/services/cdn/proto/site-create.proto rename to packages/core/services/cdn/proto/site-create.proto diff --git a/packages/services/cdn/proto/site-get.proto b/packages/core/services/cdn/proto/site-get.proto similarity index 100% rename from packages/services/cdn/proto/site-get.proto rename to packages/core/services/cdn/proto/site-get.proto diff --git a/packages/services/cdn/proto/site-list-for-game.proto b/packages/core/services/cdn/proto/site-list-for-game.proto similarity index 100% rename from packages/services/cdn/proto/site-list-for-game.proto rename to packages/core/services/cdn/proto/site-list-for-game.proto diff --git a/packages/services/cdn/proto/version-get.proto b/packages/core/services/cdn/proto/version-get.proto similarity index 100% rename from packages/services/cdn/proto/version-get.proto rename to packages/core/services/cdn/proto/version-get.proto diff --git a/packages/services/cdn/proto/version-prepare.proto b/packages/core/services/cdn/proto/version-prepare.proto similarity index 100% rename from packages/services/cdn/proto/version-prepare.proto rename to packages/core/services/cdn/proto/version-prepare.proto diff --git a/packages/services/cdn/proto/version-publish.proto b/packages/core/services/cdn/proto/version-publish.proto similarity index 100% rename from packages/services/cdn/proto/version-publish.proto rename to packages/core/services/cdn/proto/version-publish.proto diff --git a/packages/services/cdn/util/Cargo.toml b/packages/core/services/cdn/util/Cargo.toml similarity index 100% rename from packages/services/cdn/util/Cargo.toml rename to packages/core/services/cdn/util/Cargo.toml diff --git a/packages/services/cdn/util/src/key.rs b/packages/core/services/cdn/util/src/key.rs similarity index 100% rename from packages/services/cdn/util/src/key.rs rename to packages/core/services/cdn/util/src/key.rs diff --git a/packages/services/cdn/util/src/lib.rs b/packages/core/services/cdn/util/src/lib.rs similarity index 100% rename from packages/services/cdn/util/src/lib.rs rename to packages/core/services/cdn/util/src/lib.rs diff --git a/packages/services/cdn/worker/Cargo.toml b/packages/core/services/cdn/worker/Cargo.toml similarity index 100% rename from packages/services/cdn/worker/Cargo.toml rename to packages/core/services/cdn/worker/Cargo.toml diff --git a/packages/services/cdn/worker/src/lib.rs b/packages/core/services/cdn/worker/src/lib.rs similarity index 100% rename from packages/services/cdn/worker/src/lib.rs rename to packages/core/services/cdn/worker/src/lib.rs diff --git a/packages/services/cdn/worker/src/workers/mod.rs b/packages/core/services/cdn/worker/src/workers/mod.rs similarity index 100% rename from packages/services/cdn/worker/src/workers/mod.rs rename to packages/core/services/cdn/worker/src/workers/mod.rs diff --git a/packages/services/cdn/worker/src/workers/ns_config_populate.rs b/packages/core/services/cdn/worker/src/workers/ns_config_populate.rs similarity index 100% rename from packages/services/cdn/worker/src/workers/ns_config_populate.rs rename to packages/core/services/cdn/worker/src/workers/ns_config_populate.rs diff --git a/packages/services/cdn/worker/tests/ns_config_populate.rs b/packages/core/services/cdn/worker/tests/ns_config_populate.rs similarity index 100% rename from packages/services/cdn/worker/tests/ns_config_populate.rs rename to packages/core/services/cdn/worker/tests/ns_config_populate.rs diff --git a/packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.down.sql b/packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.down.sql similarity index 100% rename from packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.down.sql rename to packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.down.sql diff --git a/packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.up.sql b/packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.up.sql similarity index 100% rename from packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.up.sql rename to packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230106214500_init.up.sql diff --git a/packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.down.sql b/packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.down.sql similarity index 100% rename from packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.down.sql rename to packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.down.sql diff --git a/packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.up.sql b/packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.up.sql similarity index 100% rename from packages/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.up.sql rename to packages/core/services/cf-custom-hostname/db/cf-custom-hostname/migrations/20230210231742_subscription_id.up.sql diff --git a/packages/services/cf-custom-hostname/ops/get/Cargo.toml b/packages/core/services/cf-custom-hostname/ops/get/Cargo.toml similarity index 100% rename from packages/services/cf-custom-hostname/ops/get/Cargo.toml rename to packages/core/services/cf-custom-hostname/ops/get/Cargo.toml diff --git a/packages/services/cf-custom-hostname/ops/get/README.md b/packages/core/services/cf-custom-hostname/ops/get/README.md similarity index 100% rename from packages/services/cf-custom-hostname/ops/get/README.md rename to packages/core/services/cf-custom-hostname/ops/get/README.md diff --git a/packages/services/cf-custom-hostname/ops/get/src/lib.rs b/packages/core/services/cf-custom-hostname/ops/get/src/lib.rs similarity index 100% rename from packages/services/cf-custom-hostname/ops/get/src/lib.rs rename to packages/core/services/cf-custom-hostname/ops/get/src/lib.rs diff --git a/packages/services/cf-custom-hostname/ops/get/tests/integration.rs b/packages/core/services/cf-custom-hostname/ops/get/tests/integration.rs similarity index 100% rename from packages/services/cf-custom-hostname/ops/get/tests/integration.rs rename to packages/core/services/cf-custom-hostname/ops/get/tests/integration.rs diff --git a/packages/services/cf-custom-hostname/ops/list-for-namespace-id/Cargo.toml b/packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/Cargo.toml similarity index 100% rename from packages/services/cf-custom-hostname/ops/list-for-namespace-id/Cargo.toml rename to packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/Cargo.toml diff --git a/packages/services/cf-custom-hostname/ops/list-for-namespace-id/README.md b/packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/README.md similarity index 100% rename from packages/services/cf-custom-hostname/ops/list-for-namespace-id/README.md rename to packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/README.md diff --git a/packages/services/cf-custom-hostname/ops/list-for-namespace-id/src/lib.rs b/packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/src/lib.rs similarity index 100% rename from packages/services/cf-custom-hostname/ops/list-for-namespace-id/src/lib.rs rename to packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/src/lib.rs diff --git a/packages/services/cf-custom-hostname/ops/list-for-namespace-id/tests/integration.rs b/packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/tests/integration.rs similarity index 100% rename from packages/services/cf-custom-hostname/ops/list-for-namespace-id/tests/integration.rs rename to packages/core/services/cf-custom-hostname/ops/list-for-namespace-id/tests/integration.rs diff --git a/packages/services/cf-custom-hostname/ops/resolve-hostname/Cargo.toml b/packages/core/services/cf-custom-hostname/ops/resolve-hostname/Cargo.toml similarity index 100% rename from packages/services/cf-custom-hostname/ops/resolve-hostname/Cargo.toml rename to packages/core/services/cf-custom-hostname/ops/resolve-hostname/Cargo.toml diff --git a/packages/services/cf-custom-hostname/ops/resolve-hostname/README.md b/packages/core/services/cf-custom-hostname/ops/resolve-hostname/README.md similarity index 100% rename from packages/services/cf-custom-hostname/ops/resolve-hostname/README.md rename to packages/core/services/cf-custom-hostname/ops/resolve-hostname/README.md diff --git a/packages/services/cf-custom-hostname/ops/resolve-hostname/src/lib.rs b/packages/core/services/cf-custom-hostname/ops/resolve-hostname/src/lib.rs similarity index 100% rename from packages/services/cf-custom-hostname/ops/resolve-hostname/src/lib.rs rename to packages/core/services/cf-custom-hostname/ops/resolve-hostname/src/lib.rs diff --git a/packages/services/cf-custom-hostname/ops/resolve-hostname/tests/integration.rs b/packages/core/services/cf-custom-hostname/ops/resolve-hostname/tests/integration.rs similarity index 100% rename from packages/services/cf-custom-hostname/ops/resolve-hostname/tests/integration.rs rename to packages/core/services/cf-custom-hostname/ops/resolve-hostname/tests/integration.rs diff --git a/packages/services/cf-custom-hostname/proto/get.proto b/packages/core/services/cf-custom-hostname/proto/get.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/get.proto rename to packages/core/services/cf-custom-hostname/proto/get.proto diff --git a/packages/services/cf-custom-hostname/proto/list-for-namespace-id.proto b/packages/core/services/cf-custom-hostname/proto/list-for-namespace-id.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/list-for-namespace-id.proto rename to packages/core/services/cf-custom-hostname/proto/list-for-namespace-id.proto diff --git a/packages/services/cf-custom-hostname/proto/msg/create-complete.proto b/packages/core/services/cf-custom-hostname/proto/msg/create-complete.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/msg/create-complete.proto rename to packages/core/services/cf-custom-hostname/proto/msg/create-complete.proto diff --git a/packages/services/cf-custom-hostname/proto/msg/create-fail.proto b/packages/core/services/cf-custom-hostname/proto/msg/create-fail.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/msg/create-fail.proto rename to packages/core/services/cf-custom-hostname/proto/msg/create-fail.proto diff --git a/packages/services/cf-custom-hostname/proto/msg/create.proto b/packages/core/services/cf-custom-hostname/proto/msg/create.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/msg/create.proto rename to packages/core/services/cf-custom-hostname/proto/msg/create.proto diff --git a/packages/services/cf-custom-hostname/proto/msg/delete-complete.proto b/packages/core/services/cf-custom-hostname/proto/msg/delete-complete.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/msg/delete-complete.proto rename to packages/core/services/cf-custom-hostname/proto/msg/delete-complete.proto diff --git a/packages/services/cf-custom-hostname/proto/msg/delete.proto b/packages/core/services/cf-custom-hostname/proto/msg/delete.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/msg/delete.proto rename to packages/core/services/cf-custom-hostname/proto/msg/delete.proto diff --git a/packages/services/cf-custom-hostname/proto/msg/status-set.proto b/packages/core/services/cf-custom-hostname/proto/msg/status-set.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/msg/status-set.proto rename to packages/core/services/cf-custom-hostname/proto/msg/status-set.proto diff --git a/packages/services/cf-custom-hostname/proto/resolve-hostname.proto b/packages/core/services/cf-custom-hostname/proto/resolve-hostname.proto similarity index 100% rename from packages/services/cf-custom-hostname/proto/resolve-hostname.proto rename to packages/core/services/cf-custom-hostname/proto/resolve-hostname.proto diff --git a/packages/services/cf-custom-hostname/worker/Cargo.toml b/packages/core/services/cf-custom-hostname/worker/Cargo.toml similarity index 100% rename from packages/services/cf-custom-hostname/worker/Cargo.toml rename to packages/core/services/cf-custom-hostname/worker/Cargo.toml diff --git a/packages/services/cf-custom-hostname/worker/src/lib.rs b/packages/core/services/cf-custom-hostname/worker/src/lib.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/src/lib.rs rename to packages/core/services/cf-custom-hostname/worker/src/lib.rs diff --git a/packages/services/cf-custom-hostname/worker/src/workers/create.rs b/packages/core/services/cf-custom-hostname/worker/src/workers/create.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/src/workers/create.rs rename to packages/core/services/cf-custom-hostname/worker/src/workers/create.rs diff --git a/packages/services/cf-custom-hostname/worker/src/workers/delete.rs b/packages/core/services/cf-custom-hostname/worker/src/workers/delete.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/src/workers/delete.rs rename to packages/core/services/cf-custom-hostname/worker/src/workers/delete.rs diff --git a/packages/services/cf-custom-hostname/worker/src/workers/mod.rs b/packages/core/services/cf-custom-hostname/worker/src/workers/mod.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/src/workers/mod.rs rename to packages/core/services/cf-custom-hostname/worker/src/workers/mod.rs diff --git a/packages/services/cf-custom-hostname/worker/src/workers/status_set.rs b/packages/core/services/cf-custom-hostname/worker/src/workers/status_set.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/src/workers/status_set.rs rename to packages/core/services/cf-custom-hostname/worker/src/workers/status_set.rs diff --git a/packages/services/cf-custom-hostname/worker/tests/create.rs b/packages/core/services/cf-custom-hostname/worker/tests/create.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/tests/create.rs rename to packages/core/services/cf-custom-hostname/worker/tests/create.rs diff --git a/packages/services/cf-custom-hostname/worker/tests/delete.rs b/packages/core/services/cf-custom-hostname/worker/tests/delete.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/tests/delete.rs rename to packages/core/services/cf-custom-hostname/worker/tests/delete.rs diff --git a/packages/services/cf-custom-hostname/worker/tests/status_set.rs b/packages/core/services/cf-custom-hostname/worker/tests/status_set.rs similarity index 100% rename from packages/services/cf-custom-hostname/worker/tests/status_set.rs rename to packages/core/services/cf-custom-hostname/worker/tests/status_set.rs diff --git a/packages/services/cloud/db/cloud/migrations/20200101000000_init.down.sql b/packages/core/services/cloud/db/cloud/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20200101000000_init.down.sql rename to packages/core/services/cloud/db/cloud/migrations/20200101000000_init.down.sql diff --git a/packages/services/cloud/db/cloud/migrations/20200101000000_init.up.sql b/packages/core/services/cloud/db/cloud/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20200101000000_init.up.sql rename to packages/core/services/cloud/db/cloud/migrations/20200101000000_init.up.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.down.sql b/packages/core/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.down.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.down.sql rename to packages/core/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.down.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.up.sql b/packages/core/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.up.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.up.sql rename to packages/core/services/cloud/db/cloud/migrations/20210610125957_enable_domain_auth.up.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.down.sql b/packages/core/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.down.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.down.sql rename to packages/core/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.down.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.up.sql b/packages/core/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.up.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.up.sql rename to packages/core/services/cloud/db/cloud/migrations/20210618204613_drop_enable_domain_auth.up.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210811032551_game_token_session.down.sql b/packages/core/services/cloud/db/cloud/migrations/20210811032551_game_token_session.down.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210811032551_game_token_session.down.sql rename to packages/core/services/cloud/db/cloud/migrations/20210811032551_game_token_session.down.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210811032551_game_token_session.up.sql b/packages/core/services/cloud/db/cloud/migrations/20210811032551_game_token_session.up.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210811032551_game_token_session.up.sql rename to packages/core/services/cloud/db/cloud/migrations/20210811032551_game_token_session.up.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.down.sql b/packages/core/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.down.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.down.sql rename to packages/core/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.down.sql diff --git a/packages/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.up.sql b/packages/core/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.up.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.up.sql rename to packages/core/services/cloud/db/cloud/migrations/20210811033143_dev_and_ns_tokens.up.sql diff --git a/packages/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.down.sql b/packages/core/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.down.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.down.sql rename to packages/core/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.down.sql diff --git a/packages/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.up.sql b/packages/core/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.up.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.up.sql rename to packages/core/services/cloud/db/cloud/migrations/20231224022033_version_name_reservations.up.sql diff --git a/packages/services/cloud/db/cloud/migrations/20240708222624_game_service_token.down.sql b/packages/core/services/cloud/db/cloud/migrations/20240708222624_game_service_token.down.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20240708222624_game_service_token.down.sql rename to packages/core/services/cloud/db/cloud/migrations/20240708222624_game_service_token.down.sql diff --git a/packages/services/cloud/db/cloud/migrations/20240708222624_game_service_token.up.sql b/packages/core/services/cloud/db/cloud/migrations/20240708222624_game_service_token.up.sql similarity index 100% rename from packages/services/cloud/db/cloud/migrations/20240708222624_game_service_token.up.sql rename to packages/core/services/cloud/db/cloud/migrations/20240708222624_game_service_token.up.sql diff --git a/packages/services/cloud/ops/device-link-create/Cargo.toml b/packages/core/services/cloud/ops/device-link-create/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/device-link-create/Cargo.toml rename to packages/core/services/cloud/ops/device-link-create/Cargo.toml diff --git a/packages/services/cloud/ops/device-link-create/README.md b/packages/core/services/cloud/ops/device-link-create/README.md similarity index 100% rename from packages/services/cloud/ops/device-link-create/README.md rename to packages/core/services/cloud/ops/device-link-create/README.md diff --git a/packages/services/cloud/ops/device-link-create/src/lib.rs b/packages/core/services/cloud/ops/device-link-create/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/device-link-create/src/lib.rs rename to packages/core/services/cloud/ops/device-link-create/src/lib.rs diff --git a/packages/services/cloud/ops/device-link-create/tests/integration.rs b/packages/core/services/cloud/ops/device-link-create/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/device-link-create/tests/integration.rs rename to packages/core/services/cloud/ops/device-link-create/tests/integration.rs diff --git a/packages/services/cloud/ops/game-config-create/Cargo.toml b/packages/core/services/cloud/ops/game-config-create/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/game-config-create/Cargo.toml rename to packages/core/services/cloud/ops/game-config-create/Cargo.toml diff --git a/packages/services/cloud/ops/game-config-create/src/lib.rs b/packages/core/services/cloud/ops/game-config-create/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/game-config-create/src/lib.rs rename to packages/core/services/cloud/ops/game-config-create/src/lib.rs diff --git a/packages/services/cloud/ops/game-config-create/tests/integration.rs b/packages/core/services/cloud/ops/game-config-create/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/game-config-create/tests/integration.rs rename to packages/core/services/cloud/ops/game-config-create/tests/integration.rs diff --git a/packages/services/cloud/ops/game-config-get/Cargo.toml b/packages/core/services/cloud/ops/game-config-get/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/game-config-get/Cargo.toml rename to packages/core/services/cloud/ops/game-config-get/Cargo.toml diff --git a/packages/services/cloud/ops/game-config-get/README.md b/packages/core/services/cloud/ops/game-config-get/README.md similarity index 100% rename from packages/services/cloud/ops/game-config-get/README.md rename to packages/core/services/cloud/ops/game-config-get/README.md diff --git a/packages/services/cloud/ops/game-config-get/src/lib.rs b/packages/core/services/cloud/ops/game-config-get/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/game-config-get/src/lib.rs rename to packages/core/services/cloud/ops/game-config-get/src/lib.rs diff --git a/packages/services/cloud/ops/game-config-get/tests/integration.rs b/packages/core/services/cloud/ops/game-config-get/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/game-config-get/tests/integration.rs rename to packages/core/services/cloud/ops/game-config-get/tests/integration.rs diff --git a/packages/services/cloud/ops/game-token-create/Cargo.toml b/packages/core/services/cloud/ops/game-token-create/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/game-token-create/Cargo.toml rename to packages/core/services/cloud/ops/game-token-create/Cargo.toml diff --git a/packages/services/cloud/ops/game-token-create/README.md b/packages/core/services/cloud/ops/game-token-create/README.md similarity index 100% rename from packages/services/cloud/ops/game-token-create/README.md rename to packages/core/services/cloud/ops/game-token-create/README.md diff --git a/packages/services/cloud/ops/game-token-create/src/lib.rs b/packages/core/services/cloud/ops/game-token-create/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/game-token-create/src/lib.rs rename to packages/core/services/cloud/ops/game-token-create/src/lib.rs diff --git a/packages/services/cloud/ops/game-token-create/tests/integration.rs b/packages/core/services/cloud/ops/game-token-create/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/game-token-create/tests/integration.rs rename to packages/core/services/cloud/ops/game-token-create/tests/integration.rs diff --git a/packages/services/cloud/ops/namespace-create/Cargo.toml b/packages/core/services/cloud/ops/namespace-create/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/namespace-create/Cargo.toml rename to packages/core/services/cloud/ops/namespace-create/Cargo.toml diff --git a/packages/services/cloud/ops/namespace-create/README.md b/packages/core/services/cloud/ops/namespace-create/README.md similarity index 100% rename from packages/services/cloud/ops/namespace-create/README.md rename to packages/core/services/cloud/ops/namespace-create/README.md diff --git a/packages/services/cloud/ops/namespace-create/src/lib.rs b/packages/core/services/cloud/ops/namespace-create/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/namespace-create/src/lib.rs rename to packages/core/services/cloud/ops/namespace-create/src/lib.rs diff --git a/packages/services/cloud/ops/namespace-create/tests/integration.rs b/packages/core/services/cloud/ops/namespace-create/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/namespace-create/tests/integration.rs rename to packages/core/services/cloud/ops/namespace-create/tests/integration.rs diff --git a/packages/services/cloud/ops/namespace-get/Cargo.toml b/packages/core/services/cloud/ops/namespace-get/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/namespace-get/Cargo.toml rename to packages/core/services/cloud/ops/namespace-get/Cargo.toml diff --git a/packages/services/cloud/ops/namespace-get/README.md b/packages/core/services/cloud/ops/namespace-get/README.md similarity index 100% rename from packages/services/cloud/ops/namespace-get/README.md rename to packages/core/services/cloud/ops/namespace-get/README.md diff --git a/packages/services/cloud/ops/namespace-get/src/lib.rs b/packages/core/services/cloud/ops/namespace-get/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/namespace-get/src/lib.rs rename to packages/core/services/cloud/ops/namespace-get/src/lib.rs diff --git a/packages/services/cloud/ops/namespace-get/tests/integration.rs b/packages/core/services/cloud/ops/namespace-get/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/namespace-get/tests/integration.rs rename to packages/core/services/cloud/ops/namespace-get/tests/integration.rs diff --git a/packages/services/cloud/ops/namespace-token-development-create/Cargo.toml b/packages/core/services/cloud/ops/namespace-token-development-create/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/namespace-token-development-create/Cargo.toml rename to packages/core/services/cloud/ops/namespace-token-development-create/Cargo.toml diff --git a/packages/services/cloud/ops/namespace-token-development-create/README.md b/packages/core/services/cloud/ops/namespace-token-development-create/README.md similarity index 100% rename from packages/services/cloud/ops/namespace-token-development-create/README.md rename to packages/core/services/cloud/ops/namespace-token-development-create/README.md diff --git a/packages/services/cloud/ops/namespace-token-development-create/src/lib.rs b/packages/core/services/cloud/ops/namespace-token-development-create/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/namespace-token-development-create/src/lib.rs rename to packages/core/services/cloud/ops/namespace-token-development-create/src/lib.rs diff --git a/packages/services/cloud/ops/namespace-token-development-create/tests/integration.rs b/packages/core/services/cloud/ops/namespace-token-development-create/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/namespace-token-development-create/tests/integration.rs rename to packages/core/services/cloud/ops/namespace-token-development-create/tests/integration.rs diff --git a/packages/services/cloud/ops/namespace-token-public-create/Cargo.toml b/packages/core/services/cloud/ops/namespace-token-public-create/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/namespace-token-public-create/Cargo.toml rename to packages/core/services/cloud/ops/namespace-token-public-create/Cargo.toml diff --git a/packages/services/cloud/ops/namespace-token-public-create/README.md b/packages/core/services/cloud/ops/namespace-token-public-create/README.md similarity index 100% rename from packages/services/cloud/ops/namespace-token-public-create/README.md rename to packages/core/services/cloud/ops/namespace-token-public-create/README.md diff --git a/packages/services/cloud/ops/namespace-token-public-create/src/lib.rs b/packages/core/services/cloud/ops/namespace-token-public-create/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/namespace-token-public-create/src/lib.rs rename to packages/core/services/cloud/ops/namespace-token-public-create/src/lib.rs diff --git a/packages/services/cloud/ops/namespace-token-public-create/tests/integration.rs b/packages/core/services/cloud/ops/namespace-token-public-create/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/namespace-token-public-create/tests/integration.rs rename to packages/core/services/cloud/ops/namespace-token-public-create/tests/integration.rs diff --git a/packages/services/cloud/ops/version-get/Cargo.toml b/packages/core/services/cloud/ops/version-get/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/version-get/Cargo.toml rename to packages/core/services/cloud/ops/version-get/Cargo.toml diff --git a/packages/services/cloud/ops/version-get/README.md b/packages/core/services/cloud/ops/version-get/README.md similarity index 100% rename from packages/services/cloud/ops/version-get/README.md rename to packages/core/services/cloud/ops/version-get/README.md diff --git a/packages/services/cloud/ops/version-get/src/lib.rs b/packages/core/services/cloud/ops/version-get/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/version-get/src/lib.rs rename to packages/core/services/cloud/ops/version-get/src/lib.rs diff --git a/packages/services/cloud/ops/version-get/tests/integration.rs b/packages/core/services/cloud/ops/version-get/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/version-get/tests/integration.rs rename to packages/core/services/cloud/ops/version-get/tests/integration.rs diff --git a/packages/services/cloud/ops/version-publish/Cargo.toml b/packages/core/services/cloud/ops/version-publish/Cargo.toml similarity index 100% rename from packages/services/cloud/ops/version-publish/Cargo.toml rename to packages/core/services/cloud/ops/version-publish/Cargo.toml diff --git a/packages/services/cloud/ops/version-publish/README.md b/packages/core/services/cloud/ops/version-publish/README.md similarity index 100% rename from packages/services/cloud/ops/version-publish/README.md rename to packages/core/services/cloud/ops/version-publish/README.md diff --git a/packages/services/cloud/ops/version-publish/src/lib.rs b/packages/core/services/cloud/ops/version-publish/src/lib.rs similarity index 100% rename from packages/services/cloud/ops/version-publish/src/lib.rs rename to packages/core/services/cloud/ops/version-publish/src/lib.rs diff --git a/packages/services/cloud/ops/version-publish/tests/integration.rs b/packages/core/services/cloud/ops/version-publish/tests/integration.rs similarity index 100% rename from packages/services/cloud/ops/version-publish/tests/integration.rs rename to packages/core/services/cloud/ops/version-publish/tests/integration.rs diff --git a/packages/services/cloud/proto/device-link-create.proto b/packages/core/services/cloud/proto/device-link-create.proto similarity index 100% rename from packages/services/cloud/proto/device-link-create.proto rename to packages/core/services/cloud/proto/device-link-create.proto diff --git a/packages/services/cloud/proto/game-config-create.proto b/packages/core/services/cloud/proto/game-config-create.proto similarity index 100% rename from packages/services/cloud/proto/game-config-create.proto rename to packages/core/services/cloud/proto/game-config-create.proto diff --git a/packages/services/cloud/proto/game-config-get.proto b/packages/core/services/cloud/proto/game-config-get.proto similarity index 100% rename from packages/services/cloud/proto/game-config-get.proto rename to packages/core/services/cloud/proto/game-config-get.proto diff --git a/packages/services/cloud/proto/game-token-create.proto b/packages/core/services/cloud/proto/game-token-create.proto similarity index 100% rename from packages/services/cloud/proto/game-token-create.proto rename to packages/core/services/cloud/proto/game-token-create.proto diff --git a/packages/services/cloud/proto/msg/device-link-complete-complete.proto b/packages/core/services/cloud/proto/msg/device-link-complete-complete.proto similarity index 100% rename from packages/services/cloud/proto/msg/device-link-complete-complete.proto rename to packages/core/services/cloud/proto/msg/device-link-complete-complete.proto diff --git a/packages/services/cloud/proto/msg/device-link-complete.proto b/packages/core/services/cloud/proto/msg/device-link-complete.proto similarity index 100% rename from packages/services/cloud/proto/msg/device-link-complete.proto rename to packages/core/services/cloud/proto/msg/device-link-complete.proto diff --git a/packages/services/cloud/proto/msg/version-name-reserve-complete.proto b/packages/core/services/cloud/proto/msg/version-name-reserve-complete.proto similarity index 100% rename from packages/services/cloud/proto/msg/version-name-reserve-complete.proto rename to packages/core/services/cloud/proto/msg/version-name-reserve-complete.proto diff --git a/packages/services/cloud/proto/msg/version-name-reserve.proto b/packages/core/services/cloud/proto/msg/version-name-reserve.proto similarity index 100% rename from packages/services/cloud/proto/msg/version-name-reserve.proto rename to packages/core/services/cloud/proto/msg/version-name-reserve.proto diff --git a/packages/services/cloud/proto/namespace-create.proto b/packages/core/services/cloud/proto/namespace-create.proto similarity index 100% rename from packages/services/cloud/proto/namespace-create.proto rename to packages/core/services/cloud/proto/namespace-create.proto diff --git a/packages/services/cloud/proto/namespace-get.proto b/packages/core/services/cloud/proto/namespace-get.proto similarity index 100% rename from packages/services/cloud/proto/namespace-get.proto rename to packages/core/services/cloud/proto/namespace-get.proto diff --git a/packages/services/cloud/proto/namespace-token-development-create.proto b/packages/core/services/cloud/proto/namespace-token-development-create.proto similarity index 100% rename from packages/services/cloud/proto/namespace-token-development-create.proto rename to packages/core/services/cloud/proto/namespace-token-development-create.proto diff --git a/packages/services/cloud/proto/namespace-token-public-create.proto b/packages/core/services/cloud/proto/namespace-token-public-create.proto similarity index 100% rename from packages/services/cloud/proto/namespace-token-public-create.proto rename to packages/core/services/cloud/proto/namespace-token-public-create.proto diff --git a/packages/services/cloud/proto/version-get.proto b/packages/core/services/cloud/proto/version-get.proto similarity index 100% rename from packages/services/cloud/proto/version-get.proto rename to packages/core/services/cloud/proto/version-get.proto diff --git a/packages/services/cloud/proto/version-publish.proto b/packages/core/services/cloud/proto/version-publish.proto similarity index 100% rename from packages/services/cloud/proto/version-publish.proto rename to packages/core/services/cloud/proto/version-publish.proto diff --git a/packages/services/cloud/standalone/default-create/Cargo.toml b/packages/core/services/cloud/standalone/default-create/Cargo.toml similarity index 100% rename from packages/services/cloud/standalone/default-create/Cargo.toml rename to packages/core/services/cloud/standalone/default-create/Cargo.toml diff --git a/packages/core/services/cloud/standalone/default-create/src/lib.rs b/packages/core/services/cloud/standalone/default-create/src/lib.rs new file mode 100644 index 0000000000..51c13452c7 --- /dev/null +++ b/packages/core/services/cloud/standalone/default-create/src/lib.rs @@ -0,0 +1,184 @@ +use ::ds; +use chirp_workflow::prelude::*; +use rivet_operation::prelude::proto::backend::{self, pkg::*}; +use util::dev_defaults; + +#[tracing::instrument(skip_all)] +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let client = + chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cloud-default-create"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "cloud-default-create", + ) + .await?; + + ensure!( + ctx.config().server()?.rivet.auth.access_kind + == rivet_config::config::rivet::AccessKind::Development, + "access kind must be development" + ); + + wait_for_consumers(&ctx).await?; + + // Create user + let user_resolve_res = ctx + .op(::user::ops::resolve_display_name::Input { + display_name: dev_defaults::USER_NAME.into(), + }) + .await?; + let user_id = if let Some(user_id) = user_resolve_res.user_id { + user_id + } else { + let user_id = Uuid::new_v4(); + msg!([ctx] user::msg::create(user_id) -> user::msg::create_complete { + user_id: Some(user_id.into()), + namespace_id: None, + display_name: Some(dev_defaults::USER_NAME.into()), + }) + .await?; + + user_id + }; + + // Create team + let team_resolve_res = op!([ctx] team_resolve_display_name { + display_names: vec![dev_defaults::TEAM_NAME.into()], + }) + .await?; + let team_id = if let Some(team) = team_resolve_res.teams.first() { + unwrap!(team.team_id).as_uuid() + } else { + let team_id = Uuid::new_v4(); + msg!([ctx] team::msg::create(team_id) -> team::msg::create_complete { + team_id: Some(team_id.into()), + display_name: dev_defaults::TEAM_NAME.to_string(), + owner_user_id: Some(user_id.into()) + }) + .await?; + + team_id + }; + + // Create game + let game_resolve_res = op!([ctx] game_resolve_name_id { + name_ids: vec![dev_defaults::PROJECT_SLUG.into()], + }) + .await?; + let game_id = if let Some(existing) = game_resolve_res.games.first() { + tracing::debug!("default game already exists"); + unwrap!(existing.game_id).as_uuid() + } else { + let create_game_res = op!([ctx] game_create { + name_id: dev_defaults::PROJECT_SLUG.into(), + display_name: dev_defaults::PROJECT_NAME.into(), + developer_team_id: Some(team_id.into()), + creator_user_id: Some(user_id.into()), + }) + .await?; + + op!([ctx] cloud_game_config_create { + game_id: create_game_res.game_id, + }) + .await?; + + let game_id = unwrap_ref!(create_game_res.game_id).as_uuid(); + + ctx.op(ds::ops::game_config::upsert::Input { + game_id, + host_networking_enabled: Some(true), + root_user_enabled: Some(true), + ..Default::default() + }) + .await?; + + game_id + }; + + // Create namespace + let ns_resolve_res = op!([ctx] game_namespace_resolve_name_id { + game_id: Some(game_id.into()), + name_ids: vec![dev_defaults::ENVIRONMENT_SLUG.into()], + }) + .await?; + if ns_resolve_res.namespaces.is_empty() { + // Publish default version + let publish_res = op!([ctx] cloud_version_publish { + game_id: Some(game_id.into()), + display_name: "0.0.1".into(), + config: Some(backend::cloud::VersionConfig { + cdn: None, + matchmaker: None, + }), + creator_user_id: Some(user_id.into()), + }) + .await?; + let version_id = unwrap_ref!(publish_res.version_id).as_uuid(); + + // Create namespace + let create_ns_res = op!([ctx] game_namespace_create { + game_id: Some(game_id.into()), + display_name: dev_defaults::ENVIRONMENT_NAME.into(), + version_id: Some(version_id.into()), + name_id: dev_defaults::ENVIRONMENT_SLUG.into(), + }) + .await?; + let namespace_id = unwrap_ref!(create_ns_res.namespace_id).as_uuid(); + + op!([ctx] cloud_namespace_create { + namespace_id: Some(namespace_id.into()), + }) + .await?; + } + + Ok(()) +} + +/// Keys that must have consumers before proceeding. +const REQUIRED_CONSUMER_KEYS: &[&str] = &[ + "{topic:msg-user-create}:topic", + "{topic:msg-team-create}:topic", +]; + +/// HACK: Wait until there has been a consumer created before publishing messages. This is +/// required because `chirp-worker` must create the consumers before they can start accepting +/// messages. +async fn wait_for_consumers(ctx: &StandaloneCtx) -> GlobalResult<()> { + let mut interval = tokio::time::interval(std::time::Duration::from_millis(100)); + 'poll: loop { + interval.tick().await; + + for key in REQUIRED_CONSUMER_KEYS { + // Check if the stream key exists + let exists: bool = redis::cmd("EXISTS") + .arg(&key) + .query_async(&mut ctx.redis_chirp().await?) + .await?; + + if !exists { + tracing::debug!(?key, "key does not exist"); + continue 'poll; + } + + // Check if there are consumers for the stream + let groups: Vec = redis::cmd("XINFO") + .arg("GROUPS") + .arg(&key) + .query_async(&mut ctx.redis_chirp().await?) + .await?; + + if groups.is_empty() { + tracing::debug!(?key, "missing consumers"); + continue 'poll; + } + } + + tracing::debug!("all consumers found"); + break; + } + + Ok(()) +} diff --git a/packages/services/cloud/worker/Cargo.toml b/packages/core/services/cloud/worker/Cargo.toml similarity index 100% rename from packages/services/cloud/worker/Cargo.toml rename to packages/core/services/cloud/worker/Cargo.toml diff --git a/packages/services/cloud/worker/src/lib.rs b/packages/core/services/cloud/worker/src/lib.rs similarity index 100% rename from packages/services/cloud/worker/src/lib.rs rename to packages/core/services/cloud/worker/src/lib.rs diff --git a/packages/services/cloud/worker/src/workers/device_link_complete.rs b/packages/core/services/cloud/worker/src/workers/device_link_complete.rs similarity index 100% rename from packages/services/cloud/worker/src/workers/device_link_complete.rs rename to packages/core/services/cloud/worker/src/workers/device_link_complete.rs diff --git a/packages/services/cloud/worker/src/workers/mod.rs b/packages/core/services/cloud/worker/src/workers/mod.rs similarity index 100% rename from packages/services/cloud/worker/src/workers/mod.rs rename to packages/core/services/cloud/worker/src/workers/mod.rs diff --git a/packages/services/cloud/worker/src/workers/version_name_reserve.rs b/packages/core/services/cloud/worker/src/workers/version_name_reserve.rs similarity index 100% rename from packages/services/cloud/worker/src/workers/version_name_reserve.rs rename to packages/core/services/cloud/worker/src/workers/version_name_reserve.rs diff --git a/packages/services/cloud/worker/tests/device_link_complete.rs b/packages/core/services/cloud/worker/tests/device_link_complete.rs similarity index 100% rename from packages/services/cloud/worker/tests/device_link_complete.rs rename to packages/core/services/cloud/worker/tests/device_link_complete.rs diff --git a/packages/services/cloud/worker/tests/version_name_reserve.rs b/packages/core/services/cloud/worker/tests/version_name_reserve.rs similarity index 100% rename from packages/services/cloud/worker/tests/version_name_reserve.rs rename to packages/core/services/cloud/worker/tests/version_name_reserve.rs diff --git a/packages/core/services/cluster/Cargo.toml b/packages/core/services/cluster/Cargo.toml new file mode 100644 index 0000000000..88d918450f --- /dev/null +++ b/packages/core/services/cluster/Cargo.toml @@ -0,0 +1,50 @@ +[package] +name = "cluster" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +acme-lib = "0.9" +anyhow = "1.0" +chirp-workflow.workspace = true +chrono = "0.4" +cloudflare.workspace = true +http = "0.2" +include_dir = "0.7.3" +indoc = "1.0" +lazy_static = "1.4" +nomad-util.workspace = true +rand = "0.8" +reqwest = { version = "0.11", features = ["json"] } +rivet-api.workspace = true +rivet-metrics.workspace = true +rivet-operation.workspace = true +rivet-runtime.workspace = true +s3-util.workspace = true +serde = { version = "1.0.198", features = ["derive"] } +serde_urlencoded = "0.7.0" +ssh2 = "0.9.4" +strum = { version = "0.24", features = ["derive"] } +trust-dns-resolver = { version = "0.23.2", features = ["dns-over-native-tls"] } + +ip-info.workspace = true +linode.workspace = true +server-spec.workspace = true +pegboard.workspace = true +token-create.workspace = true +rivet-config.workspace = true +ipnet = "2.10.1" + +[dependencies.nomad_client] +workspace = true + +[dependencies.sqlx] +workspace = true +features = [ "json", "ipnetwork" ] + +[build-dependencies] +merkle_hash = "3.6" +hex = "0.4" +tokio = { version = "1.40", features = ["full"] } diff --git a/packages/services/cluster/build.rs b/packages/core/services/cluster/build.rs similarity index 100% rename from packages/services/cluster/build.rs rename to packages/core/services/cluster/build.rs diff --git a/packages/services/cluster/db/cluster/migrations/20231201000927_init.down.sql b/packages/core/services/cluster/db/cluster/migrations/20231201000927_init.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20231201000927_init.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20231201000927_init.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20231201000927_init.up.sql b/packages/core/services/cluster/db/cluster/migrations/20231201000927_init.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20231201000927_init.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20231201000927_init.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240627160310_servers_index.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240627160310_servers_index.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240627160310_servers_index.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240627160310_servers_index.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240627160310_servers_index.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240627160310_servers_index.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240627160310_servers_index.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240627160310_servers_index.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240701225245_add_json.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240701225245_add_json.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240701225245_add_json.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240701225245_add_json.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240701225245_add_json.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240701225245_add_json.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240701225245_add_json.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240701225245_add_json.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240719222520_delete_unused_tables.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240806214514_provider_backfill.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240809225012_add_idx.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240809225012_add_idx.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240809225012_add_idx.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240809225012_add_idx.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240809225012_add_idx.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240809225012_add_idx.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240809225012_add_idx.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240809225012_add_idx.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240917002101_remove_json.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240917002101_remove_json.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240917002101_remove_json.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240917002101_remove_json.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240917002101_remove_json.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240917002101_remove_json.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240917002101_remove_json.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240917002101_remove_json.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.down.sql b/packages/core/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.up.sql b/packages/core/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20240917005355_add_pegboard.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.down.sql b/packages/core/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.up.sql b/packages/core/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20241206205211_add_guard_public_hostname.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.down.sql b/packages/core/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.up.sql b/packages/core/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20241213054159_add_actor_wildcard_dns_addr.up.sql diff --git a/packages/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.down.sql b/packages/core/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.down.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.down.sql rename to packages/core/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.down.sql diff --git a/packages/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.up.sql b/packages/core/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.up.sql similarity index 100% rename from packages/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.up.sql rename to packages/core/services/cluster/db/cluster/migrations/20250107005643_add_tunnel_tls.up.sql diff --git a/packages/services/cluster/src/lib.rs b/packages/core/services/cluster/src/lib.rs similarity index 100% rename from packages/services/cluster/src/lib.rs rename to packages/core/services/cluster/src/lib.rs diff --git a/packages/services/cluster/src/metrics.rs b/packages/core/services/cluster/src/metrics.rs similarity index 100% rename from packages/services/cluster/src/metrics.rs rename to packages/core/services/cluster/src/metrics.rs diff --git a/packages/services/cluster/src/ops/datacenter/get.rs b/packages/core/services/cluster/src/ops/datacenter/get.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/get.rs rename to packages/core/services/cluster/src/ops/datacenter/get.rs diff --git a/packages/services/cluster/src/ops/datacenter/list.rs b/packages/core/services/cluster/src/ops/datacenter/list.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/list.rs rename to packages/core/services/cluster/src/ops/datacenter/list.rs diff --git a/packages/services/cluster/src/ops/datacenter/location_get.rs b/packages/core/services/cluster/src/ops/datacenter/location_get.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/location_get.rs rename to packages/core/services/cluster/src/ops/datacenter/location_get.rs diff --git a/packages/services/cluster/src/ops/datacenter/mod.rs b/packages/core/services/cluster/src/ops/datacenter/mod.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/mod.rs rename to packages/core/services/cluster/src/ops/datacenter/mod.rs diff --git a/packages/services/cluster/src/ops/datacenter/resolve_for_name_id.rs b/packages/core/services/cluster/src/ops/datacenter/resolve_for_name_id.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/resolve_for_name_id.rs rename to packages/core/services/cluster/src/ops/datacenter/resolve_for_name_id.rs diff --git a/packages/services/cluster/src/ops/datacenter/server_spec_get.rs b/packages/core/services/cluster/src/ops/datacenter/server_spec_get.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/server_spec_get.rs rename to packages/core/services/cluster/src/ops/datacenter/server_spec_get.rs diff --git a/packages/services/cluster/src/ops/datacenter/tls_get.rs b/packages/core/services/cluster/src/ops/datacenter/tls_get.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/tls_get.rs rename to packages/core/services/cluster/src/ops/datacenter/tls_get.rs diff --git a/packages/services/cluster/src/ops/datacenter/topology_get.rs b/packages/core/services/cluster/src/ops/datacenter/topology_get.rs similarity index 100% rename from packages/services/cluster/src/ops/datacenter/topology_get.rs rename to packages/core/services/cluster/src/ops/datacenter/topology_get.rs diff --git a/packages/services/cluster/src/ops/get.rs b/packages/core/services/cluster/src/ops/get.rs similarity index 100% rename from packages/services/cluster/src/ops/get.rs rename to packages/core/services/cluster/src/ops/get.rs diff --git a/packages/services/cluster/src/ops/get_for_game.rs b/packages/core/services/cluster/src/ops/get_for_game.rs similarity index 100% rename from packages/services/cluster/src/ops/get_for_game.rs rename to packages/core/services/cluster/src/ops/get_for_game.rs diff --git a/packages/services/cluster/src/ops/list.rs b/packages/core/services/cluster/src/ops/list.rs similarity index 100% rename from packages/services/cluster/src/ops/list.rs rename to packages/core/services/cluster/src/ops/list.rs diff --git a/packages/services/cluster/src/ops/mod.rs b/packages/core/services/cluster/src/ops/mod.rs similarity index 100% rename from packages/services/cluster/src/ops/mod.rs rename to packages/core/services/cluster/src/ops/mod.rs diff --git a/packages/services/cluster/src/ops/resolve_for_name_id.rs b/packages/core/services/cluster/src/ops/resolve_for_name_id.rs similarity index 100% rename from packages/services/cluster/src/ops/resolve_for_name_id.rs rename to packages/core/services/cluster/src/ops/resolve_for_name_id.rs diff --git a/packages/services/cluster/src/ops/server/destroy_with_filter.rs b/packages/core/services/cluster/src/ops/server/destroy_with_filter.rs similarity index 100% rename from packages/services/cluster/src/ops/server/destroy_with_filter.rs rename to packages/core/services/cluster/src/ops/server/destroy_with_filter.rs diff --git a/packages/services/cluster/src/ops/server/get.rs b/packages/core/services/cluster/src/ops/server/get.rs similarity index 100% rename from packages/services/cluster/src/ops/server/get.rs rename to packages/core/services/cluster/src/ops/server/get.rs diff --git a/packages/services/cluster/src/ops/server/list.rs b/packages/core/services/cluster/src/ops/server/list.rs similarity index 100% rename from packages/services/cluster/src/ops/server/list.rs rename to packages/core/services/cluster/src/ops/server/list.rs diff --git a/packages/services/cluster/src/ops/server/lost_list.rs b/packages/core/services/cluster/src/ops/server/lost_list.rs similarity index 100% rename from packages/services/cluster/src/ops/server/lost_list.rs rename to packages/core/services/cluster/src/ops/server/lost_list.rs diff --git a/packages/services/cluster/src/ops/server/mod.rs b/packages/core/services/cluster/src/ops/server/mod.rs similarity index 100% rename from packages/services/cluster/src/ops/server/mod.rs rename to packages/core/services/cluster/src/ops/server/mod.rs diff --git a/packages/services/cluster/src/ops/server/prune_with_filter.rs b/packages/core/services/cluster/src/ops/server/prune_with_filter.rs similarity index 100% rename from packages/services/cluster/src/ops/server/prune_with_filter.rs rename to packages/core/services/cluster/src/ops/server/prune_with_filter.rs diff --git a/packages/services/cluster/src/ops/server/resolve_for_ip.rs b/packages/core/services/cluster/src/ops/server/resolve_for_ip.rs similarity index 100% rename from packages/services/cluster/src/ops/server/resolve_for_ip.rs rename to packages/core/services/cluster/src/ops/server/resolve_for_ip.rs diff --git a/packages/services/cluster/src/ops/server/taint_with_filter.rs b/packages/core/services/cluster/src/ops/server/taint_with_filter.rs similarity index 100% rename from packages/services/cluster/src/ops/server/taint_with_filter.rs rename to packages/core/services/cluster/src/ops/server/taint_with_filter.rs diff --git a/packages/services/cluster/src/ops/tunnel/mod.rs b/packages/core/services/cluster/src/ops/tunnel/mod.rs similarity index 100% rename from packages/services/cluster/src/ops/tunnel/mod.rs rename to packages/core/services/cluster/src/ops/tunnel/mod.rs diff --git a/packages/services/cluster/src/ops/tunnel/tls_get.rs b/packages/core/services/cluster/src/ops/tunnel/tls_get.rs similarity index 100% rename from packages/services/cluster/src/ops/tunnel/tls_get.rs rename to packages/core/services/cluster/src/ops/tunnel/tls_get.rs diff --git a/packages/services/cluster/src/types.rs b/packages/core/services/cluster/src/types.rs similarity index 100% rename from packages/services/cluster/src/types.rs rename to packages/core/services/cluster/src/types.rs diff --git a/packages/core/services/cluster/src/util/mod.rs b/packages/core/services/cluster/src/util/mod.rs new file mode 100644 index 0000000000..9e3c7f72bb --- /dev/null +++ b/packages/core/services/cluster/src/util/mod.rs @@ -0,0 +1,195 @@ +use chirp_workflow::prelude::*; +use cloudflare::{endpoints as cf, framework as cf_framework}; + +use crate::types::PoolType; + +pub mod test; + +// Use the hash of the server install script in the image variant so that if the install scripts are updated +// we won't be using the old image anymore +pub const INSTALL_SCRIPT_HASH: &str = include_str!(concat!(env!("OUT_DIR"), "/hash.txt")); + +/// TTL of the token written to servers. +pub const SERVER_TOKEN_TTL: i64 = util::duration::days(30 * 12 * 5); + +pub fn server_name( + config: &rivet_config::Config, + provider_datacenter_id: &str, + pool_type: PoolType, + server_id: Uuid, +) -> GlobalResult { + let ns = &config.server()?.rivet.namespace; + + Ok(format!( + "{ns}-{provider_datacenter_id}-{pool_type}-{server_id}" + )) +} + +pub(crate) async fn cf_client( + config: &rivet_config::Config, + cf_token: Option<&str>, +) -> GlobalResult { + // Create CF client + let cf_token = if let Some(cf_token) = cf_token { + cf_token.to_string() + } else { + config.server()?.cloudflare()?.auth_token.read().clone() + }; + let client = cf_framework::async_api::Client::new( + cf_framework::auth::Credentials::UserAuthToken { token: cf_token }, + Default::default(), + cf_framework::Environment::Production, + )?; + + Ok(client) +} + +/// Tries to create a DNS record. If a 400 error is received, it deletes the existing record and tries again. +pub(crate) async fn create_dns_record( + client: &cf_framework::async_api::Client, + cf_token: &str, + zone_id: &str, + record_name: &str, + content: cf::dns::DnsContent, +) -> GlobalResult { + tracing::info!(%record_name, "creating dns record"); + + let create_record_res = client + .request(&cf::dns::CreateDnsRecord { + zone_identifier: zone_id, + params: cf::dns::CreateDnsRecordParams { + name: record_name, + content: content.clone(), + proxied: Some(false), + ttl: Some(60), + priority: None, + }, + }) + .await; + + match create_record_res { + Ok(create_record_res) => Ok(create_record_res.result.id), + // Try to delete record on error + Err(err) => { + if let cf_framework::response::ApiFailure::Error( + http::status::StatusCode::BAD_REQUEST, + _, + ) = err + { + tracing::warn!(%record_name, "failed to create dns record, trying to delete"); + + let dns_type = match content { + cf::dns::DnsContent::A { .. } => "A", + cf::dns::DnsContent::AAAA { .. } => "AAAA", + cf::dns::DnsContent::CNAME { .. } => "CNAME", + cf::dns::DnsContent::NS { .. } => "NS", + cf::dns::DnsContent::MX { .. } => "MX", + cf::dns::DnsContent::TXT { .. } => "TXT", + cf::dns::DnsContent::SRV { .. } => "SRV", + }; + + // Find record to delete + let list_records_res = match content { + cf::dns::DnsContent::A { .. } => { + get_dns_record(cf_token, zone_id, record_name, dns_type).await? + } + cf::dns::DnsContent::TXT { .. } => { + // Get DNS record with content comparison + client + .request(&cf::dns::ListDnsRecords { + zone_identifier: zone_id, + params: cf::dns::ListDnsRecordsParams { + record_type: Some(content.clone()), + name: Some(record_name.to_string()), + ..Default::default() + }, + }) + .await? + .result + .into_iter() + .next() + } + _ => { + unimplemented!("must configure whether to search for records via content vs no content for this DNS record type"); + } + }; + + if let Some(record) = list_records_res { + delete_dns_record(client, zone_id, &record.id).await?; + tracing::info!(%record_name, "deleted dns record, trying again"); + + // Second try + let create_record_res2 = client + .request(&cf::dns::CreateDnsRecord { + zone_identifier: zone_id, + params: cf::dns::CreateDnsRecordParams { + name: record_name, + content, + proxied: Some(false), + ttl: Some(60), + priority: None, + }, + }) + .await?; + + return Ok(create_record_res2.result.id); + } else { + tracing::warn!(%record_name, "failed to get matching dns record"); + } + } + + // Throw original error + Err(err.into()) + } + } +} + +pub(crate) async fn delete_dns_record( + client: &cf_framework::async_api::Client, + zone_id: &str, + record_id: &str, +) -> GlobalResult<()> { + tracing::info!(%record_id, "deleting dns record"); + + client + .request(&cf::dns::DeleteDnsRecord { + zone_identifier: zone_id, + identifier: record_id, + }) + .await?; + + Ok(()) +} + +/// Fetches a dns record by name and type, not content. +async fn get_dns_record( + cf_token: &str, + zone_id: &str, + record_name: &str, + dns_type: &str, +) -> GlobalResult> { + let list_records_res = reqwest::Client::new() + .get(format!( + "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" + )) + .bearer_auth(cf_token) + .query(&[("name", record_name), ("type", dns_type)]) + .send() + .await?; + + let status = list_records_res.status(); + if status.is_success() { + match list_records_res + .json::>>() + .await + { + Ok(api_resp) => Ok(api_resp.result.into_iter().next()), + Err(e) => Err(cf_framework::response::ApiFailure::Invalid(e).into()), + } + } else { + let parsed: Result = + list_records_res.json().await; + let errors = parsed.unwrap_or_default(); + Err(cf_framework::response::ApiFailure::Error(status, errors).into()) + } +} diff --git a/packages/services/cluster/src/util/test.rs b/packages/core/services/cluster/src/util/test.rs similarity index 100% rename from packages/services/cluster/src/util/test.rs rename to packages/core/services/cluster/src/util/test.rs diff --git a/packages/services/cluster/src/workflows/cluster.rs b/packages/core/services/cluster/src/workflows/cluster.rs similarity index 100% rename from packages/services/cluster/src/workflows/cluster.rs rename to packages/core/services/cluster/src/workflows/cluster.rs diff --git a/packages/services/cluster/src/workflows/datacenter/mod.rs b/packages/core/services/cluster/src/workflows/datacenter/mod.rs similarity index 100% rename from packages/services/cluster/src/workflows/datacenter/mod.rs rename to packages/core/services/cluster/src/workflows/datacenter/mod.rs diff --git a/packages/services/cluster/src/workflows/datacenter/scale.rs b/packages/core/services/cluster/src/workflows/datacenter/scale.rs similarity index 98% rename from packages/services/cluster/src/workflows/datacenter/scale.rs rename to packages/core/services/cluster/src/workflows/datacenter/scale.rs index 317dd55217..6b81142202 100644 --- a/packages/services/cluster/src/workflows/datacenter/scale.rs +++ b/packages/core/services/cluster/src/workflows/datacenter/scale.rs @@ -157,15 +157,16 @@ impl Action { .await?; } _ => { - ctx.v(2).workflow(crate::workflows::server::Input2 { - datacenter_id, - server_id, - pool_type, - tags: Vec::new(), - }) - .tag("server_id", server_id) - .dispatch() - .await?; + ctx.v(2) + .workflow(crate::workflows::server::Input2 { + datacenter_id, + server_id, + pool_type, + tags: Vec::new(), + }) + .tag("server_id", server_id) + .dispatch() + .await?; } }, Action::Drain { server_id } => { diff --git a/packages/services/cluster/src/workflows/datacenter/tls_issue.rs b/packages/core/services/cluster/src/workflows/datacenter/tls_issue.rs similarity index 100% rename from packages/services/cluster/src/workflows/datacenter/tls_issue.rs rename to packages/core/services/cluster/src/workflows/datacenter/tls_issue.rs diff --git a/packages/services/cluster/src/workflows/mod.rs b/packages/core/services/cluster/src/workflows/mod.rs similarity index 100% rename from packages/services/cluster/src/workflows/mod.rs rename to packages/core/services/cluster/src/workflows/mod.rs diff --git a/packages/services/cluster/src/workflows/prebake.rs b/packages/core/services/cluster/src/workflows/prebake.rs similarity index 100% rename from packages/services/cluster/src/workflows/prebake.rs rename to packages/core/services/cluster/src/workflows/prebake.rs diff --git a/packages/services/cluster/src/workflows/server/dns_create.rs b/packages/core/services/cluster/src/workflows/server/dns_create.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/dns_create.rs rename to packages/core/services/cluster/src/workflows/server/dns_create.rs diff --git a/packages/services/cluster/src/workflows/server/dns_delete.rs b/packages/core/services/cluster/src/workflows/server/dns_delete.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/dns_delete.rs rename to packages/core/services/cluster/src/workflows/server/dns_delete.rs diff --git a/packages/core/services/cluster/src/workflows/server/drain.rs b/packages/core/services/cluster/src/workflows/server/drain.rs new file mode 100644 index 0000000000..90458b3b7f --- /dev/null +++ b/packages/core/services/cluster/src/workflows/server/drain.rs @@ -0,0 +1,240 @@ +use chirp_workflow::prelude::*; +use nomad_client::apis::nodes_api; +use rivet_api::{ + apis::{ + configuration::Configuration, + edge_intercom_pegboard_api::edge_intercom_pegboard_toggle_client_drain, + }, + models, +}; +use rivet_operation::prelude::proto::backend::pkg::*; + +use crate::types::PoolType; + +#[derive(Debug, Serialize, Deserialize)] +pub(crate) struct Input { + pub datacenter_id: Uuid, + pub server_id: Uuid, + pub pool_type: PoolType, +} + +#[workflow] +pub(crate) async fn cluster_server_drain(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + let drain_timeout = ctx + .activity(GetDrainTimeoutInput { + datacenter_id: input.datacenter_id, + pool_type: input.pool_type, + }) + .await?; + + match input.pool_type { + PoolType::Job => { + ctx.activity(DrainNodeInput { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + drain_timeout, + }) + .await?; + } + PoolType::Gg => { + ctx.signal(crate::workflows::server::DnsDelete {}) + .tag("server_id", input.server_id) + .send() + .await?; + } + PoolType::Pegboard | PoolType::PegboardIsolate => { + ctx.activity(DrainPegboardAndDsInput { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + drain_timeout, + }) + .await?; + } + PoolType::Ats | PoolType::Fdb => {} + } + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +pub(crate) struct GetDrainTimeoutInput { + pub datacenter_id: Uuid, + pub pool_type: PoolType, +} + +#[activity(GetDrainTimeout)] +pub(crate) async fn get_drain_timeout( + ctx: &ActivityCtx, + input: &GetDrainTimeoutInput, +) -> GlobalResult { + let dcs_res = ctx + .op(crate::ops::datacenter::get::Input { + datacenter_ids: vec![input.datacenter_id], + }) + .await?; + let dc = unwrap!(dcs_res.datacenters.into_iter().next()); + + let pool = unwrap!( + dc.pools.iter().find(|p| p.pool_type == input.pool_type), + "datacenter does not have this type of pool configured" + ); + + Ok(pool.drain_timeout) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct DrainNodeInput { + datacenter_id: Uuid, + server_id: Uuid, + drain_timeout: u64, +} + +#[activity(DrainNode)] +async fn drain_node(ctx: &ActivityCtx, input: &DrainNodeInput) -> GlobalResult<()> { + // Fetch drain ts from db to make the drain wf consistent if called more than once (in the event that + // nomad/pb register after the drain started and this wf needs to be run again). + let (drain_ts, nomad_node_id) = sql_fetch_one!( + [ctx, (Option, Option,)] + " + SELECT drain_ts, nomad_node_id + FROM db_cluster.servers + WHERE server_id = $1 + ", + input.server_id, + ) + .await?; + + let Some(nomad_node_id) = nomad_node_id else { + return Ok(()); + }; + + let nomad_config = nomad_util::new_build_config(ctx.config())?; + let res = nodes_api::update_node_eligibility( + &nomad_config, + &nomad_node_id, + nomad_client::models::NodeUpdateEligibilityRequest { + eligibility: Some("ineligible".to_string()), + node_id: Some(nomad_node_id.clone()), + }, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ) + .await; + + // Catch "node not found" error + if let Err(nomad_client::apis::Error::ResponseError(nomad_client::apis::ResponseContent { + content, + .. + })) = res + { + if content == "node not found" { + tracing::warn!("node does not exist, not draining"); + } + } + + // Prevent new matchmaker requests to the node running on this server + msg!([ctx] mm::msg::nomad_node_closed_set(&nomad_node_id) { + datacenter_id: Some(input.datacenter_id.into()), + nomad_node_id: nomad_node_id.clone(), + is_closed: true, + }) + .await?; + + let drain_timeout = (drain_ts.unwrap_or_else(util::timestamp::now) as u64 + + input.drain_timeout) + .saturating_sub(util::timestamp::now() as u64); + + msg!([ctx] job_run::msg::drain_all(&nomad_node_id) { + nomad_node_id: nomad_node_id.clone(), + drain_timeout, + }) + .await?; + + msg!([ctx] ds::msg::drain_all(&nomad_node_id) { + nomad_node_id: Some(nomad_node_id.clone()), + pegboard_client_id: None, + drain_timeout, + }) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct DrainPegboardAndDsInput { + server_id: Uuid, + datacenter_id: Uuid, + drain_timeout: u64, +} + +#[activity(DrainPegboardAndDs)] +async fn drain_pegboard_and_ds( + ctx: &ActivityCtx, + input: &DrainPegboardAndDsInput, +) -> GlobalResult<()> { + // Fetch drain ts from db to make the drain wf consistent if called more than once (in the event that + // nomad/pb register after the drain started and this wf needs to be run again). + let (drain_ts, pegboard_client_id) = sql_fetch_one!( + [ctx, (Option, Option)] + " + SELECT drain_ts, pegboard_client_id + FROM db_cluster.servers + WHERE server_id = $1 + ", + input.server_id, + ) + .await?; + + let Some(pegboard_client_id) = pegboard_client_id else { + return Ok(()); + }; + + let drain_complete_ts = + drain_ts.unwrap_or_else(util::timestamp::now) + input.drain_timeout as i64; + + let config = Configuration { + base_path: todo!("build url from dc id or name id"), + bearer_access_token: todo!(), + ..Default::default() + }; + + edge_intercom_pegboard_toggle_client_drain( + &config, + &pegboard_client_id.to_string(), + models::EdgeIntercomPegboardToggleClientDrainRequest { + draining: true, + drain_complete_ts: Some(util::timestamp::to_string(drain_complete_ts)?), + }, + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct DrainDynamicServersInput { + pegboard_client_id: Uuid, + drain_timeout: u64, +} + +#[activity(DrainDynamicServers)] +async fn drain_dynamic_servers( + ctx: &ActivityCtx, + input: &DrainDynamicServersInput, +) -> GlobalResult<()> { + msg!([ctx] ds::msg::drain_all(&input.pegboard_client_id) { + nomad_node_id: None, + pegboard_client_id: Some(input.pegboard_client_id.into()), + drain_timeout: input.drain_timeout, + }) + .await?; + + Ok(()) +} diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/fdb.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/fdb.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/fdb.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/fdb.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/mod.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/mod.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/mod.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/mod.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/nomad.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/nomad.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/nomad.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/nomad.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/ok_server.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/ok_server.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/ok_server.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/ok_server.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/pegboard.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/pegboard.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/pegboard.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/pegboard.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/rivet.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/rivet.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/rivet.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/rivet.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/s3.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/s3.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/s3.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/s3.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/traefik.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/traefik.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/traefik.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/traefik.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/traffic_server.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/traffic_server.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/traffic_server.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/traffic_server.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/components/vector.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/components/vector.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/components/vector.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/components/vector.rs diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/cni_plugins.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/cni_plugins.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/cni_plugins.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/cni_plugins.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/docker.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/docker.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/docker.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/docker.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/fdb_configure.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/fdb_configure.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/fdb_configure.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/fdb_configure.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/fdb_install.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/fdb_install.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/fdb_install.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/fdb_install.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/fdp_prometheus_proxy.py b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/fdp_prometheus_proxy.py similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/fdp_prometheus_proxy.py rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/fdp_prometheus_proxy.py diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/node_exporter.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/node_exporter.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/node_exporter.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/node_exporter.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/nomad_configure.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/nomad_configure.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/nomad_configure.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/nomad_configure.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/nomad_install.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/nomad_install.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/nomad_install.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/nomad_install.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/ok_server.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/ok_server.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/ok_server.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/ok_server.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_configure.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_configure.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_configure.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_configure.sh index 493d8caafe..cf8784d5c0 100644 --- a/packages/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_configure.sh +++ b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_configure.sh @@ -350,10 +350,10 @@ ExecStart=/usr/local/bin/rivet-client -c /etc/rivet-client/config.json Restart=always RestartSec=2 -# High CPU priority -CPUSchedulingPriority=90 # Real time service CPUSchedulingPolicy=fifo +# High CPU priority +CPUSchedulingPriority=90 # Prevent killing from system OOM OOMScoreAdjust=-1000 # Kill main process, not children diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_install.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_install.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_install.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/pegboard_install.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_create_hook.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_create_hook.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_create_hook.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_create_hook.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_gg_tls.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_gg_tls.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_gg_tls.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_gg_tls.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_info.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_info.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_info.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_info.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_tunnel_tls.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_tunnel_tls.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_tunnel_tls.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/rivet_fetch_tunnel_tls.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/sysctl.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/sysctl.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/sysctl.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/sysctl.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traefik.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traefik.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traefik.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traefik.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traefik_instance.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traefik_instance.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traefik_instance.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traefik_instance.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/cache.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/cache.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/cache.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/cache.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/hosting.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/hosting.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/hosting.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/hosting.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ip_allow.yaml b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ip_allow.yaml similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ip_allow.yaml rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ip_allow.yaml diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/logging.yaml b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/logging.yaml similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/logging.yaml rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/logging.yaml diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/parent.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/parent.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/parent.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/parent.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/plugin.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/plugin.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/plugin.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/plugin.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/records.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/records.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/records.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/records.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/sni.yaml b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/sni.yaml similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/sni.yaml rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/sni.yaml diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/socks.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/socks.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/socks.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/socks.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/splitdns.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/splitdns.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/splitdns.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/splitdns.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ssl_multicert.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ssl_multicert.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ssl_multicert.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/ssl_multicert.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strategies.yaml b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strategies.yaml similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strategies.yaml rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strategies.yaml diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strip_headers.lua b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strip_headers.lua similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strip_headers.lua rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/strip_headers.lua diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/trafficserver-release b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/trafficserver-release similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/trafficserver-release rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/trafficserver-release diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/volume.config b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/volume.config similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/volume.config rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server/etc/volume.config diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_configure.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_configure.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_configure.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_configure.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_install.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_install.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_install.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/traffic_server_install.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/vector_configure.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/vector_configure.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/vector_configure.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/vector_configure.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/files/vector_install.sh b/packages/core/services/cluster/src/workflows/server/install/install_scripts/files/vector_install.sh similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/files/vector_install.sh rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/files/vector_install.sh diff --git a/packages/services/cluster/src/workflows/server/install/install_scripts/mod.rs b/packages/core/services/cluster/src/workflows/server/install/install_scripts/mod.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/install_scripts/mod.rs rename to packages/core/services/cluster/src/workflows/server/install/install_scripts/mod.rs diff --git a/packages/services/cluster/src/workflows/server/install/mod.rs b/packages/core/services/cluster/src/workflows/server/install/mod.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/install/mod.rs rename to packages/core/services/cluster/src/workflows/server/install/mod.rs diff --git a/packages/core/services/cluster/src/workflows/server/mod.rs b/packages/core/services/cluster/src/workflows/server/mod.rs new file mode 100644 index 0000000000..d4804832f8 --- /dev/null +++ b/packages/core/services/cluster/src/workflows/server/mod.rs @@ -0,0 +1,1088 @@ +use chirp_workflow::prelude::*; +use futures_util::FutureExt; +use ipnet::Ipv4Net; +use rand::Rng; +use serde_json::json; +use std::{ + convert::TryInto, + net::{IpAddr, Ipv4Addr}, +}; + +pub(crate) mod dns_create; +pub(crate) mod dns_delete; +pub(crate) mod drain; +pub(crate) mod install; +pub(crate) mod undrain; + +use crate::{ + metrics, + types::{Pool, PoolType, Provider}, +}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub(crate) struct Input2 { + pub datacenter_id: Uuid, + pub server_id: Uuid, + pub pool_type: PoolType, + pub tags: Vec, +} + +#[workflow(Workflow2)] +pub(crate) async fn cluster_server2(ctx: &mut WorkflowCtx, input: &Input2) -> GlobalResult<()> { + let (dc, provider_server_workflow_id) = provision_server(ctx, input).await?; + + let has_dns = ctx + .loope(State::default(), |ctx, state| { + let input = input.clone(); + let dc = dc.clone(); + + async move { lifecycle(ctx, &input, &dc, state).await }.boxed() + }) + .await?; + + cleanup( + ctx, + input, + &dc.provider, + provider_server_workflow_id, + has_dns, + ) + .await?; + + Ok(()) +} + +/// Old cluster_server workflow before loop state was implemented. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub(crate) struct Input { + pub datacenter_id: Uuid, + pub server_id: Uuid, + pub pool_type: PoolType, + pub tags: Vec, +} + +impl From for Input2 { + fn from(input: Input) -> Self { + Input2 { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + pool_type: input.pool_type, + tags: input.tags, + } + } +} + +#[workflow] +pub(crate) async fn cluster_server(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + let input = input.clone().into(); + let (dc, provider_server_workflow_id) = provision_server(ctx, &input).await?; + + // NOTE: This loop has side effects (for state) so we do not use `ctx.repeat` + let mut state = State::default(); + loop { + match lifecycle(ctx, &input, &dc, &mut state).await? { + Loop::Continue => {} + Loop::Break(_) => break, + } + } + + cleanup( + ctx, + &input, + &dc.provider, + provider_server_workflow_id, + state.has_dns, + ) + .await?; + + Ok(()) +} + +async fn provision_server( + ctx: &mut WorkflowCtx, + input: &Input2, +) -> GlobalResult<(GetDcOutput, Uuid)> { + let dc = ctx + .activity(GetDcInput { + datacenter_id: input.datacenter_id, + }) + .await?; + + let pool = unwrap!( + dc.pools.iter().find(|p| p.pool_type == input.pool_type), + "datacenter does not have this type of pool configured" + ); + + // Get a new vlan ip + let vlan_ip = ctx + .activity(GetVlanIpInput { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + pool_type: input.pool_type, + }) + .await?; + + let custom_image = if dc.prebakes_enabled { + let image_res = ctx + .activity(GetPrebakeInput { + datacenter_id: input.datacenter_id, + pool_type: input.pool_type, + provider: dc.provider, + }) + .await?; + + // Start custom image creation process + if image_res.updated { + ctx.workflow(crate::workflows::prebake::Input { + datacenter_id: input.datacenter_id, + provider: dc.provider, + pool_type: input.pool_type, + install_script_hash: crate::util::INSTALL_SCRIPT_HASH.to_string(), + tags: Vec::new(), + }) + .dispatch() + .await?; + } + + image_res.custom_image + } else { + None + }; + let already_installed = custom_image.is_some(); + + // Iterate through list of hardware and attempt to schedule a server. Goes to the next + // hardware if an error happens during provisioning + let mut hardware_list = pool.hardware.iter(); + let provision_res = loop { + // List exhausted + let Some(hardware) = hardware_list.next() else { + break None; + }; + + tracing::info!( + "attempting to provision hardware: {}", + hardware.provider_hardware, + ); + + match dc.provider { + Provider::Manual => { + // Noop + } + Provider::Linode => { + let workflow_id = ctx + .workflow(linode::workflows::server::Input { + server_id: input.server_id, + provider_datacenter_id: dc.provider_datacenter_id.clone(), + custom_image: custom_image.clone(), + api_token: dc.provider_api_token.clone(), + hardware: hardware.provider_hardware.clone(), + firewall_preset: match input.pool_type { + PoolType::Job | PoolType::Pegboard | PoolType::PegboardIsolate => { + linode::types::FirewallPreset::Job + } + PoolType::Gg => linode::types::FirewallPreset::Gg, + PoolType::Ats => linode::types::FirewallPreset::Ats, + PoolType::Fdb => linode::types::FirewallPreset::Fdb, + }, + vlan_ip: Some(vlan_ip.ip()), + vlan_ip_net: Some(vlan_ip.ip_net()), + tags: input.tags.clone(), + }) + .tag("server_id", input.server_id) + .dispatch() + .await?; + + match ctx.listen::().await? { + Linode::ProvisionComplete(sig) => { + break Some(ProvisionResponse { + provider_server_workflow_id: workflow_id, + provider_server_id: sig.linode_id.to_string(), + provider_hardware: hardware.provider_hardware.clone(), + public_ip: sig.public_ip, + }); + } + Linode::ProvisionFailed(_) => { + tracing::error!( + provision_workflow_id=%workflow_id, + server_id=?input.server_id, + "failed to provision server" + ); + } + } + } + } + }; + + let provider_server_workflow_id = if let Some(provision_res) = provision_res { + let provider_server_workflow_id = provision_res.provider_server_workflow_id; + let public_ip = provision_res.public_ip; + + ctx.activity(UpdateDbInput { + server_id: input.server_id, + pool_type: input.pool_type, + cluster_id: dc.cluster_id, + datacenter_id: dc.datacenter_id, + provider_datacenter_id: dc.provider_datacenter_id.clone(), + datacenter_name_id: dc.name_id.clone(), + provider_server_id: provision_res.provider_server_id.clone(), + provider_hardware: provision_res.provider_hardware.clone(), + public_ip: provision_res.public_ip, + already_installed, + }) + .await?; + + // Install components on server + if !already_installed { + let install_res = ctx + .workflow(install::Input { + datacenter_id: input.datacenter_id, + server_id: Some(input.server_id), + public_ip, + pool_type: input.pool_type, + initialize_immediately: true, + }) + .output() + .await; + + // If the server failed all attempts to install, clean it up + if let Err(err) = ctx.catch_unrecoverable(install_res)? { + tracing::warn!(?err, "failed installing server, cleaning up"); + + ctx.activity(MarkDestroyedInput { + server_id: input.server_id, + }) + .await?; + + cleanup(ctx, input, &dc.provider, provider_server_workflow_id, false).await?; + + return Err(err); + } + } + + // Scale to get rid of tainted servers + ctx.signal(crate::workflows::datacenter::Scale {}) + .tag("datacenter_id", input.datacenter_id) + .send() + .await?; + + match input.pool_type { + // Create DNS record because the server is already installed + PoolType::Gg => { + ctx.workflow(dns_create::Input { + server_id: input.server_id, + }) + .output() + .await?; + } + // Update tags to include pegboard client_id (currently the same as the server_id) + PoolType::Pegboard | PoolType::PegboardIsolate => { + ctx.activity(UpdateTagsInput { + server_id: input.server_id, + client_id: input.server_id, + }) + .await?; + } + _ => {} + } + + provider_server_workflow_id + } else { + tracing::error!( + server_id=?input.server_id, + hardware_options=?pool.hardware.len(), + "failed all attempts to provision server" + ); + + // Mark as destroyed (cleanup already occurred in the linode server workflow) + ctx.activity(MarkDestroyedInput { + server_id: input.server_id, + }) + .await?; + + // Scale to bring up a new server to take this server's place + ctx.signal(crate::workflows::datacenter::Scale {}) + .tag("datacenter_id", input.datacenter_id) + .send() + .await?; + + bail!("failed all attempts to provision server"); + }; + + Ok((dc, provider_server_workflow_id)) +} + +async fn lifecycle( + ctx: &mut WorkflowCtx, + input: &Input2, + dc: &GetDcOutput, + state: &mut State, +) -> GlobalResult> { + match state.run(ctx).await? { + Main::DnsCreate(_) => { + ctx.workflow(dns_create::Input { + server_id: input.server_id, + }) + .output() + .await?; + } + Main::DnsDelete(_) => { + ctx.workflow(dns_delete::Input { + server_id: input.server_id, + }) + .output() + .await?; + } + Main::NomadRegistered(sig) => { + ctx.activity(SetNomadNodeIdInput { + server_id: input.server_id, + cluster_id: dc.cluster_id, + datacenter_id: dc.datacenter_id, + provider_datacenter_id: dc.provider_datacenter_id.clone(), + datacenter_name_id: dc.name_id.clone(), + node_id: sig.node_id, + }) + .await?; + + // Registered after drain started, run drain again + if state.draining { + ctx.v(2) + .workflow(drain::Input { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + pool_type: input.pool_type, + }) + .output() + .await?; + } + + // Scale to get rid of tainted servers + ctx.signal(crate::workflows::datacenter::Scale {}) + .tag("datacenter_id", input.datacenter_id) + .send() + .await?; + } + Main::_PegboardRegistered(_) => { + // Deprecated + } + Main::PegboardRegistered(sig) => { + ctx.activity(SetPegboardClientIdInput { + server_id: input.server_id, + cluster_id: dc.cluster_id, + datacenter_id: dc.datacenter_id, + provider_datacenter_id: dc.provider_datacenter_id.clone(), + datacenter_name_id: dc.name_id.clone(), + client_id: sig.client_id, + }) + .await?; + + // Registered after drain started, run drain again + if state.draining { + ctx.v(2) + .workflow(drain::Input { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + pool_type: input.pool_type, + }) + .output() + .await?; + } + + // Scale to get rid of tainted servers + ctx.signal(crate::workflows::datacenter::Scale {}) + .tag("datacenter_id", input.datacenter_id) + .send() + .await?; + } + Main::Drain(_) => { + ctx.workflow(drain::Input { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + pool_type: input.pool_type, + }) + .output() + .await?; + } + Main::Undrain(_) => { + ctx.workflow(undrain::Input { + datacenter_id: input.datacenter_id, + server_id: input.server_id, + pool_type: input.pool_type, + }) + .output() + .await?; + } + Main::Taint(_) => {} // Only for state + Main::Destroy(_) => { + if let PoolType::Fdb = input.pool_type { + bail!("you cant kill fdb you stupid chud"); + } + + return Ok(Loop::Break(state.has_dns)); + } + } + + Ok(Loop::Continue) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +pub(crate) struct GetDcInput { + pub datacenter_id: Uuid, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub(crate) struct GetDcOutput { + pub datacenter_id: Uuid, + pub cluster_id: Uuid, + pub name_id: String, + pub provider: Provider, + pub provider_datacenter_id: String, + pub provider_api_token: Option, + pub pools: Vec, + pub prebakes_enabled: bool, +} + +#[activity(GetDc)] +pub(crate) async fn get_dc(ctx: &ActivityCtx, input: &GetDcInput) -> GlobalResult { + let dcs_res = ctx + .op(crate::ops::datacenter::get::Input { + datacenter_ids: vec![input.datacenter_id], + }) + .await?; + let dc = unwrap!(dcs_res.datacenters.into_iter().next()); + + Ok(GetDcOutput { + pools: dc.pools, + prebakes_enabled: dc.prebakes_enabled, + provider: dc.provider, + provider_datacenter_id: dc.provider_datacenter_id, + provider_api_token: dc.provider_api_token, + cluster_id: dc.cluster_id, + datacenter_id: dc.datacenter_id, + name_id: dc.name_id, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct GetVlanIpInput { + datacenter_id: Uuid, + server_id: Uuid, + pool_type: PoolType, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +#[serde(untagged)] +enum GetVlanIpOutput { + Current { + vlan_ip: Ipv4Addr, + vlan_ip_net: ipnet::Ipv4Net, + }, + Deprecated(Ipv4Addr), +} + +impl GetVlanIpOutput { + fn ip(&self) -> Ipv4Addr { + match self { + Self::Current { vlan_ip, .. } => *vlan_ip, + Self::Deprecated(vlan_ip) => *vlan_ip, + } + } + + fn ip_net(&self) -> Ipv4Net { + match self { + Self::Current { vlan_ip_net, .. } => *vlan_ip_net, + Self::Deprecated(_) => { + // Fall back to default VLAN IP + Ipv4Net::new(Ipv4Addr::new(10, 0, 0, 0), 16).unwrap() + } + } + } +} + +#[activity(GetVlanIp)] +async fn get_vlan_ip(ctx: &ActivityCtx, input: &GetVlanIpInput) -> GlobalResult { + let provision_config = &ctx.config().server()?.rivet.provision()?; + + // Find next available vlan index + let mut vlan_addr_range = match input.pool_type { + PoolType::Job | PoolType::Pegboard | PoolType::PegboardIsolate => { + provision_config.pools.pegboard.vlan_addr_range() + } + PoolType::Gg => provision_config.pools.gg.vlan_addr_range(), + PoolType::Ats => provision_config.pools.ats.vlan_addr_range(), + PoolType::Fdb => provision_config.pools.fdb.vlan_addr_range(), + }; + let max_idx = vlan_addr_range.count() as i64; + + // HACK: We should be storing `FirewallPreset` in the database and comparing against that instead of pool + // type since certain pool types share vlan ip networks. This converts the actual pool type to the pool + // types that share the ip network. + let shared_net_pool_types = match input.pool_type { + PoolType::Job | PoolType::Pegboard | PoolType::PegboardIsolate => { + vec![ + PoolType::Job as i32, + PoolType::Pegboard as i32, + PoolType::PegboardIsolate as i32, + ] + } + PoolType::Gg => vec![PoolType::Gg as i32], + PoolType::Ats => vec![PoolType::Ats as i32], + PoolType::Fdb => vec![PoolType::Fdb as i32], + }; + + let (network_idx,) = sql_fetch_one!( + [ctx, (i64,)] + " + WITH + get_next_network_idx AS ( + SELECT mod(idx + $1, $2) AS idx + FROM generate_series(0, $2) AS s(idx) + WHERE NOT EXISTS ( + SELECT 1 + FROM db_cluster.servers + WHERE + pool_type = ANY($3) AND + -- Technically this should check all servers where their datacenter's provider and + -- provider_datacenter_id are the same because VLAN is separated by irl datacenter + -- but this is good enough + datacenter_id = $4 AND + network_idx = mod(idx + $1, $2) AND + cloud_destroy_ts IS NULL + ) + LIMIT 1 + ), + update_network_idx AS ( + UPDATE db_cluster.servers + SET network_idx = (SELECT idx FROM get_next_network_idx) + WHERE server_id = $5 + RETURNING 1 + ) + SELECT idx FROM get_next_network_idx + ", + // Choose a random index to start from for better index spread + rand::thread_rng().gen_range(0i64..max_idx), + max_idx, + shared_net_pool_types, + input.datacenter_id, + input.server_id, + ) + .await?; + + let vlan_ip = unwrap!(vlan_addr_range.nth(network_idx.try_into()?)); + + // Write vlan ip + sql_execute!( + [ctx] + " + UPDATE db_cluster.servers + SET vlan_ip = $2 + WHERE server_id = $1 + ", + input.server_id, + IpAddr::V4(vlan_ip), + ) + .await?; + + Ok(GetVlanIpOutput::Current { + vlan_ip, + vlan_ip_net: provision_config.vlan_ip_net(), + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct GetPrebakeInput { + datacenter_id: Uuid, + pool_type: PoolType, + provider: Provider, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct GetPrebakeOutput { + custom_image: Option, + updated: bool, +} + +#[activity(GetPrebake)] +async fn get_prebake(ctx: &ActivityCtx, input: &GetPrebakeInput) -> GlobalResult { + // Get the custom image id for this server, or insert a record and start creating one + let (image_id, updated) = sql_fetch_one!( + [ctx, (Option, bool)] + " + WITH + updated AS ( + INSERT INTO db_cluster.server_images2 AS s ( + provider, install_hash, datacenter_id, pool_type, create_ts + ) + VALUES ($1, $2, $3, $4, $5) + ON CONFLICT (provider, install_hash, datacenter_id, pool_type) DO UPDATE + SET + provider_image_id = NULL, + create_ts = $5 + WHERE s.create_ts < $6 + RETURNING provider, install_hash, datacenter_id, pool_type + ), + selected AS ( + SELECT provider, install_hash, datacenter_id, pool_type, provider_image_id + FROM db_cluster.server_images2 + WHERE + provider = $1 AND + install_hash = $2 AND + datacenter_id = $3 AND + pool_type = $4 + ) + SELECT + selected.provider_image_id, + -- Primary key is not null + (updated.provider IS NOT NULL) AS updated + FROM selected + FULL OUTER JOIN updated + ON true + ", + input.provider as i32, + crate::util::INSTALL_SCRIPT_HASH, + input.datacenter_id, + input.pool_type as i32, + util::timestamp::now(), + // 5 month expiration + util::timestamp::now() - util::duration::days(5 * 30), + ) + .await?; + + // Updated is true if this specific sql call either reset (if expired) or inserted the row + Ok(GetPrebakeOutput { + custom_image: if updated { None } else { image_id }, + updated, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ProvisionResponse { + provider_server_workflow_id: Uuid, + provider_server_id: String, + provider_hardware: String, + public_ip: Ipv4Addr, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateDbInput { + server_id: Uuid, + pool_type: PoolType, + cluster_id: Uuid, + datacenter_id: Uuid, + provider_datacenter_id: String, + datacenter_name_id: String, + provider_server_id: String, + provider_hardware: String, + public_ip: Ipv4Addr, + already_installed: bool, +} + +#[activity(UpdateDb)] +async fn update_db(ctx: &ActivityCtx, input: &UpdateDbInput) -> GlobalResult<()> { + let provision_complete_ts = util::timestamp::now(); + + let (create_ts,) = sql_fetch_one!( + [ctx, (i64,)] + " + UPDATE db_cluster.servers + SET + provider_server_id = $2, + provider_hardware = $3, + public_ip = $4, + provision_complete_ts = $5, + install_complete_ts = $6 + WHERE server_id = $1 + RETURNING create_ts + ", + input.server_id, + &input.provider_server_id, + &input.provider_hardware, + IpAddr::V4(input.public_ip), + provision_complete_ts, + if input.already_installed { + Some(provision_complete_ts) + } else { + None + }, + ) + .await?; + + // Insert metrics + let dt = (provision_complete_ts - create_ts) as f64 / 1000.0; + + metrics::PROVISION_DURATION + .with_label_values(&[ + &input.cluster_id.to_string(), + &input.datacenter_id.to_string(), + &input.provider_datacenter_id, + &input.datacenter_name_id, + &input.pool_type.to_string(), + ]) + .observe(dt); + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateTagsInput { + server_id: Uuid, + client_id: Uuid, +} + +#[activity(UpdateTags)] +async fn update_tags(ctx: &ActivityCtx, input: &UpdateTagsInput) -> GlobalResult<()> { + ctx.update_workflow_tags(&json!({ + "server_id": input.server_id, + "client_id": input.client_id, + })) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct MarkDestroyedInput { + server_id: Uuid, +} + +#[activity(MarkDestroyed)] +async fn mark_destroyed(ctx: &ActivityCtx, input: &MarkDestroyedInput) -> GlobalResult<()> { + // Mark servers for destruction in db + sql_execute!( + [ctx] + " + UPDATE db_cluster.servers + SET cloud_destroy_ts = $2 + WHERE server_id = $1 + ", + input.server_id, + util::timestamp::now(), + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetNomadNodeIdInput { + server_id: Uuid, + cluster_id: Uuid, + datacenter_id: Uuid, + provider_datacenter_id: String, + datacenter_name_id: String, + node_id: String, +} + +#[activity(SetNomadNodeId)] +async fn set_nomad_node_id(ctx: &ActivityCtx, input: &SetNomadNodeIdInput) -> GlobalResult<()> { + let nomad_join_ts = util::timestamp::now(); + + let (old_nomad_node_id, install_complete_ts) = sql_fetch_one!( + [ctx, (Option, Option)] + " + UPDATE db_cluster.servers + SET + nomad_node_id = $2, + nomad_join_ts = $3 + WHERE server_id = $1 + RETURNING nomad_node_id, install_complete_ts + ", + input.server_id, + &input.node_id, + nomad_join_ts, + ) + .await?; + + if let Some(old_nomad_node_id) = old_nomad_node_id { + tracing::warn!(%old_nomad_node_id, "nomad node id was already set"); + } + + // Insert metrics + if let Some(install_complete_ts) = install_complete_ts { + let dt = (nomad_join_ts - install_complete_ts) as f64 / 1000.0; + + metrics::NOMAD_JOIN_DURATION + .with_label_values(&[ + &input.cluster_id.to_string(), + &input.datacenter_id.to_string(), + &input.provider_datacenter_id, + &input.datacenter_name_id, + ]) + .observe(dt); + } else { + tracing::warn!("missing install_complete_ts"); + } + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetPegboardClientIdInput { + server_id: Uuid, + cluster_id: Uuid, + datacenter_id: Uuid, + provider_datacenter_id: String, + datacenter_name_id: String, + client_id: Uuid, +} + +#[activity(SetPegboardClientId)] +async fn set_pegboard_client_id( + ctx: &ActivityCtx, + input: &SetPegboardClientIdInput, +) -> GlobalResult<()> { + let pegboard_join_ts = util::timestamp::now(); + + let (old_pegboard_client_id, install_complete_ts) = sql_fetch_one!( + [ctx, (Option, Option)] + " + UPDATE db_cluster.servers + SET + pegboard_client_id = $2 + WHERE server_id = $1 + RETURNING pegboard_client_id, install_complete_ts + ", + input.server_id, + &input.client_id, + ) + .await?; + + if let Some(old_pegboard_client_id) = old_pegboard_client_id { + tracing::warn!(%old_pegboard_client_id, "pegboard client id was already set"); + } + + // Insert metrics + if let Some(install_complete_ts) = install_complete_ts { + let dt = (pegboard_join_ts - install_complete_ts) as f64 / 1000.0; + + metrics::PEGBOARD_JOIN_DURATION + .with_label_values(&[ + &input.cluster_id.to_string(), + &input.datacenter_id.to_string(), + &input.provider_datacenter_id, + &input.datacenter_name_id, + ]) + .observe(dt); + } else { + tracing::warn!("missing install_complete_ts"); + } + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetDrainCompleteInput { + server_id: Uuid, +} + +#[activity(SetDrainComplete)] +async fn set_drain_complete(ctx: &ActivityCtx, input: &SetDrainCompleteInput) -> GlobalResult<()> { + // Set as completed draining. Will be destroyed by `cluster-datacenter-scale` + sql_execute!( + [ctx] + " + UPDATE db_cluster.servers + SET drain_complete_ts = $2 + WHERE server_id = $1 + ", + input.server_id, + util::timestamp::now(), + ) + .await?; + + Ok(()) +} + +async fn cleanup( + ctx: &mut WorkflowCtx, + input: &Input2, + provider: &Provider, + provider_server_workflow_id: Uuid, + cleanup_dns: bool, +) -> GlobalResult<()> { + if cleanup_dns { + // Cleanup DNS + if let PoolType::Gg = input.pool_type { + ctx.workflow(dns_delete::Input { + server_id: input.server_id, + }) + .output() + .await?; + } + } + + // Cleanup server + match provider { + Provider::Manual => { + // Noop + } + Provider::Linode => { + tracing::info!(server_id=?input.server_id, "destroying linode server"); + + ctx.signal(linode::workflows::server::Destroy {}) + .to_workflow_id(provider_server_workflow_id) + .send() + .await?; + + // Wait for workflow to complete + ctx.wait_for_workflow::( + provider_server_workflow_id, + ) + .await?; + } + } + + Ok(()) +} + +/// Finite state machine for handling server updates. +#[derive(Debug, Serialize, Deserialize)] +struct State { + draining: bool, + has_dns: bool, + is_tainted: bool, +} + +impl State { + async fn run(&mut self, ctx: &mut WorkflowCtx) -> GlobalResult
{ + let signal = ctx.custom_listener(self).await?; + + // Update state + self.transition(&signal); + + Ok(signal) + } + + fn transition(&mut self, signal: &Main) { + match signal { + Main::Drain(_) => self.draining = true, + Main::Undrain(_) => self.draining = false, + Main::Taint(_) => self.is_tainted = true, + Main::DnsCreate(_) => self.has_dns = true, + Main::DnsDelete(_) => self.has_dns = false, + _ => {} + } + } +} + +#[async_trait::async_trait] +impl CustomListener for State { + type Output = Main; + + /* ==== BINARY CONDITION DECOMPOSITION ==== + + // state + drain dns taint // available actions + 0 0 0 // drain, taint, dns create + 0 0 1 // drain + 0 1 0 // drain, taint, dns delete + 0 1 1 // drain, dns delete + 1 0 0 // undrain, taint, nomad drain complete + 1 0 1 // nomad drain complete + 1 1 0 // undrain, taint, dns delete, nomad drain complete + 1 1 1 // dns delete, nomad drain complete + + destroy // always + drain // if !drain + undrain // if drain && !taint + taint // if !taint + dns create // if !dns && !drain && !taint + dns delete // if dns + nomad registered // always + nomad drain complete // if drain + */ + async fn listen(&self, ctx: &mut ListenCtx) -> WorkflowResult { + // Determine which signals to listen to + let mut signals = vec![ + Destroy::NAME, + NomadRegistered::NAME, + PegboardRegistered::NAME, + ]; + + if !self.draining { + signals.push(Drain::NAME); + } else if !self.is_tainted { + signals.push(Undrain::NAME); + } + + if !self.is_tainted { + signals.push(Taint::NAME); + } + + if !self.has_dns && !self.draining && !self.is_tainted { + signals.push(DnsCreate::NAME); + } + + if self.has_dns { + signals.push(DnsDelete::NAME); + } + + let row = ctx.listen_any(&signals).await?; + Self::parse(&row.signal_name, &row.body) + } + + fn parse(name: &str, body: &serde_json::value::RawValue) -> WorkflowResult { + Main::parse(name, body) + } +} + +impl Default for State { + fn default() -> Self { + State { + draining: false, + has_dns: true, + is_tainted: false, + } + } +} + +// Listen for linode provision signals +type ProvisionComplete = linode::workflows::server::ProvisionComplete; +type ProvisionFailed = linode::workflows::server::ProvisionFailed; +join_signal!(pub(crate) Linode { + ProvisionComplete, + ProvisionFailed, +}); + +#[signal("cluster_server_drain")] +pub struct Drain {} + +#[signal("cluster_server_undrain")] +pub struct Undrain {} + +#[signal("cluster_server_taint")] +pub struct Taint {} + +#[signal("cluster_server_dns_create")] +pub struct DnsCreate {} + +#[signal("cluster_server_dns_delete")] +pub struct DnsDelete {} + +#[signal("cluster_server_destroy")] +pub struct Destroy {} + +#[signal("cluster_server_nomad_registered")] +pub struct NomadRegistered { + pub node_id: String, +} + +#[signal("cluster_server_pegboard_registered")] +pub struct PegboardRegistered { + pub client_id: Uuid, +} + +/// Deprecated. +#[signal("pegboard_client_registered")] +struct _PegboardRegistered {} + +join_signal!(Main { + Drain, + Undrain, + Taint, + DnsCreate, + DnsDelete, + Destroy, + NomadRegistered, + _PegboardRegistered, + PegboardRegistered, +}); diff --git a/packages/services/cluster/src/workflows/server/undrain.rs b/packages/core/services/cluster/src/workflows/server/undrain.rs similarity index 100% rename from packages/services/cluster/src/workflows/server/undrain.rs rename to packages/core/services/cluster/src/workflows/server/undrain.rs diff --git a/packages/services/cluster/standalone/datacenter-tls-renew/Cargo.toml b/packages/core/services/cluster/standalone/datacenter-tls-renew/Cargo.toml similarity index 100% rename from packages/services/cluster/standalone/datacenter-tls-renew/Cargo.toml rename to packages/core/services/cluster/standalone/datacenter-tls-renew/Cargo.toml diff --git a/packages/core/services/cluster/standalone/datacenter-tls-renew/src/lib.rs b/packages/core/services/cluster/standalone/datacenter-tls-renew/src/lib.rs new file mode 100644 index 0000000000..c49057acb1 --- /dev/null +++ b/packages/core/services/cluster/standalone/datacenter-tls-renew/src/lib.rs @@ -0,0 +1,60 @@ +use chirp_workflow::prelude::*; + +use cluster::types::TlsState; + +// How much time before the cert expires to renew it +const EXPIRE_PADDING: i64 = util::duration::days(30); + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let mut interval = tokio::time::interval(std::time::Duration::from_secs(60 * 60)); + loop { + interval.tick().await; + + run_from_env(config.clone(), pools.clone()).await?; + } +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())? + .wrap_new("cluster-datacenter-tls-renew"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "cluster-datacenter-tls-renew", + ) + .await?; + + let updated_datacenter_ids = sql_fetch_all!( + [ctx, (Uuid,)] + " + UPDATE db_cluster.datacenter_tls + SET state = $3 + WHERE + state = $1 AND + expire_ts < $2 + RETURNING datacenter_id + ", + TlsState::Active as i32, + util::timestamp::now() + EXPIRE_PADDING, + TlsState::Renewing as i32, + ) + .await? + .into_iter() + .map(|(datacenter_id,)| datacenter_id) + .collect::>(); + + for datacenter_id in updated_datacenter_ids { + ctx.signal(cluster::workflows::datacenter::TlsRenew {}) + .tag("datacenter_id", datacenter_id) + .send() + .await?; + } + + Ok(()) +} diff --git a/packages/services/cluster/standalone/datacenter-tls-renew/tests/integration.rs b/packages/core/services/cluster/standalone/datacenter-tls-renew/tests/integration.rs similarity index 100% rename from packages/services/cluster/standalone/datacenter-tls-renew/tests/integration.rs rename to packages/core/services/cluster/standalone/datacenter-tls-renew/tests/integration.rs diff --git a/packages/services/cluster/standalone/default-update/Cargo.toml b/packages/core/services/cluster/standalone/default-update/Cargo.toml similarity index 100% rename from packages/services/cluster/standalone/default-update/Cargo.toml rename to packages/core/services/cluster/standalone/default-update/Cargo.toml diff --git a/packages/core/services/cluster/standalone/default-update/src/lib.rs b/packages/core/services/cluster/standalone/default-update/src/lib.rs new file mode 100644 index 0000000000..638e61e611 --- /dev/null +++ b/packages/core/services/cluster/standalone/default-update/src/lib.rs @@ -0,0 +1,212 @@ +use chirp_workflow::prelude::*; +use rivet_config::config; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + // TODO: When running bolt up, this service gets created first before `cluster-worker` so the messages + // sent from here are received but effectively forgotten because `cluster-worker` gets restarted + // immediately afterwards. This server will be replaced with a bolt infra step + tokio::time::sleep(std::time::Duration::from_secs(3)).await; + + start_inner(config, pools).await +} + +#[tracing::instrument(skip_all)] +pub async fn start_inner( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let client = + chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cluster-default-update"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "cluster-default-update", + ) + .await?; + + let rivet_config = &ctx.config().server()?.rivet; + + let cluster_configs = rivet_config.clusters(); + + for (cluster_slug, cluster) in cluster_configs.iter() { + upsert_cluster(&ctx, cluster_slug, cluster).await?; + } + + Ok(()) +} + +/// Creates or updates an existing cluster. +async fn upsert_cluster( + ctx: &StandaloneCtx, + cluster_slug: &str, + cluster_config: &config::rivet::Cluster, +) -> GlobalResult<()> { + // Fetch cluster data + let cluster_res = ctx + .op(cluster::ops::get::Input { + cluster_ids: vec![cluster_config.id], + }) + .await?; + + // Create cluster if needed + let cluster = if let Some(cluster) = cluster_res.clusters.first() { + // Validate the cluster config has not changed + ensure_eq!( + cluster_slug, + cluster.name_id, + "cluster id does not match config" + ); + + cluster.clone() + } else { + tracing::debug!("creating default cluster"); + + let mut create_sub = ctx + .subscribe::(( + "cluster_id", + cluster_config.id, + )) + .await?; + ctx.workflow(cluster::workflows::cluster::Input { + cluster_id: cluster_config.id, + name_id: cluster_slug.to_string(), + owner_team_id: None, + }) + .tag("cluster_id", cluster_config.id) + .dispatch() + .await?; + create_sub.next().await?; + + let cluster_res = ctx + .op(cluster::ops::get::Input { + cluster_ids: vec![cluster_config.id], + }) + .await?; + + unwrap!(cluster_res.clusters.first().cloned()) + }; + + // Get all datacenters + let datacenter_list_res = ctx + .op(cluster::ops::datacenter::list::Input { + cluster_ids: vec![cluster_config.id], + }) + .await?; + let datacenter_ids = unwrap!(datacenter_list_res.clusters.first()) + .datacenter_ids + .clone(); + let datacenters_res = ctx + .op(cluster::ops::datacenter::get::Input { datacenter_ids }) + .await?; + + // Log dcs that are trying to be deleted + for existing_datacenter in &datacenters_res.datacenters { + if !cluster_config + .bootstrap_datacenters + .contains_key(&existing_datacenter.name_id) + { + // Warn about removing datacenter + tracing::warn!( + dc_id = ?existing_datacenter.datacenter_id, + dc_name = existing_datacenter.name_id, + "deleting datacenters is currently unimplemented" + ); + } + } + + // Upsert datacenters + for (dc_slug, dc_config) in &cluster_config.bootstrap_datacenters { + let existing_datacenter = datacenters_res + .datacenters + .iter() + .find(|x| x.datacenter_id == dc_config.id); + upsert_datacenter( + ctx, + UpsertDatacenterArgs { + cluster_id: cluster.cluster_id, + dc_slug, + dc_config, + existing_datacenter, + }, + ) + .await?; + } + + Ok(()) +} + +struct UpsertDatacenterArgs<'a> { + cluster_id: Uuid, + dc_slug: &'a str, + dc_config: &'a config::rivet::Datacenter, + existing_datacenter: Option<&'a cluster::types::Datacenter>, +} + +/// Create or update an existing cluster. +async fn upsert_datacenter( + ctx: &StandaloneCtx, + UpsertDatacenterArgs { + cluster_id, + dc_slug, + dc_config, + existing_datacenter, + }: UpsertDatacenterArgs<'_>, +) -> GlobalResult<()> { + let guard_public_hostname = match &dc_config.guard.public_hostname { + Some(rivet_config::config::server::rivet::GuardPublicHostname::DnsParent(x)) => { + Some(cluster::types::GuardPublicHostname::DnsParent(x.clone())) + } + Some(rivet_config::config::server::rivet::GuardPublicHostname::Static(x)) => { + Some(cluster::types::GuardPublicHostname::Static(x.clone())) + } + None => None, + }; + + if let Some(existing_datacenter) = existing_datacenter { + // Validate IDs match + ensure_eq!( + dc_slug, + existing_datacenter.name_id, + "datacenter id does not match config" + ); + + ctx.signal(cluster::workflows::datacenter::Update { + pools: Vec::new(), + prebakes_enabled: None, + guard_public_hostname, + }) + .tag("datacenter_id", existing_datacenter.datacenter_id) + .send() + .await?; + } else { + // Create new datacenter + + let datacenter_id = dc_config.id; + + let provider = cluster::types::Provider::Manual; + let provider_datacenter_id = "dev".to_string(); + + ctx.signal(cluster::workflows::cluster::DatacenterCreate { + datacenter_id, + name_id: dc_slug.to_string(), + display_name: dc_config.name.clone(), + + provider, + provider_datacenter_id, + provider_api_token: None, + + pools: Vec::new(), + + build_delivery_method: dc_config.build_delivery_method.into(), + prebakes_enabled: false, + guard_public_hostname, + }) + .tag("cluster_id", cluster_id) + .send() + .await?; + } + + Ok(()) +} diff --git a/packages/services/cluster/standalone/default-update/tests/integration.rs b/packages/core/services/cluster/standalone/default-update/tests/integration.rs similarity index 100% rename from packages/services/cluster/standalone/default-update/tests/integration.rs rename to packages/core/services/cluster/standalone/default-update/tests/integration.rs diff --git a/packages/services/cluster/standalone/gc/Cargo.toml b/packages/core/services/cluster/standalone/gc/Cargo.toml similarity index 100% rename from packages/services/cluster/standalone/gc/Cargo.toml rename to packages/core/services/cluster/standalone/gc/Cargo.toml diff --git a/packages/core/services/cluster/standalone/gc/src/lib.rs b/packages/core/services/cluster/standalone/gc/src/lib.rs new file mode 100644 index 0000000000..b3a3801f7b --- /dev/null +++ b/packages/core/services/cluster/standalone/gc/src/lib.rs @@ -0,0 +1,141 @@ +use std::convert::TryInto; + +use chirp_workflow::prelude::*; +use cluster::types::PoolType; +use futures_util::FutureExt; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let mut interval = tokio::time::interval(std::time::Duration::from_secs(120)); + loop { + interval.tick().await; + + let ts = util::timestamp::now(); + run_from_env(config.clone(), pools.clone(), ts).await?; + } +} + +#[derive(sqlx::FromRow)] +struct ServerRow { + server_id: Uuid, + datacenter_id: Uuid, + pool_type: i64, + drain_ts: i64, +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, + ts: i64, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cluster-gc"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "cluster-gc", + ) + .await?; + + let datacenter_ids = rivet_pools::utils::crdb::tx(&ctx.crdb().await?, |tx| { + let ctx = ctx.clone(); + + async move { + // Select all draining servers + let servers = sql_fetch_all!( + [ctx, ServerRow, @tx tx] + " + SELECT server_id, datacenter_id, pool_type, drain_ts + FROM db_cluster.servers + WHERE + drain_ts IS NOT NULL AND + drain_complete_ts IS NULL AND + cloud_destroy_ts IS NULL + ", + ) + .await?; + if servers.is_empty() { + return Ok(Vec::new()); + } + + // Fetch relevant datacenters + let datacenters_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: servers + .iter() + .map(|server| server.datacenter_id) + .collect::>(), + }) + .await?; + + // Determine which servers are finished draining via their drain timeout + let drained_servers = servers + .into_iter() + .map(|server| { + let pool_type = unwrap!(PoolType::from_repr(server.pool_type.try_into()?)); + let datacenter = unwrap!(datacenters_res + .datacenters + .iter() + .find(|dc| dc.datacenter_id == server.datacenter_id)); + let pool = unwrap!(datacenter + .pools + .iter() + .find(|pool| pool.pool_type == pool_type)); + let drain_completed = server.drain_ts < ts - pool.drain_timeout as i64; + + tracing::info!( + server_id=?server.server_id, + drain_ts=%server.drain_ts, + pool_drain_timeout=%pool.drain_timeout, + %drain_completed, + ); + + Ok((server, drain_completed)) + }) + .filter(|res| { + res.as_ref() + .map_or(true, |(_, drain_completed)| *drain_completed) + }) + .collect::>>()?; + + if drained_servers.is_empty() { + return Ok(Vec::new()); + } + + tracing::info!("{} servers done draining", drained_servers.len()); + + // Update servers that have completed draining + sql_execute!( + [ctx, @tx tx] + " + UPDATE db_cluster.servers + SET drain_complete_ts = $2 + WHERE + server_id = ANY($1) AND + cloud_destroy_ts IS NULL + ", + drained_servers.iter().map(|(server, _)| server.server_id).collect::>(), + ts, + ) + .await?; + + Ok(drained_servers + .into_iter() + .map(|(server, _)| server.datacenter_id) + .collect::>()) + } + .boxed() + }) + .await?; + + // Scale + for datacenter_id in datacenter_ids { + ctx.signal(cluster::workflows::datacenter::Scale {}) + .tag("datacenter_id", datacenter_id) + .send() + .await?; + } + + Ok(()) +} diff --git a/packages/services/cluster/standalone/gc/tests/integration.rs b/packages/core/services/cluster/standalone/gc/tests/integration.rs similarity index 100% rename from packages/services/cluster/standalone/gc/tests/integration.rs rename to packages/core/services/cluster/standalone/gc/tests/integration.rs diff --git a/packages/services/cluster/standalone/metrics-publish/Cargo.toml b/packages/core/services/cluster/standalone/metrics-publish/Cargo.toml similarity index 100% rename from packages/services/cluster/standalone/metrics-publish/Cargo.toml rename to packages/core/services/cluster/standalone/metrics-publish/Cargo.toml diff --git a/packages/core/services/cluster/standalone/metrics-publish/src/lib.rs b/packages/core/services/cluster/standalone/metrics-publish/src/lib.rs new file mode 100644 index 0000000000..25332dc132 --- /dev/null +++ b/packages/core/services/cluster/standalone/metrics-publish/src/lib.rs @@ -0,0 +1,250 @@ +use std::convert::{TryFrom, TryInto}; + +use chirp_workflow::prelude::*; +use cluster::{ + metrics, + types::{Datacenter, PoolType}, +}; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let mut interval = tokio::time::interval(std::time::Duration::from_secs(7)); + loop { + interval.tick().await; + + run_from_env(config.clone(), pools.clone()).await?; + } +} + +#[derive(sqlx::FromRow)] +struct ServerRow { + datacenter_id: Uuid, + pool_type: i64, + is_provisioned: bool, + is_installed: bool, + has_nomad_node: bool, + has_pegboard_client: bool, + is_draining: bool, + is_drained: bool, + is_tainted: bool, +} + +#[derive(Debug)] +struct Server { + datacenter_id: Uuid, + pool_type: PoolType, + is_provisioned: bool, + is_installed: bool, + has_nomad_node: bool, + has_pegboard_client: bool, + is_draining: bool, + is_tainted: bool, +} + +impl TryFrom for Server { + type Error = GlobalError; + + fn try_from(value: ServerRow) -> GlobalResult { + Ok(Server { + datacenter_id: value.datacenter_id, + pool_type: unwrap!(PoolType::from_repr(value.pool_type.try_into()?)), + is_provisioned: value.is_provisioned, + is_installed: value.is_installed, + has_nomad_node: value.has_nomad_node, + has_pegboard_client: value.has_pegboard_client, + is_tainted: value.is_tainted, + is_draining: value.is_draining && !value.is_drained, + }) + } +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let client = + chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cluster-metrics-publish"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "cluster-metrics-publish", + ) + .await?; + + let servers = select_servers(&ctx).await?; + + let datacenters_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: servers.iter().map(|s| s.datacenter_id).collect::>(), + }) + .await?; + + for dc in &datacenters_res.datacenters { + insert_metrics(dc, &servers)?; + } + + Ok(()) +} + +async fn select_servers(ctx: &StandaloneCtx) -> GlobalResult> { + let servers = sql_fetch_all!( + [ctx, ServerRow] + " + SELECT + datacenter_id, pool_type, + (provider_server_id IS NOT NULL) AS is_provisioned, + (install_complete_ts IS NOT NULL) AS is_installed, + (nomad_node_id IS NOT NULL) AS has_nomad_node, + (pegboard_client_id IS NOT NULL) AS has_pegboard_client, + (drain_ts IS NOT NULL) AS is_draining, + (drain_complete_ts IS NOT NULL) AS is_drained, + (taint_ts IS NOT NULL) AS is_tainted + FROM db_cluster.servers AS OF SYSTEM TIME '-1s' + WHERE + -- Filters out servers that are being destroyed/already destroyed + cloud_destroy_ts IS NULL + ", + ) + .await?; + + servers + .into_iter() + .map(TryInto::try_into) + .collect::>>() +} + +fn insert_metrics(dc: &Datacenter, servers: &[Server]) -> GlobalResult<()> { + let servers_in_dc = servers + .iter() + .filter(|s| s.datacenter_id == dc.datacenter_id); + + let datacenter_id = dc.datacenter_id.to_string(); + let cluster_id = dc.cluster_id.to_string(); + + let servers_per_pool = [ + PoolType::Job, + PoolType::Gg, + PoolType::Ats, + PoolType::Pegboard, + PoolType::PegboardIsolate, + PoolType::Fdb, + ] + .into_iter() + .map(|pool_type| { + ( + pool_type, + servers_in_dc + .clone() + .filter(|s| s.pool_type == pool_type) + .collect::>(), + ) + }) + .collect::>(); + + // Aggregate all states per pool type + for (pool_type, servers) in servers_per_pool { + let mut provisioning = 0; + let mut installing = 0; + let mut active = 0; + let mut nomad = 0; + let mut pegboard = 0; + let mut draining = 0; + let mut tainted = 0; + let mut draining_tainted = 0; + + for server in servers { + if server.is_draining { + draining += 1; + } else if server.is_provisioned { + if server.is_installed { + active += 1; + + if server.has_nomad_node { + nomad += 1; + } + + if server.has_pegboard_client { + pegboard += 1; + } + } else { + installing += 1; + } + } else { + provisioning += 1; + } + + if server.is_tainted { + tainted += 1; + + if server.is_draining { + draining_tainted += 1; + } + } + } + + let labels = [ + cluster_id.as_str(), + datacenter_id.as_str(), + &dc.provider_datacenter_id, + &dc.name_id, + &pool_type.to_string(), + ]; + + metrics::PROVISIONING_SERVERS + .with_label_values(&labels) + .set(provisioning); + metrics::INSTALLING_SERVERS + .with_label_values(&labels) + .set(installing); + metrics::ACTIVE_SERVERS + .with_label_values(&labels) + .set(active); + metrics::DRAINING_SERVERS + .with_label_values(&labels) + .set(draining); + metrics::TAINTED_SERVERS + .with_label_values(&labels) + .set(tainted); + metrics::DRAINING_TAINTED_SERVERS + .with_label_values(&labels) + .set(draining_tainted); + + match pool_type { + PoolType::Job => { + metrics::NOMAD_SERVERS + .with_label_values(&[ + &cluster_id, + &datacenter_id, + &dc.provider_datacenter_id, + &dc.name_id, + ]) + .set(nomad); + } + PoolType::Pegboard => { + metrics::PEGBOARD_SERVERS + .with_label_values(&[ + &cluster_id, + &datacenter_id, + &dc.provider_datacenter_id, + &dc.name_id, + ]) + .set(pegboard); + } + PoolType::PegboardIsolate => { + metrics::PEGBOARD_ISOLATE_SERVERS + .with_label_values(&[ + &cluster_id, + &datacenter_id, + &dc.provider_datacenter_id, + &dc.name_id, + ]) + .set(pegboard); + } + _ => {} + } + } + + Ok(()) +} diff --git a/packages/services/pegboard/standalone/gc/tests/integration.rs b/packages/core/services/cluster/standalone/metrics-publish/tests/integration.rs similarity index 100% rename from packages/services/pegboard/standalone/gc/tests/integration.rs rename to packages/core/services/cluster/standalone/metrics-publish/tests/integration.rs diff --git a/packages/services/cluster/tests/common.rs b/packages/core/services/cluster/tests/common.rs similarity index 100% rename from packages/services/cluster/tests/common.rs rename to packages/core/services/cluster/tests/common.rs diff --git a/packages/services/cluster/tests/create.rs b/packages/core/services/cluster/tests/create.rs similarity index 100% rename from packages/services/cluster/tests/create.rs rename to packages/core/services/cluster/tests/create.rs diff --git a/packages/services/cluster/tests/datacenter_create.rs b/packages/core/services/cluster/tests/datacenter_create.rs similarity index 100% rename from packages/services/cluster/tests/datacenter_create.rs rename to packages/core/services/cluster/tests/datacenter_create.rs diff --git a/packages/services/cluster/tests/get.rs b/packages/core/services/cluster/tests/get.rs similarity index 100% rename from packages/services/cluster/tests/get.rs rename to packages/core/services/cluster/tests/get.rs diff --git a/packages/services/cluster/tests/get_for_game.rs b/packages/core/services/cluster/tests/get_for_game.rs similarity index 100% rename from packages/services/cluster/tests/get_for_game.rs rename to packages/core/services/cluster/tests/get_for_game.rs diff --git a/packages/services/cluster/tests/list.rs b/packages/core/services/cluster/tests/list.rs similarity index 100% rename from packages/services/cluster/tests/list.rs rename to packages/core/services/cluster/tests/list.rs diff --git a/packages/services/cluster/tests/server_list.rs b/packages/core/services/cluster/tests/server_list.rs similarity index 100% rename from packages/services/cluster/tests/server_list.rs rename to packages/core/services/cluster/tests/server_list.rs diff --git a/packages/services/cluster/tests/server_provision.rs b/packages/core/services/cluster/tests/server_provision.rs similarity index 100% rename from packages/services/cluster/tests/server_provision.rs rename to packages/core/services/cluster/tests/server_provision.rs diff --git a/packages/services/cluster/tests_old/datacenter_get.rs b/packages/core/services/cluster/tests_old/datacenter_get.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_get.rs rename to packages/core/services/cluster/tests_old/datacenter_get.rs diff --git a/packages/services/cluster/tests_old/datacenter_list.rs b/packages/core/services/cluster/tests_old/datacenter_list.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_list.rs rename to packages/core/services/cluster/tests_old/datacenter_list.rs diff --git a/packages/services/cluster/tests_old/datacenter_location_get.rs b/packages/core/services/cluster/tests_old/datacenter_location_get.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_location_get.rs rename to packages/core/services/cluster/tests_old/datacenter_location_get.rs diff --git a/packages/services/cluster/tests_old/datacenter_resolve_for_name_id.rs b/packages/core/services/cluster/tests_old/datacenter_resolve_for_name_id.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_resolve_for_name_id.rs rename to packages/core/services/cluster/tests_old/datacenter_resolve_for_name_id.rs diff --git a/packages/services/cluster/tests_old/datacenter_scale.rs b/packages/core/services/cluster/tests_old/datacenter_scale.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_scale.rs rename to packages/core/services/cluster/tests_old/datacenter_scale.rs diff --git a/packages/services/cluster/tests_old/datacenter_tls_get.rs b/packages/core/services/cluster/tests_old/datacenter_tls_get.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_tls_get.rs rename to packages/core/services/cluster/tests_old/datacenter_tls_get.rs diff --git a/packages/services/cluster/tests_old/datacenter_tls_issue.rs b/packages/core/services/cluster/tests_old/datacenter_tls_issue.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_tls_issue.rs rename to packages/core/services/cluster/tests_old/datacenter_tls_issue.rs diff --git a/packages/services/cluster/tests_old/datacenter_topology_get.rs b/packages/core/services/cluster/tests_old/datacenter_topology_get.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_topology_get.rs rename to packages/core/services/cluster/tests_old/datacenter_topology_get.rs diff --git a/packages/services/cluster/tests_old/datacenter_update.rs b/packages/core/services/cluster/tests_old/datacenter_update.rs similarity index 100% rename from packages/services/cluster/tests_old/datacenter_update.rs rename to packages/core/services/cluster/tests_old/datacenter_update.rs diff --git a/packages/services/cluster/tests_old/nomad_node_drain_complete.rs b/packages/core/services/cluster/tests_old/nomad_node_drain_complete.rs similarity index 100% rename from packages/services/cluster/tests_old/nomad_node_drain_complete.rs rename to packages/core/services/cluster/tests_old/nomad_node_drain_complete.rs diff --git a/packages/services/cluster/tests_old/nomad_node_registered.rs b/packages/core/services/cluster/tests_old/nomad_node_registered.rs similarity index 100% rename from packages/services/cluster/tests_old/nomad_node_registered.rs rename to packages/core/services/cluster/tests_old/nomad_node_registered.rs diff --git a/packages/services/cluster/tests_old/resolve_for_name_id.rs b/packages/core/services/cluster/tests_old/resolve_for_name_id.rs similarity index 100% rename from packages/services/cluster/tests_old/resolve_for_name_id.rs rename to packages/core/services/cluster/tests_old/resolve_for_name_id.rs diff --git a/packages/services/cluster/tests_old/server_destroy.rs b/packages/core/services/cluster/tests_old/server_destroy.rs similarity index 100% rename from packages/services/cluster/tests_old/server_destroy.rs rename to packages/core/services/cluster/tests_old/server_destroy.rs diff --git a/packages/services/cluster/tests_old/server_destroy_with_filter.rs b/packages/core/services/cluster/tests_old/server_destroy_with_filter.rs similarity index 100% rename from packages/services/cluster/tests_old/server_destroy_with_filter.rs rename to packages/core/services/cluster/tests_old/server_destroy_with_filter.rs diff --git a/packages/services/cluster/tests_old/server_dns_create.rs b/packages/core/services/cluster/tests_old/server_dns_create.rs similarity index 100% rename from packages/services/cluster/tests_old/server_dns_create.rs rename to packages/core/services/cluster/tests_old/server_dns_create.rs diff --git a/packages/services/cluster/tests_old/server_dns_delete.rs b/packages/core/services/cluster/tests_old/server_dns_delete.rs similarity index 100% rename from packages/services/cluster/tests_old/server_dns_delete.rs rename to packages/core/services/cluster/tests_old/server_dns_delete.rs diff --git a/packages/services/cluster/tests_old/server_drain.rs b/packages/core/services/cluster/tests_old/server_drain.rs similarity index 100% rename from packages/services/cluster/tests_old/server_drain.rs rename to packages/core/services/cluster/tests_old/server_drain.rs diff --git a/packages/services/cluster/tests_old/server_get.rs b/packages/core/services/cluster/tests_old/server_get.rs similarity index 100% rename from packages/services/cluster/tests_old/server_get.rs rename to packages/core/services/cluster/tests_old/server_get.rs diff --git a/packages/services/cluster/tests_old/server_install.rs b/packages/core/services/cluster/tests_old/server_install.rs similarity index 100% rename from packages/services/cluster/tests_old/server_install.rs rename to packages/core/services/cluster/tests_old/server_install.rs diff --git a/packages/services/cluster/tests_old/server_install_complete.rs b/packages/core/services/cluster/tests_old/server_install_complete.rs similarity index 100% rename from packages/services/cluster/tests_old/server_install_complete.rs rename to packages/core/services/cluster/tests_old/server_install_complete.rs diff --git a/packages/services/cluster/tests_old/server_resolve_for_ip.rs b/packages/core/services/cluster/tests_old/server_resolve_for_ip.rs similarity index 100% rename from packages/services/cluster/tests_old/server_resolve_for_ip.rs rename to packages/core/services/cluster/tests_old/server_resolve_for_ip.rs diff --git a/packages/services/cluster/tests_old/server_taint.rs b/packages/core/services/cluster/tests_old/server_taint.rs similarity index 100% rename from packages/services/cluster/tests_old/server_taint.rs rename to packages/core/services/cluster/tests_old/server_taint.rs diff --git a/packages/services/cluster/tests_old/server_undrain.rs b/packages/core/services/cluster/tests_old/server_undrain.rs similarity index 100% rename from packages/services/cluster/tests_old/server_undrain.rs rename to packages/core/services/cluster/tests_old/server_undrain.rs diff --git a/packages/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.down.sql b/packages/core/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.down.sql rename to packages/core/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.down.sql diff --git a/packages/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.up.sql b/packages/core/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.up.sql rename to packages/core/services/custom-user-avatar/db/custom-avatar/migrations/20200101000000_init.up.sql diff --git a/packages/services/custom-user-avatar/ops/list-for-game/Cargo.toml b/packages/core/services/custom-user-avatar/ops/list-for-game/Cargo.toml similarity index 100% rename from packages/services/custom-user-avatar/ops/list-for-game/Cargo.toml rename to packages/core/services/custom-user-avatar/ops/list-for-game/Cargo.toml diff --git a/packages/services/custom-user-avatar/ops/list-for-game/README.md b/packages/core/services/custom-user-avatar/ops/list-for-game/README.md similarity index 100% rename from packages/services/custom-user-avatar/ops/list-for-game/README.md rename to packages/core/services/custom-user-avatar/ops/list-for-game/README.md diff --git a/packages/services/custom-user-avatar/ops/list-for-game/src/lib.rs b/packages/core/services/custom-user-avatar/ops/list-for-game/src/lib.rs similarity index 100% rename from packages/services/custom-user-avatar/ops/list-for-game/src/lib.rs rename to packages/core/services/custom-user-avatar/ops/list-for-game/src/lib.rs diff --git a/packages/services/custom-user-avatar/ops/list-for-game/tests/integration.rs b/packages/core/services/custom-user-avatar/ops/list-for-game/tests/integration.rs similarity index 100% rename from packages/services/custom-user-avatar/ops/list-for-game/tests/integration.rs rename to packages/core/services/custom-user-avatar/ops/list-for-game/tests/integration.rs diff --git a/packages/services/custom-user-avatar/ops/upload-complete/Cargo.toml b/packages/core/services/custom-user-avatar/ops/upload-complete/Cargo.toml similarity index 100% rename from packages/services/custom-user-avatar/ops/upload-complete/Cargo.toml rename to packages/core/services/custom-user-avatar/ops/upload-complete/Cargo.toml diff --git a/packages/services/custom-user-avatar/ops/upload-complete/README.md b/packages/core/services/custom-user-avatar/ops/upload-complete/README.md similarity index 100% rename from packages/services/custom-user-avatar/ops/upload-complete/README.md rename to packages/core/services/custom-user-avatar/ops/upload-complete/README.md diff --git a/packages/services/custom-user-avatar/ops/upload-complete/src/lib.rs b/packages/core/services/custom-user-avatar/ops/upload-complete/src/lib.rs similarity index 100% rename from packages/services/custom-user-avatar/ops/upload-complete/src/lib.rs rename to packages/core/services/custom-user-avatar/ops/upload-complete/src/lib.rs diff --git a/packages/services/custom-user-avatar/ops/upload-complete/tests/integration.rs b/packages/core/services/custom-user-avatar/ops/upload-complete/tests/integration.rs similarity index 100% rename from packages/services/custom-user-avatar/ops/upload-complete/tests/integration.rs rename to packages/core/services/custom-user-avatar/ops/upload-complete/tests/integration.rs diff --git a/packages/services/custom-user-avatar/proto/list-for-game.proto b/packages/core/services/custom-user-avatar/proto/list-for-game.proto similarity index 100% rename from packages/services/custom-user-avatar/proto/list-for-game.proto rename to packages/core/services/custom-user-avatar/proto/list-for-game.proto diff --git a/packages/services/custom-user-avatar/proto/upload-complete.proto b/packages/core/services/custom-user-avatar/proto/upload-complete.proto similarity index 100% rename from packages/services/custom-user-avatar/proto/upload-complete.proto rename to packages/core/services/custom-user-avatar/proto/upload-complete.proto diff --git a/packages/services/debug/ops/email-res/Cargo.toml b/packages/core/services/debug/ops/email-res/Cargo.toml similarity index 100% rename from packages/services/debug/ops/email-res/Cargo.toml rename to packages/core/services/debug/ops/email-res/Cargo.toml diff --git a/packages/services/debug/ops/email-res/src/lib.rs b/packages/core/services/debug/ops/email-res/src/lib.rs similarity index 100% rename from packages/services/debug/ops/email-res/src/lib.rs rename to packages/core/services/debug/ops/email-res/src/lib.rs diff --git a/packages/services/debug/ops/email-res/tests/integration.rs b/packages/core/services/debug/ops/email-res/tests/integration.rs similarity index 100% rename from packages/services/debug/ops/email-res/tests/integration.rs rename to packages/core/services/debug/ops/email-res/tests/integration.rs diff --git a/packages/services/debug/proto/email-res.proto b/packages/core/services/debug/proto/email-res.proto similarity index 100% rename from packages/services/debug/proto/email-res.proto rename to packages/core/services/debug/proto/email-res.proto diff --git a/packages/services/ds-log/db/log/migrations/20200101000000_init.down.sql b/packages/core/services/ds-log/db/log/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/ds-log/db/log/migrations/20200101000000_init.down.sql rename to packages/core/services/ds-log/db/log/migrations/20200101000000_init.down.sql diff --git a/packages/services/ds-log/db/log/migrations/20200101000000_init.up.sql b/packages/core/services/ds-log/db/log/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/ds-log/db/log/migrations/20200101000000_init.up.sql rename to packages/core/services/ds-log/db/log/migrations/20200101000000_init.up.sql diff --git a/packages/services/ds-log/ops/export/Cargo.toml b/packages/core/services/ds-log/ops/export/Cargo.toml similarity index 100% rename from packages/services/ds-log/ops/export/Cargo.toml rename to packages/core/services/ds-log/ops/export/Cargo.toml diff --git a/packages/services/ds-log/ops/export/src/lib.rs b/packages/core/services/ds-log/ops/export/src/lib.rs similarity index 100% rename from packages/services/ds-log/ops/export/src/lib.rs rename to packages/core/services/ds-log/ops/export/src/lib.rs diff --git a/packages/services/ds-log/ops/export/tests/integration.rs b/packages/core/services/ds-log/ops/export/tests/integration.rs similarity index 100% rename from packages/services/ds-log/ops/export/tests/integration.rs rename to packages/core/services/ds-log/ops/export/tests/integration.rs diff --git a/packages/services/ds-log/ops/read/Cargo.toml b/packages/core/services/ds-log/ops/read/Cargo.toml similarity index 100% rename from packages/services/ds-log/ops/read/Cargo.toml rename to packages/core/services/ds-log/ops/read/Cargo.toml diff --git a/packages/services/ds-log/ops/read/README.md b/packages/core/services/ds-log/ops/read/README.md similarity index 100% rename from packages/services/ds-log/ops/read/README.md rename to packages/core/services/ds-log/ops/read/README.md diff --git a/packages/services/ds-log/ops/read/src/lib.rs b/packages/core/services/ds-log/ops/read/src/lib.rs similarity index 100% rename from packages/services/ds-log/ops/read/src/lib.rs rename to packages/core/services/ds-log/ops/read/src/lib.rs diff --git a/packages/services/ds-log/ops/read/tests/integration.rs b/packages/core/services/ds-log/ops/read/tests/integration.rs similarity index 100% rename from packages/services/ds-log/ops/read/tests/integration.rs rename to packages/core/services/ds-log/ops/read/tests/integration.rs diff --git a/packages/services/ds-log/proto/export.proto b/packages/core/services/ds-log/proto/export.proto similarity index 100% rename from packages/services/ds-log/proto/export.proto rename to packages/core/services/ds-log/proto/export.proto diff --git a/packages/services/ds-log/proto/read.proto b/packages/core/services/ds-log/proto/read.proto similarity index 100% rename from packages/services/ds-log/proto/read.proto rename to packages/core/services/ds-log/proto/read.proto diff --git a/packages/services/ds/Cargo.toml b/packages/core/services/ds/Cargo.toml similarity index 100% rename from packages/services/ds/Cargo.toml rename to packages/core/services/ds/Cargo.toml diff --git a/packages/services/ds/db/servers/migrations/20240501133910_init.down.sql b/packages/core/services/ds/db/servers/migrations/20240501133910_init.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240501133910_init.down.sql rename to packages/core/services/ds/db/servers/migrations/20240501133910_init.down.sql diff --git a/packages/services/ds/db/servers/migrations/20240501133910_init.up.sql b/packages/core/services/ds/db/servers/migrations/20240501133910_init.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240501133910_init.up.sql rename to packages/core/services/ds/db/servers/migrations/20240501133910_init.up.sql diff --git a/packages/services/ds/db/servers/migrations/20240809224504_add_idx.down.sql b/packages/core/services/ds/db/servers/migrations/20240809224504_add_idx.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240809224504_add_idx.down.sql rename to packages/core/services/ds/db/servers/migrations/20240809224504_add_idx.down.sql diff --git a/packages/services/ds/db/servers/migrations/20240809224504_add_idx.up.sql b/packages/core/services/ds/db/servers/migrations/20240809224504_add_idx.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240809224504_add_idx.up.sql rename to packages/core/services/ds/db/servers/migrations/20240809224504_add_idx.up.sql diff --git a/packages/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.down.sql b/packages/core/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.down.sql rename to packages/core/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.down.sql diff --git a/packages/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.up.sql b/packages/core/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.up.sql rename to packages/core/services/ds/db/servers/migrations/20240829002010_remove_stop_ts.up.sql diff --git a/packages/services/ds/db/servers/migrations/20240917192549_add_pegboard.down.sql b/packages/core/services/ds/db/servers/migrations/20240917192549_add_pegboard.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240917192549_add_pegboard.down.sql rename to packages/core/services/ds/db/servers/migrations/20240917192549_add_pegboard.down.sql diff --git a/packages/services/ds/db/servers/migrations/20240917192549_add_pegboard.up.sql b/packages/core/services/ds/db/servers/migrations/20240917192549_add_pegboard.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240917192549_add_pegboard.up.sql rename to packages/core/services/ds/db/servers/migrations/20240917192549_add_pegboard.up.sql diff --git a/packages/services/ds/db/servers/migrations/20240918220629_game_config.down.sql b/packages/core/services/ds/db/servers/migrations/20240918220629_game_config.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240918220629_game_config.down.sql rename to packages/core/services/ds/db/servers/migrations/20240918220629_game_config.down.sql diff --git a/packages/services/ds/db/servers/migrations/20240918220629_game_config.up.sql b/packages/core/services/ds/db/servers/migrations/20240918220629_game_config.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240918220629_game_config.up.sql rename to packages/core/services/ds/db/servers/migrations/20240918220629_game_config.up.sql diff --git a/packages/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.down.sql b/packages/core/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.down.sql rename to packages/core/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.down.sql diff --git a/packages/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.up.sql b/packages/core/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.up.sql rename to packages/core/services/ds/db/servers/migrations/20240925001314_remove_cleanup_ts.up.sql diff --git a/packages/services/ds/db/servers/migrations/20241011222256_rename_containers.down.sql b/packages/core/services/ds/db/servers/migrations/20241011222256_rename_containers.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241011222256_rename_containers.down.sql rename to packages/core/services/ds/db/servers/migrations/20241011222256_rename_containers.down.sql diff --git a/packages/services/ds/db/servers/migrations/20241011222256_rename_containers.up.sql b/packages/core/services/ds/db/servers/migrations/20241011222256_rename_containers.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241011222256_rename_containers.up.sql rename to packages/core/services/ds/db/servers/migrations/20241011222256_rename_containers.up.sql diff --git a/packages/services/ds/db/servers/migrations/20241028133100_rename_tables.down.sql b/packages/core/services/ds/db/servers/migrations/20241028133100_rename_tables.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241028133100_rename_tables.down.sql rename to packages/core/services/ds/db/servers/migrations/20241028133100_rename_tables.down.sql diff --git a/packages/services/ds/db/servers/migrations/20241028133100_rename_tables.up.sql b/packages/core/services/ds/db/servers/migrations/20241028133100_rename_tables.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241028133100_rename_tables.up.sql rename to packages/core/services/ds/db/servers/migrations/20241028133100_rename_tables.up.sql diff --git a/packages/services/ds/db/servers/migrations/20241030122600_gg_port_auth.down.sql b/packages/core/services/ds/db/servers/migrations/20241030122600_gg_port_auth.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241030122600_gg_port_auth.down.sql rename to packages/core/services/ds/db/servers/migrations/20241030122600_gg_port_auth.down.sql diff --git a/packages/services/ds/db/servers/migrations/20241030122600_gg_port_auth.up.sql b/packages/core/services/ds/db/servers/migrations/20241030122600_gg_port_auth.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241030122600_gg_port_auth.up.sql rename to packages/core/services/ds/db/servers/migrations/20241030122600_gg_port_auth.up.sql diff --git a/packages/services/ds/db/servers/migrations/20241115184305_add_durable.down.sql b/packages/core/services/ds/db/servers/migrations/20241115184305_add_durable.down.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241115184305_add_durable.down.sql rename to packages/core/services/ds/db/servers/migrations/20241115184305_add_durable.down.sql diff --git a/packages/services/ds/db/servers/migrations/20241115184305_add_durable.up.sql b/packages/core/services/ds/db/servers/migrations/20241115184305_add_durable.up.sql similarity index 100% rename from packages/services/ds/db/servers/migrations/20241115184305_add_durable.up.sql rename to packages/core/services/ds/db/servers/migrations/20241115184305_add_durable.up.sql diff --git a/packages/services/ds/proto/msg/drain-all.proto b/packages/core/services/ds/proto/msg/drain-all.proto similarity index 100% rename from packages/services/ds/proto/msg/drain-all.proto rename to packages/core/services/ds/proto/msg/drain-all.proto diff --git a/packages/services/ds/proto/msg/undrain-all.proto b/packages/core/services/ds/proto/msg/undrain-all.proto similarity index 100% rename from packages/services/ds/proto/msg/undrain-all.proto rename to packages/core/services/ds/proto/msg/undrain-all.proto diff --git a/packages/core/services/ds/src/lib.rs b/packages/core/services/ds/src/lib.rs new file mode 100644 index 0000000000..94659b3828 --- /dev/null +++ b/packages/core/services/ds/src/lib.rs @@ -0,0 +1,7 @@ +use chirp_workflow::prelude::*; + +pub mod ops; +pub mod types; +pub mod util; +pub mod workers; +pub mod workflows; diff --git a/packages/services/ds/src/ops/game_config/get.rs b/packages/core/services/ds/src/ops/game_config/get.rs similarity index 100% rename from packages/services/ds/src/ops/game_config/get.rs rename to packages/core/services/ds/src/ops/game_config/get.rs diff --git a/packages/services/ds/src/ops/game_config/mod.rs b/packages/core/services/ds/src/ops/game_config/mod.rs similarity index 100% rename from packages/services/ds/src/ops/game_config/mod.rs rename to packages/core/services/ds/src/ops/game_config/mod.rs diff --git a/packages/services/ds/src/ops/game_config/upsert.rs b/packages/core/services/ds/src/ops/game_config/upsert.rs similarity index 100% rename from packages/services/ds/src/ops/game_config/upsert.rs rename to packages/core/services/ds/src/ops/game_config/upsert.rs diff --git a/packages/services/ds/src/ops/mod.rs b/packages/core/services/ds/src/ops/mod.rs similarity index 100% rename from packages/services/ds/src/ops/mod.rs rename to packages/core/services/ds/src/ops/mod.rs diff --git a/packages/services/ds/src/ops/server/get.rs b/packages/core/services/ds/src/ops/server/get.rs similarity index 100% rename from packages/services/ds/src/ops/server/get.rs rename to packages/core/services/ds/src/ops/server/get.rs diff --git a/packages/services/ds/src/ops/server/list_for_env.rs b/packages/core/services/ds/src/ops/server/list_for_env.rs similarity index 100% rename from packages/services/ds/src/ops/server/list_for_env.rs rename to packages/core/services/ds/src/ops/server/list_for_env.rs diff --git a/packages/services/ds/src/ops/server/mod.rs b/packages/core/services/ds/src/ops/server/mod.rs similarity index 100% rename from packages/services/ds/src/ops/server/mod.rs rename to packages/core/services/ds/src/ops/server/mod.rs diff --git a/packages/services/ds/src/types.rs b/packages/core/services/ds/src/types.rs similarity index 100% rename from packages/services/ds/src/types.rs rename to packages/core/services/ds/src/types.rs diff --git a/packages/services/ds/src/util/consts.rs b/packages/core/services/ds/src/util/consts.rs similarity index 100% rename from packages/services/ds/src/util/consts.rs rename to packages/core/services/ds/src/util/consts.rs diff --git a/packages/services/ds/src/util/mod.rs b/packages/core/services/ds/src/util/mod.rs similarity index 100% rename from packages/services/ds/src/util/mod.rs rename to packages/core/services/ds/src/util/mod.rs diff --git a/packages/services/ds/src/util/nomad_job.rs b/packages/core/services/ds/src/util/nomad_job.rs similarity index 100% rename from packages/services/ds/src/util/nomad_job.rs rename to packages/core/services/ds/src/util/nomad_job.rs diff --git a/packages/services/ds/src/util/oci_config.rs b/packages/core/services/ds/src/util/oci_config.rs similarity index 100% rename from packages/services/ds/src/util/oci_config.rs rename to packages/core/services/ds/src/util/oci_config.rs diff --git a/packages/services/ds/src/util/seccomp.rs b/packages/core/services/ds/src/util/seccomp.rs similarity index 100% rename from packages/services/ds/src/util/seccomp.rs rename to packages/core/services/ds/src/util/seccomp.rs diff --git a/packages/services/ds/src/util/test.rs b/packages/core/services/ds/src/util/test.rs similarity index 100% rename from packages/services/ds/src/util/test.rs rename to packages/core/services/ds/src/util/test.rs diff --git a/packages/services/ds/src/workers/drain_all.rs b/packages/core/services/ds/src/workers/drain_all.rs similarity index 100% rename from packages/services/ds/src/workers/drain_all.rs rename to packages/core/services/ds/src/workers/drain_all.rs diff --git a/packages/services/ds/src/workers/mod.rs b/packages/core/services/ds/src/workers/mod.rs similarity index 100% rename from packages/services/ds/src/workers/mod.rs rename to packages/core/services/ds/src/workers/mod.rs diff --git a/packages/services/ds/src/workers/undrain_all.rs b/packages/core/services/ds/src/workers/undrain_all.rs similarity index 100% rename from packages/services/ds/src/workers/undrain_all.rs rename to packages/core/services/ds/src/workers/undrain_all.rs diff --git a/packages/services/ds/src/workers/webhook.rs b/packages/core/services/ds/src/workers/webhook.rs similarity index 100% rename from packages/services/ds/src/workers/webhook.rs rename to packages/core/services/ds/src/workers/webhook.rs diff --git a/packages/services/ds/src/workflows/mod.rs b/packages/core/services/ds/src/workflows/mod.rs similarity index 100% rename from packages/services/ds/src/workflows/mod.rs rename to packages/core/services/ds/src/workflows/mod.rs diff --git a/packages/services/ds/src/workflows/server/mod.rs b/packages/core/services/ds/src/workflows/server/mod.rs similarity index 100% rename from packages/services/ds/src/workflows/server/mod.rs rename to packages/core/services/ds/src/workflows/server/mod.rs diff --git a/packages/services/ds/src/workflows/server/nomad/alloc_plan.rs b/packages/core/services/ds/src/workflows/server/nomad/alloc_plan.rs similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/alloc_plan.rs rename to packages/core/services/ds/src/workflows/server/nomad/alloc_plan.rs diff --git a/packages/services/ds/src/workflows/server/nomad/alloc_update.rs b/packages/core/services/ds/src/workflows/server/nomad/alloc_update.rs similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/alloc_update.rs rename to packages/core/services/ds/src/workflows/server/nomad/alloc_update.rs diff --git a/packages/services/ds/src/workflows/server/nomad/destroy.rs b/packages/core/services/ds/src/workflows/server/nomad/destroy.rs similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/destroy.rs rename to packages/core/services/ds/src/workflows/server/nomad/destroy.rs diff --git a/packages/services/ds/src/workflows/server/nomad/eval_update.rs b/packages/core/services/ds/src/workflows/server/nomad/eval_update.rs similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/eval_update.rs rename to packages/core/services/ds/src/workflows/server/nomad/eval_update.rs diff --git a/packages/services/ds/src/workflows/server/nomad/mod.rs b/packages/core/services/ds/src/workflows/server/nomad/mod.rs similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/mod.rs rename to packages/core/services/ds/src/workflows/server/nomad/mod.rs diff --git a/packages/services/ds/src/workflows/server/nomad/scripts/cleanup.sh b/packages/core/services/ds/src/workflows/server/nomad/scripts/cleanup.sh similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/scripts/cleanup.sh rename to packages/core/services/ds/src/workflows/server/nomad/scripts/cleanup.sh diff --git a/packages/services/ds/src/workflows/server/nomad/scripts/setup.sh b/packages/core/services/ds/src/workflows/server/nomad/scripts/setup.sh similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/scripts/setup.sh rename to packages/core/services/ds/src/workflows/server/nomad/scripts/setup.sh diff --git a/packages/services/ds/src/workflows/server/nomad/scripts/setup_cni_network.sh b/packages/core/services/ds/src/workflows/server/nomad/scripts/setup_cni_network.sh similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/scripts/setup_cni_network.sh rename to packages/core/services/ds/src/workflows/server/nomad/scripts/setup_cni_network.sh diff --git a/packages/services/ds/src/workflows/server/nomad/scripts/setup_job_runner.sh b/packages/core/services/ds/src/workflows/server/nomad/scripts/setup_job_runner.sh similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/scripts/setup_job_runner.sh rename to packages/core/services/ds/src/workflows/server/nomad/scripts/setup_job_runner.sh diff --git a/packages/services/ds/src/workflows/server/nomad/scripts/setup_oci_bundle.sh b/packages/core/services/ds/src/workflows/server/nomad/scripts/setup_oci_bundle.sh similarity index 100% rename from packages/services/ds/src/workflows/server/nomad/scripts/setup_oci_bundle.sh rename to packages/core/services/ds/src/workflows/server/nomad/scripts/setup_oci_bundle.sh diff --git a/packages/services/ds/src/workflows/server/pegboard/destroy.rs b/packages/core/services/ds/src/workflows/server/pegboard/destroy.rs similarity index 100% rename from packages/services/ds/src/workflows/server/pegboard/destroy.rs rename to packages/core/services/ds/src/workflows/server/pegboard/destroy.rs diff --git a/packages/core/services/ds/src/workflows/server/pegboard/mod.rs b/packages/core/services/ds/src/workflows/server/pegboard/mod.rs new file mode 100644 index 0000000000..215f154d04 --- /dev/null +++ b/packages/core/services/ds/src/workflows/server/pegboard/mod.rs @@ -0,0 +1,956 @@ +use std::{ + collections::{HashMap, HashSet}, + time::Duration, +}; + +use build::types::{BuildCompression, BuildKind}; +use chirp_workflow::prelude::*; +use cluster::types::BuildDeliveryMethod; +use futures_util::FutureExt; +use pegboard::protocol as pp; +use serde_json::json; +use tokio::time::Instant; +use util::serde::AsHashableExt; + +use super::{ + CreateComplete, Destroy, Drain, DrainState, Failed, GetServerMetaInput, GetServerMetaOutput, + InsertDbInput, Port, Ready, SetConnectableInput, UpdateImageInput, UpdateRescheduleRetryInput, + Upgrade, UpgradeComplete, UpgradeStarted, BASE_RETRY_TIMEOUT_MS, DRAIN_PADDING_MS, +}; +use crate::types::{ + GameGuardProtocol, HostProtocol, NetworkMode, Routing, ServerLifecycle, ServerResources, +}; + +pub mod destroy; + +#[derive(Serialize, Deserialize)] +struct StateRes { + signal_actor: bool, + override_kill_timeout_ms: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub(crate) struct Input { + pub server_id: Uuid, + pub env_id: Uuid, + pub datacenter_id: Uuid, + pub cluster_id: Uuid, + pub tags: HashMap, + pub resources: ServerResources, + pub lifecycle: ServerLifecycle, + pub image_id: Uuid, + pub root_user_enabled: bool, + pub args: Vec, + pub network_mode: NetworkMode, + pub environment: HashMap, + pub network_ports: HashMap, +} + +#[workflow] +pub(crate) async fn ds_server_pegboard(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + let res = setup(ctx, input, SetupCtx::Init).await; + match ctx.catch_unrecoverable(res)? { + Ok(_actor_id) => {} + Err(err) => { + tracing::error!(?err, "unrecoverable setup"); + + ctx.msg(Failed { + message: "Failed setup.".into(), + }) + .tag("server_id", input.server_id) + .send() + .await?; + + ctx.workflow(destroy::Input { + server_id: input.server_id, + override_kill_timeout_ms: None, + signal_actor: false, + }) + .output() + .await?; + + // Throw the original error from the setup activities + return Err(err); + } + }; + + ctx.msg(CreateComplete {}) + .tag("server_id", input.server_id) + .send() + .await?; + + let _client_id = match ctx.listen::().await? { + Init::ActorStateUpdate(sig) => match sig.state { + state => bail!("unexpected actor state: {state:?}"), + }, + Init::Destroy(sig) => { + tracing::debug!("destroying before actor start"); + + ctx.workflow(destroy::Input { + server_id: input.server_id, + override_kill_timeout_ms: sig.override_kill_timeout_ms, + signal_actor: true, + }) + .output() + .await?; + + return Ok(()); + } + }; + + let state_res = ctx + .repeat(|ctx| { + let input = input.clone(); + + async move { + match ctx.listen::
().await? { + Main::ActorStateUpdate(sig) => match sig.state { + pp::ActorState::Starting => { + ctx.activity(SetStartedInput { + server_id: input.server_id, + }) + .await?; + } + pp::ActorState::Running { ports, .. } => { + ctx.activity(UpdatePortsInput { + server_id: input.server_id, + datacenter_id: input.datacenter_id, + ports, + }) + .await?; + + // Wait for Traefik to poll ports and update GG + let create_ts = ctx.ts(); + match ctx.check_version(2).await? { + 1 => ctx.removed::().await?, + _latest => { + ctx.activity(WaitForTraefikPollInput { + create_ts, + cluster_id: input.cluster_id, + datacenter_id: input.datacenter_id, + }) + .await?; + } + } + + let updated = ctx + .activity(SetConnectableInput { + server_id: input.server_id, + }) + .await?; + + if updated { + ctx.msg(Ready {}) + .tag("server_id", input.server_id) + .send() + .await?; + } + } + pp::ActorState::Stopping | pp::ActorState::Stopped => {} + pp::ActorState::Exited { .. } | pp::ActorState::Lost => { + let exit_code = if let pp::ActorState::Exited { exit_code } = sig.state + { + exit_code + } else { + None + }; + + tracing::debug!(?exit_code, "actor stopped"); + + let failed = exit_code.map(|exit_code| exit_code != 0).unwrap_or(true); + + // Reschedule durable actor if it errored + if input.lifecycle.durable && failed { + if let Some(sig) = reschedule_actor(ctx, &input, None).await? { + // Destroyed early + return Ok(Loop::Break(StateRes { + signal_actor: true, + override_kill_timeout_ms: sig.override_kill_timeout_ms, + })); + } + } else { + ctx.activity(SetFinishedInput { + server_id: input.server_id, + }) + .await?; + + return Ok(Loop::Break(StateRes { + signal_actor: false, + override_kill_timeout_ms: None, + })); + } + } + state => bail!("unexpected actor state: {state:?}"), + }, + Main::Drain(sig) => { + let drain_timeout = sig.drain_timeout.saturating_sub(DRAIN_PADDING_MS); + let sleep_for = if drain_timeout < input.lifecycle.kill_timeout_ms { + 0 + } else { + drain_timeout - input.lifecycle.kill_timeout_ms + }; + + match ctx.listen_with_timeout::(sleep_for).await? { + Some(DrainState::Undrain(_)) => {} + // Destroyed early + Some(DrainState::Destroy(sig)) => { + // TODO: Compare the override timeout to the remaining drain timeout and choose the + // smaller one + return Ok(Loop::Break(StateRes { + signal_actor: true, + override_kill_timeout_ms: sig.override_kill_timeout_ms, + })); + } + // Drain timeout complete + None => { + // Reschedule durable actor on drain end + if input.lifecycle.durable { + // Important that we get the current actor id as durable actors can be + // rescheduled many times + let actor_id = ctx + .activity(GetActorIdInput { + server_id: input.server_id, + }) + .await?; + + // Kill old actor immediately + destroy::destroy_actor( + ctx, + input.datacenter_id, + 0, + true, + actor_id, + ) + .await?; + + if let Some(sig) = reschedule_actor(ctx, &input, None).await? { + // Destroyed early + return Ok(Loop::Break(StateRes { + signal_actor: true, + override_kill_timeout_ms: sig.override_kill_timeout_ms, + })); + } + } else { + return Ok(Loop::Break(StateRes { + signal_actor: true, + override_kill_timeout_ms: Some( + input.lifecycle.kill_timeout_ms.min(drain_timeout), + ), + })); + } + } + } + } + Main::Upgrade(sig) => { + ctx.msg(UpgradeStarted {}) + .tag("server_id", input.server_id) + .send() + .await?; + + // Important that we get the current actor id as durable actors can be + // rescheduled many times + let actor_id = ctx + .activity(GetActorIdInput { + server_id: input.server_id, + }) + .await?; + + // Kill old actor immediately + destroy::destroy_actor(ctx, input.datacenter_id, 0, true, actor_id).await?; + + if let Some(sig) = reschedule_actor(ctx, &input, Some(sig.image_id)).await? + { + // Destroyed early + return Ok(Loop::Break(StateRes { + signal_actor: true, + override_kill_timeout_ms: sig.override_kill_timeout_ms, + })); + } + + ctx.msg(UpgradeComplete {}) + .tag("server_id", input.server_id) + .send() + .await?; + } + Main::Destroy(sig) => { + return Ok(Loop::Break(StateRes { + signal_actor: true, + override_kill_timeout_ms: sig.override_kill_timeout_ms, + })) + } + } + + Ok(Loop::Continue) + } + .boxed() + }) + .await?; + + ctx.workflow(destroy::Input { + server_id: input.server_id, + override_kill_timeout_ms: state_res.override_kill_timeout_ms, + signal_actor: state_res.signal_actor, + }) + .output() + .await?; + + Ok(()) +} + +enum SetupCtx { + Init, + Reschedule { new_image_id: Option }, +} + +#[derive(Clone)] +struct ActorSetupCtx { + actor_id: Uuid, + server_meta: GetServerMetaOutput, + resources: pp::Resources, + artifact_url_stub: String, + fallback_artifact_url: Option, +} + +async fn setup( + ctx: &mut WorkflowCtx, + input: &Input, + setup: SetupCtx, +) -> GlobalResult { + let image_id = match &setup { + SetupCtx::Init => { + ctx.activity(InsertDbInput { + server_id: input.server_id, + env_id: input.env_id, + datacenter_id: input.datacenter_id, + cluster_id: input.cluster_id, + tags: input.tags.as_hashable(), + resources: input.resources.clone(), + lifecycle: input.lifecycle.clone(), + image_id: input.image_id, + args: input.args.clone(), + network_mode: input.network_mode, + environment: input.environment.as_hashable(), + network_ports: input.network_ports.as_hashable(), + }) + .await?; + + input.image_id + } + SetupCtx::Reschedule { new_image_id } => { + if let Some(image_id) = *new_image_id { + ctx.activity(UpdateImageInput { + server_id: input.server_id, + image_id, + }) + .await?; + + image_id + } else { + input.image_id + } + } + }; + + let server_meta = ctx + .activity(GetServerMetaInput { + env_id: input.env_id, + image_id, + datacenter_id: input.datacenter_id, + }) + .await?; + + let (actor_id, resources, artifacts_res) = ctx + .join(( + activity(SelectActorIdInput { + server_id: input.server_id, + }), + activity(SelectResourcesInput { + datacenter_id: input.datacenter_id, + resources: input.resources.clone(), + }), + activity(ResolveArtifactsInput { + build_upload_id: server_meta.build_upload_id, + build_file_name: server_meta.build_file_name.clone(), + dc_build_delivery_method: server_meta.dc_build_delivery_method, + }), + )) + .await?; + + let actor_setup = ActorSetupCtx { + actor_id, + server_meta, + resources, + artifact_url_stub: artifacts_res.artifact_url_stub, + fallback_artifact_url: artifacts_res.fallback_artifact_url, + }; + + // Rescheduling handles spawning the actor manually + if let SetupCtx::Init = setup { + spawn_actor(ctx, input, &actor_setup).await?; + } + + Ok(actor_setup) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SelectActorIdInput { + server_id: Uuid, +} + +#[activity(SelectActorId)] +async fn select_actor_id(ctx: &ActivityCtx, input: &SelectActorIdInput) -> GlobalResult { + let actor_id = Uuid::new_v4(); + + sql_execute!( + [ctx] + " + -- NOTE: We upsert here because the actor can be reassigned in the event of a reschedule + UPSERT INTO db_ds.servers_pegboard (server_id, pegboard_actor_id) + VALUES ($1, $2) + ", + input.server_id, + actor_id, + ) + .await?; + + ctx.update_workflow_tags(&json!({ + "server_id": input.server_id, + "actor_id": actor_id, + })) + .await?; + + Ok(actor_id) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SelectResourcesInput { + datacenter_id: Uuid, + resources: ServerResources, +} + +#[activity(SelectResources)] +async fn select_resources( + ctx: &ActivityCtx, + input: &SelectResourcesInput, +) -> GlobalResult { + let tier_res = ctx + .op(tier::ops::list::Input { + datacenter_ids: vec![input.datacenter_id], + pegboard: true, + }) + .await?; + let tier_dc = unwrap!(tier_res.datacenters.first()); + let mut tiers = tier_dc.tiers.iter().collect::>(); + + // Sort the tiers by cpu + tiers.sort_by(|a, b| a.cpu.cmp(&b.cpu)); + + // Find the first tier that has more CPU and memory than the requested + // resources + let tier = unwrap!(tiers.iter().find(|t| { + t.cpu_millicores >= input.resources.cpu_millicores && t.memory >= input.resources.memory_mib + })); + + // runc-compatible resources + let cpu = tier.rivet_cores_numerator as u64 * 1_000 / tier.rivet_cores_denominator as u64; // Millicore (1/1000 of a core) + let memory = tier.memory as u64 * (1024 * 1024); + let memory_max = tier.memory_max as u64 * (1024 * 1024); + + Ok(pp::Resources { + cpu, + memory, + memory_max, + disk: tier.disk, + }) +} + +async fn spawn_actor( + ctx: &mut WorkflowCtx, + input: &Input, + actor_setup: &ActorSetupCtx, +) -> GlobalResult<()> { + ctx.signal(pp::Command::StartActor { + actor_id: actor_setup.actor_id, + config: Box::new(pp::ActorConfig { + image: pp::Image { + id: input.image_id, + artifact_url_stub: actor_setup.artifact_url_stub.clone(), + fallback_artifact_url: actor_setup.fallback_artifact_url.clone(), + kind: match actor_setup.server_meta.build_kind { + BuildKind::DockerImage => pp::ImageKind::DockerImage, + BuildKind::OciBundle => pp::ImageKind::OciBundle, + BuildKind::JavaScript => pp::ImageKind::JavaScript, + }, + compression: match actor_setup.server_meta.build_compression { + BuildCompression::None => pp::ImageCompression::None, + BuildCompression::Lz4 => pp::ImageCompression::Lz4, + }, + }, + root_user_enabled: input.root_user_enabled, + env: input.environment.as_hashable(), + ports: input + .network_ports + .iter() + .map(|(port_label, port)| match port.routing { + Routing::GameGuard { protocol, .. } => ( + crate::util::pegboard_normalize_port_label(port_label), + pp::Port { + target: port.internal_port, + protocol: match protocol { + GameGuardProtocol::Http + | GameGuardProtocol::Https + | GameGuardProtocol::Tcp + | GameGuardProtocol::TcpTls => pp::TransportProtocol::Tcp, + GameGuardProtocol::Udp => pp::TransportProtocol::Udp, + }, + routing: pp::PortRouting::GameGuard, + }, + ), + Routing::Host { protocol } => ( + crate::util::pegboard_normalize_port_label(port_label), + pp::Port { + target: port.internal_port, + protocol: match protocol { + HostProtocol::Tcp => pp::TransportProtocol::Tcp, + HostProtocol::Udp => pp::TransportProtocol::Udp, + }, + routing: pp::PortRouting::Host, + }, + ), + }) + .collect(), + network_mode: match input.network_mode { + NetworkMode::Bridge => pp::NetworkMode::Bridge, + NetworkMode::Host => pp::NetworkMode::Host, + }, + resources: actor_setup.resources.clone(), + owner: pp::ActorOwner::DynamicServer { + server_id: input.server_id, + workflow_id: todo!(), + }, + metadata: util::serde::Raw::new(&pp::ActorMetadata { + actor: pp::ActorMetadataActor { + actor_id: actor_setup.actor_id, + tags: input.tags.as_hashable(), + // Represents when the pegboard actor was created, not the ds workflow. + create_ts: ctx.ts(), + }, + project: pp::ActorMetadataProject { + project_id: actor_setup.server_meta.project_id, + slug: actor_setup.server_meta.project_slug.clone(), + }, + environment: pp::ActorMetadataEnvironment { + env_id: input.env_id, + slug: actor_setup.server_meta.env_slug.clone(), + }, + datacenter: pp::ActorMetadataDatacenter { + name_id: actor_setup.server_meta.dc_name_id.clone(), + display_name: actor_setup.server_meta.dc_display_name.clone(), + }, + cluster: pp::ActorMetadataCluster { + cluster_id: input.cluster_id, + }, + build: pp::ActorMetadataBuild { + build_id: input.image_id, + }, + })?, + }), + }) + .tag("datacenter_id", input.datacenter_id) + .send() + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ResolveArtifactsInput { + build_upload_id: Uuid, + build_file_name: String, + dc_build_delivery_method: BuildDeliveryMethod, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ResolveArtifactsOutput { + artifact_url_stub: String, + fallback_artifact_url: Option, +} + +#[activity(ResolveArtifacts)] +async fn resolve_artifacts( + ctx: &ActivityCtx, + input: &ResolveArtifactsInput, +) -> GlobalResult { + let fallback_artifact_url = + if let BuildDeliveryMethod::S3Direct = input.dc_build_delivery_method { + tracing::debug!("using s3 direct delivery"); + + // Build client + let s3_client = s3_util::Client::with_bucket_and_endpoint( + ctx.config(), + "bucket-build", + s3_util::EndpointKind::EdgeInternal, + ) + .await?; + + let presigned_req = s3_client + .get_object() + .bucket(s3_client.bucket()) + .key(format!( + "{upload_id}/{file_name}", + upload_id = input.build_upload_id, + file_name = input.build_file_name, + )) + .presigned( + s3_util::aws_sdk_s3::presigning::PresigningConfig::builder() + .expires_in(std::time::Duration::from_secs(15 * 60)) + .build()?, + ) + .await?; + + let addr_str = presigned_req.uri().to_string(); + tracing::debug!(addr = %addr_str, "resolved artifact s3 presigned request"); + + Some(addr_str) + } else { + None + }; + + Ok(ResolveArtifactsOutput { + artifact_url_stub: crate::util::image_artifact_url_stub( + ctx.config(), + input.build_upload_id, + &input.build_file_name, + )?, + fallback_artifact_url, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetStartedInput { + server_id: Uuid, +} + +#[activity(SetStarted)] +async fn set_started(ctx: &ActivityCtx, input: &SetStartedInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + UPDATE db_ds.servers + SET start_ts = $2 + WHERE + server_id = $1 AND + start_ts IS NULL + ", + input.server_id, + util::timestamp::now(), + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdatePortsInput { + server_id: Uuid, + datacenter_id: Uuid, + ports: util::serde::HashableMap, +} + +#[activity(UpdatePorts)] +async fn update_ports(ctx: &ActivityCtx, input: &UpdatePortsInput) -> GlobalResult<()> { + let mut flat_port_labels = Vec::new(); + let mut flat_port_sources = Vec::new(); + let mut flat_port_ips = Vec::new(); + + for (label, port) in &input.ports { + flat_port_labels.push(label.as_str()); + flat_port_sources.push(port.source as i64); + flat_port_ips.push(port.lan_hostname.clone()); + } + + sql_execute!( + [ctx] + " + INSERT INTO db_ds.server_proxied_ports ( + server_id, + label, + source, + ip + ) + SELECT $1, label, source, ip + FROM unnest($2, $3, $4) AS n(label, source, ip) + ", + input.server_id, + flat_port_labels, + flat_port_sources, + flat_port_ips, + ) + .await?; + + // Invalidate cache when ports are updated + if !input.ports.is_empty() { + ctx.cache() + .purge("ds_proxied_ports2", [input.datacenter_id]) + .await?; + } + + Ok(()) +} + +async fn reschedule_actor( + ctx: &mut WorkflowCtx, + input: &Input, + new_image_id: Option, +) -> GlobalResult> { + tracing::info!("rescheduling actor"); + + // Remove old proxied ports + ctx.activity(ClearPortsInput { + server_id: input.server_id, + }) + .await?; + + let actor_setup = setup(ctx, &input, SetupCtx::Reschedule { new_image_id }).await?; + + // Waits for the actor to be ready (or destroyed) and automatically retries if failed to allocate. + ctx.repeat(|ctx| { + let input = input.clone(); + let actor_setup = actor_setup.clone(); + + async move { + // Get and increment retry count + let retry_count = ctx + .activity(UpdateRescheduleRetryInput { + server_id: input.server_id, + }) + .await?; + + // Don't sleep for first retry + if retry_count > 0 { + // Determine next backoff sleep duration + let mut backoff = rivet_util::Backoff::new_at( + 8, + None, + BASE_RETRY_TIMEOUT_MS, + 500, + (retry_count - 1).try_into()?, + ); + let next = backoff.step().expect("should not have max retry"); + + // Sleep for backoff or destroy early + if let Some(sig) = ctx + .listen_with_timeout::(next - Instant::now()) + .await? + { + tracing::debug!("destroying before actor start"); + + return Ok(Loop::Break(Some(sig))); + } + } + + spawn_actor(ctx, &input, &actor_setup).await?; + + match ctx.listen::().await? { + Init::ActorStateUpdate(sig) => match sig.state { + state => bail!("unexpected actor state: {state:?}"), + }, + Init::Destroy(sig) => { + tracing::debug!("destroying before actor start"); + + return Ok(Loop::Break(Some(sig))); + } + }; + } + .boxed() + }) + .await +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ClearPortsInput { + server_id: Uuid, +} + +#[activity(ClearPorts)] +async fn clear_ports(ctx: &ActivityCtx, input: &ClearPortsInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + DELETE FROM db_ds.server_proxied_ports + WHERE server_id = $1 + ", + input.server_id, + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetFinishedInput { + server_id: Uuid, +} + +#[activity(SetFinished)] +async fn set_finished(ctx: &ActivityCtx, input: &SetFinishedInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + UPDATE db_ds.servers + SET finish_ts = $2 + WHERE server_id = $1 + ", + input.server_id, + util::timestamp::now(), + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct GetActorIdInput { + server_id: Uuid, +} + +#[activity(GetActorId)] +async fn get_actor_id(ctx: &ActivityCtx, input: &GetActorIdInput) -> GlobalResult { + let (actor_id,) = sql_fetch_one!( + [ctx, (Uuid,)] + " + SELECT pegboard_actor_id + FROM db_ds.servers_pegboard + WHERE server_id = $1 + ", + input.server_id, + ) + .await?; + + Ok(actor_id) +} + +/// Amount of time to wait after all servers have successfully polled to wait to return in order to +/// avoid a race condition. +/// +/// This can likely be decreased to < 100 ms safely. +const TRAEFIK_POLL_COMPLETE_GRACE: Duration = Duration::from_millis(750); + +/// Max time to wait for servers to poll their configs. +const TRAEFIK_POLL_TIMEOUT: Duration = Duration::from_secs(5); + +/// How logn to wait if no GG servers were returned from the list. This is either from: +/// - Cluster without provisioning configured +/// - Edge case where all GG servers were destroyed and waiting for new servers to come up +const TRAFEIK_NO_SERVERS_GRACE: Duration = Duration::from_millis(500); + +#[message("ds_traefik_poll")] +pub struct TraefikPoll { + /// Server ID will be `None` if: + /// - Not using provisioning (i.e. self-hosted cluster) or + /// - Older GG node that's being upgraded + pub server_id: Option, + pub latest_ds_create_ts: i64, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct WaitForTraefikPollInput { + create_ts: i64, + cluster_id: Uuid, + datacenter_id: Uuid, +} + +/// Waits for all of the GG nodes to poll the Traefik config. +/// +/// This is done by waiting for an event to be published for each of the GG server IDs with a +/// timestamp for the latest DS it's seen that's > than this DS's create ts. +#[activity(WaitForTraefikPoll)] +async fn wait_for_traefik_poll( + ctx: &ActivityCtx, + input: &WaitForTraefikPollInput, +) -> GlobalResult<()> { + // TODO: This will only work with 1 node on self-hosted. RG 2 will be out by then which fixes + // this issue. + + // Start sub first since the messages may arrive while fetching the server list + let mut sub = ctx + .subscribe::(&json!({ "datacenter_id": input.datacenter_id })) + .await?; + + // Fetch servers + let servers_res = ctx + .op(cluster::ops::server::list::Input { + filter: cluster::types::Filter { + pool_types: Some(vec![cluster::types::PoolType::Gg]), + cluster_ids: Some(vec![input.cluster_id]), + ..Default::default() + }, + include_destroyed: false, + exclude_draining: true, + exclude_no_vlan: false, + }) + .await?; + + let mut remaining_servers: HashSet = if servers_res.servers.is_empty() { + // HACK: Will wait for a single server poll if we don't have the server list. Wait for a + // static amount of time. + tokio::time::sleep(TRAFEIK_NO_SERVERS_GRACE).await; + return Ok(()); + } else { + 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", + ); + let res = tokio::time::timeout(TRAEFIK_POLL_TIMEOUT, async { + // Wait for servers to fetch their configs + loop { + let msg = sub.next().await?; + + 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); + + 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() { + return GlobalResult::Ok(()); + } + } + } + } + }) + .await; + + match res { + Ok(_) => { + tracing::debug!("received poll from all traefik servers, waiting for grace period"); + tokio::time::sleep(TRAEFIK_POLL_COMPLETE_GRACE).await; + } + Err(_) => { + tracing::warn!(missing_server_ids = ?remaining_servers, "did not receive poll from all gg servers before deadline"); + } + } + + Ok(()) +} + +join_signal!(Init { + ActorStateUpdate(pegboard::workflows::client::ActorStateUpdate), + Destroy, +}); + +join_signal!(Main { + ActorStateUpdate(pegboard::workflows::client::ActorStateUpdate), + Drain, + Upgrade, + Destroy, +}); diff --git a/packages/services/ds/tests/common.rs b/packages/core/services/ds/tests/common.rs similarity index 100% rename from packages/services/ds/tests/common.rs rename to packages/core/services/ds/tests/common.rs diff --git a/packages/services/ds/tests/lobby_connectivity.rs b/packages/core/services/ds/tests/lobby_connectivity.rs similarity index 100% rename from packages/services/ds/tests/lobby_connectivity.rs rename to packages/core/services/ds/tests/lobby_connectivity.rs diff --git a/packages/services/ds/tests/print_test_data.rs b/packages/core/services/ds/tests/print_test_data.rs similarity index 100% rename from packages/services/ds/tests/print_test_data.rs rename to packages/core/services/ds/tests/print_test_data.rs diff --git a/packages/services/ds/tests/server_create.rs b/packages/core/services/ds/tests/server_create.rs similarity index 100% rename from packages/services/ds/tests/server_create.rs rename to packages/core/services/ds/tests/server_create.rs diff --git a/packages/services/ds/tests/server_drain.rs b/packages/core/services/ds/tests/server_drain.rs similarity index 100% rename from packages/services/ds/tests/server_drain.rs rename to packages/core/services/ds/tests/server_drain.rs diff --git a/packages/services/ds/tests/server_get.rs b/packages/core/services/ds/tests/server_get.rs similarity index 100% rename from packages/services/ds/tests/server_get.rs rename to packages/core/services/ds/tests/server_get.rs diff --git a/packages/services/dynamic-config/Cargo.toml b/packages/core/services/dynamic-config/Cargo.toml similarity index 100% rename from packages/services/dynamic-config/Cargo.toml rename to packages/core/services/dynamic-config/Cargo.toml diff --git a/packages/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.down.sql b/packages/core/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.down.sql similarity index 100% rename from packages/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.down.sql rename to packages/core/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.down.sql diff --git a/packages/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.up.sql b/packages/core/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.up.sql similarity index 100% rename from packages/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.up.sql rename to packages/core/services/dynamic-config/db/dynamic-config/migrations/20241020081707_init.up.sql diff --git a/packages/services/dynamic-config/src/lib.rs b/packages/core/services/dynamic-config/src/lib.rs similarity index 100% rename from packages/services/dynamic-config/src/lib.rs rename to packages/core/services/dynamic-config/src/lib.rs diff --git a/packages/services/dynamic-config/src/ops/get_config.rs b/packages/core/services/dynamic-config/src/ops/get_config.rs similarity index 100% rename from packages/services/dynamic-config/src/ops/get_config.rs rename to packages/core/services/dynamic-config/src/ops/get_config.rs diff --git a/packages/services/dynamic-config/src/ops/mod.rs b/packages/core/services/dynamic-config/src/ops/mod.rs similarity index 100% rename from packages/services/dynamic-config/src/ops/mod.rs rename to packages/core/services/dynamic-config/src/ops/mod.rs diff --git a/packages/services/email-verification/db/email-verification/migrations/20200101000000_init.down.sql b/packages/core/services/email-verification/db/email-verification/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/email-verification/db/email-verification/migrations/20200101000000_init.down.sql rename to packages/core/services/email-verification/db/email-verification/migrations/20200101000000_init.down.sql diff --git a/packages/services/email-verification/db/email-verification/migrations/20200101000000_init.up.sql b/packages/core/services/email-verification/db/email-verification/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/email-verification/db/email-verification/migrations/20200101000000_init.up.sql rename to packages/core/services/email-verification/db/email-verification/migrations/20200101000000_init.up.sql diff --git a/packages/services/email-verification/ops/complete/Cargo.toml b/packages/core/services/email-verification/ops/complete/Cargo.toml similarity index 100% rename from packages/services/email-verification/ops/complete/Cargo.toml rename to packages/core/services/email-verification/ops/complete/Cargo.toml diff --git a/packages/services/email-verification/ops/complete/README.md b/packages/core/services/email-verification/ops/complete/README.md similarity index 100% rename from packages/services/email-verification/ops/complete/README.md rename to packages/core/services/email-verification/ops/complete/README.md diff --git a/packages/services/email-verification/ops/complete/src/lib.rs b/packages/core/services/email-verification/ops/complete/src/lib.rs similarity index 100% rename from packages/services/email-verification/ops/complete/src/lib.rs rename to packages/core/services/email-verification/ops/complete/src/lib.rs diff --git a/packages/services/email-verification/ops/complete/tests/integration.rs b/packages/core/services/email-verification/ops/complete/tests/integration.rs similarity index 100% rename from packages/services/email-verification/ops/complete/tests/integration.rs rename to packages/core/services/email-verification/ops/complete/tests/integration.rs diff --git a/packages/services/email-verification/ops/create/Cargo.toml b/packages/core/services/email-verification/ops/create/Cargo.toml similarity index 100% rename from packages/services/email-verification/ops/create/Cargo.toml rename to packages/core/services/email-verification/ops/create/Cargo.toml diff --git a/packages/services/email-verification/ops/create/README.md b/packages/core/services/email-verification/ops/create/README.md similarity index 100% rename from packages/services/email-verification/ops/create/README.md rename to packages/core/services/email-verification/ops/create/README.md diff --git a/packages/services/email-verification/ops/create/src/lib.rs b/packages/core/services/email-verification/ops/create/src/lib.rs similarity index 100% rename from packages/services/email-verification/ops/create/src/lib.rs rename to packages/core/services/email-verification/ops/create/src/lib.rs diff --git a/packages/services/email-verification/ops/create/tests/integration.rs b/packages/core/services/email-verification/ops/create/tests/integration.rs similarity index 100% rename from packages/services/email-verification/ops/create/tests/integration.rs rename to packages/core/services/email-verification/ops/create/tests/integration.rs diff --git a/packages/services/email-verification/proto/complete.proto b/packages/core/services/email-verification/proto/complete.proto similarity index 100% rename from packages/services/email-verification/proto/complete.proto rename to packages/core/services/email-verification/proto/complete.proto diff --git a/packages/services/email-verification/proto/create.proto b/packages/core/services/email-verification/proto/create.proto similarity index 100% rename from packages/services/email-verification/proto/create.proto rename to packages/core/services/email-verification/proto/create.proto diff --git a/packages/services/email/ops/send/Cargo.toml b/packages/core/services/email/ops/send/Cargo.toml similarity index 100% rename from packages/services/email/ops/send/Cargo.toml rename to packages/core/services/email/ops/send/Cargo.toml diff --git a/packages/services/email/ops/send/README.md b/packages/core/services/email/ops/send/README.md similarity index 100% rename from packages/services/email/ops/send/README.md rename to packages/core/services/email/ops/send/README.md diff --git a/packages/services/email/ops/send/src/lib.rs b/packages/core/services/email/ops/send/src/lib.rs similarity index 100% rename from packages/services/email/ops/send/src/lib.rs rename to packages/core/services/email/ops/send/src/lib.rs diff --git a/packages/services/email/ops/send/tests/integration.rs b/packages/core/services/email/ops/send/tests/integration.rs similarity index 100% rename from packages/services/email/ops/send/tests/integration.rs rename to packages/core/services/email/ops/send/tests/integration.rs diff --git a/packages/services/email/proto/send.proto b/packages/core/services/email/proto/send.proto similarity index 100% rename from packages/services/email/proto/send.proto rename to packages/core/services/email/proto/send.proto diff --git a/packages/services/external/ops/request-validate/Cargo.toml b/packages/core/services/external/ops/request-validate/Cargo.toml similarity index 100% rename from packages/services/external/ops/request-validate/Cargo.toml rename to packages/core/services/external/ops/request-validate/Cargo.toml diff --git a/packages/services/external/ops/request-validate/README.md b/packages/core/services/external/ops/request-validate/README.md similarity index 100% rename from packages/services/external/ops/request-validate/README.md rename to packages/core/services/external/ops/request-validate/README.md diff --git a/packages/services/external/ops/request-validate/src/lib.rs b/packages/core/services/external/ops/request-validate/src/lib.rs similarity index 100% rename from packages/services/external/ops/request-validate/src/lib.rs rename to packages/core/services/external/ops/request-validate/src/lib.rs diff --git a/packages/services/external/ops/request-validate/tests/integration.rs b/packages/core/services/external/ops/request-validate/tests/integration.rs similarity index 100% rename from packages/services/external/ops/request-validate/tests/integration.rs rename to packages/core/services/external/ops/request-validate/tests/integration.rs diff --git a/packages/services/external/proto/msg/request-call-complete.proto b/packages/core/services/external/proto/msg/request-call-complete.proto similarity index 100% rename from packages/services/external/proto/msg/request-call-complete.proto rename to packages/core/services/external/proto/msg/request-call-complete.proto diff --git a/packages/services/external/proto/msg/request-call-fail.proto b/packages/core/services/external/proto/msg/request-call-fail.proto similarity index 100% rename from packages/services/external/proto/msg/request-call-fail.proto rename to packages/core/services/external/proto/msg/request-call-fail.proto diff --git a/packages/services/external/proto/msg/request-call.proto b/packages/core/services/external/proto/msg/request-call.proto similarity index 100% rename from packages/services/external/proto/msg/request-call.proto rename to packages/core/services/external/proto/msg/request-call.proto diff --git a/packages/services/external/proto/request-validate.proto b/packages/core/services/external/proto/request-validate.proto similarity index 100% rename from packages/services/external/proto/request-validate.proto rename to packages/core/services/external/proto/request-validate.proto diff --git a/packages/services/external/worker/Cargo.toml b/packages/core/services/external/worker/Cargo.toml similarity index 100% rename from packages/services/external/worker/Cargo.toml rename to packages/core/services/external/worker/Cargo.toml diff --git a/packages/services/external/worker/src/lib.rs b/packages/core/services/external/worker/src/lib.rs similarity index 100% rename from packages/services/external/worker/src/lib.rs rename to packages/core/services/external/worker/src/lib.rs diff --git a/packages/services/external/worker/src/workers/mod.rs b/packages/core/services/external/worker/src/workers/mod.rs similarity index 100% rename from packages/services/external/worker/src/workers/mod.rs rename to packages/core/services/external/worker/src/workers/mod.rs diff --git a/packages/services/external/worker/src/workers/request_call.rs b/packages/core/services/external/worker/src/workers/request_call.rs similarity index 100% rename from packages/services/external/worker/src/workers/request_call.rs rename to packages/core/services/external/worker/src/workers/request_call.rs diff --git a/packages/services/external/worker/tests/request_call.rs b/packages/core/services/external/worker/tests/request_call.rs similarity index 100% rename from packages/services/external/worker/tests/request_call.rs rename to packages/core/services/external/worker/tests/request_call.rs diff --git a/packages/services/faker/ops/build/Cargo.toml b/packages/core/services/faker/ops/build/Cargo.toml similarity index 100% rename from packages/services/faker/ops/build/Cargo.toml rename to packages/core/services/faker/ops/build/Cargo.toml diff --git a/packages/services/faker/ops/build/README.md b/packages/core/services/faker/ops/build/README.md similarity index 100% rename from packages/services/faker/ops/build/README.md rename to packages/core/services/faker/ops/build/README.md diff --git a/packages/services/faker/ops/build/src/lib.rs b/packages/core/services/faker/ops/build/src/lib.rs similarity index 100% rename from packages/services/faker/ops/build/src/lib.rs rename to packages/core/services/faker/ops/build/src/lib.rs diff --git a/packages/services/faker/ops/build/tests/integration.rs b/packages/core/services/faker/ops/build/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/build/tests/integration.rs rename to packages/core/services/faker/ops/build/tests/integration.rs diff --git a/packages/services/faker/ops/cdn-site/Cargo.toml b/packages/core/services/faker/ops/cdn-site/Cargo.toml similarity index 100% rename from packages/services/faker/ops/cdn-site/Cargo.toml rename to packages/core/services/faker/ops/cdn-site/Cargo.toml diff --git a/packages/services/faker/ops/cdn-site/README.md b/packages/core/services/faker/ops/cdn-site/README.md similarity index 100% rename from packages/services/faker/ops/cdn-site/README.md rename to packages/core/services/faker/ops/cdn-site/README.md diff --git a/packages/services/faker/ops/cdn-site/src/lib.rs b/packages/core/services/faker/ops/cdn-site/src/lib.rs similarity index 100% rename from packages/services/faker/ops/cdn-site/src/lib.rs rename to packages/core/services/faker/ops/cdn-site/src/lib.rs diff --git a/packages/services/faker/ops/cdn-site/tests/integration.rs b/packages/core/services/faker/ops/cdn-site/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/cdn-site/tests/integration.rs rename to packages/core/services/faker/ops/cdn-site/tests/integration.rs diff --git a/packages/services/faker/ops/game-namespace/Cargo.toml b/packages/core/services/faker/ops/game-namespace/Cargo.toml similarity index 100% rename from packages/services/faker/ops/game-namespace/Cargo.toml rename to packages/core/services/faker/ops/game-namespace/Cargo.toml diff --git a/packages/services/faker/ops/game-namespace/README.md b/packages/core/services/faker/ops/game-namespace/README.md similarity index 100% rename from packages/services/faker/ops/game-namespace/README.md rename to packages/core/services/faker/ops/game-namespace/README.md diff --git a/packages/services/faker/ops/game-namespace/src/lib.rs b/packages/core/services/faker/ops/game-namespace/src/lib.rs similarity index 100% rename from packages/services/faker/ops/game-namespace/src/lib.rs rename to packages/core/services/faker/ops/game-namespace/src/lib.rs diff --git a/packages/services/faker/ops/game-namespace/tests/integration.rs b/packages/core/services/faker/ops/game-namespace/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/game-namespace/tests/integration.rs rename to packages/core/services/faker/ops/game-namespace/tests/integration.rs diff --git a/packages/services/faker/ops/game-version/Cargo.toml b/packages/core/services/faker/ops/game-version/Cargo.toml similarity index 100% rename from packages/services/faker/ops/game-version/Cargo.toml rename to packages/core/services/faker/ops/game-version/Cargo.toml diff --git a/packages/services/faker/ops/game-version/README.md b/packages/core/services/faker/ops/game-version/README.md similarity index 100% rename from packages/services/faker/ops/game-version/README.md rename to packages/core/services/faker/ops/game-version/README.md diff --git a/packages/services/faker/ops/game-version/src/lib.rs b/packages/core/services/faker/ops/game-version/src/lib.rs similarity index 100% rename from packages/services/faker/ops/game-version/src/lib.rs rename to packages/core/services/faker/ops/game-version/src/lib.rs diff --git a/packages/services/faker/ops/game-version/tests/integration.rs b/packages/core/services/faker/ops/game-version/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/game-version/tests/integration.rs rename to packages/core/services/faker/ops/game-version/tests/integration.rs diff --git a/packages/services/faker/ops/game/Cargo.toml b/packages/core/services/faker/ops/game/Cargo.toml similarity index 100% rename from packages/services/faker/ops/game/Cargo.toml rename to packages/core/services/faker/ops/game/Cargo.toml diff --git a/packages/services/faker/ops/game/README.md b/packages/core/services/faker/ops/game/README.md similarity index 100% rename from packages/services/faker/ops/game/README.md rename to packages/core/services/faker/ops/game/README.md diff --git a/packages/services/faker/ops/game/src/lib.rs b/packages/core/services/faker/ops/game/src/lib.rs similarity index 100% rename from packages/services/faker/ops/game/src/lib.rs rename to packages/core/services/faker/ops/game/src/lib.rs diff --git a/packages/services/faker/ops/game/tests/integration.rs b/packages/core/services/faker/ops/game/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/game/tests/integration.rs rename to packages/core/services/faker/ops/game/tests/integration.rs diff --git a/packages/services/faker/ops/job-run/Cargo.toml b/packages/core/services/faker/ops/job-run/Cargo.toml similarity index 100% rename from packages/services/faker/ops/job-run/Cargo.toml rename to packages/core/services/faker/ops/job-run/Cargo.toml diff --git a/packages/services/faker/ops/job-run/README.md b/packages/core/services/faker/ops/job-run/README.md similarity index 100% rename from packages/services/faker/ops/job-run/README.md rename to packages/core/services/faker/ops/job-run/README.md diff --git a/packages/services/faker/ops/job-run/src/lib.rs b/packages/core/services/faker/ops/job-run/src/lib.rs similarity index 100% rename from packages/services/faker/ops/job-run/src/lib.rs rename to packages/core/services/faker/ops/job-run/src/lib.rs diff --git a/packages/services/faker/ops/job-run/tests/integration.rs b/packages/core/services/faker/ops/job-run/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/job-run/tests/integration.rs rename to packages/core/services/faker/ops/job-run/tests/integration.rs diff --git a/packages/services/faker/ops/job-template/Cargo.toml b/packages/core/services/faker/ops/job-template/Cargo.toml similarity index 100% rename from packages/services/faker/ops/job-template/Cargo.toml rename to packages/core/services/faker/ops/job-template/Cargo.toml diff --git a/packages/services/faker/ops/job-template/README.md b/packages/core/services/faker/ops/job-template/README.md similarity index 100% rename from packages/services/faker/ops/job-template/README.md rename to packages/core/services/faker/ops/job-template/README.md diff --git a/packages/services/faker/ops/job-template/src/lib.rs b/packages/core/services/faker/ops/job-template/src/lib.rs similarity index 100% rename from packages/services/faker/ops/job-template/src/lib.rs rename to packages/core/services/faker/ops/job-template/src/lib.rs diff --git a/packages/services/faker/ops/job-template/tests/integration.rs b/packages/core/services/faker/ops/job-template/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/job-template/tests/integration.rs rename to packages/core/services/faker/ops/job-template/tests/integration.rs diff --git a/packages/services/faker/ops/mm-lobby-row/Cargo.toml b/packages/core/services/faker/ops/mm-lobby-row/Cargo.toml similarity index 100% rename from packages/services/faker/ops/mm-lobby-row/Cargo.toml rename to packages/core/services/faker/ops/mm-lobby-row/Cargo.toml diff --git a/packages/services/faker/ops/mm-lobby-row/README.md b/packages/core/services/faker/ops/mm-lobby-row/README.md similarity index 100% rename from packages/services/faker/ops/mm-lobby-row/README.md rename to packages/core/services/faker/ops/mm-lobby-row/README.md diff --git a/packages/services/faker/ops/mm-lobby-row/src/lib.rs b/packages/core/services/faker/ops/mm-lobby-row/src/lib.rs similarity index 100% rename from packages/services/faker/ops/mm-lobby-row/src/lib.rs rename to packages/core/services/faker/ops/mm-lobby-row/src/lib.rs diff --git a/packages/services/faker/ops/mm-lobby-row/tests/integration.rs b/packages/core/services/faker/ops/mm-lobby-row/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/mm-lobby-row/tests/integration.rs rename to packages/core/services/faker/ops/mm-lobby-row/tests/integration.rs diff --git a/packages/services/faker/ops/mm-lobby/Cargo.toml b/packages/core/services/faker/ops/mm-lobby/Cargo.toml similarity index 100% rename from packages/services/faker/ops/mm-lobby/Cargo.toml rename to packages/core/services/faker/ops/mm-lobby/Cargo.toml diff --git a/packages/services/faker/ops/mm-lobby/README.md b/packages/core/services/faker/ops/mm-lobby/README.md similarity index 100% rename from packages/services/faker/ops/mm-lobby/README.md rename to packages/core/services/faker/ops/mm-lobby/README.md diff --git a/packages/services/faker/ops/mm-lobby/src/lib.rs b/packages/core/services/faker/ops/mm-lobby/src/lib.rs similarity index 100% rename from packages/services/faker/ops/mm-lobby/src/lib.rs rename to packages/core/services/faker/ops/mm-lobby/src/lib.rs diff --git a/packages/services/faker/ops/mm-lobby/tests/integration.rs b/packages/core/services/faker/ops/mm-lobby/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/mm-lobby/tests/integration.rs rename to packages/core/services/faker/ops/mm-lobby/tests/integration.rs diff --git a/packages/services/faker/ops/mm-player/Cargo.toml b/packages/core/services/faker/ops/mm-player/Cargo.toml similarity index 100% rename from packages/services/faker/ops/mm-player/Cargo.toml rename to packages/core/services/faker/ops/mm-player/Cargo.toml diff --git a/packages/services/faker/ops/mm-player/README.md b/packages/core/services/faker/ops/mm-player/README.md similarity index 100% rename from packages/services/faker/ops/mm-player/README.md rename to packages/core/services/faker/ops/mm-player/README.md diff --git a/packages/services/faker/ops/mm-player/src/lib.rs b/packages/core/services/faker/ops/mm-player/src/lib.rs similarity index 100% rename from packages/services/faker/ops/mm-player/src/lib.rs rename to packages/core/services/faker/ops/mm-player/src/lib.rs diff --git a/packages/services/faker/ops/mm-player/tests/integration.rs b/packages/core/services/faker/ops/mm-player/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/mm-player/tests/integration.rs rename to packages/core/services/faker/ops/mm-player/tests/integration.rs diff --git a/packages/services/faker/ops/region/Cargo.toml b/packages/core/services/faker/ops/region/Cargo.toml similarity index 100% rename from packages/services/faker/ops/region/Cargo.toml rename to packages/core/services/faker/ops/region/Cargo.toml diff --git a/packages/services/faker/ops/region/README.md b/packages/core/services/faker/ops/region/README.md similarity index 100% rename from packages/services/faker/ops/region/README.md rename to packages/core/services/faker/ops/region/README.md diff --git a/packages/services/faker/ops/region/src/lib.rs b/packages/core/services/faker/ops/region/src/lib.rs similarity index 100% rename from packages/services/faker/ops/region/src/lib.rs rename to packages/core/services/faker/ops/region/src/lib.rs diff --git a/packages/services/faker/ops/region/tests/integration.rs b/packages/core/services/faker/ops/region/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/region/tests/integration.rs rename to packages/core/services/faker/ops/region/tests/integration.rs diff --git a/packages/services/faker/ops/team/Cargo.toml b/packages/core/services/faker/ops/team/Cargo.toml similarity index 100% rename from packages/services/faker/ops/team/Cargo.toml rename to packages/core/services/faker/ops/team/Cargo.toml diff --git a/packages/services/faker/ops/team/README.md b/packages/core/services/faker/ops/team/README.md similarity index 100% rename from packages/services/faker/ops/team/README.md rename to packages/core/services/faker/ops/team/README.md diff --git a/packages/services/faker/ops/team/src/lib.rs b/packages/core/services/faker/ops/team/src/lib.rs similarity index 100% rename from packages/services/faker/ops/team/src/lib.rs rename to packages/core/services/faker/ops/team/src/lib.rs diff --git a/packages/services/faker/ops/team/tests/integration.rs b/packages/core/services/faker/ops/team/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/team/tests/integration.rs rename to packages/core/services/faker/ops/team/tests/integration.rs diff --git a/packages/services/faker/ops/user/Cargo.toml b/packages/core/services/faker/ops/user/Cargo.toml similarity index 100% rename from packages/services/faker/ops/user/Cargo.toml rename to packages/core/services/faker/ops/user/Cargo.toml diff --git a/packages/services/faker/ops/user/README.md b/packages/core/services/faker/ops/user/README.md similarity index 100% rename from packages/services/faker/ops/user/README.md rename to packages/core/services/faker/ops/user/README.md diff --git a/packages/services/faker/ops/user/src/lib.rs b/packages/core/services/faker/ops/user/src/lib.rs similarity index 100% rename from packages/services/faker/ops/user/src/lib.rs rename to packages/core/services/faker/ops/user/src/lib.rs diff --git a/packages/services/faker/ops/user/tests/integration.rs b/packages/core/services/faker/ops/user/tests/integration.rs similarity index 100% rename from packages/services/faker/ops/user/tests/integration.rs rename to packages/core/services/faker/ops/user/tests/integration.rs diff --git a/packages/services/faker/proto/build.proto b/packages/core/services/faker/proto/build.proto similarity index 100% rename from packages/services/faker/proto/build.proto rename to packages/core/services/faker/proto/build.proto diff --git a/packages/services/faker/proto/cdn-site.proto b/packages/core/services/faker/proto/cdn-site.proto similarity index 100% rename from packages/services/faker/proto/cdn-site.proto rename to packages/core/services/faker/proto/cdn-site.proto diff --git a/packages/services/faker/proto/game-namespace.proto b/packages/core/services/faker/proto/game-namespace.proto similarity index 100% rename from packages/services/faker/proto/game-namespace.proto rename to packages/core/services/faker/proto/game-namespace.proto diff --git a/packages/services/faker/proto/game-version.proto b/packages/core/services/faker/proto/game-version.proto similarity index 100% rename from packages/services/faker/proto/game-version.proto rename to packages/core/services/faker/proto/game-version.proto diff --git a/packages/services/faker/proto/game.proto b/packages/core/services/faker/proto/game.proto similarity index 100% rename from packages/services/faker/proto/game.proto rename to packages/core/services/faker/proto/game.proto diff --git a/packages/services/faker/proto/job-run.proto b/packages/core/services/faker/proto/job-run.proto similarity index 100% rename from packages/services/faker/proto/job-run.proto rename to packages/core/services/faker/proto/job-run.proto diff --git a/packages/services/faker/proto/job-template.proto b/packages/core/services/faker/proto/job-template.proto similarity index 100% rename from packages/services/faker/proto/job-template.proto rename to packages/core/services/faker/proto/job-template.proto diff --git a/packages/services/faker/proto/mm-lobby-row.proto b/packages/core/services/faker/proto/mm-lobby-row.proto similarity index 100% rename from packages/services/faker/proto/mm-lobby-row.proto rename to packages/core/services/faker/proto/mm-lobby-row.proto diff --git a/packages/services/faker/proto/mm-lobby.proto b/packages/core/services/faker/proto/mm-lobby.proto similarity index 100% rename from packages/services/faker/proto/mm-lobby.proto rename to packages/core/services/faker/proto/mm-lobby.proto diff --git a/packages/services/faker/proto/mm-player.proto b/packages/core/services/faker/proto/mm-player.proto similarity index 100% rename from packages/services/faker/proto/mm-player.proto rename to packages/core/services/faker/proto/mm-player.proto diff --git a/packages/services/faker/proto/region.proto b/packages/core/services/faker/proto/region.proto similarity index 100% rename from packages/services/faker/proto/region.proto rename to packages/core/services/faker/proto/region.proto diff --git a/packages/services/faker/proto/team.proto b/packages/core/services/faker/proto/team.proto similarity index 100% rename from packages/services/faker/proto/team.proto rename to packages/core/services/faker/proto/team.proto diff --git a/packages/services/faker/proto/user.proto b/packages/core/services/faker/proto/user.proto similarity index 100% rename from packages/services/faker/proto/user.proto rename to packages/core/services/faker/proto/user.proto diff --git a/packages/services/game/db/game/migrations/20200101000000_init.down.sql b/packages/core/services/game/db/game/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20200101000000_init.down.sql rename to packages/core/services/game/db/game/migrations/20200101000000_init.down.sql diff --git a/packages/services/game/db/game/migrations/20200101000000_init.up.sql b/packages/core/services/game/db/game/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20200101000000_init.up.sql rename to packages/core/services/game/db/game/migrations/20200101000000_init.up.sql diff --git a/packages/services/game/db/game/migrations/20210526073353_namespace_name_id.down.sql b/packages/core/services/game/db/game/migrations/20210526073353_namespace_name_id.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20210526073353_namespace_name_id.down.sql rename to packages/core/services/game/db/game/migrations/20210526073353_namespace_name_id.down.sql diff --git a/packages/services/game/db/game/migrations/20210526073353_namespace_name_id.up.sql b/packages/core/services/game/db/game/migrations/20210526073353_namespace_name_id.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20210526073353_namespace_name_id.up.sql rename to packages/core/services/game/db/game/migrations/20210526073353_namespace_name_id.up.sql diff --git a/packages/services/game/db/game/migrations/20220621183724_add_logo_and_banner.down.sql b/packages/core/services/game/db/game/migrations/20220621183724_add_logo_and_banner.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20220621183724_add_logo_and_banner.down.sql rename to packages/core/services/game/db/game/migrations/20220621183724_add_logo_and_banner.down.sql diff --git a/packages/services/game/db/game/migrations/20220621183724_add_logo_and_banner.up.sql b/packages/core/services/game/db/game/migrations/20220621183724_add_logo_and_banner.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20220621183724_add_logo_and_banner.up.sql rename to packages/core/services/game/db/game/migrations/20220621183724_add_logo_and_banner.up.sql diff --git a/packages/services/game/db/game/migrations/20230216000606_add_subscription.down.sql b/packages/core/services/game/db/game/migrations/20230216000606_add_subscription.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20230216000606_add_subscription.down.sql rename to packages/core/services/game/db/game/migrations/20230216000606_add_subscription.down.sql diff --git a/packages/services/game/db/game/migrations/20230216000606_add_subscription.up.sql b/packages/core/services/game/db/game/migrations/20230216000606_add_subscription.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20230216000606_add_subscription.up.sql rename to packages/core/services/game/db/game/migrations/20230216000606_add_subscription.up.sql diff --git a/packages/services/game/db/game/migrations/20230222234541_version_history.down.sql b/packages/core/services/game/db/game/migrations/20230222234541_version_history.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20230222234541_version_history.down.sql rename to packages/core/services/game/db/game/migrations/20230222234541_version_history.down.sql diff --git a/packages/services/game/db/game/migrations/20230222234541_version_history.up.sql b/packages/core/services/game/db/game/migrations/20230222234541_version_history.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20230222234541_version_history.up.sql rename to packages/core/services/game/db/game/migrations/20230222234541_version_history.up.sql diff --git a/packages/services/game/db/game/migrations/20230411084203_index_game_version_game_id.down.sql b/packages/core/services/game/db/game/migrations/20230411084203_index_game_version_game_id.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20230411084203_index_game_version_game_id.down.sql rename to packages/core/services/game/db/game/migrations/20230411084203_index_game_version_game_id.down.sql diff --git a/packages/services/game/db/game/migrations/20230411084203_index_game_version_game_id.up.sql b/packages/core/services/game/db/game/migrations/20230411084203_index_game_version_game_id.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20230411084203_index_game_version_game_id.up.sql rename to packages/core/services/game/db/game/migrations/20230411084203_index_game_version_game_id.up.sql diff --git a/packages/services/game/db/game/migrations/20231003181131_index.down.sql b/packages/core/services/game/db/game/migrations/20231003181131_index.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20231003181131_index.down.sql rename to packages/core/services/game/db/game/migrations/20231003181131_index.down.sql diff --git a/packages/services/game/db/game/migrations/20231003181131_index.up.sql b/packages/core/services/game/db/game/migrations/20231003181131_index.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20231003181131_index.up.sql rename to packages/core/services/game/db/game/migrations/20231003181131_index.up.sql diff --git a/packages/services/game/db/game/migrations/20240102233938_remove_plan_subscription.down.sql b/packages/core/services/game/db/game/migrations/20240102233938_remove_plan_subscription.down.sql similarity index 100% rename from packages/services/game/db/game/migrations/20240102233938_remove_plan_subscription.down.sql rename to packages/core/services/game/db/game/migrations/20240102233938_remove_plan_subscription.down.sql diff --git a/packages/services/game/db/game/migrations/20240102233938_remove_plan_subscription.up.sql b/packages/core/services/game/db/game/migrations/20240102233938_remove_plan_subscription.up.sql similarity index 100% rename from packages/services/game/db/game/migrations/20240102233938_remove_plan_subscription.up.sql rename to packages/core/services/game/db/game/migrations/20240102233938_remove_plan_subscription.up.sql diff --git a/packages/services/game/ops/banner-upload-complete/Cargo.toml b/packages/core/services/game/ops/banner-upload-complete/Cargo.toml similarity index 100% rename from packages/services/game/ops/banner-upload-complete/Cargo.toml rename to packages/core/services/game/ops/banner-upload-complete/Cargo.toml diff --git a/packages/services/game/ops/banner-upload-complete/README.md b/packages/core/services/game/ops/banner-upload-complete/README.md similarity index 100% rename from packages/services/game/ops/banner-upload-complete/README.md rename to packages/core/services/game/ops/banner-upload-complete/README.md diff --git a/packages/services/game/ops/banner-upload-complete/src/lib.rs b/packages/core/services/game/ops/banner-upload-complete/src/lib.rs similarity index 100% rename from packages/services/game/ops/banner-upload-complete/src/lib.rs rename to packages/core/services/game/ops/banner-upload-complete/src/lib.rs diff --git a/packages/services/game/ops/banner-upload-complete/tests/integration.rs b/packages/core/services/game/ops/banner-upload-complete/tests/integration.rs similarity index 100% rename from packages/services/game/ops/banner-upload-complete/tests/integration.rs rename to packages/core/services/game/ops/banner-upload-complete/tests/integration.rs diff --git a/packages/services/game/ops/create/Cargo.toml b/packages/core/services/game/ops/create/Cargo.toml similarity index 100% rename from packages/services/game/ops/create/Cargo.toml rename to packages/core/services/game/ops/create/Cargo.toml diff --git a/packages/services/game/ops/create/src/lib.rs b/packages/core/services/game/ops/create/src/lib.rs similarity index 100% rename from packages/services/game/ops/create/src/lib.rs rename to packages/core/services/game/ops/create/src/lib.rs diff --git a/packages/services/game/ops/create/tests/integration.rs b/packages/core/services/game/ops/create/tests/integration.rs similarity index 100% rename from packages/services/game/ops/create/tests/integration.rs rename to packages/core/services/game/ops/create/tests/integration.rs diff --git a/packages/services/game/ops/get/Cargo.toml b/packages/core/services/game/ops/get/Cargo.toml similarity index 100% rename from packages/services/game/ops/get/Cargo.toml rename to packages/core/services/game/ops/get/Cargo.toml diff --git a/packages/services/game/ops/get/src/lib.rs b/packages/core/services/game/ops/get/src/lib.rs similarity index 100% rename from packages/services/game/ops/get/src/lib.rs rename to packages/core/services/game/ops/get/src/lib.rs diff --git a/packages/services/game/ops/get/tests/integration.rs b/packages/core/services/game/ops/get/tests/integration.rs similarity index 100% rename from packages/services/game/ops/get/tests/integration.rs rename to packages/core/services/game/ops/get/tests/integration.rs diff --git a/packages/services/game/ops/list-all/Cargo.toml b/packages/core/services/game/ops/list-all/Cargo.toml similarity index 100% rename from packages/services/game/ops/list-all/Cargo.toml rename to packages/core/services/game/ops/list-all/Cargo.toml diff --git a/packages/services/game/ops/list-all/README.md b/packages/core/services/game/ops/list-all/README.md similarity index 100% rename from packages/services/game/ops/list-all/README.md rename to packages/core/services/game/ops/list-all/README.md diff --git a/packages/services/game/ops/list-all/src/lib.rs b/packages/core/services/game/ops/list-all/src/lib.rs similarity index 100% rename from packages/services/game/ops/list-all/src/lib.rs rename to packages/core/services/game/ops/list-all/src/lib.rs diff --git a/packages/services/game/ops/list-all/tests/integration.rs b/packages/core/services/game/ops/list-all/tests/integration.rs similarity index 100% rename from packages/services/game/ops/list-all/tests/integration.rs rename to packages/core/services/game/ops/list-all/tests/integration.rs diff --git a/packages/services/game/ops/list-for-team/Cargo.toml b/packages/core/services/game/ops/list-for-team/Cargo.toml similarity index 100% rename from packages/services/game/ops/list-for-team/Cargo.toml rename to packages/core/services/game/ops/list-for-team/Cargo.toml diff --git a/packages/services/game/ops/list-for-team/src/lib.rs b/packages/core/services/game/ops/list-for-team/src/lib.rs similarity index 100% rename from packages/services/game/ops/list-for-team/src/lib.rs rename to packages/core/services/game/ops/list-for-team/src/lib.rs diff --git a/packages/services/game/ops/list-for-team/tests/integration.rs b/packages/core/services/game/ops/list-for-team/tests/integration.rs similarity index 100% rename from packages/services/game/ops/list-for-team/tests/integration.rs rename to packages/core/services/game/ops/list-for-team/tests/integration.rs diff --git a/packages/services/game/ops/logo-upload-complete/Cargo.toml b/packages/core/services/game/ops/logo-upload-complete/Cargo.toml similarity index 100% rename from packages/services/game/ops/logo-upload-complete/Cargo.toml rename to packages/core/services/game/ops/logo-upload-complete/Cargo.toml diff --git a/packages/services/game/ops/logo-upload-complete/README.md b/packages/core/services/game/ops/logo-upload-complete/README.md similarity index 100% rename from packages/services/game/ops/logo-upload-complete/README.md rename to packages/core/services/game/ops/logo-upload-complete/README.md diff --git a/packages/services/game/ops/logo-upload-complete/src/lib.rs b/packages/core/services/game/ops/logo-upload-complete/src/lib.rs similarity index 100% rename from packages/services/game/ops/logo-upload-complete/src/lib.rs rename to packages/core/services/game/ops/logo-upload-complete/src/lib.rs diff --git a/packages/services/game/ops/logo-upload-complete/tests/integration.rs b/packages/core/services/game/ops/logo-upload-complete/tests/integration.rs similarity index 100% rename from packages/services/game/ops/logo-upload-complete/tests/integration.rs rename to packages/core/services/game/ops/logo-upload-complete/tests/integration.rs diff --git a/packages/services/game/ops/namespace-create/Cargo.toml b/packages/core/services/game/ops/namespace-create/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-create/Cargo.toml rename to packages/core/services/game/ops/namespace-create/Cargo.toml diff --git a/packages/services/game/ops/namespace-create/README.md b/packages/core/services/game/ops/namespace-create/README.md similarity index 100% rename from packages/services/game/ops/namespace-create/README.md rename to packages/core/services/game/ops/namespace-create/README.md diff --git a/packages/services/game/ops/namespace-create/src/lib.rs b/packages/core/services/game/ops/namespace-create/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-create/src/lib.rs rename to packages/core/services/game/ops/namespace-create/src/lib.rs diff --git a/packages/services/game/ops/namespace-create/tests/integration.rs b/packages/core/services/game/ops/namespace-create/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-create/tests/integration.rs rename to packages/core/services/game/ops/namespace-create/tests/integration.rs diff --git a/packages/services/game/ops/namespace-get/Cargo.toml b/packages/core/services/game/ops/namespace-get/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-get/Cargo.toml rename to packages/core/services/game/ops/namespace-get/Cargo.toml diff --git a/packages/services/game/ops/namespace-get/README.md b/packages/core/services/game/ops/namespace-get/README.md similarity index 100% rename from packages/services/game/ops/namespace-get/README.md rename to packages/core/services/game/ops/namespace-get/README.md diff --git a/packages/services/game/ops/namespace-get/src/lib.rs b/packages/core/services/game/ops/namespace-get/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-get/src/lib.rs rename to packages/core/services/game/ops/namespace-get/src/lib.rs diff --git a/packages/services/game/ops/namespace-get/tests/integration.rs b/packages/core/services/game/ops/namespace-get/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-get/tests/integration.rs rename to packages/core/services/game/ops/namespace-get/tests/integration.rs diff --git a/packages/services/game/ops/namespace-list/Cargo.toml b/packages/core/services/game/ops/namespace-list/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-list/Cargo.toml rename to packages/core/services/game/ops/namespace-list/Cargo.toml diff --git a/packages/services/game/ops/namespace-list/README.md b/packages/core/services/game/ops/namespace-list/README.md similarity index 100% rename from packages/services/game/ops/namespace-list/README.md rename to packages/core/services/game/ops/namespace-list/README.md diff --git a/packages/services/game/ops/namespace-list/src/lib.rs b/packages/core/services/game/ops/namespace-list/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-list/src/lib.rs rename to packages/core/services/game/ops/namespace-list/src/lib.rs diff --git a/packages/services/game/ops/namespace-list/tests/integration.rs b/packages/core/services/game/ops/namespace-list/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-list/tests/integration.rs rename to packages/core/services/game/ops/namespace-list/tests/integration.rs diff --git a/packages/services/game/ops/namespace-resolve-name-id/Cargo.toml b/packages/core/services/game/ops/namespace-resolve-name-id/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-resolve-name-id/Cargo.toml rename to packages/core/services/game/ops/namespace-resolve-name-id/Cargo.toml diff --git a/packages/services/game/ops/namespace-resolve-name-id/README.md b/packages/core/services/game/ops/namespace-resolve-name-id/README.md similarity index 100% rename from packages/services/game/ops/namespace-resolve-name-id/README.md rename to packages/core/services/game/ops/namespace-resolve-name-id/README.md diff --git a/packages/services/game/ops/namespace-resolve-name-id/src/lib.rs b/packages/core/services/game/ops/namespace-resolve-name-id/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-resolve-name-id/src/lib.rs rename to packages/core/services/game/ops/namespace-resolve-name-id/src/lib.rs diff --git a/packages/services/game/ops/namespace-resolve-name-id/tests/integration.rs b/packages/core/services/game/ops/namespace-resolve-name-id/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-resolve-name-id/tests/integration.rs rename to packages/core/services/game/ops/namespace-resolve-name-id/tests/integration.rs diff --git a/packages/services/game/ops/namespace-resolve-url/Cargo.toml b/packages/core/services/game/ops/namespace-resolve-url/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-resolve-url/Cargo.toml rename to packages/core/services/game/ops/namespace-resolve-url/Cargo.toml diff --git a/packages/services/game/ops/namespace-resolve-url/README.md b/packages/core/services/game/ops/namespace-resolve-url/README.md similarity index 100% rename from packages/services/game/ops/namespace-resolve-url/README.md rename to packages/core/services/game/ops/namespace-resolve-url/README.md diff --git a/packages/services/game/ops/namespace-resolve-url/src/lib.rs b/packages/core/services/game/ops/namespace-resolve-url/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-resolve-url/src/lib.rs rename to packages/core/services/game/ops/namespace-resolve-url/src/lib.rs diff --git a/packages/services/game/ops/namespace-resolve-url/tests/integration.rs b/packages/core/services/game/ops/namespace-resolve-url/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-resolve-url/tests/integration.rs rename to packages/core/services/game/ops/namespace-resolve-url/tests/integration.rs diff --git a/packages/services/game/ops/namespace-validate/Cargo.toml b/packages/core/services/game/ops/namespace-validate/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-validate/Cargo.toml rename to packages/core/services/game/ops/namespace-validate/Cargo.toml diff --git a/packages/services/game/ops/namespace-validate/README.md b/packages/core/services/game/ops/namespace-validate/README.md similarity index 100% rename from packages/services/game/ops/namespace-validate/README.md rename to packages/core/services/game/ops/namespace-validate/README.md diff --git a/packages/services/game/ops/namespace-validate/src/lib.rs b/packages/core/services/game/ops/namespace-validate/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-validate/src/lib.rs rename to packages/core/services/game/ops/namespace-validate/src/lib.rs diff --git a/packages/services/game/ops/namespace-validate/tests/integration.rs b/packages/core/services/game/ops/namespace-validate/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-validate/tests/integration.rs rename to packages/core/services/game/ops/namespace-validate/tests/integration.rs diff --git a/packages/services/game/ops/namespace-version-history-list/Cargo.toml b/packages/core/services/game/ops/namespace-version-history-list/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-version-history-list/Cargo.toml rename to packages/core/services/game/ops/namespace-version-history-list/Cargo.toml diff --git a/packages/services/game/ops/namespace-version-history-list/README.md b/packages/core/services/game/ops/namespace-version-history-list/README.md similarity index 100% rename from packages/services/game/ops/namespace-version-history-list/README.md rename to packages/core/services/game/ops/namespace-version-history-list/README.md diff --git a/packages/services/game/ops/namespace-version-history-list/src/lib.rs b/packages/core/services/game/ops/namespace-version-history-list/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-version-history-list/src/lib.rs rename to packages/core/services/game/ops/namespace-version-history-list/src/lib.rs diff --git a/packages/services/game/ops/namespace-version-history-list/tests/integration.rs b/packages/core/services/game/ops/namespace-version-history-list/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-version-history-list/tests/integration.rs rename to packages/core/services/game/ops/namespace-version-history-list/tests/integration.rs diff --git a/packages/services/game/ops/namespace-version-set/Cargo.toml b/packages/core/services/game/ops/namespace-version-set/Cargo.toml similarity index 100% rename from packages/services/game/ops/namespace-version-set/Cargo.toml rename to packages/core/services/game/ops/namespace-version-set/Cargo.toml diff --git a/packages/services/game/ops/namespace-version-set/README.md b/packages/core/services/game/ops/namespace-version-set/README.md similarity index 100% rename from packages/services/game/ops/namespace-version-set/README.md rename to packages/core/services/game/ops/namespace-version-set/README.md diff --git a/packages/services/game/ops/namespace-version-set/src/lib.rs b/packages/core/services/game/ops/namespace-version-set/src/lib.rs similarity index 100% rename from packages/services/game/ops/namespace-version-set/src/lib.rs rename to packages/core/services/game/ops/namespace-version-set/src/lib.rs diff --git a/packages/services/game/ops/namespace-version-set/tests/integration.rs b/packages/core/services/game/ops/namespace-version-set/tests/integration.rs similarity index 100% rename from packages/services/game/ops/namespace-version-set/tests/integration.rs rename to packages/core/services/game/ops/namespace-version-set/tests/integration.rs diff --git a/packages/services/game/ops/recommend/Cargo.toml b/packages/core/services/game/ops/recommend/Cargo.toml similarity index 100% rename from packages/services/game/ops/recommend/Cargo.toml rename to packages/core/services/game/ops/recommend/Cargo.toml diff --git a/packages/services/game/ops/recommend/src/lib.rs b/packages/core/services/game/ops/recommend/src/lib.rs similarity index 100% rename from packages/services/game/ops/recommend/src/lib.rs rename to packages/core/services/game/ops/recommend/src/lib.rs diff --git a/packages/services/game/ops/recommend/tests/integration.rs b/packages/core/services/game/ops/recommend/tests/integration.rs similarity index 100% rename from packages/services/game/ops/recommend/tests/integration.rs rename to packages/core/services/game/ops/recommend/tests/integration.rs diff --git a/packages/services/game/ops/resolve-name-id/Cargo.toml b/packages/core/services/game/ops/resolve-name-id/Cargo.toml similarity index 100% rename from packages/services/game/ops/resolve-name-id/Cargo.toml rename to packages/core/services/game/ops/resolve-name-id/Cargo.toml diff --git a/packages/services/game/ops/resolve-name-id/README.md b/packages/core/services/game/ops/resolve-name-id/README.md similarity index 100% rename from packages/services/game/ops/resolve-name-id/README.md rename to packages/core/services/game/ops/resolve-name-id/README.md diff --git a/packages/services/game/ops/resolve-name-id/src/lib.rs b/packages/core/services/game/ops/resolve-name-id/src/lib.rs similarity index 100% rename from packages/services/game/ops/resolve-name-id/src/lib.rs rename to packages/core/services/game/ops/resolve-name-id/src/lib.rs diff --git a/packages/services/game/ops/resolve-name-id/tests/integration.rs b/packages/core/services/game/ops/resolve-name-id/tests/integration.rs similarity index 100% rename from packages/services/game/ops/resolve-name-id/tests/integration.rs rename to packages/core/services/game/ops/resolve-name-id/tests/integration.rs diff --git a/packages/services/game/ops/resolve-namespace-id/Cargo.toml b/packages/core/services/game/ops/resolve-namespace-id/Cargo.toml similarity index 100% rename from packages/services/game/ops/resolve-namespace-id/Cargo.toml rename to packages/core/services/game/ops/resolve-namespace-id/Cargo.toml diff --git a/packages/services/game/ops/resolve-namespace-id/README.md b/packages/core/services/game/ops/resolve-namespace-id/README.md similarity index 100% rename from packages/services/game/ops/resolve-namespace-id/README.md rename to packages/core/services/game/ops/resolve-namespace-id/README.md diff --git a/packages/services/game/ops/resolve-namespace-id/src/lib.rs b/packages/core/services/game/ops/resolve-namespace-id/src/lib.rs similarity index 100% rename from packages/services/game/ops/resolve-namespace-id/src/lib.rs rename to packages/core/services/game/ops/resolve-namespace-id/src/lib.rs diff --git a/packages/services/game/ops/resolve-namespace-id/tests/integration.rs b/packages/core/services/game/ops/resolve-namespace-id/tests/integration.rs similarity index 100% rename from packages/services/game/ops/resolve-namespace-id/tests/integration.rs rename to packages/core/services/game/ops/resolve-namespace-id/tests/integration.rs diff --git a/packages/services/game/ops/token-development-validate/Cargo.toml b/packages/core/services/game/ops/token-development-validate/Cargo.toml similarity index 100% rename from packages/services/game/ops/token-development-validate/Cargo.toml rename to packages/core/services/game/ops/token-development-validate/Cargo.toml diff --git a/packages/services/game/ops/token-development-validate/README.md b/packages/core/services/game/ops/token-development-validate/README.md similarity index 100% rename from packages/services/game/ops/token-development-validate/README.md rename to packages/core/services/game/ops/token-development-validate/README.md diff --git a/packages/services/game/ops/token-development-validate/src/lib.rs b/packages/core/services/game/ops/token-development-validate/src/lib.rs similarity index 100% rename from packages/services/game/ops/token-development-validate/src/lib.rs rename to packages/core/services/game/ops/token-development-validate/src/lib.rs diff --git a/packages/services/game/ops/token-development-validate/tests/integration.rs b/packages/core/services/game/ops/token-development-validate/tests/integration.rs similarity index 100% rename from packages/services/game/ops/token-development-validate/tests/integration.rs rename to packages/core/services/game/ops/token-development-validate/tests/integration.rs diff --git a/packages/services/game/ops/validate/Cargo.toml b/packages/core/services/game/ops/validate/Cargo.toml similarity index 100% rename from packages/services/game/ops/validate/Cargo.toml rename to packages/core/services/game/ops/validate/Cargo.toml diff --git a/packages/services/game/ops/validate/README.md b/packages/core/services/game/ops/validate/README.md similarity index 100% rename from packages/services/game/ops/validate/README.md rename to packages/core/services/game/ops/validate/README.md diff --git a/packages/services/game/ops/validate/src/lib.rs b/packages/core/services/game/ops/validate/src/lib.rs similarity index 100% rename from packages/services/game/ops/validate/src/lib.rs rename to packages/core/services/game/ops/validate/src/lib.rs diff --git a/packages/services/game/ops/validate/tests/integration.rs b/packages/core/services/game/ops/validate/tests/integration.rs similarity index 100% rename from packages/services/game/ops/validate/tests/integration.rs rename to packages/core/services/game/ops/validate/tests/integration.rs diff --git a/packages/services/game/ops/version-create/Cargo.toml b/packages/core/services/game/ops/version-create/Cargo.toml similarity index 100% rename from packages/services/game/ops/version-create/Cargo.toml rename to packages/core/services/game/ops/version-create/Cargo.toml diff --git a/packages/services/game/ops/version-create/README.md b/packages/core/services/game/ops/version-create/README.md similarity index 100% rename from packages/services/game/ops/version-create/README.md rename to packages/core/services/game/ops/version-create/README.md diff --git a/packages/services/game/ops/version-create/src/lib.rs b/packages/core/services/game/ops/version-create/src/lib.rs similarity index 100% rename from packages/services/game/ops/version-create/src/lib.rs rename to packages/core/services/game/ops/version-create/src/lib.rs diff --git a/packages/services/game/ops/version-create/tests/integration.rs b/packages/core/services/game/ops/version-create/tests/integration.rs similarity index 100% rename from packages/services/game/ops/version-create/tests/integration.rs rename to packages/core/services/game/ops/version-create/tests/integration.rs diff --git a/packages/services/game/ops/version-get/Cargo.toml b/packages/core/services/game/ops/version-get/Cargo.toml similarity index 100% rename from packages/services/game/ops/version-get/Cargo.toml rename to packages/core/services/game/ops/version-get/Cargo.toml diff --git a/packages/services/game/ops/version-get/README.md b/packages/core/services/game/ops/version-get/README.md similarity index 100% rename from packages/services/game/ops/version-get/README.md rename to packages/core/services/game/ops/version-get/README.md diff --git a/packages/services/game/ops/version-get/src/lib.rs b/packages/core/services/game/ops/version-get/src/lib.rs similarity index 100% rename from packages/services/game/ops/version-get/src/lib.rs rename to packages/core/services/game/ops/version-get/src/lib.rs diff --git a/packages/services/game/ops/version-get/tests/integration.rs b/packages/core/services/game/ops/version-get/tests/integration.rs similarity index 100% rename from packages/services/game/ops/version-get/tests/integration.rs rename to packages/core/services/game/ops/version-get/tests/integration.rs diff --git a/packages/services/game/ops/version-list/Cargo.toml b/packages/core/services/game/ops/version-list/Cargo.toml similarity index 100% rename from packages/services/game/ops/version-list/Cargo.toml rename to packages/core/services/game/ops/version-list/Cargo.toml diff --git a/packages/services/game/ops/version-list/README.md b/packages/core/services/game/ops/version-list/README.md similarity index 100% rename from packages/services/game/ops/version-list/README.md rename to packages/core/services/game/ops/version-list/README.md diff --git a/packages/services/game/ops/version-list/src/lib.rs b/packages/core/services/game/ops/version-list/src/lib.rs similarity index 100% rename from packages/services/game/ops/version-list/src/lib.rs rename to packages/core/services/game/ops/version-list/src/lib.rs diff --git a/packages/services/game/ops/version-list/tests/integration.rs b/packages/core/services/game/ops/version-list/tests/integration.rs similarity index 100% rename from packages/services/game/ops/version-list/tests/integration.rs rename to packages/core/services/game/ops/version-list/tests/integration.rs diff --git a/packages/services/game/ops/version-validate/Cargo.toml b/packages/core/services/game/ops/version-validate/Cargo.toml similarity index 100% rename from packages/services/game/ops/version-validate/Cargo.toml rename to packages/core/services/game/ops/version-validate/Cargo.toml diff --git a/packages/services/game/ops/version-validate/README.md b/packages/core/services/game/ops/version-validate/README.md similarity index 100% rename from packages/services/game/ops/version-validate/README.md rename to packages/core/services/game/ops/version-validate/README.md diff --git a/packages/services/game/ops/version-validate/src/lib.rs b/packages/core/services/game/ops/version-validate/src/lib.rs similarity index 100% rename from packages/services/game/ops/version-validate/src/lib.rs rename to packages/core/services/game/ops/version-validate/src/lib.rs diff --git a/packages/services/game/ops/version-validate/tests/integration.rs b/packages/core/services/game/ops/version-validate/tests/integration.rs similarity index 100% rename from packages/services/game/ops/version-validate/tests/integration.rs rename to packages/core/services/game/ops/version-validate/tests/integration.rs diff --git a/packages/services/game/proto/banner-upload-complete.proto b/packages/core/services/game/proto/banner-upload-complete.proto similarity index 100% rename from packages/services/game/proto/banner-upload-complete.proto rename to packages/core/services/game/proto/banner-upload-complete.proto diff --git a/packages/services/game/proto/create.proto b/packages/core/services/game/proto/create.proto similarity index 100% rename from packages/services/game/proto/create.proto rename to packages/core/services/game/proto/create.proto diff --git a/packages/services/game/proto/get.proto b/packages/core/services/game/proto/get.proto similarity index 100% rename from packages/services/game/proto/get.proto rename to packages/core/services/game/proto/get.proto diff --git a/packages/services/game/proto/list-all.proto b/packages/core/services/game/proto/list-all.proto similarity index 100% rename from packages/services/game/proto/list-all.proto rename to packages/core/services/game/proto/list-all.proto diff --git a/packages/services/game/proto/list-for-team.proto b/packages/core/services/game/proto/list-for-team.proto similarity index 100% rename from packages/services/game/proto/list-for-team.proto rename to packages/core/services/game/proto/list-for-team.proto diff --git a/packages/services/game/proto/logo-upload-complete.proto b/packages/core/services/game/proto/logo-upload-complete.proto similarity index 100% rename from packages/services/game/proto/logo-upload-complete.proto rename to packages/core/services/game/proto/logo-upload-complete.proto diff --git a/packages/services/game/proto/msg/create-complete.proto b/packages/core/services/game/proto/msg/create-complete.proto similarity index 100% rename from packages/services/game/proto/msg/create-complete.proto rename to packages/core/services/game/proto/msg/create-complete.proto diff --git a/packages/services/game/proto/msg/ns-version-set-complete.proto b/packages/core/services/game/proto/msg/ns-version-set-complete.proto similarity index 100% rename from packages/services/game/proto/msg/ns-version-set-complete.proto rename to packages/core/services/game/proto/msg/ns-version-set-complete.proto diff --git a/packages/services/game/proto/msg/update.proto b/packages/core/services/game/proto/msg/update.proto similarity index 100% rename from packages/services/game/proto/msg/update.proto rename to packages/core/services/game/proto/msg/update.proto diff --git a/packages/services/game/proto/namespace-create.proto b/packages/core/services/game/proto/namespace-create.proto similarity index 100% rename from packages/services/game/proto/namespace-create.proto rename to packages/core/services/game/proto/namespace-create.proto diff --git a/packages/services/game/proto/namespace-get.proto b/packages/core/services/game/proto/namespace-get.proto similarity index 100% rename from packages/services/game/proto/namespace-get.proto rename to packages/core/services/game/proto/namespace-get.proto diff --git a/packages/services/game/proto/namespace-list.proto b/packages/core/services/game/proto/namespace-list.proto similarity index 100% rename from packages/services/game/proto/namespace-list.proto rename to packages/core/services/game/proto/namespace-list.proto diff --git a/packages/services/game/proto/namespace-resolve-name-id.proto b/packages/core/services/game/proto/namespace-resolve-name-id.proto similarity index 100% rename from packages/services/game/proto/namespace-resolve-name-id.proto rename to packages/core/services/game/proto/namespace-resolve-name-id.proto diff --git a/packages/services/game/proto/namespace-resolve-url.proto b/packages/core/services/game/proto/namespace-resolve-url.proto similarity index 100% rename from packages/services/game/proto/namespace-resolve-url.proto rename to packages/core/services/game/proto/namespace-resolve-url.proto diff --git a/packages/services/game/proto/namespace-validate.proto b/packages/core/services/game/proto/namespace-validate.proto similarity index 100% rename from packages/services/game/proto/namespace-validate.proto rename to packages/core/services/game/proto/namespace-validate.proto diff --git a/packages/services/game/proto/namespace-version-history-list.proto b/packages/core/services/game/proto/namespace-version-history-list.proto similarity index 100% rename from packages/services/game/proto/namespace-version-history-list.proto rename to packages/core/services/game/proto/namespace-version-history-list.proto diff --git a/packages/services/game/proto/namespace-version-set.proto b/packages/core/services/game/proto/namespace-version-set.proto similarity index 100% rename from packages/services/game/proto/namespace-version-set.proto rename to packages/core/services/game/proto/namespace-version-set.proto diff --git a/packages/services/game/proto/recommend.proto b/packages/core/services/game/proto/recommend.proto similarity index 100% rename from packages/services/game/proto/recommend.proto rename to packages/core/services/game/proto/recommend.proto diff --git a/packages/services/game/proto/resolve-name-id.proto b/packages/core/services/game/proto/resolve-name-id.proto similarity index 100% rename from packages/services/game/proto/resolve-name-id.proto rename to packages/core/services/game/proto/resolve-name-id.proto diff --git a/packages/services/game/proto/resolve-namespace-id.proto b/packages/core/services/game/proto/resolve-namespace-id.proto similarity index 100% rename from packages/services/game/proto/resolve-namespace-id.proto rename to packages/core/services/game/proto/resolve-namespace-id.proto diff --git a/packages/services/game/proto/token-development-validate.proto b/packages/core/services/game/proto/token-development-validate.proto similarity index 100% rename from packages/services/game/proto/token-development-validate.proto rename to packages/core/services/game/proto/token-development-validate.proto diff --git a/packages/services/game/proto/validate.proto b/packages/core/services/game/proto/validate.proto similarity index 100% rename from packages/services/game/proto/validate.proto rename to packages/core/services/game/proto/validate.proto diff --git a/packages/services/game/proto/version-create.proto b/packages/core/services/game/proto/version-create.proto similarity index 100% rename from packages/services/game/proto/version-create.proto rename to packages/core/services/game/proto/version-create.proto diff --git a/packages/services/game/proto/version-get.proto b/packages/core/services/game/proto/version-get.proto similarity index 100% rename from packages/services/game/proto/version-get.proto rename to packages/core/services/game/proto/version-get.proto diff --git a/packages/services/game/proto/version-list.proto b/packages/core/services/game/proto/version-list.proto similarity index 100% rename from packages/services/game/proto/version-list.proto rename to packages/core/services/game/proto/version-list.proto diff --git a/packages/services/game/proto/version-validate.proto b/packages/core/services/game/proto/version-validate.proto similarity index 100% rename from packages/services/game/proto/version-validate.proto rename to packages/core/services/game/proto/version-validate.proto diff --git a/packages/services/ip/db/info/migrations/20200101000000_init.down.sql b/packages/core/services/ip/db/info/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/ip/db/info/migrations/20200101000000_init.down.sql rename to packages/core/services/ip/db/info/migrations/20200101000000_init.down.sql diff --git a/packages/services/ip/db/info/migrations/20200101000000_init.up.sql b/packages/core/services/ip/db/info/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/ip/db/info/migrations/20200101000000_init.up.sql rename to packages/core/services/ip/db/info/migrations/20200101000000_init.up.sql diff --git a/packages/services/ip/ops/info/Cargo.toml b/packages/core/services/ip/ops/info/Cargo.toml similarity index 100% rename from packages/services/ip/ops/info/Cargo.toml rename to packages/core/services/ip/ops/info/Cargo.toml diff --git a/packages/services/ip/ops/info/README.md b/packages/core/services/ip/ops/info/README.md similarity index 100% rename from packages/services/ip/ops/info/README.md rename to packages/core/services/ip/ops/info/README.md diff --git a/packages/services/ip/ops/info/src/lib.rs b/packages/core/services/ip/ops/info/src/lib.rs similarity index 100% rename from packages/services/ip/ops/info/src/lib.rs rename to packages/core/services/ip/ops/info/src/lib.rs diff --git a/packages/services/ip/ops/info/tests/integration.rs b/packages/core/services/ip/ops/info/tests/integration.rs similarity index 100% rename from packages/services/ip/ops/info/tests/integration.rs rename to packages/core/services/ip/ops/info/tests/integration.rs diff --git a/packages/services/ip/proto/info.proto b/packages/core/services/ip/proto/info.proto similarity index 100% rename from packages/services/ip/proto/info.proto rename to packages/core/services/ip/proto/info.proto diff --git a/packages/services/job-log/db/log/migrations/20200101000000_init.down.sql b/packages/core/services/job-log/db/log/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/job-log/db/log/migrations/20200101000000_init.down.sql rename to packages/core/services/job-log/db/log/migrations/20200101000000_init.down.sql diff --git a/packages/services/job-log/db/log/migrations/20200101000000_init.up.sql b/packages/core/services/job-log/db/log/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/job-log/db/log/migrations/20200101000000_init.up.sql rename to packages/core/services/job-log/db/log/migrations/20200101000000_init.up.sql diff --git a/packages/services/job-log/ops/read/Cargo.toml b/packages/core/services/job-log/ops/read/Cargo.toml similarity index 100% rename from packages/services/job-log/ops/read/Cargo.toml rename to packages/core/services/job-log/ops/read/Cargo.toml diff --git a/packages/services/job-log/ops/read/README.md b/packages/core/services/job-log/ops/read/README.md similarity index 100% rename from packages/services/job-log/ops/read/README.md rename to packages/core/services/job-log/ops/read/README.md diff --git a/packages/services/job-log/ops/read/src/lib.rs b/packages/core/services/job-log/ops/read/src/lib.rs similarity index 100% rename from packages/services/job-log/ops/read/src/lib.rs rename to packages/core/services/job-log/ops/read/src/lib.rs diff --git a/packages/services/job-log/ops/read/tests/integration.rs b/packages/core/services/job-log/ops/read/tests/integration.rs similarity index 100% rename from packages/services/job-log/ops/read/tests/integration.rs rename to packages/core/services/job-log/ops/read/tests/integration.rs diff --git a/packages/services/job-log/proto/msg/export-complete.proto b/packages/core/services/job-log/proto/msg/export-complete.proto similarity index 100% rename from packages/services/job-log/proto/msg/export-complete.proto rename to packages/core/services/job-log/proto/msg/export-complete.proto diff --git a/packages/services/job-log/proto/msg/export.proto b/packages/core/services/job-log/proto/msg/export.proto similarity index 100% rename from packages/services/job-log/proto/msg/export.proto rename to packages/core/services/job-log/proto/msg/export.proto diff --git a/packages/services/job-log/proto/read.proto b/packages/core/services/job-log/proto/read.proto similarity index 100% rename from packages/services/job-log/proto/read.proto rename to packages/core/services/job-log/proto/read.proto diff --git a/packages/services/job-log/worker/Cargo.toml b/packages/core/services/job-log/worker/Cargo.toml similarity index 100% rename from packages/services/job-log/worker/Cargo.toml rename to packages/core/services/job-log/worker/Cargo.toml diff --git a/packages/services/job-log/worker/src/lib.rs b/packages/core/services/job-log/worker/src/lib.rs similarity index 100% rename from packages/services/job-log/worker/src/lib.rs rename to packages/core/services/job-log/worker/src/lib.rs diff --git a/packages/services/job-log/worker/src/workers/export.rs b/packages/core/services/job-log/worker/src/workers/export.rs similarity index 100% rename from packages/services/job-log/worker/src/workers/export.rs rename to packages/core/services/job-log/worker/src/workers/export.rs diff --git a/packages/services/job-log/worker/src/workers/mod.rs b/packages/core/services/job-log/worker/src/workers/mod.rs similarity index 100% rename from packages/services/job-log/worker/src/workers/mod.rs rename to packages/core/services/job-log/worker/src/workers/mod.rs diff --git a/packages/services/job-log/worker/tests/export.rs b/packages/core/services/job-log/worker/tests/export.rs similarity index 100% rename from packages/services/job-log/worker/tests/export.rs rename to packages/core/services/job-log/worker/tests/export.rs diff --git a/packages/services/job-run/Cargo.toml b/packages/core/services/job-run/Cargo.toml similarity index 100% rename from packages/services/job-run/Cargo.toml rename to packages/core/services/job-run/Cargo.toml diff --git a/packages/services/job-run/proto/get.proto b/packages/core/services/job-run/proto/get.proto similarity index 100% rename from packages/services/job-run/proto/get.proto rename to packages/core/services/job-run/proto/get.proto diff --git a/packages/services/job-run/proto/metrics-log.proto b/packages/core/services/job-run/proto/metrics-log.proto similarity index 100% rename from packages/services/job-run/proto/metrics-log.proto rename to packages/core/services/job-run/proto/metrics-log.proto diff --git a/packages/services/job-run/proto/msg/alloc-planned.proto b/packages/core/services/job-run/proto/msg/alloc-planned.proto similarity index 100% rename from packages/services/job-run/proto/msg/alloc-planned.proto rename to packages/core/services/job-run/proto/msg/alloc-planned.proto diff --git a/packages/services/job-run/proto/msg/cleanup-complete.proto b/packages/core/services/job-run/proto/msg/cleanup-complete.proto similarity index 100% rename from packages/services/job-run/proto/msg/cleanup-complete.proto rename to packages/core/services/job-run/proto/msg/cleanup-complete.proto diff --git a/packages/services/job-run/proto/msg/cleanup.proto b/packages/core/services/job-run/proto/msg/cleanup.proto similarity index 100% rename from packages/services/job-run/proto/msg/cleanup.proto rename to packages/core/services/job-run/proto/msg/cleanup.proto diff --git a/packages/services/job-run/proto/msg/create-complete.proto b/packages/core/services/job-run/proto/msg/create-complete.proto similarity index 100% rename from packages/services/job-run/proto/msg/create-complete.proto rename to packages/core/services/job-run/proto/msg/create-complete.proto diff --git a/packages/services/job-run/proto/msg/create.proto b/packages/core/services/job-run/proto/msg/create.proto similarity index 100% rename from packages/services/job-run/proto/msg/create.proto rename to packages/core/services/job-run/proto/msg/create.proto diff --git a/packages/services/job-run/proto/msg/drain-all.proto b/packages/core/services/job-run/proto/msg/drain-all.proto similarity index 100% rename from packages/services/job-run/proto/msg/drain-all.proto rename to packages/core/services/job-run/proto/msg/drain-all.proto diff --git a/packages/services/job-run/proto/msg/eval-complete.proto b/packages/core/services/job-run/proto/msg/eval-complete.proto similarity index 100% rename from packages/services/job-run/proto/msg/eval-complete.proto rename to packages/core/services/job-run/proto/msg/eval-complete.proto diff --git a/packages/services/job-run/proto/msg/fail.proto b/packages/core/services/job-run/proto/msg/fail.proto similarity index 100% rename from packages/services/job-run/proto/msg/fail.proto rename to packages/core/services/job-run/proto/msg/fail.proto diff --git a/packages/services/job-run/proto/msg/finished.proto b/packages/core/services/job-run/proto/msg/finished.proto similarity index 100% rename from packages/services/job-run/proto/msg/finished.proto rename to packages/core/services/job-run/proto/msg/finished.proto diff --git a/packages/services/job-run/proto/msg/ports-resolved.proto b/packages/core/services/job-run/proto/msg/ports-resolved.proto similarity index 100% rename from packages/services/job-run/proto/msg/ports-resolved.proto rename to packages/core/services/job-run/proto/msg/ports-resolved.proto diff --git a/packages/services/job-run/proto/msg/started.proto b/packages/core/services/job-run/proto/msg/started.proto similarity index 100% rename from packages/services/job-run/proto/msg/started.proto rename to packages/core/services/job-run/proto/msg/started.proto diff --git a/packages/services/job-run/proto/msg/stop.proto b/packages/core/services/job-run/proto/msg/stop.proto similarity index 100% rename from packages/services/job-run/proto/msg/stop.proto rename to packages/core/services/job-run/proto/msg/stop.proto diff --git a/packages/services/job-run/proto/msg/traefik-create-complete.proto b/packages/core/services/job-run/proto/msg/traefik-create-complete.proto similarity index 100% rename from packages/services/job-run/proto/msg/traefik-create-complete.proto rename to packages/core/services/job-run/proto/msg/traefik-create-complete.proto diff --git a/packages/services/job-run/src/lib.rs b/packages/core/services/job-run/src/lib.rs similarity index 100% rename from packages/services/job-run/src/lib.rs rename to packages/core/services/job-run/src/lib.rs diff --git a/packages/services/job-run/src/ops/get.rs b/packages/core/services/job-run/src/ops/get.rs similarity index 100% rename from packages/services/job-run/src/ops/get.rs rename to packages/core/services/job-run/src/ops/get.rs diff --git a/packages/services/job-run/src/ops/metrics_log.rs b/packages/core/services/job-run/src/ops/metrics_log.rs similarity index 100% rename from packages/services/job-run/src/ops/metrics_log.rs rename to packages/core/services/job-run/src/ops/metrics_log.rs diff --git a/packages/services/job-run/src/ops/mod.rs b/packages/core/services/job-run/src/ops/mod.rs similarity index 100% rename from packages/services/job-run/src/ops/mod.rs rename to packages/core/services/job-run/src/ops/mod.rs diff --git a/packages/services/job-run/src/util.rs b/packages/core/services/job-run/src/util.rs similarity index 100% rename from packages/services/job-run/src/util.rs rename to packages/core/services/job-run/src/util.rs diff --git a/packages/services/job-run/src/workers/cleanup.rs b/packages/core/services/job-run/src/workers/cleanup.rs similarity index 100% rename from packages/services/job-run/src/workers/cleanup.rs rename to packages/core/services/job-run/src/workers/cleanup.rs diff --git a/packages/services/job-run/src/workers/create/create_job.rs b/packages/core/services/job-run/src/workers/create/create_job.rs similarity index 100% rename from packages/services/job-run/src/workers/create/create_job.rs rename to packages/core/services/job-run/src/workers/create/create_job.rs diff --git a/packages/services/job-run/src/workers/create/mod.rs b/packages/core/services/job-run/src/workers/create/mod.rs similarity index 100% rename from packages/services/job-run/src/workers/create/mod.rs rename to packages/core/services/job-run/src/workers/create/mod.rs diff --git a/packages/services/job-run/src/workers/drain_all.rs b/packages/core/services/job-run/src/workers/drain_all.rs similarity index 100% rename from packages/services/job-run/src/workers/drain_all.rs rename to packages/core/services/job-run/src/workers/drain_all.rs diff --git a/packages/services/job-run/src/workers/mod.rs b/packages/core/services/job-run/src/workers/mod.rs similarity index 100% rename from packages/services/job-run/src/workers/mod.rs rename to packages/core/services/job-run/src/workers/mod.rs diff --git a/packages/services/job-run/src/workers/nomad_monitor_alloc_plan.rs b/packages/core/services/job-run/src/workers/nomad_monitor_alloc_plan.rs similarity index 100% rename from packages/services/job-run/src/workers/nomad_monitor_alloc_plan.rs rename to packages/core/services/job-run/src/workers/nomad_monitor_alloc_plan.rs diff --git a/packages/services/job-run/src/workers/nomad_monitor_alloc_update.rs b/packages/core/services/job-run/src/workers/nomad_monitor_alloc_update.rs similarity index 100% rename from packages/services/job-run/src/workers/nomad_monitor_alloc_update.rs rename to packages/core/services/job-run/src/workers/nomad_monitor_alloc_update.rs diff --git a/packages/services/job-run/src/workers/nomad_monitor_eval_update.rs b/packages/core/services/job-run/src/workers/nomad_monitor_eval_update.rs similarity index 100% rename from packages/services/job-run/src/workers/nomad_monitor_eval_update.rs rename to packages/core/services/job-run/src/workers/nomad_monitor_eval_update.rs diff --git a/packages/services/job-run/src/workers/stop.rs b/packages/core/services/job-run/src/workers/stop.rs similarity index 100% rename from packages/services/job-run/src/workers/stop.rs rename to packages/core/services/job-run/src/workers/stop.rs diff --git a/packages/services/job-run/src/workflows/drain_all.rs b/packages/core/services/job-run/src/workflows/drain_all.rs similarity index 100% rename from packages/services/job-run/src/workflows/drain_all.rs rename to packages/core/services/job-run/src/workflows/drain_all.rs diff --git a/packages/services/job-run/src/workflows/mod.rs b/packages/core/services/job-run/src/workflows/mod.rs similarity index 100% rename from packages/services/job-run/src/workflows/mod.rs rename to packages/core/services/job-run/src/workflows/mod.rs diff --git a/packages/services/job-run/tests/cleanup.rs b/packages/core/services/job-run/tests/cleanup.rs similarity index 100% rename from packages/services/job-run/tests/cleanup.rs rename to packages/core/services/job-run/tests/cleanup.rs diff --git a/packages/services/job-run/tests/create.rs b/packages/core/services/job-run/tests/create.rs similarity index 100% rename from packages/services/job-run/tests/create.rs rename to packages/core/services/job-run/tests/create.rs diff --git a/packages/services/job-run/tests/get.rs b/packages/core/services/job-run/tests/get.rs similarity index 100% rename from packages/services/job-run/tests/get.rs rename to packages/core/services/job-run/tests/get.rs diff --git a/packages/services/job-run/tests/metrics_log.rs b/packages/core/services/job-run/tests/metrics_log.rs similarity index 100% rename from packages/services/job-run/tests/metrics_log.rs rename to packages/core/services/job-run/tests/metrics_log.rs diff --git a/packages/services/job-run/tests/nomad_monitor_alloc_plan.rs b/packages/core/services/job-run/tests/nomad_monitor_alloc_plan.rs similarity index 100% rename from packages/services/job-run/tests/nomad_monitor_alloc_plan.rs rename to packages/core/services/job-run/tests/nomad_monitor_alloc_plan.rs diff --git a/packages/services/job-run/tests/nomad_monitor_alloc_update.rs b/packages/core/services/job-run/tests/nomad_monitor_alloc_update.rs similarity index 100% rename from packages/services/job-run/tests/nomad_monitor_alloc_update.rs rename to packages/core/services/job-run/tests/nomad_monitor_alloc_update.rs diff --git a/packages/services/job-run/tests/nomad_monitor_eval_update.rs b/packages/core/services/job-run/tests/nomad_monitor_eval_update.rs similarity index 100% rename from packages/services/job-run/tests/nomad_monitor_eval_update.rs rename to packages/core/services/job-run/tests/nomad_monitor_eval_update.rs diff --git a/packages/services/job-run/tests/stop.rs b/packages/core/services/job-run/tests/stop.rs similarity index 100% rename from packages/services/job-run/tests/stop.rs rename to packages/core/services/job-run/tests/stop.rs diff --git a/packages/services/job/db/config/migrations/20211218175827_init.down.sql b/packages/core/services/job/db/config/migrations/20211218175827_init.down.sql similarity index 100% rename from packages/services/job/db/config/migrations/20211218175827_init.down.sql rename to packages/core/services/job/db/config/migrations/20211218175827_init.down.sql diff --git a/packages/services/job/db/config/migrations/20211218175827_init.up.sql b/packages/core/services/job/db/config/migrations/20211218175827_init.up.sql similarity index 100% rename from packages/services/job/db/config/migrations/20211218175827_init.up.sql rename to packages/core/services/job/db/config/migrations/20211218175827_init.up.sql diff --git a/packages/services/job/db/state/migrations/20200101000000_init.down.sql b/packages/core/services/job/db/state/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/job/db/state/migrations/20200101000000_init.down.sql rename to packages/core/services/job/db/state/migrations/20200101000000_init.down.sql diff --git a/packages/services/job/db/state/migrations/20200101000000_init.up.sql b/packages/core/services/job/db/state/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/job/db/state/migrations/20200101000000_init.up.sql rename to packages/core/services/job/db/state/migrations/20200101000000_init.up.sql diff --git a/packages/services/job/db/state/migrations/20230410134553_index_running_jobs.down.sql b/packages/core/services/job/db/state/migrations/20230410134553_index_running_jobs.down.sql similarity index 100% rename from packages/services/job/db/state/migrations/20230410134553_index_running_jobs.down.sql rename to packages/core/services/job/db/state/migrations/20230410134553_index_running_jobs.down.sql diff --git a/packages/services/job/db/state/migrations/20230410134553_index_running_jobs.up.sql b/packages/core/services/job/db/state/migrations/20230410134553_index_running_jobs.up.sql similarity index 100% rename from packages/services/job/db/state/migrations/20230410134553_index_running_jobs.up.sql rename to packages/core/services/job/db/state/migrations/20230410134553_index_running_jobs.up.sql diff --git a/packages/services/job/db/state/migrations/20231026011845_node_ips.down.sql b/packages/core/services/job/db/state/migrations/20231026011845_node_ips.down.sql similarity index 100% rename from packages/services/job/db/state/migrations/20231026011845_node_ips.down.sql rename to packages/core/services/job/db/state/migrations/20231026011845_node_ips.down.sql diff --git a/packages/services/job/db/state/migrations/20231026011845_node_ips.up.sql b/packages/core/services/job/db/state/migrations/20231026011845_node_ips.up.sql similarity index 100% rename from packages/services/job/db/state/migrations/20231026011845_node_ips.up.sql rename to packages/core/services/job/db/state/migrations/20231026011845_node_ips.up.sql diff --git a/packages/services/job/db/state/migrations/20240528204800_meta_node_id_idx.down.sql b/packages/core/services/job/db/state/migrations/20240528204800_meta_node_id_idx.down.sql similarity index 100% rename from packages/services/job/db/state/migrations/20240528204800_meta_node_id_idx.down.sql rename to packages/core/services/job/db/state/migrations/20240528204800_meta_node_id_idx.down.sql diff --git a/packages/services/job/db/state/migrations/20240528204800_meta_node_id_idx.up.sql b/packages/core/services/job/db/state/migrations/20240528204800_meta_node_id_idx.up.sql similarity index 100% rename from packages/services/job/db/state/migrations/20240528204800_meta_node_id_idx.up.sql rename to packages/core/services/job/db/state/migrations/20240528204800_meta_node_id_idx.up.sql diff --git a/packages/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.down.sql b/packages/core/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.down.sql similarity index 100% rename from packages/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.down.sql rename to packages/core/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.down.sql diff --git a/packages/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.up.sql b/packages/core/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.up.sql similarity index 100% rename from packages/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.up.sql rename to packages/core/services/job/db/state/migrations/20240606005516_run_proxied_ports_idx.up.sql diff --git a/packages/services/job/proto/redis-job.proto b/packages/core/services/job/proto/redis-job.proto similarity index 100% rename from packages/services/job/proto/redis-job.proto rename to packages/core/services/job/proto/redis-job.proto diff --git a/packages/services/job/standalone/gc/Cargo.toml b/packages/core/services/job/standalone/gc/Cargo.toml similarity index 100% rename from packages/services/job/standalone/gc/Cargo.toml rename to packages/core/services/job/standalone/gc/Cargo.toml diff --git a/packages/services/job/standalone/gc/README.md b/packages/core/services/job/standalone/gc/README.md similarity index 100% rename from packages/services/job/standalone/gc/README.md rename to packages/core/services/job/standalone/gc/README.md diff --git a/packages/services/job/standalone/gc/src/lib.rs b/packages/core/services/job/standalone/gc/src/lib.rs similarity index 100% rename from packages/services/job/standalone/gc/src/lib.rs rename to packages/core/services/job/standalone/gc/src/lib.rs diff --git a/packages/services/job/standalone/gc/tests/integration.rs b/packages/core/services/job/standalone/gc/tests/integration.rs similarity index 100% rename from packages/services/job/standalone/gc/tests/integration.rs rename to packages/core/services/job/standalone/gc/tests/integration.rs diff --git a/packages/services/job/util/Cargo.toml b/packages/core/services/job/util/Cargo.toml similarity index 100% rename from packages/services/job/util/Cargo.toml rename to packages/core/services/job/util/Cargo.toml diff --git a/packages/services/job/util/src/key.rs b/packages/core/services/job/util/src/key.rs similarity index 100% rename from packages/services/job/util/src/key.rs rename to packages/core/services/job/util/src/key.rs diff --git a/packages/services/job/util/src/lib.rs b/packages/core/services/job/util/src/lib.rs similarity index 100% rename from packages/services/job/util/src/lib.rs rename to packages/core/services/job/util/src/lib.rs diff --git a/packages/services/linode/Cargo.toml b/packages/core/services/linode/Cargo.toml similarity index 100% rename from packages/services/linode/Cargo.toml rename to packages/core/services/linode/Cargo.toml diff --git a/packages/services/linode/db/linode/migrations/20240711200008_init.down.sql b/packages/core/services/linode/db/linode/migrations/20240711200008_init.down.sql similarity index 100% rename from packages/services/linode/db/linode/migrations/20240711200008_init.down.sql rename to packages/core/services/linode/db/linode/migrations/20240711200008_init.down.sql diff --git a/packages/services/linode/db/linode/migrations/20240711200008_init.up.sql b/packages/core/services/linode/db/linode/migrations/20240711200008_init.up.sql similarity index 100% rename from packages/services/linode/db/linode/migrations/20240711200008_init.up.sql rename to packages/core/services/linode/db/linode/migrations/20240711200008_init.up.sql diff --git a/packages/services/linode/src/lib.rs b/packages/core/services/linode/src/lib.rs similarity index 100% rename from packages/services/linode/src/lib.rs rename to packages/core/services/linode/src/lib.rs diff --git a/packages/services/linode/src/ops/instance_type_get.rs b/packages/core/services/linode/src/ops/instance_type_get.rs similarity index 100% rename from packages/services/linode/src/ops/instance_type_get.rs rename to packages/core/services/linode/src/ops/instance_type_get.rs diff --git a/packages/services/linode/src/ops/mod.rs b/packages/core/services/linode/src/ops/mod.rs similarity index 100% rename from packages/services/linode/src/ops/mod.rs rename to packages/core/services/linode/src/ops/mod.rs diff --git a/packages/services/linode/src/types.rs b/packages/core/services/linode/src/types.rs similarity index 100% rename from packages/services/linode/src/types.rs rename to packages/core/services/linode/src/types.rs diff --git a/packages/services/linode/src/util/api.rs b/packages/core/services/linode/src/util/api.rs similarity index 100% rename from packages/services/linode/src/util/api.rs rename to packages/core/services/linode/src/util/api.rs diff --git a/packages/services/linode/src/util/client.rs b/packages/core/services/linode/src/util/client.rs similarity index 100% rename from packages/services/linode/src/util/client.rs rename to packages/core/services/linode/src/util/client.rs diff --git a/packages/services/linode/src/util/consts.rs b/packages/core/services/linode/src/util/consts.rs similarity index 100% rename from packages/services/linode/src/util/consts.rs rename to packages/core/services/linode/src/util/consts.rs diff --git a/packages/services/linode/src/util/mod.rs b/packages/core/services/linode/src/util/mod.rs similarity index 100% rename from packages/services/linode/src/util/mod.rs rename to packages/core/services/linode/src/util/mod.rs diff --git a/packages/services/linode/src/workflows/image.rs b/packages/core/services/linode/src/workflows/image.rs similarity index 100% rename from packages/services/linode/src/workflows/image.rs rename to packages/core/services/linode/src/workflows/image.rs diff --git a/packages/services/linode/src/workflows/mod.rs b/packages/core/services/linode/src/workflows/mod.rs similarity index 100% rename from packages/services/linode/src/workflows/mod.rs rename to packages/core/services/linode/src/workflows/mod.rs diff --git a/packages/services/linode/src/workflows/server/cleanup.rs b/packages/core/services/linode/src/workflows/server/cleanup.rs similarity index 100% rename from packages/services/linode/src/workflows/server/cleanup.rs rename to packages/core/services/linode/src/workflows/server/cleanup.rs diff --git a/packages/services/linode/src/workflows/server/mod.rs b/packages/core/services/linode/src/workflows/server/mod.rs similarity index 100% rename from packages/services/linode/src/workflows/server/mod.rs rename to packages/core/services/linode/src/workflows/server/mod.rs diff --git a/packages/services/linode/standalone/gc/Cargo.toml b/packages/core/services/linode/standalone/gc/Cargo.toml similarity index 100% rename from packages/services/linode/standalone/gc/Cargo.toml rename to packages/core/services/linode/standalone/gc/Cargo.toml diff --git a/packages/core/services/linode/standalone/gc/src/lib.rs b/packages/core/services/linode/standalone/gc/src/lib.rs new file mode 100644 index 0000000000..448b8f84ef --- /dev/null +++ b/packages/core/services/linode/standalone/gc/src/lib.rs @@ -0,0 +1,169 @@ +use std::convert::TryInto; + +use chirp_workflow::prelude::*; +use cluster::types::Provider; +use futures_util::{StreamExt, TryStreamExt}; +use linode::util::{api, client}; +use reqwest::header; +use serde_json::json; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let mut interval = tokio::time::interval(std::time::Duration::from_secs(15)); + loop { + interval.tick().await; + + run_from_env(config.clone(), pools.clone()).await?; + } +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("linode-gc"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "linode-gc", + ) + .await?; + + let secret = ctx.config().server()?.linode()?.api_token.read(); + let dc_rows = sql_fetch_all!( + [ctx, (i64, String,)] + " + SELECT DISTINCT provider, provider_api_token + FROM db_cluster.datacenters + WHERE provider_api_token IS NOT NULL + ", + ) + .await? + .into_iter() + .chain(std::iter::once((Provider::Linode as i64, secret.clone()))); + + let filter = json!({ + "status": "available", + "type": "manual" + }); + let mut headers = header::HeaderMap::new(); + headers.insert( + "X-Filter", + header::HeaderValue::from_str(&serde_json::to_string(&filter)?)?, + ); + + for (provider, api_token) in dc_rows { + let provider = unwrap!(Provider::from_repr(provider.try_into()?)); + + match provider { + Provider::Manual => { + // Noop + } + Provider::Linode => { + run_for_linode_account(ctx.clone(), api_token.clone(), &headers).await? + } + } + } + + Ok(()) +} + +async fn run_for_linode_account( + ctx: StandaloneCtx, + api_token: String, + headers: &header::HeaderMap, +) -> GlobalResult<()> { + // Build HTTP client + let client = client::Client::new_with_headers(api_token, headers.clone()).await?; + + let complete_images = api::list_custom_images(ctx.config(), &client).await?; + + if complete_images.len() == linode::util::api::CUSTOM_IMAGE_LIST_SIZE { + // We don't need to paginate since we'll never have more than + // `number of regions * number of pools * 2` images which is not more than 500 (x2 is for the old + + // new images) + tracing::warn!("page limit reached, new images may not be returned"); + } + + delete_expired_images(ctx.clone(), complete_images.clone()).await?; + + // Get image ids + let image_ids = complete_images + .into_iter() + .map(|x| x.id) + .collect::>(); + + // Set images as complete + let incomplete_images = sql_fetch_all!( + [ctx, (String,)] + " + UPDATE db_linode.server_images + SET complete_ts = $2 + WHERE + image_id = ANY($1) AND + complete_ts IS NULL + RETURNING image_id + ", + image_ids, + util::timestamp::now(), + ) + .await?; + + futures_util::stream::iter(incomplete_images.into_iter()) + .map(|(image_id,)| { + let ctx = ctx.clone(); + + async move { + ctx.signal(linode::workflows::image::CreateComplete { + image_id: image_id.clone(), + }) + .tag("image_id", image_id) + .send() + .await + } + }) + .buffer_unordered(8) + .try_collect::>() + .await?; + + Ok(()) +} + +async fn delete_expired_images( + ctx: StandaloneCtx, + complete_images: Vec, +) -> GlobalResult<()> { + // Prebake images have an expiration because of their server token. We add 2 days of padding here for + // safety + let expiration = chrono::Utc::now() + - chrono::Duration::milliseconds(cluster::util::SERVER_TOKEN_TTL) + + chrono::Duration::days(2); + + let expired_images = complete_images + .iter() + .filter(|img| img.created < expiration); + + let expired_images_count = expired_images.clone().count(); + if expired_images_count != 0 { + tracing::info!(count=?expired_images_count, "deleting expired images"); + } + + futures_util::stream::iter(expired_images.cloned().collect::>()) + .map(|img| { + let ctx = ctx.clone(); + + async move { + ctx.signal(linode::workflows::image::Destroy {}) + .tag("image_id", img.id) + .send() + .await + } + }) + .buffer_unordered(8) + .try_collect::>() + .await?; + + Ok(()) +} diff --git a/packages/services/linode/standalone/gc/tests/integration.rs b/packages/core/services/linode/standalone/gc/tests/integration.rs similarity index 100% rename from packages/services/linode/standalone/gc/tests/integration.rs rename to packages/core/services/linode/standalone/gc/tests/integration.rs diff --git a/packages/services/linode/tests_old/image.rs b/packages/core/services/linode/tests_old/image.rs similarity index 100% rename from packages/services/linode/tests_old/image.rs rename to packages/core/services/linode/tests_old/image.rs diff --git a/packages/services/linode/tests_old/instance_type_get.rs b/packages/core/services/linode/tests_old/instance_type_get.rs similarity index 100% rename from packages/services/linode/tests_old/instance_type_get.rs rename to packages/core/services/linode/tests_old/instance_type_get.rs diff --git a/packages/services/linode/tests_old/server_destroy.rs b/packages/core/services/linode/tests_old/server_destroy.rs similarity index 100% rename from packages/services/linode/tests_old/server_destroy.rs rename to packages/core/services/linode/tests_old/server_destroy.rs diff --git a/packages/services/linode/tests_old/server_provision.rs b/packages/core/services/linode/tests_old/server_provision.rs similarity index 100% rename from packages/services/linode/tests_old/server_provision.rs rename to packages/core/services/linode/tests_old/server_provision.rs diff --git a/packages/services/load-test/standalone/api-cloud/Cargo.toml b/packages/core/services/load-test/standalone/api-cloud/Cargo.toml similarity index 100% rename from packages/services/load-test/standalone/api-cloud/Cargo.toml rename to packages/core/services/load-test/standalone/api-cloud/Cargo.toml diff --git a/packages/services/load-test/standalone/api-cloud/src/lib.rs b/packages/core/services/load-test/standalone/api-cloud/src/lib.rs similarity index 100% rename from packages/services/load-test/standalone/api-cloud/src/lib.rs rename to packages/core/services/load-test/standalone/api-cloud/src/lib.rs diff --git a/packages/services/load-test/standalone/api-cloud/tests/integration.rs b/packages/core/services/load-test/standalone/api-cloud/tests/integration.rs similarity index 100% rename from packages/services/load-test/standalone/api-cloud/tests/integration.rs rename to packages/core/services/load-test/standalone/api-cloud/tests/integration.rs diff --git a/packages/services/load-test/standalone/mm-sustain/Cargo.toml b/packages/core/services/load-test/standalone/mm-sustain/Cargo.toml similarity index 100% rename from packages/services/load-test/standalone/mm-sustain/Cargo.toml rename to packages/core/services/load-test/standalone/mm-sustain/Cargo.toml diff --git a/packages/services/load-test/standalone/mm-sustain/README.md b/packages/core/services/load-test/standalone/mm-sustain/README.md similarity index 100% rename from packages/services/load-test/standalone/mm-sustain/README.md rename to packages/core/services/load-test/standalone/mm-sustain/README.md diff --git a/packages/services/load-test/standalone/mm-sustain/src/lib.rs b/packages/core/services/load-test/standalone/mm-sustain/src/lib.rs similarity index 100% rename from packages/services/load-test/standalone/mm-sustain/src/lib.rs rename to packages/core/services/load-test/standalone/mm-sustain/src/lib.rs diff --git a/packages/services/load-test/standalone/mm-sustain/tests/integration.rs b/packages/core/services/load-test/standalone/mm-sustain/tests/integration.rs similarity index 100% rename from packages/services/load-test/standalone/mm-sustain/tests/integration.rs rename to packages/core/services/load-test/standalone/mm-sustain/tests/integration.rs diff --git a/packages/services/load-test/standalone/mm/Cargo.toml b/packages/core/services/load-test/standalone/mm/Cargo.toml similarity index 100% rename from packages/services/load-test/standalone/mm/Cargo.toml rename to packages/core/services/load-test/standalone/mm/Cargo.toml diff --git a/packages/services/load-test/standalone/mm/src/lib.rs b/packages/core/services/load-test/standalone/mm/src/lib.rs similarity index 100% rename from packages/services/load-test/standalone/mm/src/lib.rs rename to packages/core/services/load-test/standalone/mm/src/lib.rs diff --git a/packages/services/load-test/standalone/mm/tests/integration.rs b/packages/core/services/load-test/standalone/mm/tests/integration.rs similarity index 100% rename from packages/services/load-test/standalone/mm/tests/integration.rs rename to packages/core/services/load-test/standalone/mm/tests/integration.rs diff --git a/packages/services/load-test/standalone/sqlx/Cargo.toml b/packages/core/services/load-test/standalone/sqlx/Cargo.toml similarity index 100% rename from packages/services/load-test/standalone/sqlx/Cargo.toml rename to packages/core/services/load-test/standalone/sqlx/Cargo.toml diff --git a/packages/services/load-test/standalone/sqlx/src/lib.rs b/packages/core/services/load-test/standalone/sqlx/src/lib.rs similarity index 100% rename from packages/services/load-test/standalone/sqlx/src/lib.rs rename to packages/core/services/load-test/standalone/sqlx/src/lib.rs diff --git a/packages/services/load-test/standalone/sqlx/tests/integration.rs b/packages/core/services/load-test/standalone/sqlx/tests/integration.rs similarity index 100% rename from packages/services/load-test/standalone/sqlx/tests/integration.rs rename to packages/core/services/load-test/standalone/sqlx/tests/integration.rs diff --git a/packages/services/load-test/standalone/watch-requests/Cargo.toml b/packages/core/services/load-test/standalone/watch-requests/Cargo.toml similarity index 100% rename from packages/services/load-test/standalone/watch-requests/Cargo.toml rename to packages/core/services/load-test/standalone/watch-requests/Cargo.toml diff --git a/packages/services/load-test/standalone/watch-requests/src/lib.rs b/packages/core/services/load-test/standalone/watch-requests/src/lib.rs similarity index 100% rename from packages/services/load-test/standalone/watch-requests/src/lib.rs rename to packages/core/services/load-test/standalone/watch-requests/src/lib.rs diff --git a/packages/services/load-test/standalone/watch-requests/tests/integration.rs b/packages/core/services/load-test/standalone/watch-requests/tests/integration.rs similarity index 100% rename from packages/services/load-test/standalone/watch-requests/tests/integration.rs rename to packages/core/services/load-test/standalone/watch-requests/tests/integration.rs diff --git a/packages/services/mm-config/db/mm-config/migrations/20211221090203_init.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20211221090203_init.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20211221090203_init.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20211221090203_init.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20211221090203_init.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20211221090203_init.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20211221090203_init.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20211221090203_init.up.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230305012416_version_migrations.up.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230411084047_index_lobby_groups.up.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230711222029_add_find_join_config.up.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20230715175430_add_listable.up.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20231121205958_add_lobby_tags.up.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20231122214503_allow_dynamic_max_players.up.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.down.sql b/packages/core/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.down.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.down.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.down.sql diff --git a/packages/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.up.sql b/packages/core/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.up.sql similarity index 100% rename from packages/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.up.sql rename to packages/core/services/mm-config/db/mm-config/migrations/20240228172257_toggle_root_host.up.sql diff --git a/packages/services/mm-config/ops/game-get/Cargo.toml b/packages/core/services/mm-config/ops/game-get/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/game-get/Cargo.toml rename to packages/core/services/mm-config/ops/game-get/Cargo.toml diff --git a/packages/services/mm-config/ops/game-get/src/lib.rs b/packages/core/services/mm-config/ops/game-get/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/game-get/src/lib.rs rename to packages/core/services/mm-config/ops/game-get/src/lib.rs diff --git a/packages/services/mm-config/ops/game-get/tests/integration.rs b/packages/core/services/mm-config/ops/game-get/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/game-get/tests/integration.rs rename to packages/core/services/mm-config/ops/game-get/tests/integration.rs diff --git a/packages/services/mm-config/ops/game-upsert/Cargo.toml b/packages/core/services/mm-config/ops/game-upsert/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/game-upsert/Cargo.toml rename to packages/core/services/mm-config/ops/game-upsert/Cargo.toml diff --git a/packages/services/mm-config/ops/game-upsert/src/lib.rs b/packages/core/services/mm-config/ops/game-upsert/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/game-upsert/src/lib.rs rename to packages/core/services/mm-config/ops/game-upsert/src/lib.rs diff --git a/packages/services/mm-config/ops/game-upsert/tests/integration.rs b/packages/core/services/mm-config/ops/game-upsert/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/game-upsert/tests/integration.rs rename to packages/core/services/mm-config/ops/game-upsert/tests/integration.rs diff --git a/packages/services/mm-config/ops/lobby-group-get/Cargo.toml b/packages/core/services/mm-config/ops/lobby-group-get/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/lobby-group-get/Cargo.toml rename to packages/core/services/mm-config/ops/lobby-group-get/Cargo.toml diff --git a/packages/services/mm-config/ops/lobby-group-get/README.md b/packages/core/services/mm-config/ops/lobby-group-get/README.md similarity index 100% rename from packages/services/mm-config/ops/lobby-group-get/README.md rename to packages/core/services/mm-config/ops/lobby-group-get/README.md diff --git a/packages/services/mm-config/ops/lobby-group-get/src/lib.rs b/packages/core/services/mm-config/ops/lobby-group-get/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/lobby-group-get/src/lib.rs rename to packages/core/services/mm-config/ops/lobby-group-get/src/lib.rs diff --git a/packages/services/mm-config/ops/lobby-group-get/tests/integration.rs b/packages/core/services/mm-config/ops/lobby-group-get/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/lobby-group-get/tests/integration.rs rename to packages/core/services/mm-config/ops/lobby-group-get/tests/integration.rs diff --git a/packages/services/mm-config/ops/lobby-group-resolve-name-id/Cargo.toml b/packages/core/services/mm-config/ops/lobby-group-resolve-name-id/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-name-id/Cargo.toml rename to packages/core/services/mm-config/ops/lobby-group-resolve-name-id/Cargo.toml diff --git a/packages/services/mm-config/ops/lobby-group-resolve-name-id/README.md b/packages/core/services/mm-config/ops/lobby-group-resolve-name-id/README.md similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-name-id/README.md rename to packages/core/services/mm-config/ops/lobby-group-resolve-name-id/README.md diff --git a/packages/services/mm-config/ops/lobby-group-resolve-name-id/src/lib.rs b/packages/core/services/mm-config/ops/lobby-group-resolve-name-id/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-name-id/src/lib.rs rename to packages/core/services/mm-config/ops/lobby-group-resolve-name-id/src/lib.rs diff --git a/packages/services/mm-config/ops/lobby-group-resolve-name-id/tests/integration.rs b/packages/core/services/mm-config/ops/lobby-group-resolve-name-id/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-name-id/tests/integration.rs rename to packages/core/services/mm-config/ops/lobby-group-resolve-name-id/tests/integration.rs diff --git a/packages/services/mm-config/ops/lobby-group-resolve-version/Cargo.toml b/packages/core/services/mm-config/ops/lobby-group-resolve-version/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-version/Cargo.toml rename to packages/core/services/mm-config/ops/lobby-group-resolve-version/Cargo.toml diff --git a/packages/services/mm-config/ops/lobby-group-resolve-version/README.md b/packages/core/services/mm-config/ops/lobby-group-resolve-version/README.md similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-version/README.md rename to packages/core/services/mm-config/ops/lobby-group-resolve-version/README.md diff --git a/packages/services/mm-config/ops/lobby-group-resolve-version/src/lib.rs b/packages/core/services/mm-config/ops/lobby-group-resolve-version/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-version/src/lib.rs rename to packages/core/services/mm-config/ops/lobby-group-resolve-version/src/lib.rs diff --git a/packages/services/mm-config/ops/lobby-group-resolve-version/tests/integration.rs b/packages/core/services/mm-config/ops/lobby-group-resolve-version/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/lobby-group-resolve-version/tests/integration.rs rename to packages/core/services/mm-config/ops/lobby-group-resolve-version/tests/integration.rs diff --git a/packages/services/mm-config/ops/namespace-config-set/Cargo.toml b/packages/core/services/mm-config/ops/namespace-config-set/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/namespace-config-set/Cargo.toml rename to packages/core/services/mm-config/ops/namespace-config-set/Cargo.toml diff --git a/packages/services/mm-config/ops/namespace-config-set/README.md b/packages/core/services/mm-config/ops/namespace-config-set/README.md similarity index 100% rename from packages/services/mm-config/ops/namespace-config-set/README.md rename to packages/core/services/mm-config/ops/namespace-config-set/README.md diff --git a/packages/services/mm-config/ops/namespace-config-set/src/lib.rs b/packages/core/services/mm-config/ops/namespace-config-set/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-config-set/src/lib.rs rename to packages/core/services/mm-config/ops/namespace-config-set/src/lib.rs diff --git a/packages/services/mm-config/ops/namespace-config-set/tests/integration.rs b/packages/core/services/mm-config/ops/namespace-config-set/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-config-set/tests/integration.rs rename to packages/core/services/mm-config/ops/namespace-config-set/tests/integration.rs diff --git a/packages/services/mm-config/ops/namespace-config-validate/Cargo.toml b/packages/core/services/mm-config/ops/namespace-config-validate/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/namespace-config-validate/Cargo.toml rename to packages/core/services/mm-config/ops/namespace-config-validate/Cargo.toml diff --git a/packages/services/mm-config/ops/namespace-config-validate/README.md b/packages/core/services/mm-config/ops/namespace-config-validate/README.md similarity index 100% rename from packages/services/mm-config/ops/namespace-config-validate/README.md rename to packages/core/services/mm-config/ops/namespace-config-validate/README.md diff --git a/packages/services/mm-config/ops/namespace-config-validate/src/lib.rs b/packages/core/services/mm-config/ops/namespace-config-validate/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-config-validate/src/lib.rs rename to packages/core/services/mm-config/ops/namespace-config-validate/src/lib.rs diff --git a/packages/services/mm-config/ops/namespace-config-validate/tests/integration.rs b/packages/core/services/mm-config/ops/namespace-config-validate/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-config-validate/tests/integration.rs rename to packages/core/services/mm-config/ops/namespace-config-validate/tests/integration.rs diff --git a/packages/services/mm-config/ops/namespace-create/Cargo.toml b/packages/core/services/mm-config/ops/namespace-create/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/namespace-create/Cargo.toml rename to packages/core/services/mm-config/ops/namespace-create/Cargo.toml diff --git a/packages/services/mm-config/ops/namespace-create/README.md b/packages/core/services/mm-config/ops/namespace-create/README.md similarity index 100% rename from packages/services/mm-config/ops/namespace-create/README.md rename to packages/core/services/mm-config/ops/namespace-create/README.md diff --git a/packages/services/mm-config/ops/namespace-create/src/lib.rs b/packages/core/services/mm-config/ops/namespace-create/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-create/src/lib.rs rename to packages/core/services/mm-config/ops/namespace-create/src/lib.rs diff --git a/packages/services/mm-config/ops/namespace-create/tests/integration.rs b/packages/core/services/mm-config/ops/namespace-create/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-create/tests/integration.rs rename to packages/core/services/mm-config/ops/namespace-create/tests/integration.rs diff --git a/packages/services/mm-config/ops/namespace-get/Cargo.toml b/packages/core/services/mm-config/ops/namespace-get/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/namespace-get/Cargo.toml rename to packages/core/services/mm-config/ops/namespace-get/Cargo.toml diff --git a/packages/services/mm-config/ops/namespace-get/README.md b/packages/core/services/mm-config/ops/namespace-get/README.md similarity index 100% rename from packages/services/mm-config/ops/namespace-get/README.md rename to packages/core/services/mm-config/ops/namespace-get/README.md diff --git a/packages/services/mm-config/ops/namespace-get/src/lib.rs b/packages/core/services/mm-config/ops/namespace-get/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-get/src/lib.rs rename to packages/core/services/mm-config/ops/namespace-get/src/lib.rs diff --git a/packages/services/mm-config/ops/namespace-get/tests/integration.rs b/packages/core/services/mm-config/ops/namespace-get/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/namespace-get/tests/integration.rs rename to packages/core/services/mm-config/ops/namespace-get/tests/integration.rs diff --git a/packages/services/mm-config/ops/version-get/Cargo.toml b/packages/core/services/mm-config/ops/version-get/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/version-get/Cargo.toml rename to packages/core/services/mm-config/ops/version-get/Cargo.toml diff --git a/packages/services/mm-config/ops/version-get/README.md b/packages/core/services/mm-config/ops/version-get/README.md similarity index 100% rename from packages/services/mm-config/ops/version-get/README.md rename to packages/core/services/mm-config/ops/version-get/README.md diff --git a/packages/services/mm-config/ops/version-get/src/lib.rs b/packages/core/services/mm-config/ops/version-get/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/version-get/src/lib.rs rename to packages/core/services/mm-config/ops/version-get/src/lib.rs diff --git a/packages/services/mm-config/ops/version-get/tests/integration.rs b/packages/core/services/mm-config/ops/version-get/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/version-get/tests/integration.rs rename to packages/core/services/mm-config/ops/version-get/tests/integration.rs diff --git a/packages/services/mm-config/ops/version-prepare/Cargo.toml b/packages/core/services/mm-config/ops/version-prepare/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/version-prepare/Cargo.toml rename to packages/core/services/mm-config/ops/version-prepare/Cargo.toml diff --git a/packages/services/mm-config/ops/version-prepare/README.md b/packages/core/services/mm-config/ops/version-prepare/README.md similarity index 100% rename from packages/services/mm-config/ops/version-prepare/README.md rename to packages/core/services/mm-config/ops/version-prepare/README.md diff --git a/packages/services/mm-config/ops/version-prepare/src/lib.rs b/packages/core/services/mm-config/ops/version-prepare/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/version-prepare/src/lib.rs rename to packages/core/services/mm-config/ops/version-prepare/src/lib.rs diff --git a/packages/services/mm-config/ops/version-prepare/src/prewarm_ats.rs b/packages/core/services/mm-config/ops/version-prepare/src/prewarm_ats.rs similarity index 100% rename from packages/services/mm-config/ops/version-prepare/src/prewarm_ats.rs rename to packages/core/services/mm-config/ops/version-prepare/src/prewarm_ats.rs diff --git a/packages/services/mm-config/ops/version-prepare/tests/integration.rs b/packages/core/services/mm-config/ops/version-prepare/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/version-prepare/tests/integration.rs rename to packages/core/services/mm-config/ops/version-prepare/tests/integration.rs diff --git a/packages/services/mm-config/ops/version-publish/Cargo.toml b/packages/core/services/mm-config/ops/version-publish/Cargo.toml similarity index 100% rename from packages/services/mm-config/ops/version-publish/Cargo.toml rename to packages/core/services/mm-config/ops/version-publish/Cargo.toml diff --git a/packages/services/mm-config/ops/version-publish/README.md b/packages/core/services/mm-config/ops/version-publish/README.md similarity index 100% rename from packages/services/mm-config/ops/version-publish/README.md rename to packages/core/services/mm-config/ops/version-publish/README.md diff --git a/packages/services/mm-config/ops/version-publish/src/lib.rs b/packages/core/services/mm-config/ops/version-publish/src/lib.rs similarity index 100% rename from packages/services/mm-config/ops/version-publish/src/lib.rs rename to packages/core/services/mm-config/ops/version-publish/src/lib.rs diff --git a/packages/services/mm-config/ops/version-publish/tests/integration.rs b/packages/core/services/mm-config/ops/version-publish/tests/integration.rs similarity index 100% rename from packages/services/mm-config/ops/version-publish/tests/integration.rs rename to packages/core/services/mm-config/ops/version-publish/tests/integration.rs diff --git a/packages/services/mm-config/proto/game-get.proto b/packages/core/services/mm-config/proto/game-get.proto similarity index 100% rename from packages/services/mm-config/proto/game-get.proto rename to packages/core/services/mm-config/proto/game-get.proto diff --git a/packages/services/mm-config/proto/game-upsert.proto b/packages/core/services/mm-config/proto/game-upsert.proto similarity index 100% rename from packages/services/mm-config/proto/game-upsert.proto rename to packages/core/services/mm-config/proto/game-upsert.proto diff --git a/packages/services/mm-config/proto/lobby-group-get.proto b/packages/core/services/mm-config/proto/lobby-group-get.proto similarity index 100% rename from packages/services/mm-config/proto/lobby-group-get.proto rename to packages/core/services/mm-config/proto/lobby-group-get.proto diff --git a/packages/services/mm-config/proto/lobby-group-resolve-name-id.proto b/packages/core/services/mm-config/proto/lobby-group-resolve-name-id.proto similarity index 100% rename from packages/services/mm-config/proto/lobby-group-resolve-name-id.proto rename to packages/core/services/mm-config/proto/lobby-group-resolve-name-id.proto diff --git a/packages/services/mm-config/proto/lobby-group-resolve-version.proto b/packages/core/services/mm-config/proto/lobby-group-resolve-version.proto similarity index 100% rename from packages/services/mm-config/proto/lobby-group-resolve-version.proto rename to packages/core/services/mm-config/proto/lobby-group-resolve-version.proto diff --git a/packages/services/mm-config/proto/namespace-config-set.proto b/packages/core/services/mm-config/proto/namespace-config-set.proto similarity index 100% rename from packages/services/mm-config/proto/namespace-config-set.proto rename to packages/core/services/mm-config/proto/namespace-config-set.proto diff --git a/packages/services/mm-config/proto/namespace-config-validate.proto b/packages/core/services/mm-config/proto/namespace-config-validate.proto similarity index 100% rename from packages/services/mm-config/proto/namespace-config-validate.proto rename to packages/core/services/mm-config/proto/namespace-config-validate.proto diff --git a/packages/services/mm-config/proto/namespace-create.proto b/packages/core/services/mm-config/proto/namespace-create.proto similarity index 100% rename from packages/services/mm-config/proto/namespace-create.proto rename to packages/core/services/mm-config/proto/namespace-create.proto diff --git a/packages/services/mm-config/proto/namespace-get.proto b/packages/core/services/mm-config/proto/namespace-get.proto similarity index 100% rename from packages/services/mm-config/proto/namespace-get.proto rename to packages/core/services/mm-config/proto/namespace-get.proto diff --git a/packages/services/mm-config/proto/version-get.proto b/packages/core/services/mm-config/proto/version-get.proto similarity index 100% rename from packages/services/mm-config/proto/version-get.proto rename to packages/core/services/mm-config/proto/version-get.proto diff --git a/packages/services/mm-config/proto/version-prepare.proto b/packages/core/services/mm-config/proto/version-prepare.proto similarity index 100% rename from packages/services/mm-config/proto/version-prepare.proto rename to packages/core/services/mm-config/proto/version-prepare.proto diff --git a/packages/services/mm-config/proto/version-publish.proto b/packages/core/services/mm-config/proto/version-publish.proto similarity index 100% rename from packages/services/mm-config/proto/version-publish.proto rename to packages/core/services/mm-config/proto/version-publish.proto diff --git a/packages/services/mm/db/state/migrations/20200101000000_init.down.sql b/packages/core/services/mm/db/state/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20200101000000_init.down.sql rename to packages/core/services/mm/db/state/migrations/20200101000000_init.down.sql diff --git a/packages/services/mm/db/state/migrations/20200101000000_init.up.sql b/packages/core/services/mm/db/state/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20200101000000_init.up.sql rename to packages/core/services/mm/db/state/migrations/20200101000000_init.up.sql diff --git a/packages/services/mm/db/state/migrations/20230410134007_improve_indices.down.sql b/packages/core/services/mm/db/state/migrations/20230410134007_improve_indices.down.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20230410134007_improve_indices.down.sql rename to packages/core/services/mm/db/state/migrations/20230410134007_improve_indices.down.sql diff --git a/packages/services/mm/db/state/migrations/20230410134007_improve_indices.up.sql b/packages/core/services/mm/db/state/migrations/20230410134007_improve_indices.up.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20230410134007_improve_indices.up.sql rename to packages/core/services/mm/db/state/migrations/20230410134007_improve_indices.up.sql diff --git a/packages/services/mm/db/state/migrations/20230714001053_add_creator_user_id.down.sql b/packages/core/services/mm/db/state/migrations/20230714001053_add_creator_user_id.down.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20230714001053_add_creator_user_id.down.sql rename to packages/core/services/mm/db/state/migrations/20230714001053_add_creator_user_id.down.sql diff --git a/packages/services/mm/db/state/migrations/20230714001053_add_creator_user_id.up.sql b/packages/core/services/mm/db/state/migrations/20230714001053_add_creator_user_id.up.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20230714001053_add_creator_user_id.up.sql rename to packages/core/services/mm/db/state/migrations/20230714001053_add_creator_user_id.up.sql diff --git a/packages/services/mm/db/state/migrations/20240627154749_players_index.down.sql b/packages/core/services/mm/db/state/migrations/20240627154749_players_index.down.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20240627154749_players_index.down.sql rename to packages/core/services/mm/db/state/migrations/20240627154749_players_index.down.sql diff --git a/packages/services/mm/db/state/migrations/20240627154749_players_index.up.sql b/packages/core/services/mm/db/state/migrations/20240627154749_players_index.up.sql similarity index 100% rename from packages/services/mm/db/state/migrations/20240627154749_players_index.up.sql rename to packages/core/services/mm/db/state/migrations/20240627154749_players_index.up.sql diff --git a/packages/services/mm/ops/dev-player-token-create/Cargo.toml b/packages/core/services/mm/ops/dev-player-token-create/Cargo.toml similarity index 100% rename from packages/services/mm/ops/dev-player-token-create/Cargo.toml rename to packages/core/services/mm/ops/dev-player-token-create/Cargo.toml diff --git a/packages/services/mm/ops/dev-player-token-create/README.md b/packages/core/services/mm/ops/dev-player-token-create/README.md similarity index 100% rename from packages/services/mm/ops/dev-player-token-create/README.md rename to packages/core/services/mm/ops/dev-player-token-create/README.md diff --git a/packages/services/mm/ops/dev-player-token-create/src/lib.rs b/packages/core/services/mm/ops/dev-player-token-create/src/lib.rs similarity index 100% rename from packages/services/mm/ops/dev-player-token-create/src/lib.rs rename to packages/core/services/mm/ops/dev-player-token-create/src/lib.rs diff --git a/packages/services/mm/ops/dev-player-token-create/tests/integration.rs b/packages/core/services/mm/ops/dev-player-token-create/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/dev-player-token-create/tests/integration.rs rename to packages/core/services/mm/ops/dev-player-token-create/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-find-fail/Cargo.toml b/packages/core/services/mm/ops/lobby-find-fail/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-find-fail/Cargo.toml rename to packages/core/services/mm/ops/lobby-find-fail/Cargo.toml diff --git a/packages/services/mm/ops/lobby-find-fail/README.md b/packages/core/services/mm/ops/lobby-find-fail/README.md similarity index 100% rename from packages/services/mm/ops/lobby-find-fail/README.md rename to packages/core/services/mm/ops/lobby-find-fail/README.md diff --git a/packages/services/mm/ops/lobby-find-fail/src/lib.rs b/packages/core/services/mm/ops/lobby-find-fail/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-find-fail/src/lib.rs rename to packages/core/services/mm/ops/lobby-find-fail/src/lib.rs diff --git a/packages/services/mm/ops/lobby-find-fail/tests/integration.rs b/packages/core/services/mm/ops/lobby-find-fail/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-find-fail/tests/integration.rs rename to packages/core/services/mm/ops/lobby-find-fail/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-find-lobby-query-list/Cargo.toml b/packages/core/services/mm/ops/lobby-find-lobby-query-list/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-find-lobby-query-list/Cargo.toml rename to packages/core/services/mm/ops/lobby-find-lobby-query-list/Cargo.toml diff --git a/packages/services/mm/ops/lobby-find-lobby-query-list/README.md b/packages/core/services/mm/ops/lobby-find-lobby-query-list/README.md similarity index 100% rename from packages/services/mm/ops/lobby-find-lobby-query-list/README.md rename to packages/core/services/mm/ops/lobby-find-lobby-query-list/README.md diff --git a/packages/services/mm/ops/lobby-find-lobby-query-list/src/lib.rs b/packages/core/services/mm/ops/lobby-find-lobby-query-list/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-find-lobby-query-list/src/lib.rs rename to packages/core/services/mm/ops/lobby-find-lobby-query-list/src/lib.rs diff --git a/packages/services/mm/ops/lobby-find-lobby-query-list/tests/integration.rs b/packages/core/services/mm/ops/lobby-find-lobby-query-list/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-find-lobby-query-list/tests/integration.rs rename to packages/core/services/mm/ops/lobby-find-lobby-query-list/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-find-try-complete/Cargo.toml b/packages/core/services/mm/ops/lobby-find-try-complete/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-find-try-complete/Cargo.toml rename to packages/core/services/mm/ops/lobby-find-try-complete/Cargo.toml diff --git a/packages/services/mm/ops/lobby-find-try-complete/README.md b/packages/core/services/mm/ops/lobby-find-try-complete/README.md similarity index 100% rename from packages/services/mm/ops/lobby-find-try-complete/README.md rename to packages/core/services/mm/ops/lobby-find-try-complete/README.md diff --git a/packages/services/mm/ops/lobby-find-try-complete/src/lib.rs b/packages/core/services/mm/ops/lobby-find-try-complete/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-find-try-complete/src/lib.rs rename to packages/core/services/mm/ops/lobby-find-try-complete/src/lib.rs diff --git a/packages/services/mm/ops/lobby-find-try-complete/tests/integration.rs b/packages/core/services/mm/ops/lobby-find-try-complete/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-find-try-complete/tests/integration.rs rename to packages/core/services/mm/ops/lobby-find-try-complete/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-for-run-id/Cargo.toml b/packages/core/services/mm/ops/lobby-for-run-id/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-for-run-id/Cargo.toml rename to packages/core/services/mm/ops/lobby-for-run-id/Cargo.toml diff --git a/packages/services/mm/ops/lobby-for-run-id/src/lib.rs b/packages/core/services/mm/ops/lobby-for-run-id/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-for-run-id/src/lib.rs rename to packages/core/services/mm/ops/lobby-for-run-id/src/lib.rs diff --git a/packages/services/mm/ops/lobby-for-run-id/tests/integration.rs b/packages/core/services/mm/ops/lobby-for-run-id/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-for-run-id/tests/integration.rs rename to packages/core/services/mm/ops/lobby-for-run-id/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-get/Cargo.toml b/packages/core/services/mm/ops/lobby-get/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-get/Cargo.toml rename to packages/core/services/mm/ops/lobby-get/Cargo.toml diff --git a/packages/services/mm/ops/lobby-get/README.md b/packages/core/services/mm/ops/lobby-get/README.md similarity index 100% rename from packages/services/mm/ops/lobby-get/README.md rename to packages/core/services/mm/ops/lobby-get/README.md diff --git a/packages/services/mm/ops/lobby-get/src/lib.rs b/packages/core/services/mm/ops/lobby-get/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-get/src/lib.rs rename to packages/core/services/mm/ops/lobby-get/src/lib.rs diff --git a/packages/services/mm/ops/lobby-get/tests/integration.rs b/packages/core/services/mm/ops/lobby-get/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-get/tests/integration.rs rename to packages/core/services/mm/ops/lobby-get/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-history/Cargo.toml b/packages/core/services/mm/ops/lobby-history/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-history/Cargo.toml rename to packages/core/services/mm/ops/lobby-history/Cargo.toml diff --git a/packages/services/mm/ops/lobby-history/README.md b/packages/core/services/mm/ops/lobby-history/README.md similarity index 100% rename from packages/services/mm/ops/lobby-history/README.md rename to packages/core/services/mm/ops/lobby-history/README.md diff --git a/packages/services/mm/ops/lobby-history/src/lib.rs b/packages/core/services/mm/ops/lobby-history/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-history/src/lib.rs rename to packages/core/services/mm/ops/lobby-history/src/lib.rs diff --git a/packages/services/mm/ops/lobby-history/tests/integration.rs b/packages/core/services/mm/ops/lobby-history/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-history/tests/integration.rs rename to packages/core/services/mm/ops/lobby-history/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-idle-update/Cargo.toml b/packages/core/services/mm/ops/lobby-idle-update/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-idle-update/Cargo.toml rename to packages/core/services/mm/ops/lobby-idle-update/Cargo.toml diff --git a/packages/services/mm/ops/lobby-idle-update/README.md b/packages/core/services/mm/ops/lobby-idle-update/README.md similarity index 100% rename from packages/services/mm/ops/lobby-idle-update/README.md rename to packages/core/services/mm/ops/lobby-idle-update/README.md diff --git a/packages/services/mm/ops/lobby-idle-update/redis-scripts/main.lua b/packages/core/services/mm/ops/lobby-idle-update/redis-scripts/main.lua similarity index 100% rename from packages/services/mm/ops/lobby-idle-update/redis-scripts/main.lua rename to packages/core/services/mm/ops/lobby-idle-update/redis-scripts/main.lua diff --git a/packages/services/mm/ops/lobby-idle-update/src/lib.rs b/packages/core/services/mm/ops/lobby-idle-update/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-idle-update/src/lib.rs rename to packages/core/services/mm/ops/lobby-idle-update/src/lib.rs diff --git a/packages/services/mm/ops/lobby-idle-update/tests/integration.rs b/packages/core/services/mm/ops/lobby-idle-update/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-idle-update/tests/integration.rs rename to packages/core/services/mm/ops/lobby-idle-update/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-list-for-namespace/Cargo.toml b/packages/core/services/mm/ops/lobby-list-for-namespace/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-list-for-namespace/Cargo.toml rename to packages/core/services/mm/ops/lobby-list-for-namespace/Cargo.toml diff --git a/packages/services/mm/ops/lobby-list-for-namespace/README.md b/packages/core/services/mm/ops/lobby-list-for-namespace/README.md similarity index 100% rename from packages/services/mm/ops/lobby-list-for-namespace/README.md rename to packages/core/services/mm/ops/lobby-list-for-namespace/README.md diff --git a/packages/services/mm/ops/lobby-list-for-namespace/src/lib.rs b/packages/core/services/mm/ops/lobby-list-for-namespace/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-list-for-namespace/src/lib.rs rename to packages/core/services/mm/ops/lobby-list-for-namespace/src/lib.rs diff --git a/packages/services/mm/ops/lobby-list-for-namespace/tests/integration.rs b/packages/core/services/mm/ops/lobby-list-for-namespace/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-list-for-namespace/tests/integration.rs rename to packages/core/services/mm/ops/lobby-list-for-namespace/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-list-for-user-id/Cargo.toml b/packages/core/services/mm/ops/lobby-list-for-user-id/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-list-for-user-id/Cargo.toml rename to packages/core/services/mm/ops/lobby-list-for-user-id/Cargo.toml diff --git a/packages/services/mm/ops/lobby-list-for-user-id/README.md b/packages/core/services/mm/ops/lobby-list-for-user-id/README.md similarity index 100% rename from packages/services/mm/ops/lobby-list-for-user-id/README.md rename to packages/core/services/mm/ops/lobby-list-for-user-id/README.md diff --git a/packages/services/mm/ops/lobby-list-for-user-id/src/lib.rs b/packages/core/services/mm/ops/lobby-list-for-user-id/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-list-for-user-id/src/lib.rs rename to packages/core/services/mm/ops/lobby-list-for-user-id/src/lib.rs diff --git a/packages/services/mm/ops/lobby-list-for-user-id/tests/integration.rs b/packages/core/services/mm/ops/lobby-list-for-user-id/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-list-for-user-id/tests/integration.rs rename to packages/core/services/mm/ops/lobby-list-for-user-id/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-player-count/Cargo.toml b/packages/core/services/mm/ops/lobby-player-count/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-player-count/Cargo.toml rename to packages/core/services/mm/ops/lobby-player-count/Cargo.toml diff --git a/packages/services/mm/ops/lobby-player-count/README.md b/packages/core/services/mm/ops/lobby-player-count/README.md similarity index 100% rename from packages/services/mm/ops/lobby-player-count/README.md rename to packages/core/services/mm/ops/lobby-player-count/README.md diff --git a/packages/services/mm/ops/lobby-player-count/src/lib.rs b/packages/core/services/mm/ops/lobby-player-count/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-player-count/src/lib.rs rename to packages/core/services/mm/ops/lobby-player-count/src/lib.rs diff --git a/packages/services/mm/ops/lobby-player-count/tests/integration.rs b/packages/core/services/mm/ops/lobby-player-count/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-player-count/tests/integration.rs rename to packages/core/services/mm/ops/lobby-player-count/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-runtime-aggregate/Cargo.toml b/packages/core/services/mm/ops/lobby-runtime-aggregate/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-runtime-aggregate/Cargo.toml rename to packages/core/services/mm/ops/lobby-runtime-aggregate/Cargo.toml diff --git a/packages/services/mm/ops/lobby-runtime-aggregate/README.md b/packages/core/services/mm/ops/lobby-runtime-aggregate/README.md similarity index 100% rename from packages/services/mm/ops/lobby-runtime-aggregate/README.md rename to packages/core/services/mm/ops/lobby-runtime-aggregate/README.md diff --git a/packages/services/mm/ops/lobby-runtime-aggregate/src/lib.rs b/packages/core/services/mm/ops/lobby-runtime-aggregate/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-runtime-aggregate/src/lib.rs rename to packages/core/services/mm/ops/lobby-runtime-aggregate/src/lib.rs diff --git a/packages/services/mm/ops/lobby-runtime-aggregate/tests/integration.rs b/packages/core/services/mm/ops/lobby-runtime-aggregate/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-runtime-aggregate/tests/integration.rs rename to packages/core/services/mm/ops/lobby-runtime-aggregate/tests/integration.rs diff --git a/packages/services/mm/ops/lobby-state-get/Cargo.toml b/packages/core/services/mm/ops/lobby-state-get/Cargo.toml similarity index 100% rename from packages/services/mm/ops/lobby-state-get/Cargo.toml rename to packages/core/services/mm/ops/lobby-state-get/Cargo.toml diff --git a/packages/services/mm/ops/lobby-state-get/README.md b/packages/core/services/mm/ops/lobby-state-get/README.md similarity index 100% rename from packages/services/mm/ops/lobby-state-get/README.md rename to packages/core/services/mm/ops/lobby-state-get/README.md diff --git a/packages/services/mm/ops/lobby-state-get/src/lib.rs b/packages/core/services/mm/ops/lobby-state-get/src/lib.rs similarity index 100% rename from packages/services/mm/ops/lobby-state-get/src/lib.rs rename to packages/core/services/mm/ops/lobby-state-get/src/lib.rs diff --git a/packages/services/mm/ops/lobby-state-get/tests/integration.rs b/packages/core/services/mm/ops/lobby-state-get/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/lobby-state-get/tests/integration.rs rename to packages/core/services/mm/ops/lobby-state-get/tests/integration.rs diff --git a/packages/services/mm/ops/player-count-for-namespace/Cargo.toml b/packages/core/services/mm/ops/player-count-for-namespace/Cargo.toml similarity index 100% rename from packages/services/mm/ops/player-count-for-namespace/Cargo.toml rename to packages/core/services/mm/ops/player-count-for-namespace/Cargo.toml diff --git a/packages/services/mm/ops/player-count-for-namespace/README.md b/packages/core/services/mm/ops/player-count-for-namespace/README.md similarity index 100% rename from packages/services/mm/ops/player-count-for-namespace/README.md rename to packages/core/services/mm/ops/player-count-for-namespace/README.md diff --git a/packages/services/mm/ops/player-count-for-namespace/src/lib.rs b/packages/core/services/mm/ops/player-count-for-namespace/src/lib.rs similarity index 100% rename from packages/services/mm/ops/player-count-for-namespace/src/lib.rs rename to packages/core/services/mm/ops/player-count-for-namespace/src/lib.rs diff --git a/packages/services/mm/ops/player-count-for-namespace/tests/integration.rs b/packages/core/services/mm/ops/player-count-for-namespace/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/player-count-for-namespace/tests/integration.rs rename to packages/core/services/mm/ops/player-count-for-namespace/tests/integration.rs diff --git a/packages/services/mm/ops/player-get/Cargo.toml b/packages/core/services/mm/ops/player-get/Cargo.toml similarity index 100% rename from packages/services/mm/ops/player-get/Cargo.toml rename to packages/core/services/mm/ops/player-get/Cargo.toml diff --git a/packages/services/mm/ops/player-get/README.md b/packages/core/services/mm/ops/player-get/README.md similarity index 100% rename from packages/services/mm/ops/player-get/README.md rename to packages/core/services/mm/ops/player-get/README.md diff --git a/packages/services/mm/ops/player-get/src/lib.rs b/packages/core/services/mm/ops/player-get/src/lib.rs similarity index 100% rename from packages/services/mm/ops/player-get/src/lib.rs rename to packages/core/services/mm/ops/player-get/src/lib.rs diff --git a/packages/services/mm/ops/player-get/tests/integration.rs b/packages/core/services/mm/ops/player-get/tests/integration.rs similarity index 100% rename from packages/services/mm/ops/player-get/tests/integration.rs rename to packages/core/services/mm/ops/player-get/tests/integration.rs diff --git a/packages/services/mm/proto/dev-player-token-create.proto b/packages/core/services/mm/proto/dev-player-token-create.proto similarity index 100% rename from packages/services/mm/proto/dev-player-token-create.proto rename to packages/core/services/mm/proto/dev-player-token-create.proto diff --git a/packages/services/mm/proto/lobby-find-fail.proto b/packages/core/services/mm/proto/lobby-find-fail.proto similarity index 100% rename from packages/services/mm/proto/lobby-find-fail.proto rename to packages/core/services/mm/proto/lobby-find-fail.proto diff --git a/packages/services/mm/proto/lobby-find-lobby-query-list.proto b/packages/core/services/mm/proto/lobby-find-lobby-query-list.proto similarity index 100% rename from packages/services/mm/proto/lobby-find-lobby-query-list.proto rename to packages/core/services/mm/proto/lobby-find-lobby-query-list.proto diff --git a/packages/services/mm/proto/lobby-find-try-complete.proto b/packages/core/services/mm/proto/lobby-find-try-complete.proto similarity index 100% rename from packages/services/mm/proto/lobby-find-try-complete.proto rename to packages/core/services/mm/proto/lobby-find-try-complete.proto diff --git a/packages/services/mm/proto/lobby-for-run-id.proto b/packages/core/services/mm/proto/lobby-for-run-id.proto similarity index 100% rename from packages/services/mm/proto/lobby-for-run-id.proto rename to packages/core/services/mm/proto/lobby-for-run-id.proto diff --git a/packages/services/mm/proto/lobby-get.proto b/packages/core/services/mm/proto/lobby-get.proto similarity index 100% rename from packages/services/mm/proto/lobby-get.proto rename to packages/core/services/mm/proto/lobby-get.proto diff --git a/packages/services/mm/proto/lobby-history-export.proto b/packages/core/services/mm/proto/lobby-history-export.proto similarity index 100% rename from packages/services/mm/proto/lobby-history-export.proto rename to packages/core/services/mm/proto/lobby-history-export.proto diff --git a/packages/services/mm/proto/lobby-history.proto b/packages/core/services/mm/proto/lobby-history.proto similarity index 100% rename from packages/services/mm/proto/lobby-history.proto rename to packages/core/services/mm/proto/lobby-history.proto diff --git a/packages/services/mm/proto/lobby-idle-update.proto b/packages/core/services/mm/proto/lobby-idle-update.proto similarity index 100% rename from packages/services/mm/proto/lobby-idle-update.proto rename to packages/core/services/mm/proto/lobby-idle-update.proto diff --git a/packages/services/mm/proto/lobby-list-for-namespace.proto b/packages/core/services/mm/proto/lobby-list-for-namespace.proto similarity index 100% rename from packages/services/mm/proto/lobby-list-for-namespace.proto rename to packages/core/services/mm/proto/lobby-list-for-namespace.proto diff --git a/packages/services/mm/proto/lobby-list-for-user-id.proto b/packages/core/services/mm/proto/lobby-list-for-user-id.proto similarity index 100% rename from packages/services/mm/proto/lobby-list-for-user-id.proto rename to packages/core/services/mm/proto/lobby-list-for-user-id.proto diff --git a/packages/services/mm/proto/lobby-player-count.proto b/packages/core/services/mm/proto/lobby-player-count.proto similarity index 100% rename from packages/services/mm/proto/lobby-player-count.proto rename to packages/core/services/mm/proto/lobby-player-count.proto diff --git a/packages/services/mm/proto/lobby-runtime-aggregate.proto b/packages/core/services/mm/proto/lobby-runtime-aggregate.proto similarity index 100% rename from packages/services/mm/proto/lobby-runtime-aggregate.proto rename to packages/core/services/mm/proto/lobby-runtime-aggregate.proto diff --git a/packages/services/mm/proto/lobby-state-get.proto b/packages/core/services/mm/proto/lobby-state-get.proto similarity index 100% rename from packages/services/mm/proto/lobby-state-get.proto rename to packages/core/services/mm/proto/lobby-state-get.proto diff --git a/packages/services/mm/proto/msg/lobby-cleanup-complete.proto b/packages/core/services/mm/proto/msg/lobby-cleanup-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-cleanup-complete.proto rename to packages/core/services/mm/proto/msg/lobby-cleanup-complete.proto diff --git a/packages/services/mm/proto/msg/lobby-cleanup.proto b/packages/core/services/mm/proto/msg/lobby-cleanup.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-cleanup.proto rename to packages/core/services/mm/proto/msg/lobby-cleanup.proto diff --git a/packages/services/mm/proto/msg/lobby-closed-set-complete.proto b/packages/core/services/mm/proto/msg/lobby-closed-set-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-closed-set-complete.proto rename to packages/core/services/mm/proto/msg/lobby-closed-set-complete.proto diff --git a/packages/services/mm/proto/msg/lobby-closed-set.proto b/packages/core/services/mm/proto/msg/lobby-closed-set.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-closed-set.proto rename to packages/core/services/mm/proto/msg/lobby-closed-set.proto diff --git a/packages/services/mm/proto/msg/lobby-create-complete.proto b/packages/core/services/mm/proto/msg/lobby-create-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-create-complete.proto rename to packages/core/services/mm/proto/msg/lobby-create-complete.proto diff --git a/packages/services/mm/proto/msg/lobby-create-fail.proto b/packages/core/services/mm/proto/msg/lobby-create-fail.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-create-fail.proto rename to packages/core/services/mm/proto/msg/lobby-create-fail.proto diff --git a/packages/services/mm/proto/msg/lobby-create.proto b/packages/core/services/mm/proto/msg/lobby-create.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-create.proto rename to packages/core/services/mm/proto/msg/lobby-create.proto diff --git a/packages/services/mm/proto/msg/lobby-find-complete.proto b/packages/core/services/mm/proto/msg/lobby-find-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-find-complete.proto rename to packages/core/services/mm/proto/msg/lobby-find-complete.proto diff --git a/packages/services/mm/proto/msg/lobby-find-fail.proto b/packages/core/services/mm/proto/msg/lobby-find-fail.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-find-fail.proto rename to packages/core/services/mm/proto/msg/lobby-find-fail.proto diff --git a/packages/services/mm/proto/msg/lobby-find.proto b/packages/core/services/mm/proto/msg/lobby-find.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-find.proto rename to packages/core/services/mm/proto/msg/lobby-find.proto diff --git a/packages/services/mm/proto/msg/lobby-history-export-complete.proto b/packages/core/services/mm/proto/msg/lobby-history-export-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-history-export-complete.proto rename to packages/core/services/mm/proto/msg/lobby-history-export-complete.proto diff --git a/packages/services/mm/proto/msg/lobby-history-export.proto b/packages/core/services/mm/proto/msg/lobby-history-export.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-history-export.proto rename to packages/core/services/mm/proto/msg/lobby-history-export.proto diff --git a/packages/services/mm/proto/msg/lobby-ready-complete.proto b/packages/core/services/mm/proto/msg/lobby-ready-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-ready-complete.proto rename to packages/core/services/mm/proto/msg/lobby-ready-complete.proto diff --git a/packages/services/mm/proto/msg/lobby-ready.proto b/packages/core/services/mm/proto/msg/lobby-ready.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-ready.proto rename to packages/core/services/mm/proto/msg/lobby-ready.proto diff --git a/packages/services/mm/proto/msg/lobby-state-set-complete.proto b/packages/core/services/mm/proto/msg/lobby-state-set-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-state-set-complete.proto rename to packages/core/services/mm/proto/msg/lobby-state-set-complete.proto diff --git a/packages/services/mm/proto/msg/lobby-state-set.proto b/packages/core/services/mm/proto/msg/lobby-state-set.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-state-set.proto rename to packages/core/services/mm/proto/msg/lobby-state-set.proto diff --git a/packages/services/mm/proto/msg/lobby-stop.proto b/packages/core/services/mm/proto/msg/lobby-stop.proto similarity index 100% rename from packages/services/mm/proto/msg/lobby-stop.proto rename to packages/core/services/mm/proto/msg/lobby-stop.proto diff --git a/packages/services/mm/proto/msg/nomad-node-closed-set.proto b/packages/core/services/mm/proto/msg/nomad-node-closed-set.proto similarity index 100% rename from packages/services/mm/proto/msg/nomad-node-closed-set.proto rename to packages/core/services/mm/proto/msg/nomad-node-closed-set.proto diff --git a/packages/services/mm/proto/msg/player-create-complete.proto b/packages/core/services/mm/proto/msg/player-create-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/player-create-complete.proto rename to packages/core/services/mm/proto/msg/player-create-complete.proto diff --git a/packages/services/mm/proto/msg/player-register-complete.proto b/packages/core/services/mm/proto/msg/player-register-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/player-register-complete.proto rename to packages/core/services/mm/proto/msg/player-register-complete.proto diff --git a/packages/services/mm/proto/msg/player-register-fail.proto b/packages/core/services/mm/proto/msg/player-register-fail.proto similarity index 100% rename from packages/services/mm/proto/msg/player-register-fail.proto rename to packages/core/services/mm/proto/msg/player-register-fail.proto diff --git a/packages/services/mm/proto/msg/player-register.proto b/packages/core/services/mm/proto/msg/player-register.proto similarity index 100% rename from packages/services/mm/proto/msg/player-register.proto rename to packages/core/services/mm/proto/msg/player-register.proto diff --git a/packages/services/mm/proto/msg/player-remove-complete.proto b/packages/core/services/mm/proto/msg/player-remove-complete.proto similarity index 100% rename from packages/services/mm/proto/msg/player-remove-complete.proto rename to packages/core/services/mm/proto/msg/player-remove-complete.proto diff --git a/packages/services/mm/proto/msg/player-remove-fail.proto b/packages/core/services/mm/proto/msg/player-remove-fail.proto similarity index 100% rename from packages/services/mm/proto/msg/player-remove-fail.proto rename to packages/core/services/mm/proto/msg/player-remove-fail.proto diff --git a/packages/services/mm/proto/msg/player-remove.proto b/packages/core/services/mm/proto/msg/player-remove.proto similarity index 100% rename from packages/services/mm/proto/msg/player-remove.proto rename to packages/core/services/mm/proto/msg/player-remove.proto diff --git a/packages/services/mm/proto/player-count-for-namespace.proto b/packages/core/services/mm/proto/player-count-for-namespace.proto similarity index 100% rename from packages/services/mm/proto/player-count-for-namespace.proto rename to packages/core/services/mm/proto/player-count-for-namespace.proto diff --git a/packages/services/mm/proto/player-get.proto b/packages/core/services/mm/proto/player-get.proto similarity index 100% rename from packages/services/mm/proto/player-get.proto rename to packages/core/services/mm/proto/player-get.proto diff --git a/packages/services/mm/standalone/gc/Cargo.toml b/packages/core/services/mm/standalone/gc/Cargo.toml similarity index 100% rename from packages/services/mm/standalone/gc/Cargo.toml rename to packages/core/services/mm/standalone/gc/Cargo.toml diff --git a/packages/services/mm/standalone/gc/README.md b/packages/core/services/mm/standalone/gc/README.md similarity index 100% rename from packages/services/mm/standalone/gc/README.md rename to packages/core/services/mm/standalone/gc/README.md diff --git a/packages/services/mm/standalone/gc/src/lib.rs b/packages/core/services/mm/standalone/gc/src/lib.rs similarity index 100% rename from packages/services/mm/standalone/gc/src/lib.rs rename to packages/core/services/mm/standalone/gc/src/lib.rs diff --git a/packages/services/mm/standalone/gc/tests/integration.rs b/packages/core/services/mm/standalone/gc/tests/integration.rs similarity index 100% rename from packages/services/mm/standalone/gc/tests/integration.rs rename to packages/core/services/mm/standalone/gc/tests/integration.rs diff --git a/packages/services/mm/util/Cargo.toml b/packages/core/services/mm/util/Cargo.toml similarity index 100% rename from packages/services/mm/util/Cargo.toml rename to packages/core/services/mm/util/Cargo.toml diff --git a/packages/services/mm/util/src/consts.rs b/packages/core/services/mm/util/src/consts.rs similarity index 100% rename from packages/services/mm/util/src/consts.rs rename to packages/core/services/mm/util/src/consts.rs diff --git a/packages/services/mm/util/src/defaults.rs b/packages/core/services/mm/util/src/defaults.rs similarity index 100% rename from packages/services/mm/util/src/defaults.rs rename to packages/core/services/mm/util/src/defaults.rs diff --git a/packages/services/mm/util/src/key.rs b/packages/core/services/mm/util/src/key.rs similarity index 100% rename from packages/services/mm/util/src/key.rs rename to packages/core/services/mm/util/src/key.rs diff --git a/packages/services/mm/util/src/lib.rs b/packages/core/services/mm/util/src/lib.rs similarity index 100% rename from packages/services/mm/util/src/lib.rs rename to packages/core/services/mm/util/src/lib.rs diff --git a/packages/services/mm/util/src/test.rs b/packages/core/services/mm/util/src/test.rs similarity index 100% rename from packages/services/mm/util/src/test.rs rename to packages/core/services/mm/util/src/test.rs diff --git a/packages/services/mm/util/src/verification.rs b/packages/core/services/mm/util/src/verification.rs similarity index 100% rename from packages/services/mm/util/src/verification.rs rename to packages/core/services/mm/util/src/verification.rs diff --git a/packages/services/mm/util/src/version_migrations.rs b/packages/core/services/mm/util/src/version_migrations.rs similarity index 100% rename from packages/services/mm/util/src/version_migrations.rs rename to packages/core/services/mm/util/src/version_migrations.rs diff --git a/packages/services/mm/worker/Cargo.toml b/packages/core/services/mm/worker/Cargo.toml similarity index 100% rename from packages/services/mm/worker/Cargo.toml rename to packages/core/services/mm/worker/Cargo.toml diff --git a/packages/services/mm/worker/redis-scripts/lobby_closed_set.lua b/packages/core/services/mm/worker/redis-scripts/lobby_closed_set.lua similarity index 100% rename from packages/services/mm/worker/redis-scripts/lobby_closed_set.lua rename to packages/core/services/mm/worker/redis-scripts/lobby_closed_set.lua diff --git a/packages/services/mm/worker/redis-scripts/lobby_create.lua b/packages/core/services/mm/worker/redis-scripts/lobby_create.lua similarity index 100% rename from packages/services/mm/worker/redis-scripts/lobby_create.lua rename to packages/core/services/mm/worker/redis-scripts/lobby_create.lua diff --git a/packages/services/mm/worker/redis-scripts/lobby_find.lua b/packages/core/services/mm/worker/redis-scripts/lobby_find.lua similarity index 100% rename from packages/services/mm/worker/redis-scripts/lobby_find.lua rename to packages/core/services/mm/worker/redis-scripts/lobby_find.lua diff --git a/packages/services/mm/worker/redis-scripts/lobby_ready_set.lua b/packages/core/services/mm/worker/redis-scripts/lobby_ready_set.lua similarity index 100% rename from packages/services/mm/worker/redis-scripts/lobby_ready_set.lua rename to packages/core/services/mm/worker/redis-scripts/lobby_ready_set.lua diff --git a/packages/services/mm/worker/redis-scripts/nomad_node_closed_unset.lua b/packages/core/services/mm/worker/redis-scripts/nomad_node_closed_unset.lua similarity index 100% rename from packages/services/mm/worker/redis-scripts/nomad_node_closed_unset.lua rename to packages/core/services/mm/worker/redis-scripts/nomad_node_closed_unset.lua diff --git a/packages/services/mm/worker/redis-scripts/player_remove.lua b/packages/core/services/mm/worker/redis-scripts/player_remove.lua similarity index 100% rename from packages/services/mm/worker/redis-scripts/player_remove.lua rename to packages/core/services/mm/worker/redis-scripts/player_remove.lua diff --git a/packages/services/mm/worker/src/lib.rs b/packages/core/services/mm/worker/src/lib.rs similarity index 100% rename from packages/services/mm/worker/src/lib.rs rename to packages/core/services/mm/worker/src/lib.rs diff --git a/packages/services/mm/worker/src/workers/lobby_cleanup.rs b/packages/core/services/mm/worker/src/workers/lobby_cleanup.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_cleanup.rs rename to packages/core/services/mm/worker/src/workers/lobby_cleanup.rs diff --git a/packages/services/mm/worker/src/workers/lobby_closed_set.rs b/packages/core/services/mm/worker/src/workers/lobby_closed_set.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_closed_set.rs rename to packages/core/services/mm/worker/src/workers/lobby_closed_set.rs diff --git a/packages/services/mm/worker/src/workers/lobby_create/mod.rs b/packages/core/services/mm/worker/src/workers/lobby_create/mod.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/mod.rs rename to packages/core/services/mm/worker/src/workers/lobby_create/mod.rs diff --git a/packages/services/mm/worker/src/workers/lobby_create/nomad_job.rs b/packages/core/services/mm/worker/src/workers/lobby_create/nomad_job.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/nomad_job.rs rename to packages/core/services/mm/worker/src/workers/lobby_create/nomad_job.rs diff --git a/packages/services/mm/worker/src/workers/lobby_create/oci_config.rs b/packages/core/services/mm/worker/src/workers/lobby_create/oci_config.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/oci_config.rs rename to packages/core/services/mm/worker/src/workers/lobby_create/oci_config.rs diff --git a/packages/services/mm/worker/src/workers/lobby_create/scripts/cleanup.sh b/packages/core/services/mm/worker/src/workers/lobby_create/scripts/cleanup.sh similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/scripts/cleanup.sh rename to packages/core/services/mm/worker/src/workers/lobby_create/scripts/cleanup.sh diff --git a/packages/services/mm/worker/src/workers/lobby_create/scripts/setup.sh b/packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup.sh similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/scripts/setup.sh rename to packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup.sh diff --git a/packages/services/mm/worker/src/workers/lobby_create/scripts/setup_cni_network.sh b/packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup_cni_network.sh similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/scripts/setup_cni_network.sh rename to packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup_cni_network.sh diff --git a/packages/services/mm/worker/src/workers/lobby_create/scripts/setup_job_runner.sh b/packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup_job_runner.sh similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/scripts/setup_job_runner.sh rename to packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup_job_runner.sh diff --git a/packages/services/mm/worker/src/workers/lobby_create/scripts/setup_oci_bundle.sh b/packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup_oci_bundle.sh similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/scripts/setup_oci_bundle.sh rename to packages/core/services/mm/worker/src/workers/lobby_create/scripts/setup_oci_bundle.sh diff --git a/packages/services/mm/worker/src/workers/lobby_create/seccomp.rs b/packages/core/services/mm/worker/src/workers/lobby_create/seccomp.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_create/seccomp.rs rename to packages/core/services/mm/worker/src/workers/lobby_create/seccomp.rs diff --git a/packages/services/mm/worker/src/workers/lobby_find/find.rs b/packages/core/services/mm/worker/src/workers/lobby_find/find.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_find/find.rs rename to packages/core/services/mm/worker/src/workers/lobby_find/find.rs diff --git a/packages/services/mm/worker/src/workers/lobby_find/limit.rs b/packages/core/services/mm/worker/src/workers/lobby_find/limit.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_find/limit.rs rename to packages/core/services/mm/worker/src/workers/lobby_find/limit.rs diff --git a/packages/services/mm/worker/src/workers/lobby_find/mod.rs b/packages/core/services/mm/worker/src/workers/lobby_find/mod.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_find/mod.rs rename to packages/core/services/mm/worker/src/workers/lobby_find/mod.rs diff --git a/packages/services/mm/worker/src/workers/lobby_find_job_run_fail.rs b/packages/core/services/mm/worker/src/workers/lobby_find_job_run_fail.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_find_job_run_fail.rs rename to packages/core/services/mm/worker/src/workers/lobby_find_job_run_fail.rs diff --git a/packages/services/mm/worker/src/workers/lobby_find_lobby_cleanup.rs b/packages/core/services/mm/worker/src/workers/lobby_find_lobby_cleanup.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_find_lobby_cleanup.rs rename to packages/core/services/mm/worker/src/workers/lobby_find_lobby_cleanup.rs diff --git a/packages/services/mm/worker/src/workers/lobby_find_lobby_create_fail.rs b/packages/core/services/mm/worker/src/workers/lobby_find_lobby_create_fail.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_find_lobby_create_fail.rs rename to packages/core/services/mm/worker/src/workers/lobby_find_lobby_create_fail.rs diff --git a/packages/services/mm/worker/src/workers/lobby_find_lobby_ready.rs b/packages/core/services/mm/worker/src/workers/lobby_find_lobby_ready.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_find_lobby_ready.rs rename to packages/core/services/mm/worker/src/workers/lobby_find_lobby_ready.rs diff --git a/packages/services/mm/worker/src/workers/lobby_history_export.rs b/packages/core/services/mm/worker/src/workers/lobby_history_export.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_history_export.rs rename to packages/core/services/mm/worker/src/workers/lobby_history_export.rs diff --git a/packages/services/mm/worker/src/workers/lobby_job_run_cleanup.rs b/packages/core/services/mm/worker/src/workers/lobby_job_run_cleanup.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_job_run_cleanup.rs rename to packages/core/services/mm/worker/src/workers/lobby_job_run_cleanup.rs diff --git a/packages/services/mm/worker/src/workers/lobby_ready_set.rs b/packages/core/services/mm/worker/src/workers/lobby_ready_set.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_ready_set.rs rename to packages/core/services/mm/worker/src/workers/lobby_ready_set.rs diff --git a/packages/services/mm/worker/src/workers/lobby_state_set.rs b/packages/core/services/mm/worker/src/workers/lobby_state_set.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_state_set.rs rename to packages/core/services/mm/worker/src/workers/lobby_state_set.rs diff --git a/packages/services/mm/worker/src/workers/lobby_stop.rs b/packages/core/services/mm/worker/src/workers/lobby_stop.rs similarity index 100% rename from packages/services/mm/worker/src/workers/lobby_stop.rs rename to packages/core/services/mm/worker/src/workers/lobby_stop.rs diff --git a/packages/services/mm/worker/src/workers/mod.rs b/packages/core/services/mm/worker/src/workers/mod.rs similarity index 100% rename from packages/services/mm/worker/src/workers/mod.rs rename to packages/core/services/mm/worker/src/workers/mod.rs diff --git a/packages/services/mm/worker/src/workers/nomad_node_closed_set.rs b/packages/core/services/mm/worker/src/workers/nomad_node_closed_set.rs similarity index 100% rename from packages/services/mm/worker/src/workers/nomad_node_closed_set.rs rename to packages/core/services/mm/worker/src/workers/nomad_node_closed_set.rs diff --git a/packages/services/mm/worker/src/workers/player_register.rs b/packages/core/services/mm/worker/src/workers/player_register.rs similarity index 100% rename from packages/services/mm/worker/src/workers/player_register.rs rename to packages/core/services/mm/worker/src/workers/player_register.rs diff --git a/packages/services/mm/worker/src/workers/player_remove.rs b/packages/core/services/mm/worker/src/workers/player_remove.rs similarity index 100% rename from packages/services/mm/worker/src/workers/player_remove.rs rename to packages/core/services/mm/worker/src/workers/player_remove.rs diff --git a/packages/services/mm/worker/tests/common.rs b/packages/core/services/mm/worker/tests/common.rs similarity index 100% rename from packages/services/mm/worker/tests/common.rs rename to packages/core/services/mm/worker/tests/common.rs diff --git a/packages/services/mm/worker/tests/lobby_cleanup.rs b/packages/core/services/mm/worker/tests/lobby_cleanup.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_cleanup.rs rename to packages/core/services/mm/worker/tests/lobby_cleanup.rs diff --git a/packages/services/mm/worker/tests/lobby_closed_set.rs b/packages/core/services/mm/worker/tests/lobby_closed_set.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_closed_set.rs rename to packages/core/services/mm/worker/tests/lobby_closed_set.rs diff --git a/packages/services/mm/worker/tests/lobby_connectivity.rs b/packages/core/services/mm/worker/tests/lobby_connectivity.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_connectivity.rs rename to packages/core/services/mm/worker/tests/lobby_connectivity.rs diff --git a/packages/services/mm/worker/tests/lobby_create.rs b/packages/core/services/mm/worker/tests/lobby_create.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_create.rs rename to packages/core/services/mm/worker/tests/lobby_create.rs diff --git a/packages/services/mm/worker/tests/lobby_find.rs b/packages/core/services/mm/worker/tests/lobby_find.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_find.rs rename to packages/core/services/mm/worker/tests/lobby_find.rs diff --git a/packages/services/mm/worker/tests/lobby_find_job_run_fail.rs b/packages/core/services/mm/worker/tests/lobby_find_job_run_fail.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_find_job_run_fail.rs rename to packages/core/services/mm/worker/tests/lobby_find_job_run_fail.rs diff --git a/packages/services/mm/worker/tests/lobby_find_lobby_cleanup.rs b/packages/core/services/mm/worker/tests/lobby_find_lobby_cleanup.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_find_lobby_cleanup.rs rename to packages/core/services/mm/worker/tests/lobby_find_lobby_cleanup.rs diff --git a/packages/services/mm/worker/tests/lobby_find_lobby_create_fail.rs b/packages/core/services/mm/worker/tests/lobby_find_lobby_create_fail.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_find_lobby_create_fail.rs rename to packages/core/services/mm/worker/tests/lobby_find_lobby_create_fail.rs diff --git a/packages/services/mm/worker/tests/lobby_find_lobby_ready.rs b/packages/core/services/mm/worker/tests/lobby_find_lobby_ready.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_find_lobby_ready.rs rename to packages/core/services/mm/worker/tests/lobby_find_lobby_ready.rs diff --git a/packages/services/mm/worker/tests/lobby_history_export.rs b/packages/core/services/mm/worker/tests/lobby_history_export.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_history_export.rs rename to packages/core/services/mm/worker/tests/lobby_history_export.rs diff --git a/packages/services/mm/worker/tests/lobby_job_run_cleanup.rs b/packages/core/services/mm/worker/tests/lobby_job_run_cleanup.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_job_run_cleanup.rs rename to packages/core/services/mm/worker/tests/lobby_job_run_cleanup.rs diff --git a/packages/services/mm/worker/tests/lobby_ready_set.rs b/packages/core/services/mm/worker/tests/lobby_ready_set.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_ready_set.rs rename to packages/core/services/mm/worker/tests/lobby_ready_set.rs diff --git a/packages/services/mm/worker/tests/lobby_state_set.rs b/packages/core/services/mm/worker/tests/lobby_state_set.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_state_set.rs rename to packages/core/services/mm/worker/tests/lobby_state_set.rs diff --git a/packages/services/mm/worker/tests/lobby_stop.rs b/packages/core/services/mm/worker/tests/lobby_stop.rs similarity index 100% rename from packages/services/mm/worker/tests/lobby_stop.rs rename to packages/core/services/mm/worker/tests/lobby_stop.rs diff --git a/packages/services/mm/worker/tests/nomad_node_closed_set.rs b/packages/core/services/mm/worker/tests/nomad_node_closed_set.rs similarity index 100% rename from packages/services/mm/worker/tests/nomad_node_closed_set.rs rename to packages/core/services/mm/worker/tests/nomad_node_closed_set.rs diff --git a/packages/services/mm/worker/tests/player_register.rs b/packages/core/services/mm/worker/tests/player_register.rs similarity index 100% rename from packages/services/mm/worker/tests/player_register.rs rename to packages/core/services/mm/worker/tests/player_register.rs diff --git a/packages/services/mm/worker/tests/player_remove.rs b/packages/core/services/mm/worker/tests/player_remove.rs similarity index 100% rename from packages/services/mm/worker/tests/player_remove.rs rename to packages/core/services/mm/worker/tests/player_remove.rs diff --git a/packages/core/services/monolith/standalone/worker/Cargo.toml b/packages/core/services/monolith/standalone/worker/Cargo.toml new file mode 100644 index 0000000000..6e9efbd4d6 --- /dev/null +++ b/packages/core/services/monolith/standalone/worker/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "monolith-worker" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +chirp-client.workspace = true +rivet-config.workspace = true +rivet-connection.workspace = true +rivet-health-checks.workspace = true +rivet-metrics.workspace = true +rivet-operation.workspace = true +rivet-runtime.workspace = true +tokio = { version = "1.40", features = ["full"] } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "fmt", + "json", + "ansi", +] } + +cdn-worker.workspace = true +cf-custom-hostname-worker.workspace = true +cloud-worker.workspace = true +ds.workspace = true +external-worker.workspace = true +job-log-worker.workspace = true +job-run.workspace = true +mm-worker.workspace = true +team-invite-worker.workspace = true +team-worker.workspace = true +upload-worker.workspace = true +user-worker.workspace = true diff --git a/packages/services/monolith/standalone/worker/src/lib.rs b/packages/core/services/monolith/standalone/worker/src/lib.rs similarity index 100% rename from packages/services/monolith/standalone/worker/src/lib.rs rename to packages/core/services/monolith/standalone/worker/src/lib.rs diff --git a/packages/core/services/monolith/standalone/workflow-worker/Cargo.toml b/packages/core/services/monolith/standalone/workflow-worker/Cargo.toml new file mode 100644 index 0000000000..35690f16df --- /dev/null +++ b/packages/core/services/monolith/standalone/workflow-worker/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "monolith-workflow-worker" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +chirp-workflow.workspace = true +rivet-config.workspace = true +rivet-health-checks.workspace = true +rivet-metrics.workspace = true +rivet-runtime.workspace = true + +cluster.workspace = true +job-run.workspace = true +linode.workspace = true diff --git a/packages/core/services/monolith/standalone/workflow-worker/src/lib.rs b/packages/core/services/monolith/standalone/workflow-worker/src/lib.rs new file mode 100644 index 0000000000..b6727ac11f --- /dev/null +++ b/packages/core/services/monolith/standalone/workflow-worker/src/lib.rs @@ -0,0 +1,24 @@ +use chirp_workflow::prelude::*; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + run_from_env(config, pools).await?; + + Ok(()) +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let reg = cluster::registry()? + .merge(linode::registry()?)? + .merge(job_run::registry()?)?; + + let db = db::DatabaseCrdbNats::from_pools(pools.clone())?; + let worker = Worker::new(reg.handle(), db); + + // Start worker + worker.start(config, pools).await?; + bail!("worker exited unexpectedly"); +} diff --git a/packages/services/nomad/proto/msg/nomad-monitor-alloc-plan.proto b/packages/core/services/nomad/proto/msg/nomad-monitor-alloc-plan.proto similarity index 100% rename from packages/services/nomad/proto/msg/nomad-monitor-alloc-plan.proto rename to packages/core/services/nomad/proto/msg/nomad-monitor-alloc-plan.proto diff --git a/packages/services/nomad/proto/msg/nomad-monitor-alloc-update.proto b/packages/core/services/nomad/proto/msg/nomad-monitor-alloc-update.proto similarity index 100% rename from packages/services/nomad/proto/msg/nomad-monitor-alloc-update.proto rename to packages/core/services/nomad/proto/msg/nomad-monitor-alloc-update.proto diff --git a/packages/services/nomad/proto/msg/nomad-monitor-eval-update.proto b/packages/core/services/nomad/proto/msg/nomad-monitor-eval-update.proto similarity index 100% rename from packages/services/nomad/proto/msg/nomad-monitor-eval-update.proto rename to packages/core/services/nomad/proto/msg/nomad-monitor-eval-update.proto diff --git a/packages/services/nomad/proto/msg/nomad-monitor-node-registered.proto b/packages/core/services/nomad/proto/msg/nomad-monitor-node-registered.proto similarity index 100% rename from packages/services/nomad/proto/msg/nomad-monitor-node-registered.proto rename to packages/core/services/nomad/proto/msg/nomad-monitor-node-registered.proto diff --git a/packages/services/nomad/standalone/monitor/Cargo.toml b/packages/core/services/nomad/standalone/monitor/Cargo.toml similarity index 100% rename from packages/services/nomad/standalone/monitor/Cargo.toml rename to packages/core/services/nomad/standalone/monitor/Cargo.toml diff --git a/packages/services/nomad/standalone/monitor/README.md b/packages/core/services/nomad/standalone/monitor/README.md similarity index 100% rename from packages/services/nomad/standalone/monitor/README.md rename to packages/core/services/nomad/standalone/monitor/README.md diff --git a/packages/core/services/nomad/standalone/monitor/src/lib.rs b/packages/core/services/nomad/standalone/monitor/src/lib.rs new file mode 100644 index 0000000000..3f0a52d4c4 --- /dev/null +++ b/packages/core/services/nomad/standalone/monitor/src/lib.rs @@ -0,0 +1,123 @@ +use chirp_workflow::prelude::*; + +mod monitors; +use monitors::*; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + run_from_env(config, pools).await +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("nomad-monitor"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let redis_job = pools.redis("persistent")?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "nomad-monitor", + ) + .await?; + + // Start nomad event monitor + let redis_index_key = "nomad:monitor_index"; + let configuration = nomad_util::new_build_config(ctx.config())?; + + nomad_util::monitor::Monitor::run( + configuration, + redis_job, + redis_index_key, + &["Allocation", "Evaluation", "Node"], + |event| { + let ctx = ctx.clone(); + async move { + match handle(ctx.clone(), event).await { + Ok(_) => {} + Err(err) => { + tracing::error!(?err, "error handling nomad event"); + } + } + } + }, + ) + .await?; + + Ok(()) +} + +async fn handle(ctx: StandaloneCtx, event: nomad_util::monitor::NomadEvent) -> GlobalResult<()> { + // TODO: Figure out how to abstract the branches + if let Some(payload) = event.decode::("Allocation", "PlanResult")? { + // let client = shared_client.wrap_new("nomad-alloc-plan-monitor"); + let spawn_res = tokio::task::Builder::new() + .name("nomad_alloc_plan_monitor::handle_event") + .spawn(async move { + match alloc_plan::handle(ctx, &payload, event.payload.to_string()).await { + Ok(_) => {} + Err(err) => { + tracing::error!(?err, ?payload, "error handling event"); + } + } + }); + if let Err(err) = spawn_res { + tracing::error!(?err, "failed to spawn handle_event task"); + } + } else if let Some(payload) = + event.decode::("Allocation", "AllocationUpdated")? + { + // let client = shared_client.wrap_new("nomad-alloc-updated-monitor"); + let spawn_res = tokio::task::Builder::new() + .name("nomad_alloc_update_monitor::handle_event") + .spawn(async move { + match alloc_update::handle(ctx, &payload, event.payload.to_string()).await { + Ok(_) => {} + Err(err) => { + tracing::error!(?err, ?payload, "error handling event"); + } + } + }); + if let Err(err) = spawn_res { + tracing::error!(?err, "failed to spawn handle_event task"); + } + } else if let Some(payload) = + event.decode::("Evaluation", "EvaluationUpdated")? + { + // let client = shared_client.wrap_new("nomad-eval-update-monitor"); + let spawn_res = tokio::task::Builder::new() + .name("nomad_eval_update_monitor::handle_event") + .spawn(async move { + match eval_update::handle(ctx, &payload, event.payload.to_string()).await { + Ok(_) => {} + Err(err) => { + tracing::error!(?err, ?payload, "error handling event"); + } + } + }); + if let Err(err) = spawn_res { + tracing::error!(?err, "failed to spawn handle_event task"); + } + } else if let Some(payload) = + event.decode::("Node", "NodeRegistration")? + { + // let client = shared_client.wrap_new("nomad-node-registration-monitor"); + let spawn_res = tokio::task::Builder::new() + .name("nomad_node_registration_monitor::handle") + .spawn(async move { + match node_registration::handle(ctx, &payload).await { + Ok(_) => {} + Err(err) => { + tracing::error!(?err, ?payload, "error handling event"); + } + } + }); + if let Err(err) = spawn_res { + tracing::error!(?err, "failed to spawn handle_event task"); + } + } + + Ok(()) +} diff --git a/packages/services/nomad/standalone/monitor/src/monitors/alloc_plan.rs b/packages/core/services/nomad/standalone/monitor/src/monitors/alloc_plan.rs similarity index 100% rename from packages/services/nomad/standalone/monitor/src/monitors/alloc_plan.rs rename to packages/core/services/nomad/standalone/monitor/src/monitors/alloc_plan.rs diff --git a/packages/services/nomad/standalone/monitor/src/monitors/alloc_update.rs b/packages/core/services/nomad/standalone/monitor/src/monitors/alloc_update.rs similarity index 100% rename from packages/services/nomad/standalone/monitor/src/monitors/alloc_update.rs rename to packages/core/services/nomad/standalone/monitor/src/monitors/alloc_update.rs diff --git a/packages/services/nomad/standalone/monitor/src/monitors/eval_update.rs b/packages/core/services/nomad/standalone/monitor/src/monitors/eval_update.rs similarity index 100% rename from packages/services/nomad/standalone/monitor/src/monitors/eval_update.rs rename to packages/core/services/nomad/standalone/monitor/src/monitors/eval_update.rs diff --git a/packages/services/nomad/standalone/monitor/src/monitors/mod.rs b/packages/core/services/nomad/standalone/monitor/src/monitors/mod.rs similarity index 100% rename from packages/services/nomad/standalone/monitor/src/monitors/mod.rs rename to packages/core/services/nomad/standalone/monitor/src/monitors/mod.rs diff --git a/packages/services/nomad/standalone/monitor/src/monitors/node_registration.rs b/packages/core/services/nomad/standalone/monitor/src/monitors/node_registration.rs similarity index 100% rename from packages/services/nomad/standalone/monitor/src/monitors/node_registration.rs rename to packages/core/services/nomad/standalone/monitor/src/monitors/node_registration.rs diff --git a/packages/services/nomad/standalone/monitor/tests/integration.rs b/packages/core/services/nomad/standalone/monitor/tests/integration.rs similarity index 100% rename from packages/services/nomad/standalone/monitor/tests/integration.rs rename to packages/core/services/nomad/standalone/monitor/tests/integration.rs diff --git a/packages/services/pegboard/Cargo.toml b/packages/core/services/pegboard/Cargo.toml similarity index 100% rename from packages/services/pegboard/Cargo.toml rename to packages/core/services/pegboard/Cargo.toml diff --git a/packages/services/pegboard/db/pegboard/migrations/20240913005543_init.down.sql b/packages/core/services/pegboard/db/pegboard/migrations/20240913005543_init.down.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20240913005543_init.down.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20240913005543_init.down.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20240913005543_init.up.sql b/packages/core/services/pegboard/db/pegboard/migrations/20240913005543_init.up.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20240913005543_init.up.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20240913005543_init.up.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241011221017_rename.down.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241011221017_rename.down.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241011221017_rename.down.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241011221017_rename.down.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241011221017_rename.up.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241011221017_rename.up.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241011221017_rename.up.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241011221017_rename.up.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.down.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.down.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.down.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.down.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.up.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.up.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.up.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241011221018_add_flavor.up.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.down.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.down.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.down.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.down.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.up.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.up.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.up.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241109002523_client_sysinfo.up.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.down.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.down.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.down.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.down.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.up.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.up.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.up.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241109065829_add_client_config.up.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.down.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.down.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.down.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.down.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.up.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.up.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.up.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241119010653_add_lost_state.up.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.down.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.down.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.down.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.down.sql diff --git a/packages/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.up.sql b/packages/core/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.up.sql similarity index 100% rename from packages/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.up.sql rename to packages/core/services/pegboard/db/pegboard/migrations/20241228010810_add_ignore_future_state.up.sql diff --git a/packages/services/pegboard/src/client_config.rs b/packages/core/services/pegboard/src/client_config.rs similarity index 100% rename from packages/services/pegboard/src/client_config.rs rename to packages/core/services/pegboard/src/client_config.rs diff --git a/packages/core/services/pegboard/src/lib.rs b/packages/core/services/pegboard/src/lib.rs new file mode 100644 index 0000000000..9240be46c6 --- /dev/null +++ b/packages/core/services/pegboard/src/lib.rs @@ -0,0 +1,11 @@ +#[cfg(feature = "chirp")] +use chirp_workflow::prelude::*; + +pub mod client_config; +pub mod metrics; +#[cfg(feature = "ops")] +pub mod ops; +pub mod protocol; +pub mod system_info; +#[cfg(feature = "workflows")] +pub mod workflows; diff --git a/packages/services/pegboard/src/metrics.rs b/packages/core/services/pegboard/src/metrics.rs similarity index 100% rename from packages/services/pegboard/src/metrics.rs rename to packages/core/services/pegboard/src/metrics.rs diff --git a/packages/services/pegboard/src/ops/client/mod.rs b/packages/core/services/pegboard/src/ops/client/mod.rs similarity index 100% rename from packages/services/pegboard/src/ops/client/mod.rs rename to packages/core/services/pegboard/src/ops/client/mod.rs diff --git a/packages/core/services/pegboard/src/ops/client/usage_get.rs b/packages/core/services/pegboard/src/ops/client/usage_get.rs new file mode 100644 index 0000000000..f71cfbf147 --- /dev/null +++ b/packages/core/services/pegboard/src/ops/client/usage_get.rs @@ -0,0 +1,58 @@ +use std::convert::TryInto; + +use chirp_workflow::prelude::*; + +#[derive(sqlx::FromRow)] +struct ClientRow { + client_id: Uuid, + total_cpu: i64, + total_memory: i64, +} + +#[derive(Debug)] +pub struct Input { + pub client_ids: Vec, +} + +#[derive(Debug)] +pub struct Output { + pub clients: Vec, +} + +#[derive(Debug)] +pub struct Client { + pub client_id: Uuid, + pub usage: Stats, +} + +#[derive(Debug)] +pub struct Stats { + /// Mhz + pub cpu: u32, + /// MiB + pub memory: u32, + /// MiB + pub disk: u32, +} + +#[operation] +pub async fn pegboard_client_usage_get(ctx: &OperationCtx, input: &Input) -> GlobalResult { + // TODO: Pull from prometheus + + let clients = input + .client_ids + .iter() + .map(|client_id| { + Ok(Client { + client_id: *client_id, + usage: Stats { + cpu: 0, + memory: 0, + disk: 0, // TODO: + }, + }) + }) + .collect::>()?; + + Ok(Output { clients }) +} diff --git a/packages/services/pegboard/src/ops/mod.rs b/packages/core/services/pegboard/src/ops/mod.rs similarity index 100% rename from packages/services/pegboard/src/ops/mod.rs rename to packages/core/services/pegboard/src/ops/mod.rs diff --git a/packages/services/pegboard/src/protocol.rs b/packages/core/services/pegboard/src/protocol.rs similarity index 94% rename from packages/services/pegboard/src/protocol.rs rename to packages/core/services/pegboard/src/protocol.rs index 7d012c33d6..cf94462b90 100644 --- a/packages/services/pegboard/src/protocol.rs +++ b/packages/core/services/pegboard/src/protocol.rs @@ -183,13 +183,13 @@ pub struct Resources { #[derive(Debug, Serialize, Deserialize, Clone, Hash)] #[serde(rename_all = "snake_case")] pub enum ActorOwner { - DynamicServer { server_id: Uuid }, + DynamicServer { server_id: Uuid, workflow_id: Uuid }, } impl ActorOwner { pub fn env(&self) -> Vec<(&str, String)> { match self { - ActorOwner::DynamicServer { server_id } => { + ActorOwner::DynamicServer { server_id, .. } => { vec![ ("OWNER", "dynamic_server".to_string()), ("SERVER_ID", server_id.to_string()), @@ -259,36 +259,28 @@ pub enum Event { #[derive(Debug, Clone, Serialize, Deserialize, Hash)] #[serde(rename_all = "snake_case")] pub enum ActorState { - /// Actor planned, not yet started. - /// Sent by pegboard dc. - Allocated { client_id: Uuid }, /// Actor starting on client. - /// Sent by pegboard client. Starting, /// Actor has a running process. - /// Sent by pegboard client. Running { pid: usize, ports: HashableMap, }, /// Actor planned to stop. - /// Sent by pegboard dc. Stopping, /// Actor stopped on client, process not yet exited. - /// Sent by pegboard client. Stopped, /// Actor was lost in some way and will never be marked as stopped (if not already) and will never exit. - /// Sent by pegboard client and pegboard gc. Lost, /// Actor process exited. - /// Sent by pegboard client. Exited { /// Unset if the exit code could not be read (usually from SIGKILL or lost process) exit_code: Option, }, - /// Datacenter failed to allocate the actor to a client. - /// Sent by pegboard dc. - FailedToAllocate, + /// The client running this actor started draining. + Draining { drain_timeout_ts: i64 }, + /// The client running this actor stopped draining. + Undrained, } #[derive(Debug, Clone, Serialize, Deserialize, Hash)] diff --git a/packages/services/pegboard/src/system_info.rs b/packages/core/services/pegboard/src/system_info.rs similarity index 100% rename from packages/services/pegboard/src/system_info.rs rename to packages/core/services/pegboard/src/system_info.rs diff --git a/packages/core/services/pegboard/src/workflows/client.rs b/packages/core/services/pegboard/src/workflows/client.rs new file mode 100644 index 0000000000..630dbecb2e --- /dev/null +++ b/packages/core/services/pegboard/src/workflows/client.rs @@ -0,0 +1,649 @@ +use std::convert::TryInto; + +use chirp_workflow::prelude::*; +use futures_util::FutureExt; +use nix::sys::signal::Signal; + +use crate::{metrics, protocol, workflows::PrewarmImage}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Input { + pub client_id: Uuid, +} + +#[workflow] +pub async fn pegboard_client(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + // Whatever started this client should be listening for this + ctx.signal(Registered {}) + .tag("client_id", input.client_id) + .send() + .await?; + + ctx.repeat(|ctx| { + let client_id = input.client_id; + + async move { + match ctx.listen::
().await? { + Main::Forward(sig) => { + match sig { + protocol::ToServer::Init { + last_command_idx, + config, + system, + } => { + let init_data = ctx + .activity(ProcessInitInput { + client_id, + config, + system, + last_command_idx, + }) + .await?; + + // Send init packet + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::Init { + last_event_idx: init_data.last_event_idx, + }, + }) + .send() + .await?; + + // Send missed commands + if !init_data.missed_commands.is_empty() { + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::Commands(init_data.missed_commands), + }) + .send() + .await?; + } + } + // We assume events are in order by index + protocol::ToServer::Events(events) => { + // Write to db + let (_, update_actor_state_res) = ctx + .join(( + activity(InsertEventsInput { + client_id, + events: events.clone(), + }), + activity(UpdateActorStateInput { + updates: events + .iter() + .map(|x| Update { + event: x.inner.clone(), + ignore_future_state: None, + }) + .collect(), + }), + )) + .await?; + + // NOTE: This should not be parallelized because signals should be sent in order + for event in events { + #[allow(irrefutable_let_patterns)] + if let protocol::Event::ActorStateUpdate { actor_id, state } = + event.inner.deserialize()? + { + // Skip ignored actor ids + if update_actor_state_res + .ignore_actor_ids + .iter() + .any(|id| &actor_id == id) + { + continue; + } + + ctx.signal(ActorStateUpdate { state }) + .tag("actor_id", actor_id) + .send() + .await?; + } + } + } + } + } + Main::Command(command) => { + handle_commands(ctx, client_id, vec![command]).await?; + } + Main::PrewarmImage(sig) => { + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::PrewarmImage { + image_id: sig.image_id, + image_artifact_url_stub: sig.image_artifact_url_stub, + }, + }) + .send() + .await?; + } + Main::Drain(_) => { + ctx.activity(SetDrainInput { + client_id, + drain: true, + }) + .await?; + } + Main::Undrain(_) => { + ctx.activity(SetDrainInput { + client_id, + drain: false, + }) + .await?; + } + Main::Destroy(_) => return Ok(Loop::Break(())), + } + + Ok(Loop::Continue) + } + .boxed() + }) + .await?; + + let actor_ids = ctx + .activity(FetchAllActorsInput { + client_id: input.client_id, + }) + .await?; + + // Evict all actors. + // Note that even if this client is unresponsive and does not process the signal commands, the + // pegboard-gc service will manually set the actors as closed after 30 seconds. + handle_commands( + ctx, + input.client_id, + actor_ids + .into_iter() + .map(|actor_id| protocol::Command::SignalActor { + actor_id, + signal: Signal::SIGKILL as i32, + persist_storage: false, + ignore_future_state: true, + }) + .collect(), + ) + .await?; + + // Close websocket connection + ctx.msg(CloseWs { + client_id: input.client_id, + }) + .send() + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ProcessInitInput { + client_id: Uuid, + last_command_idx: i64, + config: crate::client_config::ClientConfig, + system: crate::system_info::SystemInfo, +} + +#[derive(Debug, Serialize, Deserialize)] +struct ProcessInitOutput { + last_event_idx: i64, + missed_commands: Vec, +} + +#[activity(ProcessInit)] +async fn process_init( + ctx: &ActivityCtx, + input: &ProcessInitInput, +) -> GlobalResult { + let ((last_event_idx,), commands) = tokio::try_join!( + sql_fetch_one!( + [ctx, (i64,)] + " + UPDATE db_pegboard.clients + SET config = $2, system_info = $3 + WHERE client_id = $1 + RETURNING last_event_idx + ", + input.client_id, + serde_json::to_value(&input.config)?, + serde_json::to_value(&input.system)?, + ), + sql_fetch_all!( + [ctx, (i64, String)] + " + SELECT index, payload::TEXT + FROM db_pegboard.client_commands + WHERE client_id = $1 AND index > $2 + ORDER BY index ASC + ", + input.client_id, + input.last_command_idx, + ), + )?; + + Ok(ProcessInitOutput { + last_event_idx, + missed_commands: commands + .into_iter() + .map(|(index, payload)| { + Ok(protocol::CommandWrapper { + index, + inner: protocol::Raw::from_string(payload)?, + }) + }) + .collect::>()?, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct InsertEventsInput { + client_id: Uuid, + events: Vec, +} + +#[activity(InsertEvents)] +async fn insert_events(ctx: &ActivityCtx, input: &InsertEventsInput) -> GlobalResult<()> { + let last_event_idx = if let Some(last_event_wrapper) = input.events.last() { + last_event_wrapper.index + } else { + return Ok(()); + }; + + // TODO(RVT-4450): `last_event_idx < $2` and `ON CONFLICT DO NOTHING` is a workaround + let inserted_rows = sql_fetch_all!( + [ctx, (i64,)] + " + WITH + update_last_event_idx AS ( + UPDATE db_pegboard.clients + SET last_event_idx = $2 + WHERE + client_id = $1 AND + last_event_idx < $2 + RETURNING 1 + ), + insert_events AS ( + INSERT INTO db_pegboard.client_events (client_id, index, payload, ack_ts) + SELECT $1, index, payload, $5 + FROM UNNEST($3, $4) AS e(index, payload) + ON CONFLICT DO NOTHING + RETURNING index + ) + SELECT index FROM insert_events + ", + input.client_id, + last_event_idx, + input.events.iter().map(|wrapper| wrapper.index).collect::>(), + input.events.iter().map(|wrapper| &wrapper.inner).collect::>(), + util::timestamp::now(), + ) + .await?; + + for event in &input.events { + // Filter out events that were actually inserted + if inserted_rows.iter().any(|(idx,)| &event.index == idx) { + continue; + } + + metrics::CLIENT_DUPLICATE_EVENT + .with_label_values(&[&input.client_id.to_string(), &event.index.to_string()]) + .inc(); + } + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateActorStateInput { + updates: Vec, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct Update { + event: protocol::Raw, + ignore_future_state: Option, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateActorStateOutput { + // Deprecated + stopping_actor_ids: Option>, + /// A list of actor ids which we should not publish actor state update signals for. + #[serde(default)] + ignore_actor_ids: Vec, +} + +#[activity(UpdateActorState)] +async fn update_actor_state( + ctx: &ActivityCtx, + input: &UpdateActorStateInput, +) -> GlobalResult { + use protocol::ActorState::*; + + let mut ignore_actor_ids = Vec::new(); + + // TODO: Parallelize + for update in &input.updates { + // Update actors table with actor state updates + match update.event.deserialize()? { + protocol::Event::ActorStateUpdate { actor_id, state } => { + let (ignore_future_state,) = match state { + Starting => { + sql_fetch_one!( + [ctx, (bool,)] + " + UPDATE db_pegboard.actors + SET start_ts = $2 + WHERE actor_id = $1 + RETURNING ignore_future_state + ", + actor_id, + util::timestamp::now(), + ) + .await? + } + Running { pid, .. } => { + sql_fetch_one!( + [ctx, (bool,)] + " + UPDATE db_pegboard.actors + SET + running_ts = $2, + pid = $3 + WHERE actor_id = $1 + RETURNING ignore_future_state + ", + actor_id, + util::timestamp::now(), + pid as i64, + ) + .await? + } + Stopping => sql_fetch_optional!( + [ctx, (bool,)] + " + UPDATE db_pegboard.actors + SET + stopping_ts = $2, + ignore_future_state = COALESCE($3, ignore_future_state) + WHERE actor_id = $1 AND stopping_ts IS NULL + RETURNING ignore_future_state + ", + actor_id, + util::timestamp::now(), + update.ignore_future_state, + ) + .await? + .unwrap_or((true,)), + Stopped => { + sql_fetch_one!( + [ctx, (bool,)] + " + UPDATE db_pegboard.actors + SET stop_ts = $2 + WHERE actor_id = $1 + RETURNING ignore_future_state + ", + actor_id, + util::timestamp::now(), + ) + .await? + } + Lost => { + sql_fetch_one!( + [ctx, (bool,)] + " + UPDATE db_pegboard.actors + SET + lost_ts = $2 + WHERE actor_id = $1 + RETURNING ignore_future_state + ", + actor_id, + util::timestamp::now(), + ) + .await? + } + Exited { exit_code } => { + sql_fetch_one!( + [ctx, (bool,)] + " + UPDATE db_pegboard.actors + SET + exit_ts = $2, + exit_code = $3 + WHERE actor_id = $1 + RETURNING ignore_future_state + ", + actor_id, + util::timestamp::now(), + exit_code, + ) + .await? + } + _ => todo!("remove"), + }; + + if ignore_future_state { + ignore_actor_ids.push(actor_id); + } + } + } + } + + Ok(UpdateActorStateOutput { + stopping_actor_ids: None, + ignore_actor_ids, + }) +} + +pub async fn handle_commands( + ctx: &mut WorkflowCtx, + client_id: Uuid, + commands: Vec, +) -> GlobalResult<()> { + if commands.is_empty() { + return Ok(()); + } + + let raw_commands = commands + .iter() + .map(protocol::Raw::new) + .collect::, _>>()?; + + // Write to db + let index = ctx + .activity(InsertCommandsInput { + client_id, + commands: raw_commands.clone(), + }) + .await?; + + // TODO: Send as a single message + for (i, raw_command) in raw_commands.into_iter().enumerate() { + let wrapped_command = protocol::CommandWrapper { + index: index + i as i64, + inner: raw_command, + }; + + // Forward signal to ws as message + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::Commands(vec![wrapped_command]), + }) + .send() + .await?; + } + + // TODO: Parallelize + // Update actor state based on commands + for command in commands { + if let protocol::Command::SignalActor { + actor_id, + signal, + ignore_future_state, + .. + } = command + { + if matches!(signal.try_into()?, Signal::SIGTERM | Signal::SIGKILL) { + let res = ctx + .activity(UpdateActorStateInput { + updates: vec![Update { + event: protocol::Raw::new(&protocol::Event::ActorStateUpdate { + actor_id, + state: protocol::ActorState::Stopping, + })?, + ignore_future_state: ignore_future_state.then_some(true), + }], + }) + .await?; + + // Publish signal if stopping_ts was not set before + if res.ignore_actor_ids.is_empty() { + ctx.signal(crate::workflows::client::ActorStateUpdate { + state: protocol::ActorState::Stopping, + }) + .tag("actor_id", actor_id) + .send() + .await?; + } + } + } + } + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct InsertCommandsInput { + client_id: Uuid, + commands: Vec>, +} + +#[activity(InsertCommands)] +async fn insert_commands(ctx: &ActivityCtx, input: &InsertCommandsInput) -> GlobalResult { + let (index,) = sql_fetch_one!( + [ctx, (i64,)] + " + WITH + last_command_idx(idx) AS ( + UPDATE db_pegboard.clients + SET last_command_idx = last_command_idx + array_length($2, 1) + WHERE client_id = $1 + RETURNING last_command_idx - array_length($2, 1) + ), + insert_commands AS ( + INSERT INTO db_pegboard.client_commands ( + client_id, + index, + payload, + create_ts + ) + SELECT $1, l.idx + p.index, p.payload, $3 + FROM last_command_idx AS l + CROSS JOIN UNNEST($2) WITH ORDINALITY AS p(payload, index) + RETURNING 1 + ) + SELECT idx FROM last_command_idx + ", + input.client_id, + &input.commands, + util::timestamp::now(), + ) + .await?; + + // Postgres is 1-based + Ok(index + 1) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetDrainInput { + client_id: Uuid, + drain: bool, +} + +#[activity(SetDrain)] +async fn set_drain(ctx: &ActivityCtx, input: &SetDrainInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + UPDATE db_pegboard.clients + SET drain_ts = $2 + WHERE client_id = $1 + ", + input.client_id, + input.drain.then(util::timestamp::now), + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct FetchAllActorsInput { + client_id: Uuid, +} + +#[activity(FetchAllActors)] +async fn fetch_all_actors( + ctx: &ActivityCtx, + input: &FetchAllActorsInput, +) -> GlobalResult> { + let actor_ids = sql_fetch_all!( + [ctx, (Uuid,)] + " + SELECT actor_id + FROM db_pegboard.actors + WHERE + client_id = $1 AND + stopping_ts IS NULL AND + stop_ts IS NULL AND + exit_ts IS NULL + ", + input.client_id, + ) + .await? + .into_iter() + .map(|(id,)| id) + .collect(); + + Ok(actor_ids) +} + +#[signal("pegboard_client_registered")] +pub struct Registered {} + +#[message("pegboard_client_to_ws")] +pub struct ToWs { + pub client_id: Uuid, + pub inner: protocol::ToClient, +} + +#[message("pegboard_client_close_ws")] +pub struct CloseWs { + pub client_id: Uuid, +} + +#[signal("pegboard_actor_state_update")] +pub struct ActorStateUpdate { + pub state: protocol::ActorState, +} + +#[signal("pegboard_client_drain")] +pub struct Drain {} + +#[signal("pegboard_client_undrain")] +pub struct Undrain {} + +#[signal("pegboard_client_destroy")] +pub struct Destroy {} + +join_signal!(Main { + Command(protocol::Command), + // Forwarded from the ws to this workflow + Forward(protocol::ToServer), + PrewarmImage, + Drain, + Undrain, + Destroy, +}); diff --git a/packages/core/services/pegboard/src/workflows/datacenter.rs b/packages/core/services/pegboard/src/workflows/datacenter.rs new file mode 100644 index 0000000000..33aedf192b --- /dev/null +++ b/packages/core/services/pegboard/src/workflows/datacenter.rs @@ -0,0 +1,284 @@ +use chirp_workflow::prelude::*; +use futures_util::FutureExt; + +use crate::{protocol, workflows::PrewarmImage}; + +/// How long after last ping before not considering a client for allocation. +pub const CLIENT_ELIGIBLE_THRESHOLD_MS: i64 = util::duration::seconds(10); + +#[derive(Debug, Serialize, Deserialize)] +pub struct Input { + pub datacenter_id: Uuid, +} + +#[workflow] +pub async fn pegboard_datacenter(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + ctx.repeat(|ctx| { + let datacenter_id = input.datacenter_id; + + async move { + match ctx.listen::
().await? { + Main::Command(protocol::Command::StartActor { actor_id, config }) => { + let client_id = ctx + .activity(AllocateActorInput { + datacenter_id, + actor_id, + config: *config.clone(), + }) + .await?; + + if let Some(client_id) = client_id { + ctx.signal(crate::workflows::client::ActorStateUpdate { + state: todo!("remove"), + }) + .tag("actor_id", actor_id) + .send() + .await?; + + // Forward signal to client + ctx.signal(protocol::Command::StartActor { actor_id, config }) + .tag("client_id", client_id) + .send() + .await?; + } else { + tracing::error!(?datacenter_id, ?actor_id, "failed to allocate actor"); + + ctx.signal(crate::workflows::client::ActorStateUpdate { + state: todo!("remove"), + }) + .tag("actor_id", actor_id) + .send() + .await?; + } + } + Main::Command(protocol::Command::SignalActor { + actor_id, + signal, + persist_storage, + ignore_future_state, + }) => { + let client_id = ctx.activity(GetClientForActorInput { actor_id }).await?; + + if let Some(client_id) = client_id { + // Forward signal to client + ctx.signal(protocol::Command::SignalActor { + actor_id, + signal, + persist_storage, + ignore_future_state, + }) + .tag("client_id", client_id) + .send() + .await?; + } else { + tracing::warn!( + ?actor_id, + "tried sending signal to actor that doesn't exist" + ); + } + } + Main::PrewarmImage(sig) => { + let client_id = ctx.activity(GetClientFromDcInput { datacenter_id }).await?; + + if let Some(client_id) = client_id { + // Forward signal to client + ctx.signal(sig).tag("client_id", client_id).send().await?; + } else { + tracing::error!(?datacenter_id, image_id=?sig.image_id, "failed to prewarm image"); + } + } + } + + Ok(Loop::<()>::Continue) + } + .boxed() + }) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct AllocateActorInput { + datacenter_id: Uuid, + actor_id: Uuid, + config: protocol::ActorConfig, +} + +/// Selects a client to allocate the actor to. Attempts to find the most full client that has capacity for +/// this actor. +#[activity(AllocateActor)] +async fn allocate_actor( + ctx: &ActivityCtx, + input: &AllocateActorInput, +) -> GlobalResult> { + let datacenter_id = input.datacenter_id; + let current_time = util::timestamp::now(); + let client_eligible_time = current_time - CLIENT_ELIGIBLE_THRESHOLD_MS; + let actor_id = input.actor_id; + let allocated_cpu = input.config.resources.cpu as i64; + let allocated_memory_mib = (input.config.resources.memory / 1024 / 1024) as i64; + let client_flavor = match input.config.image.kind { + protocol::ImageKind::DockerImage | protocol::ImageKind::OciBundle => { + protocol::ClientFlavor::Container + } + protocol::ImageKind::JavaScript => protocol::ClientFlavor::Isolate, + } as i32; + + tracing::debug!( + ?datacenter_id, + ?current_time, + ?client_eligible_time, + ?actor_id, + ?allocated_cpu, + ?allocated_memory_mib, + ?client_flavor, + "allocating actor" + ); + + // Even though isolates autoscale based on CPU, we allocate machines based on reservation in + // balance proactively. Otherwise, we'd end up with bad scaling with retroactively choosing + // nodes based on CPU load since actors will show the CPU load after a delay. + let client_id = sql_fetch_optional!( + [ctx, (Uuid,)] + " + WITH available_clients AS ( + SELECT + c.client_id, + -- Millicores + ( + COALESCE((c.system_info->'cpu'->'physical_core_count')::INT, 0) * 1000 - + COALESCE((c.config->'reserved_resources'->'cpu')::INT, 0) + ) AS available_cpu, + -- MiB + ( + -- Convert bytes to MiB + COALESCE(((c.system_info->'memory'->'total_memory')::INT), 0) // 1048576 - + COALESCE(((c.config->'reserved_resources'->'memory')::INT), 0) + ) AS available_memory, + -- Millicores + COALESCE(SUM_INT((a.config->'resources'->'cpu')::INT), 0) AS allocated_cpu, + -- MiB + COALESCE(SUM_INT((a.config->'resources'->'memory')::INT // 1048576), 0) AS allocated_memory + FROM db_pegboard.clients AS c + LEFT JOIN db_pegboard.actors AS a + ON + c.client_id = a.client_id AND + -- Actor not stopped + a.stop_ts IS NULL AND + -- Not exited + a.exit_ts IS NULL + WHERE + c.datacenter_id = $1 AND + -- Within ping threshold + c.last_ping_ts > $2 AND + -- Not draining + c.drain_ts IS NULL AND + -- Not deleted + c.delete_ts IS NULL AND + -- Flavor match + c.flavor = $8 + GROUP BY c.client_id + ) + INSERT INTO db_pegboard.actors (actor_id, client_id, config, create_ts) + SELECT $3, client_id, $4, $5 + FROM available_clients + WHERE + -- Containers (0): ensure node has available resources + -- Isolates (1): don't limit resources since they scale on CPU + CASE WHEN $8 = 0 + THEN ( + allocated_cpu + $6 <= available_cpu AND + allocated_memory + $7 <= available_memory + ) + ELSE TRUE + END + ORDER BY + -- Container (0): binpack to the most-populated node to maximize density + -- Isolate (1): allocate to the least-populated node since we autoscale on CPU + CASE WHEN $8 = 0 + THEN allocated_cpu + ELSE -allocated_cpu + END DESC, + CASE WHEN $8 = 0 + THEN allocated_memory + ELSE -allocated_memory + END DESC + LIMIT 1 + RETURNING client_id + ", + datacenter_id, + client_eligible_time, + actor_id, + serde_json::to_value(&input.config)?, + current_time, + allocated_cpu, + allocated_memory_mib, + client_flavor, + ) + .await? + .map(|(client_id,)| client_id); + + Ok(client_id) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct GetClientForActorInput { + actor_id: Uuid, +} + +#[activity(GetClientForActor)] +async fn get_client_for_actor( + ctx: &ActivityCtx, + input: &GetClientForActorInput, +) -> GlobalResult> { + let row = sql_fetch_optional!( + [ctx, (Uuid,)] + " + SELECT client_id + FROM db_pegboard.actors + WHERE actor_id = $1 + ", + input.actor_id, + ) + .await?; + + Ok(row.map(|(client_id,)| client_id)) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct GetClientFromDcInput { + datacenter_id: Uuid, +} + +#[activity(GetClientFromDc)] +async fn get_client_from_dc( + ctx: &ActivityCtx, + input: &GetClientFromDcInput, +) -> GlobalResult> { + let row = sql_fetch_optional!( + [ctx, (Uuid,)] + " + SELECT client_id + FROM db_pegboard.clients + WHERE + datacenter_id = $1 AND + -- Within ping threshold + last_ping_ts > $2 AND + -- Not draining + drain_ts IS NULL AND + -- Not deleted + delete_ts IS NULL + ", + input.datacenter_id, + util::timestamp::now() - CLIENT_ELIGIBLE_THRESHOLD_MS, + ) + .await?; + + Ok(row.map(|(client_id,)| client_id)) +} + +join_signal!(Main { + Command(protocol::Command), + PrewarmImage, +}); diff --git a/packages/services/pegboard/src/workflows/mod.rs b/packages/core/services/pegboard/src/workflows/mod.rs similarity index 100% rename from packages/services/pegboard/src/workflows/mod.rs rename to packages/core/services/pegboard/src/workflows/mod.rs diff --git a/packages/services/pegboard/standalone/dc-init/Cargo.toml b/packages/core/services/pegboard/standalone/dc-init/Cargo.toml similarity index 100% rename from packages/services/pegboard/standalone/dc-init/Cargo.toml rename to packages/core/services/pegboard/standalone/dc-init/Cargo.toml diff --git a/packages/core/services/pegboard/standalone/dc-init/src/lib.rs b/packages/core/services/pegboard/standalone/dc-init/src/lib.rs new file mode 100644 index 0000000000..2a0c17e52e --- /dev/null +++ b/packages/core/services/pegboard/standalone/dc-init/src/lib.rs @@ -0,0 +1,54 @@ +use chirp_workflow::prelude::*; + +// TODO: This is not idempotent. +#[tracing::instrument(skip_all)] +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-dc-init"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "pegboard-dc-init", + ) + .await?; + + // Read config from env + let cluster_configs = &ctx.config().server()?.rivet.clusters(); + + for cluster_config in cluster_configs.values() { + // Find datacenter ids with pegboard pools + let datacenter_ids = cluster_config + .bootstrap_datacenters + .values() + .map(|x| x.id) + .collect::>(); + + let rows = sql_fetch_all!( + [ctx, (Uuid,)] + " + SELECT dc_id + FROM UNNEST($1) AS dc(dc_id) + WHERE NOT EXISTS( + SELECT 1 + FROM db_workflow.workflows + WHERE + workflow_name = 'pegboard_datacenter' AND + (tags->>'datacenter_id')::UUID = dc_id + ) + ", + datacenter_ids, + ) + .await?; + + // Create missing datacenters + for (datacenter_id,) in rows { + ctx.workflow(pegboard::workflows::datacenter::Input { datacenter_id }) + .tag("datacenter_id", datacenter_id) + .dispatch() + .await?; + } + } + + Ok(()) +} diff --git a/packages/services/pegboard/standalone/dc-init/tests/integration.rs b/packages/core/services/pegboard/standalone/dc-init/tests/integration.rs similarity index 100% rename from packages/services/pegboard/standalone/dc-init/tests/integration.rs rename to packages/core/services/pegboard/standalone/dc-init/tests/integration.rs diff --git a/packages/services/pegboard/standalone/gc/Cargo.toml b/packages/core/services/pegboard/standalone/gc/Cargo.toml similarity index 100% rename from packages/services/pegboard/standalone/gc/Cargo.toml rename to packages/core/services/pegboard/standalone/gc/Cargo.toml diff --git a/packages/core/services/pegboard/standalone/gc/src/lib.rs b/packages/core/services/pegboard/standalone/gc/src/lib.rs new file mode 100644 index 0000000000..f4bb0a5511 --- /dev/null +++ b/packages/core/services/pegboard/standalone/gc/src/lib.rs @@ -0,0 +1,192 @@ +use chirp_workflow::prelude::*; + +use nix::sys::signal::Signal; +use pegboard::protocol; + +/// How long to wait after last ping before forcibly removing a client from the database and deleting its +/// workflow, evicting all actors. Note that the client may still be running and can reconnect. +const CLIENT_LOST_THRESHOLD_MS: i64 = util::duration::minutes(2); +/// How long to wait after creating and not receiving a starting state before forcibly stopping actor. +const ACTOR_START_THRESHOLD_MS: i64 = util::duration::seconds(30); +/// How long to wait after stopping and not receiving a stop state before manually setting actor as +/// lost. +const ACTOR_STOP_THRESHOLD_MS: i64 = util::duration::seconds(30); +/// How long to wait after stopped and not receiving an exit state before manually setting actor as +/// lost. +const ACTOR_EXIT_THRESHOLD_MS: i64 = util::duration::seconds(5); + +#[derive(sqlx::FromRow)] +struct ActorRow { + actor_id: Uuid, + client_id: Uuid, + failed_start: bool, + failed_stop: bool, + failed_exit: bool, +} + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let mut interval = tokio::time::interval(std::time::Duration::from_secs(15)); + loop { + interval.tick().await; + + let ts = util::timestamp::now(); + run_from_env(config.clone(), pools.clone(), ts).await?; + } +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, + ts: i64, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-gc"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "pegboard-gc", + ) + .await?; + + let (dead_client_rows, failed_actor_rows) = tokio::try_join!( + sql_fetch_all!( + [ctx, (Uuid,)] + " + UPDATE db_pegboard.clients + SET delete_ts = $2 + WHERE + last_ping_ts < $1 AND + delete_ts IS NULL + RETURNING client_id + ", + ts - CLIENT_LOST_THRESHOLD_MS, + ts, + ), + sql_fetch_all!( + [ctx, ActorRow] + " + UPDATE db_pegboard.actors + SET + -- Failed to stop (prevents GC from picking this up again) + stop_ts = CASE + WHEN + exit_ts IS NULL + AND lost_ts IS NULL + AND stopping_ts < $1 - $3 + AND stop_ts IS NULL + THEN $1 + ELSE stop_ts + END, + -- Failed to exit (prevents GC from picking this up again) + lost_ts = CASE + WHEN + exit_ts IS NULL AND + lost_ts IS NULL AND + stop_ts < $1 - $4 + THEN $1 + ELSE lost_ts + END + WHERE + -- Select actors that have not exited yet + exit_ts IS NULL AND + lost_ts IS NULL AND + -- Match any event condition + ( + -- Failed to start (never reached running state) + ( + create_ts < $1 - $2 AND + running_ts IS NULL AND + stopping_ts IS NULL AND + stop_ts IS NULL + ) + OR + -- Failed to stop (never reached stopped state after stopping) + ( + stopping_ts < $1 - $3 AND + stop_ts IS NULL + ) + OR + -- Failed to exit (send stop event and never exited) + stop_ts < $1 - $4 + ) + RETURNING + actor_id, + client_id, + -- Failed to start + CASE + WHEN + create_ts < $1 - $2 AND + running_ts IS NULL AND + stopping_ts IS NULL AND stop_ts IS NULL + THEN true + ELSE false + END AS failed_start, + -- Failed to stop + CASE + WHEN + stopping_ts < $1 - $3 AND + stop_ts IS NULL + THEN true + ELSE false + END AS failed_stop, + -- Failed to exit + CASE + WHEN stop_ts < $1 - $4 + THEN true + ELSE false + END AS failed_exit + ", + ts, + ACTOR_START_THRESHOLD_MS, + ACTOR_STOP_THRESHOLD_MS, + ACTOR_EXIT_THRESHOLD_MS + ), + )?; + + for (client_id,) in dead_client_rows { + tracing::warn!(?client_id, "dead client"); + + ctx.signal(pegboard::workflows::client::Destroy {}) + .tag("client_id", client_id) + .send() + .await?; + } + + for row in &failed_actor_rows { + if row.failed_exit { + tracing::error!(actor_id=?row.actor_id, "actor failed to exit"); + + ctx.signal(pegboard::workflows::client::ActorStateUpdate { + state: protocol::ActorState::Lost, + }) + .tag("actor_id", row.actor_id) + .send() + .await?; + } else if row.failed_stop { + tracing::error!(actor_id=?row.actor_id, "actor failed to stop"); + + ctx.signal(pegboard::workflows::client::ActorStateUpdate { + state: protocol::ActorState::Lost, + }) + .tag("actor_id", row.actor_id) + .send() + .await?; + } else if row.failed_start { + tracing::error!(actor_id=?row.actor_id, "actor failed to start"); + + ctx.signal(protocol::Command::SignalActor { + actor_id: row.actor_id, + signal: Signal::SIGKILL as i32, + persist_storage: false, + ignore_future_state: true, + }) + .tag("client_id", row.client_id) + .send() + .await?; + } + } + + Ok(()) +} diff --git a/packages/services/pegboard/standalone/metrics-publish/tests/integration.rs b/packages/core/services/pegboard/standalone/gc/tests/integration.rs similarity index 100% rename from packages/services/pegboard/standalone/metrics-publish/tests/integration.rs rename to packages/core/services/pegboard/standalone/gc/tests/integration.rs diff --git a/packages/services/pegboard/standalone/metrics-publish/Cargo.toml b/packages/core/services/pegboard/standalone/metrics-publish/Cargo.toml similarity index 100% rename from packages/services/pegboard/standalone/metrics-publish/Cargo.toml rename to packages/core/services/pegboard/standalone/metrics-publish/Cargo.toml diff --git a/packages/core/services/pegboard/standalone/metrics-publish/src/lib.rs b/packages/core/services/pegboard/standalone/metrics-publish/src/lib.rs new file mode 100644 index 0000000000..deaedd7427 --- /dev/null +++ b/packages/core/services/pegboard/standalone/metrics-publish/src/lib.rs @@ -0,0 +1,68 @@ +use chirp_workflow::prelude::*; +use pegboard::protocol::ClientFlavor; + +/// How long to continue including a row in the query after a client has been deleted. This is so we can add +/// `inactive=true` for the prometheus metric. +const INACTIVE_THRESHOLD_MS: i64 = util::duration::hours(1); + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + let mut interval = tokio::time::interval(std::time::Duration::from_secs(15)); + loop { + interval.tick().await; + + run_from_env(config.clone(), pools.clone(), util::timestamp::now()).await?; + } +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, + ts: i64, +) -> GlobalResult<()> { + let client = + chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-metrics-publish"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "pegboard-metrics-publish", + ) + .await?; + + let client_actors = sql_fetch_all!( + [ctx, (Uuid, Uuid, i64, bool, i64)] + " + SELECT + c.datacenter_id, + c.client_id, + c.flavor, + (c.drain_ts IS NOT NULL OR c.delete_ts IS NOT NULL) AS inactive, + COUNT(a.client_id) + FROM db_pegboard.clients AS c + LEFT JOIN db_pegboard.actors AS a + ON a.client_id = c.client_id + AS OF SYSTEM TIME '-1s' + WHERE c.delete_ts IS NULL OR c.delete_ts > $1 + GROUP BY c.client_id + ", + ts - INACTIVE_THRESHOLD_MS, + ) + .await?; + + for (datacenter_id, client_id, flavor, inactive, count) in client_actors { + let flavor = unwrap!(ClientFlavor::from_repr(flavor.try_into()?)); + + pegboard::metrics::CLIENT_ACTORS_ALLOCATED + .with_label_values(&[ + &datacenter_id.to_string(), + &client_id.to_string(), + &flavor.to_string(), + &inactive.to_string(), + ]) + .set(count.try_into()?); + } + + Ok(()) +} diff --git a/packages/services/pegboard/standalone/ws/tests/integration.rs b/packages/core/services/pegboard/standalone/metrics-publish/tests/integration.rs similarity index 100% rename from packages/services/pegboard/standalone/ws/tests/integration.rs rename to packages/core/services/pegboard/standalone/metrics-publish/tests/integration.rs diff --git a/packages/services/pegboard/standalone/ws/Cargo.toml b/packages/core/services/pegboard/standalone/ws/Cargo.toml similarity index 100% rename from packages/services/pegboard/standalone/ws/Cargo.toml rename to packages/core/services/pegboard/standalone/ws/Cargo.toml diff --git a/packages/core/services/pegboard/standalone/ws/src/lib.rs b/packages/core/services/pegboard/standalone/ws/src/lib.rs new file mode 100644 index 0000000000..77c92c0df0 --- /dev/null +++ b/packages/core/services/pegboard/standalone/ws/src/lib.rs @@ -0,0 +1,526 @@ +use std::{ + collections::HashMap, + net::SocketAddr, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + time::Duration, +}; + +use chirp_workflow::prelude::*; +use futures_util::{stream::SplitSink, SinkExt, StreamExt}; +use serde_json::json; +use tokio::{ + net::{TcpListener, TcpStream}, + sync::{Mutex, RwLock}, +}; +use tokio_tungstenite::{ + tungstenite::protocol::{ + frame::{coding::CloseCode, CloseFrame}, + Message, + }, + WebSocketStream, +}; + +use pegboard::protocol; + +const UPDATE_PING_INTERVAL: Duration = Duration::from_secs(3); + +struct Connection { + protocol_version: u16, + tx: Mutex, Message>>, + update_ping: AtomicBool, +} + +type Connections = HashMap>; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + run_from_env(config.clone(), pools.clone()).await +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-ws"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseCrdbNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "pegboard-ws", + ) + .await?; + + let sql_lock = Arc::new(Mutex::new(())); + let conns: Arc> = Arc::new(RwLock::new(HashMap::new())); + + let host = ctx.config().server()?.rivet.pegboard.host(); + let port = ctx.config().server()?.rivet.pegboard.port(); + let addr = SocketAddr::from((host, port)); + + let listener = TcpListener::bind(addr).await?; + tracing::info!(?port, ?port, "pegboard ws server listening"); + + // None of these should ever exit + // + // If these do exit, then the `handle_connection` task will run indefinitely and never + // send/receive anything to clients. Client workflows will then expire because of their ping, + // their workflow will complete, and clients will be unusable unless they reconnect. + tokio::join!( + socket_thread(&ctx, sql_lock.clone(), conns.clone(), listener), + msg_thread(&ctx, conns.clone()), + update_ping_thread(&ctx, sql_lock, conns.clone()), + ); + + Ok(()) +} + +#[tracing::instrument(skip_all)] +async fn socket_thread( + ctx: &StandaloneCtx, + sql_lock: Arc>, + conns: Arc>, + listener: TcpListener, +) { + loop { + match listener.accept().await { + Ok((stream, addr)) => { + handle_connection(ctx, sql_lock.clone(), conns.clone(), stream, addr).await + } + Err(err) => tracing::error!(?err, "failed to connect websocket"), + } + } +} + +#[tracing::instrument(skip_all)] +async fn handle_connection( + ctx: &StandaloneCtx, + sql_lock: Arc>, + conns: Arc>, + raw_stream: TcpStream, + addr: SocketAddr, +) { + tracing::debug!(?addr, "new connection"); + + let ctx = ctx.clone(); + + tokio::spawn(async move { + let (ws_stream, url_data) = match setup_connection(raw_stream, addr).await { + Ok(x) => x, + Err(err) => { + tracing::error!(?addr, ?err, "setup connection failed"); + return; + } + }; + + if let Err(err) = + handle_connection_inner(&ctx, sql_lock, conns.clone(), ws_stream, url_data).await + { + tracing::error!(?addr, ?err, "handle connection inner failed"); + } + + // Clean up + let conn = conns.write().await.remove(&url_data.client_id); + if let Some(conn) = conn { + let close_frame = CloseFrame { + code: CloseCode::Normal, + reason: "handle_connection_inner event loop closed".into(), + }; + if let Err(err) = conn + .tx + .lock() + .await + .send(Message::Close(Some(close_frame))) + .await + { + tracing::error!(?addr, ?err, "failed closing socket"); + } + } + }); +} + +#[tracing::instrument(skip_all)] +async fn setup_connection( + raw_stream: TcpStream, + addr: SocketAddr, +) -> GlobalResult<(WebSocketStream, UrlData)> { + let mut uri = None; + let ws_stream = tokio_tungstenite::accept_hdr_async( + raw_stream, + |req: &tokio_tungstenite::tungstenite::handshake::server::Request, res| { + // Bootleg way of reading the uri + uri = Some(req.uri().clone()); + + tracing::debug!(?addr, ?uri, "handshake"); + + Ok(res) + }, + ) + .await?; + + // Parse URL + let uri = unwrap!(uri, "socket has no associated request"); + let url_data = parse_url(addr, uri)?; + + Ok((ws_stream, url_data)) +} + +#[tracing::instrument(skip_all)] +async fn handle_connection_inner( + ctx: &StandaloneCtx, + sql_lock: Arc>, + conns: Arc>, + ws_stream: WebSocketStream, + UrlData { + protocol_version, + client_id, + datacenter_id, + flavor, + }: UrlData, +) -> GlobalResult<()> { + let (tx, mut rx) = ws_stream.split(); + + let conn = Arc::new(Connection { + protocol_version, + tx: Mutex::new(tx), + update_ping: AtomicBool::new(false), + }); + + // Store connection + { + let mut conns = conns.write().await; + if let Some(old_conn) = conns.insert(client_id, conn.clone()) { + tracing::warn!( + ?client_id, + "client already connected, closing old connection" + ); + + let close_frame = CloseFrame { + code: CloseCode::Normal, + reason: "client already connected, closing old connection".into(), + }; + old_conn + .tx + .lock() + .await + .send(Message::Close(Some(close_frame))) + .await?; + } + } + + // Only create the client after receiving the init packet to prevent a race condition + if let Some(msg) = rx.next().await { + match msg? { + Message::Binary(buf) => { + let packet = protocol::ToServer::deserialize(protocol_version, &buf)?; + + if let protocol::ToServer::Init { .. } = &packet { + // Insert into db and spawn workflow (if not exists) + upsert_client(ctx, sql_lock, client_id, datacenter_id, flavor).await?; + } else { + bail!("unexpected initial packet: {packet:?}"); + } + + // Forward to client wf + ctx.signal(packet) + .tag("client_id", client_id) + .send() + .await?; + } + Message::Close(_) => { + bail!("socket closed {client_id}"); + } + msg => bail!("unexpected initial message: {msg:?}"), + } + } + + // Receive messages from socket + while let Some(msg) = rx.next().await { + match msg? { + Message::Binary(buf) => { + let packet = protocol::ToServer::deserialize(protocol_version, &buf)?; + + // Forward to client wf + ctx.signal(packet) + .tag("client_id", client_id) + .send() + .await?; + } + Message::Ping(_) => { + conn.update_ping.store(true, Ordering::Relaxed); + } + Message::Close(_) => { + bail!("socket closed {client_id}"); + } + msg => tracing::warn!(?client_id, ?msg, "unexpected message"), + } + } + + bail!("stream closed {client_id}"); + + // Only way I could figure out to help the complier infer type + #[allow(unreachable_code)] + GlobalResult::Ok(()) +} + +#[tracing::instrument(skip_all)] +async fn upsert_client( + ctx: &StandaloneCtx, + sql_lock: Arc>, + client_id: Uuid, + datacenter_id: Uuid, + flavor: protocol::ClientFlavor, +) -> GlobalResult<()> { + let _ = sql_lock.lock().await; + + let (exists, deleted) = sql_fetch_one!( + [ctx, (bool, bool)] + " + WITH + select_exists AS ( + SELECT 1 + FROM db_pegboard.clients + WHERE client_id = $1 + ), + select_deleted AS ( + SELECT 1 + FROM db_pegboard.clients + WHERE + client_id = $1 AND + delete_ts IS NOT NULL + ), + insert_client AS ( + INSERT INTO db_pegboard.clients ( + client_id, datacenter_id, flavor, create_ts, last_ping_ts + ) + VALUES ($1, $2, $3, $4, $4) + ON CONFLICT (client_id) + DO UPDATE + SET delete_ts = NULL + RETURNING 1 + ) + SELECT + EXISTS(SELECT 1 FROM select_exists) AS exists, + EXISTS(SELECT 1 FROM select_deleted) AS deleted + ", + client_id, + datacenter_id, + flavor as i32, + util::timestamp::now(), + ) + .await?; + + if deleted { + tracing::warn!(?client_id, "client was previously deleted"); + } + + if exists == deleted { + tracing::info!(?client_id, ?datacenter_id, ?flavor, "new client"); + + // Spawn a new client workflow + tracing::info!( + ?client_id, + ?datacenter_id, + ?flavor, + "creating client workflow" + ); + ctx.workflow(pegboard::workflows::client::Input { client_id }) + .tag("client_id", client_id) + .dispatch() + .await?; + } + + Ok(()) +} + +#[tracing::instrument(skip_all)] +async fn update_ping_thread( + ctx: &StandaloneCtx, + sql_lock: Arc>, + conns: Arc>, +) { + loop { + match update_ping_thread_inner(ctx, sql_lock.clone(), conns.clone()).await { + Ok(_) => { + tracing::warn!("update ping thread thread exited early"); + } + Err(err) => { + tracing::error!(?err, "update ping thread error"); + } + } + + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + } +} + +/// Updates the ping of all clients requesting a ping update at once. +#[tracing::instrument(skip_all)] +async fn update_ping_thread_inner( + ctx: &StandaloneCtx, + sql_lock: Arc>, + conns: Arc>, +) -> GlobalResult<()> { + loop { + tokio::time::sleep(UPDATE_PING_INTERVAL).await; + + let client_ids = { + let conns = conns.read().await; + + // Select all clients that required a ping update + conns + .iter() + .filter_map(|(client_id, conn)| { + conn.update_ping + .swap(false, Ordering::Relaxed) + .then_some(*client_id) + }) + .collect::>() + }; + + if client_ids.is_empty() { + continue; + } + + let _ = sql_lock.lock().await; + + sql_execute!( + [ctx] + " + UPDATE db_pegboard.clients + SET last_ping_ts = $2 + WHERE client_id = ANY($1) + ", + client_ids, + util::timestamp::now(), + ) + .await?; + } +} + +#[tracing::instrument(skip_all)] +async fn msg_thread(ctx: &StandaloneCtx, conns: Arc>) { + loop { + match msg_thread_inner(ctx, conns.clone()).await { + Ok(_) => { + tracing::warn!("msg thread exited early"); + } + Err(err) => { + tracing::error!(?err, "msg thread error"); + } + } + + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + } +} + +#[tracing::instrument(skip_all)] +async fn msg_thread_inner( + ctx: &StandaloneCtx, + conns: Arc>, +) -> GlobalResult<()> { + // Listen for commands from client workflows + let mut sub = ctx + .subscribe::(&json!({})) + .await?; + let mut close_sub = ctx + .subscribe::(&json!({})) + .await?; + + loop { + tokio::select! { + msg = sub.next() => { + let msg = msg?; + + { + let conns = conns.read().await; + + // Send command to socket + if let Some(conn) = conns.get(&msg.client_id) { + let buf = msg.inner.serialize(conn.protocol_version)?; + conn.tx.lock().await.send(Message::Binary(buf)).await?; + } else { + tracing::debug!( + client_id=?msg.client_id, + "received command for client that isn't connected, ignoring" + ); + } + } + } + msg = close_sub.next() => { + let msg = msg?; + + { + let conns = conns.read().await; + + // Close socket + if let Some(conn) = conns.get(&msg.client_id) { + tracing::info!(client_id = ?msg.client_id, "received close ws event, closing socket"); + + let close_frame = CloseFrame { + code: CloseCode::Normal, + reason: "received close ws event".into(), + }; + conn.tx.lock().await.send(Message::Close(Some(close_frame))).await?; + } else { + tracing::debug!( + client_id=?msg.client_id, + "received close command for client that isn't connected, ignoring" + ); + } + } + } + } + } +} + +#[derive(Clone, Copy)] +struct UrlData { + protocol_version: u16, + client_id: Uuid, + datacenter_id: Uuid, + flavor: protocol::ClientFlavor, +} + +fn parse_url(addr: SocketAddr, uri: hyper::Uri) -> GlobalResult { + let url = url::Url::parse(&format!("ws://{addr}{uri}"))?; + + // Get protocol version from last path segment + let last_segment = unwrap!( + unwrap!(url.path_segments(), "invalid url").last(), + "no path segments" + ); + ensure!(last_segment.starts_with('v'), "invalid protocol version"); + let protocol_version = last_segment[1..].parse::()?; + + // Read client_id and datacenter_id from query parameters + let client_id = unwrap!( + url.query_pairs() + .find_map(|(n, v)| (n == "client_id").then_some(v)), + "missing `client_id` query parameter" + ); + let client_id = util::uuid::parse(client_id.as_ref())?; + + let datacenter_id = unwrap!( + url.query_pairs() + .find_map(|(n, v)| (n == "datacenter_id").then_some(v)), + "missing `datacenter_id` query parameter" + ); + let datacenter_id = util::uuid::parse(datacenter_id.as_ref())?; + + let flavor = unwrap!( + url.query_pairs() + .find_map(|(n, v)| (n == "flavor").then_some(v)), + "missing `flavor` query parameter" + ); + let flavor = flavor.parse()?; + + Ok(UrlData { + protocol_version, + client_id, + datacenter_id, + flavor, + }) +} diff --git a/packages/core/services/pegboard/standalone/ws/tests/integration.rs b/packages/core/services/pegboard/standalone/ws/tests/integration.rs new file mode 100644 index 0000000000..6c8ea4d0f2 --- /dev/null +++ b/packages/core/services/pegboard/standalone/ws/tests/integration.rs @@ -0,0 +1 @@ +// TODO: diff --git a/packages/services/pegboard/tests/usage_get.rs b/packages/core/services/pegboard/tests/usage_get.rs similarity index 100% rename from packages/services/pegboard/tests/usage_get.rs rename to packages/core/services/pegboard/tests/usage_get.rs diff --git a/packages/services/region/ops/get/Cargo.toml b/packages/core/services/region/ops/get/Cargo.toml similarity index 100% rename from packages/services/region/ops/get/Cargo.toml rename to packages/core/services/region/ops/get/Cargo.toml diff --git a/packages/services/region/ops/get/README.md b/packages/core/services/region/ops/get/README.md similarity index 100% rename from packages/services/region/ops/get/README.md rename to packages/core/services/region/ops/get/README.md diff --git a/packages/services/region/ops/get/src/lib.rs b/packages/core/services/region/ops/get/src/lib.rs similarity index 100% rename from packages/services/region/ops/get/src/lib.rs rename to packages/core/services/region/ops/get/src/lib.rs diff --git a/packages/services/region/ops/get/tests/integration.rs b/packages/core/services/region/ops/get/tests/integration.rs similarity index 100% rename from packages/services/region/ops/get/tests/integration.rs rename to packages/core/services/region/ops/get/tests/integration.rs diff --git a/packages/services/region/ops/list-for-game/Cargo.toml b/packages/core/services/region/ops/list-for-game/Cargo.toml similarity index 100% rename from packages/services/region/ops/list-for-game/Cargo.toml rename to packages/core/services/region/ops/list-for-game/Cargo.toml diff --git a/packages/services/region/ops/list-for-game/src/lib.rs b/packages/core/services/region/ops/list-for-game/src/lib.rs similarity index 100% rename from packages/services/region/ops/list-for-game/src/lib.rs rename to packages/core/services/region/ops/list-for-game/src/lib.rs diff --git a/packages/services/region/ops/list-for-game/tests/integration.rs b/packages/core/services/region/ops/list-for-game/tests/integration.rs similarity index 100% rename from packages/services/region/ops/list-for-game/tests/integration.rs rename to packages/core/services/region/ops/list-for-game/tests/integration.rs diff --git a/packages/services/region/ops/list/Cargo.toml b/packages/core/services/region/ops/list/Cargo.toml similarity index 100% rename from packages/services/region/ops/list/Cargo.toml rename to packages/core/services/region/ops/list/Cargo.toml diff --git a/packages/services/region/ops/list/README.md b/packages/core/services/region/ops/list/README.md similarity index 100% rename from packages/services/region/ops/list/README.md rename to packages/core/services/region/ops/list/README.md diff --git a/packages/services/region/ops/list/src/lib.rs b/packages/core/services/region/ops/list/src/lib.rs similarity index 100% rename from packages/services/region/ops/list/src/lib.rs rename to packages/core/services/region/ops/list/src/lib.rs diff --git a/packages/services/region/ops/list/tests/integration.rs b/packages/core/services/region/ops/list/tests/integration.rs similarity index 100% rename from packages/services/region/ops/list/tests/integration.rs rename to packages/core/services/region/ops/list/tests/integration.rs diff --git a/packages/services/region/ops/recommend/Cargo.toml b/packages/core/services/region/ops/recommend/Cargo.toml similarity index 100% rename from packages/services/region/ops/recommend/Cargo.toml rename to packages/core/services/region/ops/recommend/Cargo.toml diff --git a/packages/services/region/ops/recommend/README.md b/packages/core/services/region/ops/recommend/README.md similarity index 100% rename from packages/services/region/ops/recommend/README.md rename to packages/core/services/region/ops/recommend/README.md diff --git a/packages/services/region/ops/recommend/src/lib.rs b/packages/core/services/region/ops/recommend/src/lib.rs similarity index 100% rename from packages/services/region/ops/recommend/src/lib.rs rename to packages/core/services/region/ops/recommend/src/lib.rs diff --git a/packages/services/region/ops/recommend/tests/integration.rs b/packages/core/services/region/ops/recommend/tests/integration.rs similarity index 100% rename from packages/services/region/ops/recommend/tests/integration.rs rename to packages/core/services/region/ops/recommend/tests/integration.rs diff --git a/packages/services/region/ops/resolve-for-game/Cargo.toml b/packages/core/services/region/ops/resolve-for-game/Cargo.toml similarity index 100% rename from packages/services/region/ops/resolve-for-game/Cargo.toml rename to packages/core/services/region/ops/resolve-for-game/Cargo.toml diff --git a/packages/services/region/ops/resolve-for-game/src/lib.rs b/packages/core/services/region/ops/resolve-for-game/src/lib.rs similarity index 100% rename from packages/services/region/ops/resolve-for-game/src/lib.rs rename to packages/core/services/region/ops/resolve-for-game/src/lib.rs diff --git a/packages/services/region/ops/resolve-for-game/tests/integration.rs b/packages/core/services/region/ops/resolve-for-game/tests/integration.rs similarity index 100% rename from packages/services/region/ops/resolve-for-game/tests/integration.rs rename to packages/core/services/region/ops/resolve-for-game/tests/integration.rs diff --git a/packages/services/region/ops/resolve/Cargo.toml b/packages/core/services/region/ops/resolve/Cargo.toml similarity index 100% rename from packages/services/region/ops/resolve/Cargo.toml rename to packages/core/services/region/ops/resolve/Cargo.toml diff --git a/packages/services/region/ops/resolve/README.md b/packages/core/services/region/ops/resolve/README.md similarity index 100% rename from packages/services/region/ops/resolve/README.md rename to packages/core/services/region/ops/resolve/README.md diff --git a/packages/services/region/ops/resolve/src/lib.rs b/packages/core/services/region/ops/resolve/src/lib.rs similarity index 100% rename from packages/services/region/ops/resolve/src/lib.rs rename to packages/core/services/region/ops/resolve/src/lib.rs diff --git a/packages/services/region/ops/resolve/tests/integration.rs b/packages/core/services/region/ops/resolve/tests/integration.rs similarity index 100% rename from packages/services/region/ops/resolve/tests/integration.rs rename to packages/core/services/region/ops/resolve/tests/integration.rs diff --git a/packages/services/region/proto/get.proto b/packages/core/services/region/proto/get.proto similarity index 100% rename from packages/services/region/proto/get.proto rename to packages/core/services/region/proto/get.proto diff --git a/packages/services/region/proto/list-for-game.proto b/packages/core/services/region/proto/list-for-game.proto similarity index 100% rename from packages/services/region/proto/list-for-game.proto rename to packages/core/services/region/proto/list-for-game.proto diff --git a/packages/services/region/proto/list.proto b/packages/core/services/region/proto/list.proto similarity index 100% rename from packages/services/region/proto/list.proto rename to packages/core/services/region/proto/list.proto diff --git a/packages/services/region/proto/recommend.proto b/packages/core/services/region/proto/recommend.proto similarity index 100% rename from packages/services/region/proto/recommend.proto rename to packages/core/services/region/proto/recommend.proto diff --git a/packages/services/region/proto/resolve-for-game.proto b/packages/core/services/region/proto/resolve-for-game.proto similarity index 100% rename from packages/services/region/proto/resolve-for-game.proto rename to packages/core/services/region/proto/resolve-for-game.proto diff --git a/packages/services/region/proto/resolve.proto b/packages/core/services/region/proto/resolve.proto similarity index 100% rename from packages/services/region/proto/resolve.proto rename to packages/core/services/region/proto/resolve.proto diff --git a/packages/services/server-spec/Cargo.toml b/packages/core/services/server-spec/Cargo.toml similarity index 100% rename from packages/services/server-spec/Cargo.toml rename to packages/core/services/server-spec/Cargo.toml diff --git a/packages/services/server-spec/src/lib.rs b/packages/core/services/server-spec/src/lib.rs similarity index 100% rename from packages/services/server-spec/src/lib.rs rename to packages/core/services/server-spec/src/lib.rs diff --git a/packages/services/server-spec/src/types.rs b/packages/core/services/server-spec/src/types.rs similarity index 100% rename from packages/services/server-spec/src/types.rs rename to packages/core/services/server-spec/src/types.rs diff --git a/packages/services/team-invite/db/team-invite/migrations/20200101000000_init.down.sql b/packages/core/services/team-invite/db/team-invite/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/team-invite/db/team-invite/migrations/20200101000000_init.down.sql rename to packages/core/services/team-invite/db/team-invite/migrations/20200101000000_init.down.sql diff --git a/packages/services/team-invite/db/team-invite/migrations/20200101000000_init.up.sql b/packages/core/services/team-invite/db/team-invite/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/team-invite/db/team-invite/migrations/20200101000000_init.up.sql rename to packages/core/services/team-invite/db/team-invite/migrations/20200101000000_init.up.sql diff --git a/packages/services/team-invite/ops/get/Cargo.toml b/packages/core/services/team-invite/ops/get/Cargo.toml similarity index 100% rename from packages/services/team-invite/ops/get/Cargo.toml rename to packages/core/services/team-invite/ops/get/Cargo.toml diff --git a/packages/services/team-invite/ops/get/README.md b/packages/core/services/team-invite/ops/get/README.md similarity index 100% rename from packages/services/team-invite/ops/get/README.md rename to packages/core/services/team-invite/ops/get/README.md diff --git a/packages/services/team-invite/ops/get/src/lib.rs b/packages/core/services/team-invite/ops/get/src/lib.rs similarity index 100% rename from packages/services/team-invite/ops/get/src/lib.rs rename to packages/core/services/team-invite/ops/get/src/lib.rs diff --git a/packages/services/team-invite/ops/get/tests/integration.rs b/packages/core/services/team-invite/ops/get/tests/integration.rs similarity index 100% rename from packages/services/team-invite/ops/get/tests/integration.rs rename to packages/core/services/team-invite/ops/get/tests/integration.rs diff --git a/packages/services/team-invite/proto/get.proto b/packages/core/services/team-invite/proto/get.proto similarity index 100% rename from packages/services/team-invite/proto/get.proto rename to packages/core/services/team-invite/proto/get.proto diff --git a/packages/services/team-invite/proto/msg/consume-fail.proto b/packages/core/services/team-invite/proto/msg/consume-fail.proto similarity index 100% rename from packages/services/team-invite/proto/msg/consume-fail.proto rename to packages/core/services/team-invite/proto/msg/consume-fail.proto diff --git a/packages/services/team-invite/proto/msg/consume.proto b/packages/core/services/team-invite/proto/msg/consume.proto similarity index 100% rename from packages/services/team-invite/proto/msg/consume.proto rename to packages/core/services/team-invite/proto/msg/consume.proto diff --git a/packages/services/team-invite/proto/msg/create-complete.proto b/packages/core/services/team-invite/proto/msg/create-complete.proto similarity index 100% rename from packages/services/team-invite/proto/msg/create-complete.proto rename to packages/core/services/team-invite/proto/msg/create-complete.proto diff --git a/packages/services/team-invite/proto/msg/create.proto b/packages/core/services/team-invite/proto/msg/create.proto similarity index 100% rename from packages/services/team-invite/proto/msg/create.proto rename to packages/core/services/team-invite/proto/msg/create.proto diff --git a/packages/services/team-invite/worker/Cargo.toml b/packages/core/services/team-invite/worker/Cargo.toml similarity index 100% rename from packages/services/team-invite/worker/Cargo.toml rename to packages/core/services/team-invite/worker/Cargo.toml diff --git a/packages/services/team-invite/worker/src/lib.rs b/packages/core/services/team-invite/worker/src/lib.rs similarity index 100% rename from packages/services/team-invite/worker/src/lib.rs rename to packages/core/services/team-invite/worker/src/lib.rs diff --git a/packages/services/team-invite/worker/src/workers/consume.rs b/packages/core/services/team-invite/worker/src/workers/consume.rs similarity index 100% rename from packages/services/team-invite/worker/src/workers/consume.rs rename to packages/core/services/team-invite/worker/src/workers/consume.rs diff --git a/packages/services/team-invite/worker/src/workers/create.rs b/packages/core/services/team-invite/worker/src/workers/create.rs similarity index 100% rename from packages/services/team-invite/worker/src/workers/create.rs rename to packages/core/services/team-invite/worker/src/workers/create.rs diff --git a/packages/services/team-invite/worker/src/workers/mod.rs b/packages/core/services/team-invite/worker/src/workers/mod.rs similarity index 100% rename from packages/services/team-invite/worker/src/workers/mod.rs rename to packages/core/services/team-invite/worker/src/workers/mod.rs diff --git a/packages/services/team-invite/worker/tests/consume.rs b/packages/core/services/team-invite/worker/tests/consume.rs similarity index 100% rename from packages/services/team-invite/worker/tests/consume.rs rename to packages/core/services/team-invite/worker/tests/consume.rs diff --git a/packages/services/team-invite/worker/tests/create.rs b/packages/core/services/team-invite/worker/tests/create.rs similarity index 100% rename from packages/services/team-invite/worker/tests/create.rs rename to packages/core/services/team-invite/worker/tests/create.rs diff --git a/packages/services/team/db/team/migrations/20200101000000_init.down.sql b/packages/core/services/team/db/team/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20200101000000_init.down.sql rename to packages/core/services/team/db/team/migrations/20200101000000_init.down.sql diff --git a/packages/services/team/db/team/migrations/20200101000000_init.up.sql b/packages/core/services/team/db/team/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20200101000000_init.up.sql rename to packages/core/services/team/db/team/migrations/20200101000000_init.up.sql diff --git a/packages/services/team/db/team/migrations/20210630123358_join_requests.down.sql b/packages/core/services/team/db/team/migrations/20210630123358_join_requests.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210630123358_join_requests.down.sql rename to packages/core/services/team/db/team/migrations/20210630123358_join_requests.down.sql diff --git a/packages/services/team/db/team/migrations/20210630123358_join_requests.up.sql b/packages/core/services/team/db/team/migrations/20210630123358_join_requests.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210630123358_join_requests.up.sql rename to packages/core/services/team/db/team/migrations/20210630123358_join_requests.up.sql diff --git a/packages/services/team/db/team/migrations/20210701150933_add_owner.down.sql b/packages/core/services/team/db/team/migrations/20210701150933_add_owner.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210701150933_add_owner.down.sql rename to packages/core/services/team/db/team/migrations/20210701150933_add_owner.down.sql diff --git a/packages/services/team/db/team/migrations/20210701150933_add_owner.up.sql b/packages/core/services/team/db/team/migrations/20210701150933_add_owner.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210701150933_add_owner.up.sql rename to packages/core/services/team/db/team/migrations/20210701150933_add_owner.up.sql diff --git a/packages/services/team/db/team/migrations/20210706154149_drop_owner_default.down.sql b/packages/core/services/team/db/team/migrations/20210706154149_drop_owner_default.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210706154149_drop_owner_default.down.sql rename to packages/core/services/team/db/team/migrations/20210706154149_drop_owner_default.down.sql diff --git a/packages/services/team/db/team/migrations/20210706154149_drop_owner_default.up.sql b/packages/core/services/team/db/team/migrations/20210706154149_drop_owner_default.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210706154149_drop_owner_default.up.sql rename to packages/core/services/team/db/team/migrations/20210706154149_drop_owner_default.up.sql diff --git a/packages/services/team/db/team/migrations/20210708095937_add_uniqueness.down.sql b/packages/core/services/team/db/team/migrations/20210708095937_add_uniqueness.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210708095937_add_uniqueness.down.sql rename to packages/core/services/team/db/team/migrations/20210708095937_add_uniqueness.down.sql diff --git a/packages/services/team/db/team/migrations/20210708095937_add_uniqueness.up.sql b/packages/core/services/team/db/team/migrations/20210708095937_add_uniqueness.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210708095937_add_uniqueness.up.sql rename to packages/core/services/team/db/team/migrations/20210708095937_add_uniqueness.up.sql diff --git a/packages/services/team/db/team/migrations/20210712100903_add_display_len.down.sql b/packages/core/services/team/db/team/migrations/20210712100903_add_display_len.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210712100903_add_display_len.down.sql rename to packages/core/services/team/db/team/migrations/20210712100903_add_display_len.down.sql diff --git a/packages/services/team/db/team/migrations/20210712100903_add_display_len.up.sql b/packages/core/services/team/db/team/migrations/20210712100903_add_display_len.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210712100903_add_display_len.up.sql rename to packages/core/services/team/db/team/migrations/20210712100903_add_display_len.up.sql diff --git a/packages/services/team/db/team/migrations/20210719165907_add_profile_properties.down.sql b/packages/core/services/team/db/team/migrations/20210719165907_add_profile_properties.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210719165907_add_profile_properties.down.sql rename to packages/core/services/team/db/team/migrations/20210719165907_add_profile_properties.down.sql diff --git a/packages/services/team/db/team/migrations/20210719165907_add_profile_properties.up.sql b/packages/core/services/team/db/team/migrations/20210719165907_add_profile_properties.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210719165907_add_profile_properties.up.sql rename to packages/core/services/team/db/team/migrations/20210719165907_add_profile_properties.up.sql diff --git a/packages/services/team/db/team/migrations/20210818123454_change_publicity_default.down.sql b/packages/core/services/team/db/team/migrations/20210818123454_change_publicity_default.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210818123454_change_publicity_default.down.sql rename to packages/core/services/team/db/team/migrations/20210818123454_change_publicity_default.down.sql diff --git a/packages/services/team/db/team/migrations/20210818123454_change_publicity_default.up.sql b/packages/core/services/team/db/team/migrations/20210818123454_change_publicity_default.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210818123454_change_publicity_default.up.sql rename to packages/core/services/team/db/team/migrations/20210818123454_change_publicity_default.up.sql diff --git a/packages/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.down.sql b/packages/core/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.down.sql rename to packages/core/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.down.sql diff --git a/packages/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.up.sql b/packages/core/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.up.sql rename to packages/core/services/team/db/team/migrations/20210916104055_depreciate_avatar_id.up.sql diff --git a/packages/services/team/db/team/migrations/20210916104157_convert_profile_id.down.sql b/packages/core/services/team/db/team/migrations/20210916104157_convert_profile_id.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210916104157_convert_profile_id.down.sql rename to packages/core/services/team/db/team/migrations/20210916104157_convert_profile_id.down.sql diff --git a/packages/services/team/db/team/migrations/20210916104157_convert_profile_id.up.sql b/packages/core/services/team/db/team/migrations/20210916104157_convert_profile_id.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210916104157_convert_profile_id.up.sql rename to packages/core/services/team/db/team/migrations/20210916104157_convert_profile_id.up.sql diff --git a/packages/services/team/db/team/migrations/20210916104316_remove_avatar_id.down.sql b/packages/core/services/team/db/team/migrations/20210916104316_remove_avatar_id.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210916104316_remove_avatar_id.down.sql rename to packages/core/services/team/db/team/migrations/20210916104316_remove_avatar_id.down.sql diff --git a/packages/services/team/db/team/migrations/20210916104316_remove_avatar_id.up.sql b/packages/core/services/team/db/team/migrations/20210916104316_remove_avatar_id.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20210916104316_remove_avatar_id.up.sql rename to packages/core/services/team/db/team/migrations/20210916104316_remove_avatar_id.up.sql diff --git a/packages/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.down.sql b/packages/core/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.down.sql rename to packages/core/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.down.sql diff --git a/packages/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.up.sql b/packages/core/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.up.sql rename to packages/core/services/team/db/team/migrations/20220203142241_add_owner_transfer_logs.up.sql diff --git a/packages/services/team/db/team/migrations/20230101105902_add_index.down.sql b/packages/core/services/team/db/team/migrations/20230101105902_add_index.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230101105902_add_index.down.sql rename to packages/core/services/team/db/team/migrations/20230101105902_add_index.down.sql diff --git a/packages/services/team/db/team/migrations/20230101105902_add_index.up.sql b/packages/core/services/team/db/team/migrations/20230101105902_add_index.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230101105902_add_index.up.sql rename to packages/core/services/team/db/team/migrations/20230101105902_add_index.up.sql diff --git a/packages/services/team/db/team/migrations/20230103080912_add_bans.down.sql b/packages/core/services/team/db/team/migrations/20230103080912_add_bans.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230103080912_add_bans.down.sql rename to packages/core/services/team/db/team/migrations/20230103080912_add_bans.down.sql diff --git a/packages/services/team/db/team/migrations/20230103080912_add_bans.up.sql b/packages/core/services/team/db/team/migrations/20230103080912_add_bans.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230103080912_add_bans.up.sql rename to packages/core/services/team/db/team/migrations/20230103080912_add_bans.up.sql diff --git a/packages/services/team/db/team/migrations/20230411083359_index_member_user_id.down.sql b/packages/core/services/team/db/team/migrations/20230411083359_index_member_user_id.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230411083359_index_member_user_id.down.sql rename to packages/core/services/team/db/team/migrations/20230411083359_index_member_user_id.down.sql diff --git a/packages/services/team/db/team/migrations/20230411083359_index_member_user_id.up.sql b/packages/core/services/team/db/team/migrations/20230411083359_index_member_user_id.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230411083359_index_member_user_id.up.sql rename to packages/core/services/team/db/team/migrations/20230411083359_index_member_user_id.up.sql diff --git a/packages/services/team/db/team/migrations/20230516183517_search.down.sql b/packages/core/services/team/db/team/migrations/20230516183517_search.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230516183517_search.down.sql rename to packages/core/services/team/db/team/migrations/20230516183517_search.down.sql diff --git a/packages/services/team/db/team/migrations/20230516183517_search.up.sql b/packages/core/services/team/db/team/migrations/20230516183517_search.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230516183517_search.up.sql rename to packages/core/services/team/db/team/migrations/20230516183517_search.up.sql diff --git a/packages/services/team/db/team/migrations/20230516183534_search-idx.down.sql b/packages/core/services/team/db/team/migrations/20230516183534_search-idx.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230516183534_search-idx.down.sql rename to packages/core/services/team/db/team/migrations/20230516183534_search-idx.down.sql diff --git a/packages/services/team/db/team/migrations/20230516183534_search-idx.up.sql b/packages/core/services/team/db/team/migrations/20230516183534_search-idx.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230516183534_search-idx.up.sql rename to packages/core/services/team/db/team/migrations/20230516183534_search-idx.up.sql diff --git a/packages/services/team/db/team/migrations/20230703002839_to_hash_sharded.down.sql b/packages/core/services/team/db/team/migrations/20230703002839_to_hash_sharded.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230703002839_to_hash_sharded.down.sql rename to packages/core/services/team/db/team/migrations/20230703002839_to_hash_sharded.down.sql diff --git a/packages/services/team/db/team/migrations/20230703002839_to_hash_sharded.up.sql b/packages/core/services/team/db/team/migrations/20230703002839_to_hash_sharded.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20230703002839_to_hash_sharded.up.sql rename to packages/core/services/team/db/team/migrations/20230703002839_to_hash_sharded.up.sql diff --git a/packages/services/team/db/team/migrations/20240101071759_deactivate-reasons.down.sql b/packages/core/services/team/db/team/migrations/20240101071759_deactivate-reasons.down.sql similarity index 100% rename from packages/services/team/db/team/migrations/20240101071759_deactivate-reasons.down.sql rename to packages/core/services/team/db/team/migrations/20240101071759_deactivate-reasons.down.sql diff --git a/packages/services/team/db/team/migrations/20240101071759_deactivate-reasons.up.sql b/packages/core/services/team/db/team/migrations/20240101071759_deactivate-reasons.up.sql similarity index 100% rename from packages/services/team/db/team/migrations/20240101071759_deactivate-reasons.up.sql rename to packages/core/services/team/db/team/migrations/20240101071759_deactivate-reasons.up.sql diff --git a/packages/services/team/ops/avatar-upload-complete/Cargo.toml b/packages/core/services/team/ops/avatar-upload-complete/Cargo.toml similarity index 100% rename from packages/services/team/ops/avatar-upload-complete/Cargo.toml rename to packages/core/services/team/ops/avatar-upload-complete/Cargo.toml diff --git a/packages/services/team/ops/avatar-upload-complete/README.md b/packages/core/services/team/ops/avatar-upload-complete/README.md similarity index 100% rename from packages/services/team/ops/avatar-upload-complete/README.md rename to packages/core/services/team/ops/avatar-upload-complete/README.md diff --git a/packages/services/team/ops/avatar-upload-complete/src/lib.rs b/packages/core/services/team/ops/avatar-upload-complete/src/lib.rs similarity index 100% rename from packages/services/team/ops/avatar-upload-complete/src/lib.rs rename to packages/core/services/team/ops/avatar-upload-complete/src/lib.rs diff --git a/packages/services/team/ops/avatar-upload-complete/tests/integration.rs b/packages/core/services/team/ops/avatar-upload-complete/tests/integration.rs similarity index 100% rename from packages/services/team/ops/avatar-upload-complete/tests/integration.rs rename to packages/core/services/team/ops/avatar-upload-complete/tests/integration.rs diff --git a/packages/services/team/ops/get/Cargo.toml b/packages/core/services/team/ops/get/Cargo.toml similarity index 100% rename from packages/services/team/ops/get/Cargo.toml rename to packages/core/services/team/ops/get/Cargo.toml diff --git a/packages/services/team/ops/get/src/lib.rs b/packages/core/services/team/ops/get/src/lib.rs similarity index 100% rename from packages/services/team/ops/get/src/lib.rs rename to packages/core/services/team/ops/get/src/lib.rs diff --git a/packages/services/team/ops/get/tests/integration.rs b/packages/core/services/team/ops/get/tests/integration.rs similarity index 100% rename from packages/services/team/ops/get/tests/integration.rs rename to packages/core/services/team/ops/get/tests/integration.rs diff --git a/packages/services/team/ops/join-request-list/Cargo.toml b/packages/core/services/team/ops/join-request-list/Cargo.toml similarity index 100% rename from packages/services/team/ops/join-request-list/Cargo.toml rename to packages/core/services/team/ops/join-request-list/Cargo.toml diff --git a/packages/services/team/ops/join-request-list/README.md b/packages/core/services/team/ops/join-request-list/README.md similarity index 100% rename from packages/services/team/ops/join-request-list/README.md rename to packages/core/services/team/ops/join-request-list/README.md diff --git a/packages/services/team/ops/join-request-list/src/lib.rs b/packages/core/services/team/ops/join-request-list/src/lib.rs similarity index 100% rename from packages/services/team/ops/join-request-list/src/lib.rs rename to packages/core/services/team/ops/join-request-list/src/lib.rs diff --git a/packages/services/team/ops/join-request-list/tests/integration.rs b/packages/core/services/team/ops/join-request-list/tests/integration.rs similarity index 100% rename from packages/services/team/ops/join-request-list/tests/integration.rs rename to packages/core/services/team/ops/join-request-list/tests/integration.rs diff --git a/packages/services/team/ops/member-count/Cargo.toml b/packages/core/services/team/ops/member-count/Cargo.toml similarity index 100% rename from packages/services/team/ops/member-count/Cargo.toml rename to packages/core/services/team/ops/member-count/Cargo.toml diff --git a/packages/services/team/ops/member-count/src/lib.rs b/packages/core/services/team/ops/member-count/src/lib.rs similarity index 100% rename from packages/services/team/ops/member-count/src/lib.rs rename to packages/core/services/team/ops/member-count/src/lib.rs diff --git a/packages/services/team/ops/member-count/tests/integration.rs b/packages/core/services/team/ops/member-count/tests/integration.rs similarity index 100% rename from packages/services/team/ops/member-count/tests/integration.rs rename to packages/core/services/team/ops/member-count/tests/integration.rs diff --git a/packages/services/team/ops/member-get/Cargo.toml b/packages/core/services/team/ops/member-get/Cargo.toml similarity index 100% rename from packages/services/team/ops/member-get/Cargo.toml rename to packages/core/services/team/ops/member-get/Cargo.toml diff --git a/packages/services/team/ops/member-get/src/lib.rs b/packages/core/services/team/ops/member-get/src/lib.rs similarity index 100% rename from packages/services/team/ops/member-get/src/lib.rs rename to packages/core/services/team/ops/member-get/src/lib.rs diff --git a/packages/services/team/ops/member-get/tests/integration.rs b/packages/core/services/team/ops/member-get/tests/integration.rs similarity index 100% rename from packages/services/team/ops/member-get/tests/integration.rs rename to packages/core/services/team/ops/member-get/tests/integration.rs diff --git a/packages/services/team/ops/member-list/Cargo.toml b/packages/core/services/team/ops/member-list/Cargo.toml similarity index 100% rename from packages/services/team/ops/member-list/Cargo.toml rename to packages/core/services/team/ops/member-list/Cargo.toml diff --git a/packages/services/team/ops/member-list/src/lib.rs b/packages/core/services/team/ops/member-list/src/lib.rs similarity index 100% rename from packages/services/team/ops/member-list/src/lib.rs rename to packages/core/services/team/ops/member-list/src/lib.rs diff --git a/packages/services/team/ops/member-list/tests/integration.rs b/packages/core/services/team/ops/member-list/tests/integration.rs similarity index 100% rename from packages/services/team/ops/member-list/tests/integration.rs rename to packages/core/services/team/ops/member-list/tests/integration.rs diff --git a/packages/services/team/ops/member-relationship-get/Cargo.toml b/packages/core/services/team/ops/member-relationship-get/Cargo.toml similarity index 100% rename from packages/services/team/ops/member-relationship-get/Cargo.toml rename to packages/core/services/team/ops/member-relationship-get/Cargo.toml diff --git a/packages/services/team/ops/member-relationship-get/README.md b/packages/core/services/team/ops/member-relationship-get/README.md similarity index 100% rename from packages/services/team/ops/member-relationship-get/README.md rename to packages/core/services/team/ops/member-relationship-get/README.md diff --git a/packages/services/team/ops/member-relationship-get/src/lib.rs b/packages/core/services/team/ops/member-relationship-get/src/lib.rs similarity index 100% rename from packages/services/team/ops/member-relationship-get/src/lib.rs rename to packages/core/services/team/ops/member-relationship-get/src/lib.rs diff --git a/packages/services/team/ops/member-relationship-get/tests/integration.rs b/packages/core/services/team/ops/member-relationship-get/tests/integration.rs similarity index 100% rename from packages/services/team/ops/member-relationship-get/tests/integration.rs rename to packages/core/services/team/ops/member-relationship-get/tests/integration.rs diff --git a/packages/services/team/ops/profile-validate/Cargo.toml b/packages/core/services/team/ops/profile-validate/Cargo.toml similarity index 100% rename from packages/services/team/ops/profile-validate/Cargo.toml rename to packages/core/services/team/ops/profile-validate/Cargo.toml diff --git a/packages/services/team/ops/profile-validate/README.md b/packages/core/services/team/ops/profile-validate/README.md similarity index 100% rename from packages/services/team/ops/profile-validate/README.md rename to packages/core/services/team/ops/profile-validate/README.md diff --git a/packages/services/team/ops/profile-validate/src/lib.rs b/packages/core/services/team/ops/profile-validate/src/lib.rs similarity index 100% rename from packages/services/team/ops/profile-validate/src/lib.rs rename to packages/core/services/team/ops/profile-validate/src/lib.rs diff --git a/packages/services/team/ops/profile-validate/tests/integration.rs b/packages/core/services/team/ops/profile-validate/tests/integration.rs similarity index 100% rename from packages/services/team/ops/profile-validate/tests/integration.rs rename to packages/core/services/team/ops/profile-validate/tests/integration.rs diff --git a/packages/services/team/ops/recommend/Cargo.toml b/packages/core/services/team/ops/recommend/Cargo.toml similarity index 100% rename from packages/services/team/ops/recommend/Cargo.toml rename to packages/core/services/team/ops/recommend/Cargo.toml diff --git a/packages/services/team/ops/recommend/src/lib.rs b/packages/core/services/team/ops/recommend/src/lib.rs similarity index 100% rename from packages/services/team/ops/recommend/src/lib.rs rename to packages/core/services/team/ops/recommend/src/lib.rs diff --git a/packages/services/team/ops/recommend/tests/integration.rs b/packages/core/services/team/ops/recommend/tests/integration.rs similarity index 100% rename from packages/services/team/ops/recommend/tests/integration.rs rename to packages/core/services/team/ops/recommend/tests/integration.rs diff --git a/packages/services/team/ops/resolve-display-name/Cargo.toml b/packages/core/services/team/ops/resolve-display-name/Cargo.toml similarity index 100% rename from packages/services/team/ops/resolve-display-name/Cargo.toml rename to packages/core/services/team/ops/resolve-display-name/Cargo.toml diff --git a/packages/services/team/ops/resolve-display-name/README.md b/packages/core/services/team/ops/resolve-display-name/README.md similarity index 100% rename from packages/services/team/ops/resolve-display-name/README.md rename to packages/core/services/team/ops/resolve-display-name/README.md diff --git a/packages/services/team/ops/resolve-display-name/src/lib.rs b/packages/core/services/team/ops/resolve-display-name/src/lib.rs similarity index 100% rename from packages/services/team/ops/resolve-display-name/src/lib.rs rename to packages/core/services/team/ops/resolve-display-name/src/lib.rs diff --git a/packages/services/team/ops/resolve-display-name/tests/integration.rs b/packages/core/services/team/ops/resolve-display-name/tests/integration.rs similarity index 100% rename from packages/services/team/ops/resolve-display-name/tests/integration.rs rename to packages/core/services/team/ops/resolve-display-name/tests/integration.rs diff --git a/packages/services/team/ops/user-ban-get/Cargo.toml b/packages/core/services/team/ops/user-ban-get/Cargo.toml similarity index 100% rename from packages/services/team/ops/user-ban-get/Cargo.toml rename to packages/core/services/team/ops/user-ban-get/Cargo.toml diff --git a/packages/services/team/ops/user-ban-get/README.md b/packages/core/services/team/ops/user-ban-get/README.md similarity index 100% rename from packages/services/team/ops/user-ban-get/README.md rename to packages/core/services/team/ops/user-ban-get/README.md diff --git a/packages/services/team/ops/user-ban-get/src/lib.rs b/packages/core/services/team/ops/user-ban-get/src/lib.rs similarity index 100% rename from packages/services/team/ops/user-ban-get/src/lib.rs rename to packages/core/services/team/ops/user-ban-get/src/lib.rs diff --git a/packages/services/team/ops/user-ban-get/tests/integration.rs b/packages/core/services/team/ops/user-ban-get/tests/integration.rs similarity index 100% rename from packages/services/team/ops/user-ban-get/tests/integration.rs rename to packages/core/services/team/ops/user-ban-get/tests/integration.rs diff --git a/packages/services/team/ops/user-ban-list/Cargo.toml b/packages/core/services/team/ops/user-ban-list/Cargo.toml similarity index 100% rename from packages/services/team/ops/user-ban-list/Cargo.toml rename to packages/core/services/team/ops/user-ban-list/Cargo.toml diff --git a/packages/services/team/ops/user-ban-list/README.md b/packages/core/services/team/ops/user-ban-list/README.md similarity index 100% rename from packages/services/team/ops/user-ban-list/README.md rename to packages/core/services/team/ops/user-ban-list/README.md diff --git a/packages/services/team/ops/user-ban-list/src/lib.rs b/packages/core/services/team/ops/user-ban-list/src/lib.rs similarity index 100% rename from packages/services/team/ops/user-ban-list/src/lib.rs rename to packages/core/services/team/ops/user-ban-list/src/lib.rs diff --git a/packages/services/team/ops/user-ban-list/tests/integration.rs b/packages/core/services/team/ops/user-ban-list/tests/integration.rs similarity index 100% rename from packages/services/team/ops/user-ban-list/tests/integration.rs rename to packages/core/services/team/ops/user-ban-list/tests/integration.rs diff --git a/packages/services/team/ops/validate/Cargo.toml b/packages/core/services/team/ops/validate/Cargo.toml similarity index 100% rename from packages/services/team/ops/validate/Cargo.toml rename to packages/core/services/team/ops/validate/Cargo.toml diff --git a/packages/services/team/ops/validate/README.md b/packages/core/services/team/ops/validate/README.md similarity index 100% rename from packages/services/team/ops/validate/README.md rename to packages/core/services/team/ops/validate/README.md diff --git a/packages/services/team/ops/validate/src/lib.rs b/packages/core/services/team/ops/validate/src/lib.rs similarity index 100% rename from packages/services/team/ops/validate/src/lib.rs rename to packages/core/services/team/ops/validate/src/lib.rs diff --git a/packages/services/team/ops/validate/tests/integration.rs b/packages/core/services/team/ops/validate/tests/integration.rs similarity index 100% rename from packages/services/team/ops/validate/tests/integration.rs rename to packages/core/services/team/ops/validate/tests/integration.rs diff --git a/packages/services/team/proto/avatar-upload-complete.proto b/packages/core/services/team/proto/avatar-upload-complete.proto similarity index 100% rename from packages/services/team/proto/avatar-upload-complete.proto rename to packages/core/services/team/proto/avatar-upload-complete.proto diff --git a/packages/services/team/proto/get.proto b/packages/core/services/team/proto/get.proto similarity index 100% rename from packages/services/team/proto/get.proto rename to packages/core/services/team/proto/get.proto diff --git a/packages/services/team/proto/join-request-list.proto b/packages/core/services/team/proto/join-request-list.proto similarity index 100% rename from packages/services/team/proto/join-request-list.proto rename to packages/core/services/team/proto/join-request-list.proto diff --git a/packages/services/team/proto/member-count.proto b/packages/core/services/team/proto/member-count.proto similarity index 100% rename from packages/services/team/proto/member-count.proto rename to packages/core/services/team/proto/member-count.proto diff --git a/packages/services/team/proto/member-get.proto b/packages/core/services/team/proto/member-get.proto similarity index 100% rename from packages/services/team/proto/member-get.proto rename to packages/core/services/team/proto/member-get.proto diff --git a/packages/services/team/proto/member-list.proto b/packages/core/services/team/proto/member-list.proto similarity index 100% rename from packages/services/team/proto/member-list.proto rename to packages/core/services/team/proto/member-list.proto diff --git a/packages/services/team/proto/member-relationship-get.proto b/packages/core/services/team/proto/member-relationship-get.proto similarity index 100% rename from packages/services/team/proto/member-relationship-get.proto rename to packages/core/services/team/proto/member-relationship-get.proto diff --git a/packages/services/team/proto/msg/create-complete.proto b/packages/core/services/team/proto/msg/create-complete.proto similarity index 100% rename from packages/services/team/proto/msg/create-complete.proto rename to packages/core/services/team/proto/msg/create-complete.proto diff --git a/packages/services/team/proto/msg/create-fail.proto b/packages/core/services/team/proto/msg/create-fail.proto similarity index 100% rename from packages/services/team/proto/msg/create-fail.proto rename to packages/core/services/team/proto/msg/create-fail.proto diff --git a/packages/services/team/proto/msg/create.proto b/packages/core/services/team/proto/msg/create.proto similarity index 100% rename from packages/services/team/proto/msg/create.proto rename to packages/core/services/team/proto/msg/create.proto diff --git a/packages/services/team/proto/msg/deactivated-update.proto b/packages/core/services/team/proto/msg/deactivated-update.proto similarity index 100% rename from packages/services/team/proto/msg/deactivated-update.proto rename to packages/core/services/team/proto/msg/deactivated-update.proto diff --git a/packages/services/team/proto/msg/join-request-create-complete.proto b/packages/core/services/team/proto/msg/join-request-create-complete.proto similarity index 100% rename from packages/services/team/proto/msg/join-request-create-complete.proto rename to packages/core/services/team/proto/msg/join-request-create-complete.proto diff --git a/packages/services/team/proto/msg/join-request-create-fail.proto b/packages/core/services/team/proto/msg/join-request-create-fail.proto similarity index 100% rename from packages/services/team/proto/msg/join-request-create-fail.proto rename to packages/core/services/team/proto/msg/join-request-create-fail.proto diff --git a/packages/services/team/proto/msg/join-request-create.proto b/packages/core/services/team/proto/msg/join-request-create.proto similarity index 100% rename from packages/services/team/proto/msg/join-request-create.proto rename to packages/core/services/team/proto/msg/join-request-create.proto diff --git a/packages/services/team/proto/msg/join-request-resolve-complete.proto b/packages/core/services/team/proto/msg/join-request-resolve-complete.proto similarity index 100% rename from packages/services/team/proto/msg/join-request-resolve-complete.proto rename to packages/core/services/team/proto/msg/join-request-resolve-complete.proto diff --git a/packages/services/team/proto/msg/join-request-resolve.proto b/packages/core/services/team/proto/msg/join-request-resolve.proto similarity index 100% rename from packages/services/team/proto/msg/join-request-resolve.proto rename to packages/core/services/team/proto/msg/join-request-resolve.proto diff --git a/packages/services/team/proto/msg/member-create-complete.proto b/packages/core/services/team/proto/msg/member-create-complete.proto similarity index 100% rename from packages/services/team/proto/msg/member-create-complete.proto rename to packages/core/services/team/proto/msg/member-create-complete.proto diff --git a/packages/services/team/proto/msg/member-create-fail.proto b/packages/core/services/team/proto/msg/member-create-fail.proto similarity index 100% rename from packages/services/team/proto/msg/member-create-fail.proto rename to packages/core/services/team/proto/msg/member-create-fail.proto diff --git a/packages/services/team/proto/msg/member-create.proto b/packages/core/services/team/proto/msg/member-create.proto similarity index 100% rename from packages/services/team/proto/msg/member-create.proto rename to packages/core/services/team/proto/msg/member-create.proto diff --git a/packages/services/team/proto/msg/member-kick-complete.proto b/packages/core/services/team/proto/msg/member-kick-complete.proto similarity index 100% rename from packages/services/team/proto/msg/member-kick-complete.proto rename to packages/core/services/team/proto/msg/member-kick-complete.proto diff --git a/packages/services/team/proto/msg/member-kick.proto b/packages/core/services/team/proto/msg/member-kick.proto similarity index 100% rename from packages/services/team/proto/msg/member-kick.proto rename to packages/core/services/team/proto/msg/member-kick.proto diff --git a/packages/services/team/proto/msg/member-remove-complete.proto b/packages/core/services/team/proto/msg/member-remove-complete.proto similarity index 100% rename from packages/services/team/proto/msg/member-remove-complete.proto rename to packages/core/services/team/proto/msg/member-remove-complete.proto diff --git a/packages/services/team/proto/msg/member-remove.proto b/packages/core/services/team/proto/msg/member-remove.proto similarity index 100% rename from packages/services/team/proto/msg/member-remove.proto rename to packages/core/services/team/proto/msg/member-remove.proto diff --git a/packages/services/team/proto/msg/owner-transfer-complete.proto b/packages/core/services/team/proto/msg/owner-transfer-complete.proto similarity index 100% rename from packages/services/team/proto/msg/owner-transfer-complete.proto rename to packages/core/services/team/proto/msg/owner-transfer-complete.proto diff --git a/packages/services/team/proto/msg/owner-transfer.proto b/packages/core/services/team/proto/msg/owner-transfer.proto similarity index 100% rename from packages/services/team/proto/msg/owner-transfer.proto rename to packages/core/services/team/proto/msg/owner-transfer.proto diff --git a/packages/services/team/proto/msg/profile-set-complete.proto b/packages/core/services/team/proto/msg/profile-set-complete.proto similarity index 100% rename from packages/services/team/proto/msg/profile-set-complete.proto rename to packages/core/services/team/proto/msg/profile-set-complete.proto diff --git a/packages/services/team/proto/msg/profile-set-fail.proto b/packages/core/services/team/proto/msg/profile-set-fail.proto similarity index 100% rename from packages/services/team/proto/msg/profile-set-fail.proto rename to packages/core/services/team/proto/msg/profile-set-fail.proto diff --git a/packages/services/team/proto/msg/profile-set.proto b/packages/core/services/team/proto/msg/profile-set.proto similarity index 100% rename from packages/services/team/proto/msg/profile-set.proto rename to packages/core/services/team/proto/msg/profile-set.proto diff --git a/packages/services/team/proto/msg/update.proto b/packages/core/services/team/proto/msg/update.proto similarity index 100% rename from packages/services/team/proto/msg/update.proto rename to packages/core/services/team/proto/msg/update.proto diff --git a/packages/services/team/proto/msg/user-ban-complete.proto b/packages/core/services/team/proto/msg/user-ban-complete.proto similarity index 100% rename from packages/services/team/proto/msg/user-ban-complete.proto rename to packages/core/services/team/proto/msg/user-ban-complete.proto diff --git a/packages/services/team/proto/msg/user-ban.proto b/packages/core/services/team/proto/msg/user-ban.proto similarity index 100% rename from packages/services/team/proto/msg/user-ban.proto rename to packages/core/services/team/proto/msg/user-ban.proto diff --git a/packages/services/team/proto/msg/user-unban-complete.proto b/packages/core/services/team/proto/msg/user-unban-complete.proto similarity index 100% rename from packages/services/team/proto/msg/user-unban-complete.proto rename to packages/core/services/team/proto/msg/user-unban-complete.proto diff --git a/packages/services/team/proto/msg/user-unban.proto b/packages/core/services/team/proto/msg/user-unban.proto similarity index 100% rename from packages/services/team/proto/msg/user-unban.proto rename to packages/core/services/team/proto/msg/user-unban.proto diff --git a/packages/services/team/proto/profile-validate.proto b/packages/core/services/team/proto/profile-validate.proto similarity index 100% rename from packages/services/team/proto/profile-validate.proto rename to packages/core/services/team/proto/profile-validate.proto diff --git a/packages/services/team/proto/recommend.proto b/packages/core/services/team/proto/recommend.proto similarity index 100% rename from packages/services/team/proto/recommend.proto rename to packages/core/services/team/proto/recommend.proto diff --git a/packages/services/team/proto/resolve-display-name.proto b/packages/core/services/team/proto/resolve-display-name.proto similarity index 100% rename from packages/services/team/proto/resolve-display-name.proto rename to packages/core/services/team/proto/resolve-display-name.proto diff --git a/packages/services/team/proto/search.proto b/packages/core/services/team/proto/search.proto similarity index 100% rename from packages/services/team/proto/search.proto rename to packages/core/services/team/proto/search.proto diff --git a/packages/services/team/proto/user-ban-get.proto b/packages/core/services/team/proto/user-ban-get.proto similarity index 100% rename from packages/services/team/proto/user-ban-get.proto rename to packages/core/services/team/proto/user-ban-get.proto diff --git a/packages/services/team/proto/user-ban-list.proto b/packages/core/services/team/proto/user-ban-list.proto similarity index 100% rename from packages/services/team/proto/user-ban-list.proto rename to packages/core/services/team/proto/user-ban-list.proto diff --git a/packages/services/team/proto/validate.proto b/packages/core/services/team/proto/validate.proto similarity index 100% rename from packages/services/team/proto/validate.proto rename to packages/core/services/team/proto/validate.proto diff --git a/packages/services/team/util/Cargo.toml b/packages/core/services/team/util/Cargo.toml similarity index 100% rename from packages/services/team/util/Cargo.toml rename to packages/core/services/team/util/Cargo.toml diff --git a/packages/services/team/util/src/lib.rs b/packages/core/services/team/util/src/lib.rs similarity index 100% rename from packages/services/team/util/src/lib.rs rename to packages/core/services/team/util/src/lib.rs diff --git a/packages/services/team/worker/Cargo.toml b/packages/core/services/team/worker/Cargo.toml similarity index 100% rename from packages/services/team/worker/Cargo.toml rename to packages/core/services/team/worker/Cargo.toml diff --git a/packages/services/team/worker/src/lib.rs b/packages/core/services/team/worker/src/lib.rs similarity index 100% rename from packages/services/team/worker/src/lib.rs rename to packages/core/services/team/worker/src/lib.rs diff --git a/packages/services/team/worker/src/workers/create.rs b/packages/core/services/team/worker/src/workers/create.rs similarity index 100% rename from packages/services/team/worker/src/workers/create.rs rename to packages/core/services/team/worker/src/workers/create.rs diff --git a/packages/services/team/worker/src/workers/deactivated_update.rs b/packages/core/services/team/worker/src/workers/deactivated_update.rs similarity index 100% rename from packages/services/team/worker/src/workers/deactivated_update.rs rename to packages/core/services/team/worker/src/workers/deactivated_update.rs diff --git a/packages/services/team/worker/src/workers/join_request_create.rs b/packages/core/services/team/worker/src/workers/join_request_create.rs similarity index 100% rename from packages/services/team/worker/src/workers/join_request_create.rs rename to packages/core/services/team/worker/src/workers/join_request_create.rs diff --git a/packages/services/team/worker/src/workers/join_request_resolve.rs b/packages/core/services/team/worker/src/workers/join_request_resolve.rs similarity index 100% rename from packages/services/team/worker/src/workers/join_request_resolve.rs rename to packages/core/services/team/worker/src/workers/join_request_resolve.rs diff --git a/packages/services/team/worker/src/workers/member_create.rs b/packages/core/services/team/worker/src/workers/member_create.rs similarity index 100% rename from packages/services/team/worker/src/workers/member_create.rs rename to packages/core/services/team/worker/src/workers/member_create.rs diff --git a/packages/services/team/worker/src/workers/member_kick.rs b/packages/core/services/team/worker/src/workers/member_kick.rs similarity index 100% rename from packages/services/team/worker/src/workers/member_kick.rs rename to packages/core/services/team/worker/src/workers/member_kick.rs diff --git a/packages/services/team/worker/src/workers/member_remove.rs b/packages/core/services/team/worker/src/workers/member_remove.rs similarity index 100% rename from packages/services/team/worker/src/workers/member_remove.rs rename to packages/core/services/team/worker/src/workers/member_remove.rs diff --git a/packages/services/team/worker/src/workers/mod.rs b/packages/core/services/team/worker/src/workers/mod.rs similarity index 100% rename from packages/services/team/worker/src/workers/mod.rs rename to packages/core/services/team/worker/src/workers/mod.rs diff --git a/packages/services/team/worker/src/workers/owner_transfer.rs b/packages/core/services/team/worker/src/workers/owner_transfer.rs similarity index 100% rename from packages/services/team/worker/src/workers/owner_transfer.rs rename to packages/core/services/team/worker/src/workers/owner_transfer.rs diff --git a/packages/services/team/worker/src/workers/profile_set.rs b/packages/core/services/team/worker/src/workers/profile_set.rs similarity index 100% rename from packages/services/team/worker/src/workers/profile_set.rs rename to packages/core/services/team/worker/src/workers/profile_set.rs diff --git a/packages/services/team/worker/src/workers/user_ban.rs b/packages/core/services/team/worker/src/workers/user_ban.rs similarity index 100% rename from packages/services/team/worker/src/workers/user_ban.rs rename to packages/core/services/team/worker/src/workers/user_ban.rs diff --git a/packages/services/team/worker/src/workers/user_unban.rs b/packages/core/services/team/worker/src/workers/user_unban.rs similarity index 100% rename from packages/services/team/worker/src/workers/user_unban.rs rename to packages/core/services/team/worker/src/workers/user_unban.rs diff --git a/packages/services/team/worker/tests/create.rs b/packages/core/services/team/worker/tests/create.rs similarity index 100% rename from packages/services/team/worker/tests/create.rs rename to packages/core/services/team/worker/tests/create.rs diff --git a/packages/services/team/worker/tests/deactivated_update.rs b/packages/core/services/team/worker/tests/deactivated_update.rs similarity index 100% rename from packages/services/team/worker/tests/deactivated_update.rs rename to packages/core/services/team/worker/tests/deactivated_update.rs diff --git a/packages/services/team/worker/tests/join_request_create.rs b/packages/core/services/team/worker/tests/join_request_create.rs similarity index 100% rename from packages/services/team/worker/tests/join_request_create.rs rename to packages/core/services/team/worker/tests/join_request_create.rs diff --git a/packages/services/team/worker/tests/join_request_resolve.rs b/packages/core/services/team/worker/tests/join_request_resolve.rs similarity index 100% rename from packages/services/team/worker/tests/join_request_resolve.rs rename to packages/core/services/team/worker/tests/join_request_resolve.rs diff --git a/packages/services/team/worker/tests/member_create.rs b/packages/core/services/team/worker/tests/member_create.rs similarity index 100% rename from packages/services/team/worker/tests/member_create.rs rename to packages/core/services/team/worker/tests/member_create.rs diff --git a/packages/services/team/worker/tests/member_kick.rs b/packages/core/services/team/worker/tests/member_kick.rs similarity index 100% rename from packages/services/team/worker/tests/member_kick.rs rename to packages/core/services/team/worker/tests/member_kick.rs diff --git a/packages/services/team/worker/tests/member_remove.rs b/packages/core/services/team/worker/tests/member_remove.rs similarity index 100% rename from packages/services/team/worker/tests/member_remove.rs rename to packages/core/services/team/worker/tests/member_remove.rs diff --git a/packages/services/team/worker/tests/owner_transfer.rs b/packages/core/services/team/worker/tests/owner_transfer.rs similarity index 100% rename from packages/services/team/worker/tests/owner_transfer.rs rename to packages/core/services/team/worker/tests/owner_transfer.rs diff --git a/packages/services/team/worker/tests/profile_set.rs b/packages/core/services/team/worker/tests/profile_set.rs similarity index 100% rename from packages/services/team/worker/tests/profile_set.rs rename to packages/core/services/team/worker/tests/profile_set.rs diff --git a/packages/services/team/worker/tests/user_ban.rs b/packages/core/services/team/worker/tests/user_ban.rs similarity index 100% rename from packages/services/team/worker/tests/user_ban.rs rename to packages/core/services/team/worker/tests/user_ban.rs diff --git a/packages/services/team/worker/tests/user_unban.rs b/packages/core/services/team/worker/tests/user_unban.rs similarity index 100% rename from packages/services/team/worker/tests/user_unban.rs rename to packages/core/services/team/worker/tests/user_unban.rs diff --git a/packages/services/telemetry/standalone/beacon/Cargo.toml b/packages/core/services/telemetry/standalone/beacon/Cargo.toml similarity index 100% rename from packages/services/telemetry/standalone/beacon/Cargo.toml rename to packages/core/services/telemetry/standalone/beacon/Cargo.toml diff --git a/packages/services/telemetry/standalone/beacon/README.md b/packages/core/services/telemetry/standalone/beacon/README.md similarity index 100% rename from packages/services/telemetry/standalone/beacon/README.md rename to packages/core/services/telemetry/standalone/beacon/README.md diff --git a/packages/core/services/telemetry/standalone/beacon/src/lib.rs b/packages/core/services/telemetry/standalone/beacon/src/lib.rs new file mode 100644 index 0000000000..7ef28a776d --- /dev/null +++ b/packages/core/services/telemetry/standalone/beacon/src/lib.rs @@ -0,0 +1,261 @@ +use indoc::indoc; +use rivet_operation::prelude::*; +use serde::Serialize; +use serde_json::json; +use std::{collections::HashMap, time::Duration}; +use sysinfo::System; + +// This information is intended for use with diagnosing errors in the wild. +// +// Events are sent to PostHog (https://posthog.com/). These events enrich our Sentry errors in +// order to better understand the unique edge cases that might cause an error. +// +// Rivet is a powerful yet complicated system and these metrics help us support the open-source +// community. If you have questions or concerns about this data, please reach out to us on Discord: +// https://rivet.gg/discord + +// This API key is safe to hardcode. It will not change and is intended to be public. +const POSTHOG_API_KEY: &str = "phc_1lUNmul6sAdFzDK1VHXNrikCfD7ivQZSpf2yzrPvr4m"; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + run_from_env(config.clone(), pools.clone(), util::timestamp::now()).await +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, + _ts: i64, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("telemetry-beacon"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = OperationContext::new( + "telemetry-beacon".into(), + Duration::from_secs(300), + config.clone(), + rivet_connection::Connection::new(client, pools, cache), + Uuid::new_v4(), + Uuid::new_v4(), + util::timestamp::now(), + util::timestamp::now(), + (), + ); + + // Get the cluster ID + let cluster_id = chirp_workflow::compat::op(&ctx, dynamic_config::ops::get_config::Input {}) + .await? + .cluster_id; + + // Build events + let mut events = Vec::new(); + let distinct_id = format!("cluster:{cluster_id}"); + + // Send beacon + let mut event = async_posthog::Event::new("cluster_beacon", &distinct_id); + event.insert_prop("$groups", json!({ "cluster": cluster_id }))?; + event.insert_prop( + "$set", + json!({ + "cluster_id": cluster_id, + "os": os_report(), + "source_hash": rivet_env::source_hash(), + "config": get_config_data(&ctx)?, + "infrastructure": get_infrastructure_data(&ctx)?, + // "pegboard": get_pegboard_data(&ctx).await?, + }), + )?; + events.push(event); + + // Add cluster identification data + let mut event = async_posthog::Event::new("$groupidentify", &distinct_id); + event.insert_prop("$group_type", "cluster")?; + event.insert_prop("$group_key", cluster_id)?; + event.insert_prop( + "$group_set", + json!({ + "name": ctx.config().server()?.rivet.namespace, + }), + )?; + events.push(event); + + tracing::debug!(len = ?events.len(), "built events"); + + // Send events in chunks + let client = async_posthog::client(POSTHOG_API_KEY); + client.capture_batch(events).await?; + + tracing::debug!("all events sent"); + + Ok(()) +} + +/// Returns information about the operating system running the cluster. +/// +/// This helps Rivet diagnose crash reports to easily pinpoint if issues are +/// coming from a specific operating system. +fn os_report() -> serde_json::Value { + // Create a new System object + let system = sysinfo::System::new_with_specifics( + sysinfo::RefreshKind::new() + .with_cpu(sysinfo::CpuRefreshKind::everything()) + .with_memory(sysinfo::MemoryRefreshKind::everything()), + ); + + // Gather OS information + let os_name = std::env::consts::OS; + let os_version = System::os_version() + .unwrap_or_else(|| String::from("Unknown")) + .to_string(); + let architecture = std::env::consts::ARCH; + let hostname = System::host_name().unwrap_or_else(|| String::from("unknown")); + + // Gather memory information + let total_memory = system.total_memory(); + let available_memory = system.available_memory(); + + // Gather CPU information + let cpu_info = system.cpus(); + let cpu_model = cpu_info + .first() + .map(|p| p.brand().to_string()) + .unwrap_or_else(|| String::from("Unknown CPU")); + + // Combine everything into a JSON object + json!({ + "name": os_name, + "version": os_version, + "architecture": architecture, + "hostname": hostname, + "memory": { + "total": total_memory, + "available": available_memory, + }, + "cpu": { + "model": cpu_model, + "cores": cpu_info.len(), + } + }) +} + +/// Returns information about what feature configs are enabled. +/// +/// This helps Rivet diagnose crash reports to understand if specific features +/// are causing crashes. +fn get_config_data(ctx: &OperationContext<()>) -> GlobalResult { + let server_config = ctx.config().server()?; + + Ok(json!({ + "rivet": { + "namespace": server_config.rivet.namespace, + "auth_access_kind": format!("{:?}", server_config.rivet.auth.access_kind), + "dns_enabled": server_config.rivet.dns.is_some(), + "job_run_enabled": server_config.rivet.job_run.is_some(), + "api_origin": server_config.rivet.api_public.public_origin(), + "hub_origin": server_config.rivet.ui.public_origin(), + }, + })) +} + +/// Returns information about what infrastructure is enabled. +/// +/// This helps Rivet diagnose crash reports to understand if parts of the +/// infrastructure are causing issues. +fn get_infrastructure_data(ctx: &OperationContext<()>) -> GlobalResult { + let server_config = ctx.config().server()?; + Ok(json!({ + "nomad_enabled": server_config.nomad.is_some(), + "cloudflare_enabled": server_config.cloudflare.is_some(), + "sendgrid_enabled": server_config.sendgrid.is_some(), + "loops_enabled": server_config.loops.is_some(), + "ip_info_enabled": server_config.ip_info.is_some(), + "hcaptcha_enabled": server_config.hcaptcha.is_some(), + "turnstile_enabled": server_config.turnstile.is_some(), + "stripe_enabled": server_config.stripe.is_some(), + "neon_enabled": server_config.neon.is_some(), + "linode_enabled": server_config.linode.is_some(), + "clickhouse_enabled": server_config.clickhouse.is_some(), + "prometheus_enabled": server_config.prometheus.is_some(), + "s3_endpoint": server_config.s3.endpoint_external, + })) +} + +#[derive(sqlx::FromRow, Serialize)] +struct ResourceAggregateRow { + count: i64, + cpu_core_sum: i64, + cpu_frequency_sum: i64, + memory_sum: i64, + swap_sum: i64, +} + +// /// Returns information about the pegboard configuration. +// /// +// /// This is helpful for diagnosing issues with the self-hosted clusters under +// /// load. e.g. if a cluster is running on constraint resources (see os_report), +// /// does the cluster configuration affect it? +// async fn get_pegboard_data(ctx: &OperationContext<()>) -> GlobalResult { +// use pegboard::protocol::ClientFlavor; + +// let mut clients = HashMap::new(); +// for flavor in [ClientFlavor::Container, ClientFlavor::Isolate] { +// let row = sql_fetch_one!( +// [ctx, ResourceAggregateRow] +// " +// SELECT +// count(*)::int AS count, +// coalesce(sum((system_info->'cpu'->'physical_core_count')::int), 0)::int AS cpu_core_sum, +// coalesce(sum((system_info->'cpu'->'frequency')::int), 0)::int AS cpu_frequency_sum, +// coalesce(sum((system_info->'memory'->'total_memory')::int), 0)::int AS memory_sum, +// coalesce(sum((system_info->'memory'->'total_swap')::int), 0)::int AS swap_sum +// FROM db_pegboard.clients AS OF SYSTEM TIME '-5s' +// WHERE +// delete_ts IS NULL +// AND flavor = $1 +// ", +// flavor as i32, +// ) +// .await?; + +// let cpu_arch_counts = sql_fetch_all!( +// [ctx, (String, i64)] +// " +// SELECT +// system_info->'cpu'->>'cpu_arch' AS cpu_arch, +// count(*)::int AS count +// FROM db_pegboard.clients AS OF SYSTEM TIME '-5s' +// WHERE +// delete_ts IS NULL +// AND flavor = $1 +// GROUP BY cpu_arch +// ", +// flavor as i32, +// ) +// .await?; +// let cpu_archs: HashMap = cpu_arch_counts.into_iter().collect(); + +// clients.insert( +// flavor.to_string(), +// json!({ +// "aggregates": row, +// "cpu_archs": cpu_archs +// }), +// ); +// } + +// let (total_count, running_count) = sql_fetch_one!( +// [ctx, (i64, i64)] +// " +// SELECT count(*)::int, count(CASE WHEN stop_ts IS NULL THEN 1 END)::int +// FROM db_pegboard.actors AS OF SYSTEM TIME '-5s' +// ", +// ) +// .await?; + +// Ok(json!({ +// "clients": clients, +// "actors": { +// "total": total_count, +// "running": running_count, +// } +// })) +// } diff --git a/packages/services/telemetry/standalone/beacon/tests/integration.rs b/packages/core/services/telemetry/standalone/beacon/tests/integration.rs similarity index 100% rename from packages/services/telemetry/standalone/beacon/tests/integration.rs rename to packages/core/services/telemetry/standalone/beacon/tests/integration.rs diff --git a/packages/services/tier/Cargo.toml b/packages/core/services/tier/Cargo.toml similarity index 100% rename from packages/services/tier/Cargo.toml rename to packages/core/services/tier/Cargo.toml diff --git a/packages/services/tier/README.md b/packages/core/services/tier/README.md similarity index 100% rename from packages/services/tier/README.md rename to packages/core/services/tier/README.md diff --git a/packages/services/tier/src/lib.rs b/packages/core/services/tier/src/lib.rs similarity index 100% rename from packages/services/tier/src/lib.rs rename to packages/core/services/tier/src/lib.rs diff --git a/packages/services/tier/src/ops/list.rs b/packages/core/services/tier/src/ops/list.rs similarity index 100% rename from packages/services/tier/src/ops/list.rs rename to packages/core/services/tier/src/ops/list.rs diff --git a/packages/services/tier/src/ops/mod.rs b/packages/core/services/tier/src/ops/mod.rs similarity index 100% rename from packages/services/tier/src/ops/mod.rs rename to packages/core/services/tier/src/ops/mod.rs diff --git a/packages/services/tier/src/types.rs b/packages/core/services/tier/src/types.rs similarity index 100% rename from packages/services/tier/src/types.rs rename to packages/core/services/tier/src/types.rs diff --git a/packages/services/tier/tests/list.rs b/packages/core/services/tier/tests/list.rs similarity index 100% rename from packages/services/tier/tests/list.rs rename to packages/core/services/tier/tests/list.rs diff --git a/packages/services/token/db/token/migrations/20200101000000_init.down.sql b/packages/core/services/token/db/token/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/token/db/token/migrations/20200101000000_init.down.sql rename to packages/core/services/token/db/token/migrations/20200101000000_init.down.sql diff --git a/packages/services/token/db/token/migrations/20200101000000_init.up.sql b/packages/core/services/token/db/token/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/token/db/token/migrations/20200101000000_init.up.sql rename to packages/core/services/token/db/token/migrations/20200101000000_init.up.sql diff --git a/packages/services/token/ops/create/Cargo.toml b/packages/core/services/token/ops/create/Cargo.toml similarity index 100% rename from packages/services/token/ops/create/Cargo.toml rename to packages/core/services/token/ops/create/Cargo.toml diff --git a/packages/services/token/ops/create/src/lib.rs b/packages/core/services/token/ops/create/src/lib.rs similarity index 100% rename from packages/services/token/ops/create/src/lib.rs rename to packages/core/services/token/ops/create/src/lib.rs diff --git a/packages/services/token/ops/create/tests/integration.rs b/packages/core/services/token/ops/create/tests/integration.rs similarity index 100% rename from packages/services/token/ops/create/tests/integration.rs rename to packages/core/services/token/ops/create/tests/integration.rs diff --git a/packages/services/token/ops/exchange/Cargo.toml b/packages/core/services/token/ops/exchange/Cargo.toml similarity index 100% rename from packages/services/token/ops/exchange/Cargo.toml rename to packages/core/services/token/ops/exchange/Cargo.toml diff --git a/packages/services/token/ops/exchange/README.md b/packages/core/services/token/ops/exchange/README.md similarity index 100% rename from packages/services/token/ops/exchange/README.md rename to packages/core/services/token/ops/exchange/README.md diff --git a/packages/services/token/ops/exchange/src/lib.rs b/packages/core/services/token/ops/exchange/src/lib.rs similarity index 100% rename from packages/services/token/ops/exchange/src/lib.rs rename to packages/core/services/token/ops/exchange/src/lib.rs diff --git a/packages/services/token/ops/exchange/tests/integration.rs b/packages/core/services/token/ops/exchange/tests/integration.rs similarity index 100% rename from packages/services/token/ops/exchange/tests/integration.rs rename to packages/core/services/token/ops/exchange/tests/integration.rs diff --git a/packages/services/token/ops/get/Cargo.toml b/packages/core/services/token/ops/get/Cargo.toml similarity index 100% rename from packages/services/token/ops/get/Cargo.toml rename to packages/core/services/token/ops/get/Cargo.toml diff --git a/packages/services/token/ops/get/README.md b/packages/core/services/token/ops/get/README.md similarity index 100% rename from packages/services/token/ops/get/README.md rename to packages/core/services/token/ops/get/README.md diff --git a/packages/services/token/ops/get/src/lib.rs b/packages/core/services/token/ops/get/src/lib.rs similarity index 100% rename from packages/services/token/ops/get/src/lib.rs rename to packages/core/services/token/ops/get/src/lib.rs diff --git a/packages/services/token/ops/get/tests/integration.rs b/packages/core/services/token/ops/get/tests/integration.rs similarity index 100% rename from packages/services/token/ops/get/tests/integration.rs rename to packages/core/services/token/ops/get/tests/integration.rs diff --git a/packages/services/token/ops/revoke/Cargo.toml b/packages/core/services/token/ops/revoke/Cargo.toml similarity index 100% rename from packages/services/token/ops/revoke/Cargo.toml rename to packages/core/services/token/ops/revoke/Cargo.toml diff --git a/packages/services/token/ops/revoke/README.md b/packages/core/services/token/ops/revoke/README.md similarity index 100% rename from packages/services/token/ops/revoke/README.md rename to packages/core/services/token/ops/revoke/README.md diff --git a/packages/services/token/ops/revoke/src/lib.rs b/packages/core/services/token/ops/revoke/src/lib.rs similarity index 100% rename from packages/services/token/ops/revoke/src/lib.rs rename to packages/core/services/token/ops/revoke/src/lib.rs diff --git a/packages/services/token/ops/revoke/tests/integration.rs b/packages/core/services/token/ops/revoke/tests/integration.rs similarity index 100% rename from packages/services/token/ops/revoke/tests/integration.rs rename to packages/core/services/token/ops/revoke/tests/integration.rs diff --git a/packages/services/token/proto/create.proto b/packages/core/services/token/proto/create.proto similarity index 100% rename from packages/services/token/proto/create.proto rename to packages/core/services/token/proto/create.proto diff --git a/packages/services/token/proto/exchange.proto b/packages/core/services/token/proto/exchange.proto similarity index 100% rename from packages/services/token/proto/exchange.proto rename to packages/core/services/token/proto/exchange.proto diff --git a/packages/services/token/proto/get.proto b/packages/core/services/token/proto/get.proto similarity index 100% rename from packages/services/token/proto/get.proto rename to packages/core/services/token/proto/get.proto diff --git a/packages/services/token/proto/revoke.proto b/packages/core/services/token/proto/revoke.proto similarity index 100% rename from packages/services/token/proto/revoke.proto rename to packages/core/services/token/proto/revoke.proto diff --git a/packages/services/upload/db/upload/migrations/20200101000000_init.down.sql b/packages/core/services/upload/db/upload/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/upload/db/upload/migrations/20200101000000_init.down.sql rename to packages/core/services/upload/db/upload/migrations/20200101000000_init.down.sql diff --git a/packages/services/upload/db/upload/migrations/20200101000000_init.up.sql b/packages/core/services/upload/db/upload/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/upload/db/upload/migrations/20200101000000_init.up.sql rename to packages/core/services/upload/db/upload/migrations/20200101000000_init.up.sql diff --git a/packages/services/upload/db/upload/migrations/20230619215007_add_multipart.down.sql b/packages/core/services/upload/db/upload/migrations/20230619215007_add_multipart.down.sql similarity index 100% rename from packages/services/upload/db/upload/migrations/20230619215007_add_multipart.down.sql rename to packages/core/services/upload/db/upload/migrations/20230619215007_add_multipart.down.sql diff --git a/packages/services/upload/db/upload/migrations/20230619215007_add_multipart.up.sql b/packages/core/services/upload/db/upload/migrations/20230619215007_add_multipart.up.sql similarity index 100% rename from packages/services/upload/db/upload/migrations/20230619215007_add_multipart.up.sql rename to packages/core/services/upload/db/upload/migrations/20230619215007_add_multipart.up.sql diff --git a/packages/services/upload/db/upload/migrations/20230727221220_add_provider.down.sql b/packages/core/services/upload/db/upload/migrations/20230727221220_add_provider.down.sql similarity index 100% rename from packages/services/upload/db/upload/migrations/20230727221220_add_provider.down.sql rename to packages/core/services/upload/db/upload/migrations/20230727221220_add_provider.down.sql diff --git a/packages/services/upload/db/upload/migrations/20230727221220_add_provider.up.sql b/packages/core/services/upload/db/upload/migrations/20230727221220_add_provider.up.sql similarity index 100% rename from packages/services/upload/db/upload/migrations/20230727221220_add_provider.up.sql rename to packages/core/services/upload/db/upload/migrations/20230727221220_add_provider.up.sql diff --git a/packages/services/upload/ops/complete/Cargo.toml b/packages/core/services/upload/ops/complete/Cargo.toml similarity index 100% rename from packages/services/upload/ops/complete/Cargo.toml rename to packages/core/services/upload/ops/complete/Cargo.toml diff --git a/packages/services/upload/ops/complete/README.md b/packages/core/services/upload/ops/complete/README.md similarity index 100% rename from packages/services/upload/ops/complete/README.md rename to packages/core/services/upload/ops/complete/README.md diff --git a/packages/services/upload/ops/complete/src/lib.rs b/packages/core/services/upload/ops/complete/src/lib.rs similarity index 100% rename from packages/services/upload/ops/complete/src/lib.rs rename to packages/core/services/upload/ops/complete/src/lib.rs diff --git a/packages/services/upload/ops/complete/tests/integration.rs b/packages/core/services/upload/ops/complete/tests/integration.rs similarity index 100% rename from packages/services/upload/ops/complete/tests/integration.rs rename to packages/core/services/upload/ops/complete/tests/integration.rs diff --git a/packages/services/upload/ops/complete/tests/static/a.jpeg b/packages/core/services/upload/ops/complete/tests/static/a.jpeg similarity index 100% rename from packages/services/upload/ops/complete/tests/static/a.jpeg rename to packages/core/services/upload/ops/complete/tests/static/a.jpeg diff --git a/packages/services/upload/ops/complete/tests/static/b.jpeg b/packages/core/services/upload/ops/complete/tests/static/b.jpeg similarity index 100% rename from packages/services/upload/ops/complete/tests/static/b.jpeg rename to packages/core/services/upload/ops/complete/tests/static/b.jpeg diff --git a/packages/services/upload/ops/complete/tests/static/c.tiff b/packages/core/services/upload/ops/complete/tests/static/c.tiff similarity index 100% rename from packages/services/upload/ops/complete/tests/static/c.tiff rename to packages/core/services/upload/ops/complete/tests/static/c.tiff diff --git a/packages/services/upload/ops/file-list/Cargo.toml b/packages/core/services/upload/ops/file-list/Cargo.toml similarity index 100% rename from packages/services/upload/ops/file-list/Cargo.toml rename to packages/core/services/upload/ops/file-list/Cargo.toml diff --git a/packages/services/upload/ops/file-list/README.md b/packages/core/services/upload/ops/file-list/README.md similarity index 100% rename from packages/services/upload/ops/file-list/README.md rename to packages/core/services/upload/ops/file-list/README.md diff --git a/packages/services/upload/ops/file-list/src/lib.rs b/packages/core/services/upload/ops/file-list/src/lib.rs similarity index 100% rename from packages/services/upload/ops/file-list/src/lib.rs rename to packages/core/services/upload/ops/file-list/src/lib.rs diff --git a/packages/services/upload/ops/file-list/tests/integration.rs b/packages/core/services/upload/ops/file-list/tests/integration.rs similarity index 100% rename from packages/services/upload/ops/file-list/tests/integration.rs rename to packages/core/services/upload/ops/file-list/tests/integration.rs diff --git a/packages/services/upload/ops/get/Cargo.toml b/packages/core/services/upload/ops/get/Cargo.toml similarity index 100% rename from packages/services/upload/ops/get/Cargo.toml rename to packages/core/services/upload/ops/get/Cargo.toml diff --git a/packages/services/upload/ops/get/README.md b/packages/core/services/upload/ops/get/README.md similarity index 100% rename from packages/services/upload/ops/get/README.md rename to packages/core/services/upload/ops/get/README.md diff --git a/packages/services/upload/ops/get/src/lib.rs b/packages/core/services/upload/ops/get/src/lib.rs similarity index 100% rename from packages/services/upload/ops/get/src/lib.rs rename to packages/core/services/upload/ops/get/src/lib.rs diff --git a/packages/services/upload/ops/get/tests/integration.rs b/packages/core/services/upload/ops/get/tests/integration.rs similarity index 100% rename from packages/services/upload/ops/get/tests/integration.rs rename to packages/core/services/upload/ops/get/tests/integration.rs diff --git a/packages/services/upload/ops/list-for-user/Cargo.toml b/packages/core/services/upload/ops/list-for-user/Cargo.toml similarity index 100% rename from packages/services/upload/ops/list-for-user/Cargo.toml rename to packages/core/services/upload/ops/list-for-user/Cargo.toml diff --git a/packages/services/upload/ops/list-for-user/README.md b/packages/core/services/upload/ops/list-for-user/README.md similarity index 100% rename from packages/services/upload/ops/list-for-user/README.md rename to packages/core/services/upload/ops/list-for-user/README.md diff --git a/packages/services/upload/ops/list-for-user/src/lib.rs b/packages/core/services/upload/ops/list-for-user/src/lib.rs similarity index 100% rename from packages/services/upload/ops/list-for-user/src/lib.rs rename to packages/core/services/upload/ops/list-for-user/src/lib.rs diff --git a/packages/services/upload/ops/list-for-user/tests/integration.rs b/packages/core/services/upload/ops/list-for-user/tests/integration.rs similarity index 100% rename from packages/services/upload/ops/list-for-user/tests/integration.rs rename to packages/core/services/upload/ops/list-for-user/tests/integration.rs diff --git a/packages/services/upload/ops/prepare/Cargo.toml b/packages/core/services/upload/ops/prepare/Cargo.toml similarity index 100% rename from packages/services/upload/ops/prepare/Cargo.toml rename to packages/core/services/upload/ops/prepare/Cargo.toml diff --git a/packages/services/upload/ops/prepare/README.md b/packages/core/services/upload/ops/prepare/README.md similarity index 100% rename from packages/services/upload/ops/prepare/README.md rename to packages/core/services/upload/ops/prepare/README.md diff --git a/packages/services/upload/ops/prepare/src/lib.rs b/packages/core/services/upload/ops/prepare/src/lib.rs similarity index 100% rename from packages/services/upload/ops/prepare/src/lib.rs rename to packages/core/services/upload/ops/prepare/src/lib.rs diff --git a/packages/services/upload/ops/prepare/tests/integration.rs b/packages/core/services/upload/ops/prepare/tests/integration.rs similarity index 100% rename from packages/services/upload/ops/prepare/tests/integration.rs rename to packages/core/services/upload/ops/prepare/tests/integration.rs diff --git a/packages/services/upload/proto/complete.proto b/packages/core/services/upload/proto/complete.proto similarity index 100% rename from packages/services/upload/proto/complete.proto rename to packages/core/services/upload/proto/complete.proto diff --git a/packages/services/upload/proto/delete.proto b/packages/core/services/upload/proto/delete.proto similarity index 100% rename from packages/services/upload/proto/delete.proto rename to packages/core/services/upload/proto/delete.proto diff --git a/packages/services/upload/proto/file-list.proto b/packages/core/services/upload/proto/file-list.proto similarity index 100% rename from packages/services/upload/proto/file-list.proto rename to packages/core/services/upload/proto/file-list.proto diff --git a/packages/services/upload/proto/get.proto b/packages/core/services/upload/proto/get.proto similarity index 100% rename from packages/services/upload/proto/get.proto rename to packages/core/services/upload/proto/get.proto diff --git a/packages/services/upload/proto/list-for-user.proto b/packages/core/services/upload/proto/list-for-user.proto similarity index 100% rename from packages/services/upload/proto/list-for-user.proto rename to packages/core/services/upload/proto/list-for-user.proto diff --git a/packages/services/upload/proto/msg/complete-complete.proto b/packages/core/services/upload/proto/msg/complete-complete.proto similarity index 100% rename from packages/services/upload/proto/msg/complete-complete.proto rename to packages/core/services/upload/proto/msg/complete-complete.proto diff --git a/packages/services/upload/proto/msg/delete-complete.proto b/packages/core/services/upload/proto/msg/delete-complete.proto similarity index 100% rename from packages/services/upload/proto/msg/delete-complete.proto rename to packages/core/services/upload/proto/msg/delete-complete.proto diff --git a/packages/services/upload/proto/msg/delete.proto b/packages/core/services/upload/proto/msg/delete.proto similarity index 100% rename from packages/services/upload/proto/msg/delete.proto rename to packages/core/services/upload/proto/msg/delete.proto diff --git a/packages/services/upload/proto/prepare.proto b/packages/core/services/upload/proto/prepare.proto similarity index 100% rename from packages/services/upload/proto/prepare.proto rename to packages/core/services/upload/proto/prepare.proto diff --git a/packages/services/upload/worker/Cargo.toml b/packages/core/services/upload/worker/Cargo.toml similarity index 100% rename from packages/services/upload/worker/Cargo.toml rename to packages/core/services/upload/worker/Cargo.toml diff --git a/packages/services/upload/worker/src/lib.rs b/packages/core/services/upload/worker/src/lib.rs similarity index 100% rename from packages/services/upload/worker/src/lib.rs rename to packages/core/services/upload/worker/src/lib.rs diff --git a/packages/services/upload/worker/src/workers/delete.rs b/packages/core/services/upload/worker/src/workers/delete.rs similarity index 100% rename from packages/services/upload/worker/src/workers/delete.rs rename to packages/core/services/upload/worker/src/workers/delete.rs diff --git a/packages/services/upload/worker/src/workers/mod.rs b/packages/core/services/upload/worker/src/workers/mod.rs similarity index 100% rename from packages/services/upload/worker/src/workers/mod.rs rename to packages/core/services/upload/worker/src/workers/mod.rs diff --git a/packages/services/upload/worker/tests/delete.rs b/packages/core/services/upload/worker/tests/delete.rs similarity index 100% rename from packages/services/upload/worker/tests/delete.rs rename to packages/core/services/upload/worker/tests/delete.rs diff --git a/packages/services/user-identity/db/user-identity/migrations/20200101000000_init.down.sql b/packages/core/services/user-identity/db/user-identity/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20200101000000_init.down.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20200101000000_init.down.sql diff --git a/packages/services/user-identity/db/user-identity/migrations/20200101000000_init.up.sql b/packages/core/services/user-identity/db/user-identity/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20200101000000_init.up.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20200101000000_init.up.sql diff --git a/packages/services/user-identity/db/user-identity/migrations/20230101105612_index_user.down.sql b/packages/core/services/user-identity/db/user-identity/migrations/20230101105612_index_user.down.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20230101105612_index_user.down.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20230101105612_index_user.down.sql diff --git a/packages/services/user-identity/db/user-identity/migrations/20230101105612_index_user.up.sql b/packages/core/services/user-identity/db/user-identity/migrations/20230101105612_index_user.up.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20230101105612_index_user.up.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20230101105612_index_user.up.sql diff --git a/packages/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.down.sql b/packages/core/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.down.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.down.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.down.sql diff --git a/packages/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.up.sql b/packages/core/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.up.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.up.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20231116005712_access_tokens.up.sql diff --git a/packages/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.down.sql b/packages/core/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.down.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.down.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.down.sql diff --git a/packages/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.up.sql b/packages/core/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.up.sql similarity index 100% rename from packages/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.up.sql rename to packages/core/services/user-identity/db/user-identity/migrations/20241104000750_drop_access_tokens.up.sql diff --git a/packages/services/user-identity/ops/create/Cargo.toml b/packages/core/services/user-identity/ops/create/Cargo.toml similarity index 100% rename from packages/services/user-identity/ops/create/Cargo.toml rename to packages/core/services/user-identity/ops/create/Cargo.toml diff --git a/packages/services/user-identity/ops/create/README.md b/packages/core/services/user-identity/ops/create/README.md similarity index 100% rename from packages/services/user-identity/ops/create/README.md rename to packages/core/services/user-identity/ops/create/README.md diff --git a/packages/services/user-identity/ops/create/src/lib.rs b/packages/core/services/user-identity/ops/create/src/lib.rs similarity index 100% rename from packages/services/user-identity/ops/create/src/lib.rs rename to packages/core/services/user-identity/ops/create/src/lib.rs diff --git a/packages/services/user-identity/ops/create/tests/integration.rs b/packages/core/services/user-identity/ops/create/tests/integration.rs similarity index 100% rename from packages/services/user-identity/ops/create/tests/integration.rs rename to packages/core/services/user-identity/ops/create/tests/integration.rs diff --git a/packages/services/user-identity/ops/delete/Cargo.toml b/packages/core/services/user-identity/ops/delete/Cargo.toml similarity index 100% rename from packages/services/user-identity/ops/delete/Cargo.toml rename to packages/core/services/user-identity/ops/delete/Cargo.toml diff --git a/packages/services/user-identity/ops/delete/README.md b/packages/core/services/user-identity/ops/delete/README.md similarity index 100% rename from packages/services/user-identity/ops/delete/README.md rename to packages/core/services/user-identity/ops/delete/README.md diff --git a/packages/services/user-identity/ops/delete/src/lib.rs b/packages/core/services/user-identity/ops/delete/src/lib.rs similarity index 100% rename from packages/services/user-identity/ops/delete/src/lib.rs rename to packages/core/services/user-identity/ops/delete/src/lib.rs diff --git a/packages/services/user-identity/ops/delete/tests/integration.rs b/packages/core/services/user-identity/ops/delete/tests/integration.rs similarity index 100% rename from packages/services/user-identity/ops/delete/tests/integration.rs rename to packages/core/services/user-identity/ops/delete/tests/integration.rs diff --git a/packages/services/user-identity/ops/get/Cargo.toml b/packages/core/services/user-identity/ops/get/Cargo.toml similarity index 100% rename from packages/services/user-identity/ops/get/Cargo.toml rename to packages/core/services/user-identity/ops/get/Cargo.toml diff --git a/packages/services/user-identity/ops/get/README.md b/packages/core/services/user-identity/ops/get/README.md similarity index 100% rename from packages/services/user-identity/ops/get/README.md rename to packages/core/services/user-identity/ops/get/README.md diff --git a/packages/services/user-identity/ops/get/src/lib.rs b/packages/core/services/user-identity/ops/get/src/lib.rs similarity index 100% rename from packages/services/user-identity/ops/get/src/lib.rs rename to packages/core/services/user-identity/ops/get/src/lib.rs diff --git a/packages/services/user-identity/ops/get/tests/integration.rs b/packages/core/services/user-identity/ops/get/tests/integration.rs similarity index 100% rename from packages/services/user-identity/ops/get/tests/integration.rs rename to packages/core/services/user-identity/ops/get/tests/integration.rs diff --git a/packages/services/user-identity/proto/create.proto b/packages/core/services/user-identity/proto/create.proto similarity index 100% rename from packages/services/user-identity/proto/create.proto rename to packages/core/services/user-identity/proto/create.proto diff --git a/packages/services/user-identity/proto/delete.proto b/packages/core/services/user-identity/proto/delete.proto similarity index 100% rename from packages/services/user-identity/proto/delete.proto rename to packages/core/services/user-identity/proto/delete.proto diff --git a/packages/services/user-identity/proto/get.proto b/packages/core/services/user-identity/proto/get.proto similarity index 100% rename from packages/services/user-identity/proto/get.proto rename to packages/core/services/user-identity/proto/get.proto diff --git a/packages/services/user-identity/proto/msg/create-complete.proto b/packages/core/services/user-identity/proto/msg/create-complete.proto similarity index 100% rename from packages/services/user-identity/proto/msg/create-complete.proto rename to packages/core/services/user-identity/proto/msg/create-complete.proto diff --git a/packages/services/user/Cargo.toml b/packages/core/services/user/Cargo.toml similarity index 100% rename from packages/services/user/Cargo.toml rename to packages/core/services/user/Cargo.toml diff --git a/packages/services/user/db/user/migrations/20200101000000_init.down.sql b/packages/core/services/user/db/user/migrations/20200101000000_init.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20200101000000_init.down.sql rename to packages/core/services/user/db/user/migrations/20200101000000_init.down.sql diff --git a/packages/services/user/db/user/migrations/20200101000000_init.up.sql b/packages/core/services/user/db/user/migrations/20200101000000_init.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20200101000000_init.up.sql rename to packages/core/services/user/db/user/migrations/20200101000000_init.up.sql diff --git a/packages/services/user/db/user/migrations/20210713110239_add_bio.down.sql b/packages/core/services/user/db/user/migrations/20210713110239_add_bio.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210713110239_add_bio.down.sql rename to packages/core/services/user/db/user/migrations/20210713110239_add_bio.down.sql diff --git a/packages/services/user/db/user/migrations/20210713110239_add_bio.up.sql b/packages/core/services/user/db/user/migrations/20210713110239_add_bio.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210713110239_add_bio.up.sql rename to packages/core/services/user/db/user/migrations/20210713110239_add_bio.up.sql diff --git a/packages/services/user/db/user/migrations/20210716123250_add_profile_id.down.sql b/packages/core/services/user/db/user/migrations/20210716123250_add_profile_id.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210716123250_add_profile_id.down.sql rename to packages/core/services/user/db/user/migrations/20210716123250_add_profile_id.down.sql diff --git a/packages/services/user/db/user/migrations/20210716123250_add_profile_id.up.sql b/packages/core/services/user/db/user/migrations/20210716123250_add_profile_id.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210716123250_add_profile_id.up.sql rename to packages/core/services/user/db/user/migrations/20210716123250_add_profile_id.up.sql diff --git a/packages/services/user/db/user/migrations/20210805142659_remove_presences_table.down.sql b/packages/core/services/user/db/user/migrations/20210805142659_remove_presences_table.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210805142659_remove_presences_table.down.sql rename to packages/core/services/user/db/user/migrations/20210805142659_remove_presences_table.down.sql diff --git a/packages/services/user/db/user/migrations/20210805142659_remove_presences_table.up.sql b/packages/core/services/user/db/user/migrations/20210805142659_remove_presences_table.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210805142659_remove_presences_table.up.sql rename to packages/core/services/user/db/user/migrations/20210805142659_remove_presences_table.up.sql diff --git a/packages/services/user/db/user/migrations/20210811031638_user_sessions.down.sql b/packages/core/services/user/db/user/migrations/20210811031638_user_sessions.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210811031638_user_sessions.down.sql rename to packages/core/services/user/db/user/migrations/20210811031638_user_sessions.down.sql diff --git a/packages/services/user/db/user/migrations/20210811031638_user_sessions.up.sql b/packages/core/services/user/db/user/migrations/20210811031638_user_sessions.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210811031638_user_sessions.up.sql rename to packages/core/services/user/db/user/migrations/20210811031638_user_sessions.up.sql diff --git a/packages/services/user/db/user/migrations/20210828151445_add_admin.down.sql b/packages/core/services/user/db/user/migrations/20210828151445_add_admin.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210828151445_add_admin.down.sql rename to packages/core/services/user/db/user/migrations/20210828151445_add_admin.down.sql diff --git a/packages/services/user/db/user/migrations/20210828151445_add_admin.up.sql b/packages/core/services/user/db/user/migrations/20210828151445_add_admin.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210828151445_add_admin.up.sql rename to packages/core/services/user/db/user/migrations/20210828151445_add_admin.up.sql diff --git a/packages/services/user/db/user/migrations/20210915104254_depreciate_profile_id.down.sql b/packages/core/services/user/db/user/migrations/20210915104254_depreciate_profile_id.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210915104254_depreciate_profile_id.down.sql rename to packages/core/services/user/db/user/migrations/20210915104254_depreciate_profile_id.down.sql diff --git a/packages/services/user/db/user/migrations/20210915104254_depreciate_profile_id.up.sql b/packages/core/services/user/db/user/migrations/20210915104254_depreciate_profile_id.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210915104254_depreciate_profile_id.up.sql rename to packages/core/services/user/db/user/migrations/20210915104254_depreciate_profile_id.up.sql diff --git a/packages/services/user/db/user/migrations/20210915195605_convert_profile_id.down.sql b/packages/core/services/user/db/user/migrations/20210915195605_convert_profile_id.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210915195605_convert_profile_id.down.sql rename to packages/core/services/user/db/user/migrations/20210915195605_convert_profile_id.down.sql diff --git a/packages/services/user/db/user/migrations/20210915195605_convert_profile_id.up.sql b/packages/core/services/user/db/user/migrations/20210915195605_convert_profile_id.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210915195605_convert_profile_id.up.sql rename to packages/core/services/user/db/user/migrations/20210915195605_convert_profile_id.up.sql diff --git a/packages/services/user/db/user/migrations/20210915195624_remove_profile_id_old.down.sql b/packages/core/services/user/db/user/migrations/20210915195624_remove_profile_id_old.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210915195624_remove_profile_id_old.down.sql rename to packages/core/services/user/db/user/migrations/20210915195624_remove_profile_id_old.down.sql diff --git a/packages/services/user/db/user/migrations/20210915195624_remove_profile_id_old.up.sql b/packages/core/services/user/db/user/migrations/20210915195624_remove_profile_id_old.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20210915195624_remove_profile_id_old.up.sql rename to packages/core/services/user/db/user/migrations/20210915195624_remove_profile_id_old.up.sql diff --git a/packages/services/user/db/user/migrations/20230101103508_remove_unused_index.down.sql b/packages/core/services/user/db/user/migrations/20230101103508_remove_unused_index.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230101103508_remove_unused_index.down.sql rename to packages/core/services/user/db/user/migrations/20230101103508_remove_unused_index.down.sql diff --git a/packages/services/user/db/user/migrations/20230101103508_remove_unused_index.up.sql b/packages/core/services/user/db/user/migrations/20230101103508_remove_unused_index.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230101103508_remove_unused_index.up.sql rename to packages/core/services/user/db/user/migrations/20230101103508_remove_unused_index.up.sql diff --git a/packages/services/user/db/user/migrations/20230103081015_deletion.down.sql b/packages/core/services/user/db/user/migrations/20230103081015_deletion.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230103081015_deletion.down.sql rename to packages/core/services/user/db/user/migrations/20230103081015_deletion.down.sql diff --git a/packages/services/user/db/user/migrations/20230103081015_deletion.up.sql b/packages/core/services/user/db/user/migrations/20230103081015_deletion.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230103081015_deletion.up.sql rename to packages/core/services/user/db/user/migrations/20230103081015_deletion.up.sql diff --git a/packages/services/user/db/user/migrations/20230515194135_search.down.sql b/packages/core/services/user/db/user/migrations/20230515194135_search.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230515194135_search.down.sql rename to packages/core/services/user/db/user/migrations/20230515194135_search.down.sql diff --git a/packages/services/user/db/user/migrations/20230515194135_search.up.sql b/packages/core/services/user/db/user/migrations/20230515194135_search.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230515194135_search.up.sql rename to packages/core/services/user/db/user/migrations/20230515194135_search.up.sql diff --git a/packages/services/user/db/user/migrations/20230515201935_search-idx.down.sql b/packages/core/services/user/db/user/migrations/20230515201935_search-idx.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230515201935_search-idx.down.sql rename to packages/core/services/user/db/user/migrations/20230515201935_search-idx.down.sql diff --git a/packages/services/user/db/user/migrations/20230515201935_search-idx.up.sql b/packages/core/services/user/db/user/migrations/20230515201935_search-idx.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230515201935_search-idx.up.sql rename to packages/core/services/user/db/user/migrations/20230515201935_search-idx.up.sql diff --git a/packages/services/user/db/user/migrations/20230521194712_add_update_ts.down.sql b/packages/core/services/user/db/user/migrations/20230521194712_add_update_ts.down.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230521194712_add_update_ts.down.sql rename to packages/core/services/user/db/user/migrations/20230521194712_add_update_ts.down.sql diff --git a/packages/services/user/db/user/migrations/20230521194712_add_update_ts.up.sql b/packages/core/services/user/db/user/migrations/20230521194712_add_update_ts.up.sql similarity index 100% rename from packages/services/user/db/user/migrations/20230521194712_add_update_ts.up.sql rename to packages/core/services/user/db/user/migrations/20230521194712_add_update_ts.up.sql diff --git a/packages/services/user/ops/avatar-upload-complete/Cargo.toml b/packages/core/services/user/ops/avatar-upload-complete/Cargo.toml similarity index 100% rename from packages/services/user/ops/avatar-upload-complete/Cargo.toml rename to packages/core/services/user/ops/avatar-upload-complete/Cargo.toml diff --git a/packages/services/user/ops/avatar-upload-complete/README.md b/packages/core/services/user/ops/avatar-upload-complete/README.md similarity index 100% rename from packages/services/user/ops/avatar-upload-complete/README.md rename to packages/core/services/user/ops/avatar-upload-complete/README.md diff --git a/packages/services/user/ops/avatar-upload-complete/src/lib.rs b/packages/core/services/user/ops/avatar-upload-complete/src/lib.rs similarity index 100% rename from packages/services/user/ops/avatar-upload-complete/src/lib.rs rename to packages/core/services/user/ops/avatar-upload-complete/src/lib.rs diff --git a/packages/services/user/ops/avatar-upload-complete/tests/integration.rs b/packages/core/services/user/ops/avatar-upload-complete/tests/integration.rs similarity index 100% rename from packages/services/user/ops/avatar-upload-complete/tests/integration.rs rename to packages/core/services/user/ops/avatar-upload-complete/tests/integration.rs diff --git a/packages/services/user/ops/get/Cargo.toml b/packages/core/services/user/ops/get/Cargo.toml similarity index 100% rename from packages/services/user/ops/get/Cargo.toml rename to packages/core/services/user/ops/get/Cargo.toml diff --git a/packages/services/user/ops/get/src/lib.rs b/packages/core/services/user/ops/get/src/lib.rs similarity index 100% rename from packages/services/user/ops/get/src/lib.rs rename to packages/core/services/user/ops/get/src/lib.rs diff --git a/packages/services/user/ops/get/tests/integration.rs b/packages/core/services/user/ops/get/tests/integration.rs similarity index 100% rename from packages/services/user/ops/get/tests/integration.rs rename to packages/core/services/user/ops/get/tests/integration.rs diff --git a/packages/services/user/ops/pending-delete-toggle/Cargo.toml b/packages/core/services/user/ops/pending-delete-toggle/Cargo.toml similarity index 100% rename from packages/services/user/ops/pending-delete-toggle/Cargo.toml rename to packages/core/services/user/ops/pending-delete-toggle/Cargo.toml diff --git a/packages/services/user/ops/pending-delete-toggle/src/lib.rs b/packages/core/services/user/ops/pending-delete-toggle/src/lib.rs similarity index 100% rename from packages/services/user/ops/pending-delete-toggle/src/lib.rs rename to packages/core/services/user/ops/pending-delete-toggle/src/lib.rs diff --git a/packages/services/user/ops/pending-delete-toggle/tests/integration.rs b/packages/core/services/user/ops/pending-delete-toggle/tests/integration.rs similarity index 100% rename from packages/services/user/ops/pending-delete-toggle/tests/integration.rs rename to packages/core/services/user/ops/pending-delete-toggle/tests/integration.rs diff --git a/packages/services/user/ops/profile-validate/Cargo.toml b/packages/core/services/user/ops/profile-validate/Cargo.toml similarity index 100% rename from packages/services/user/ops/profile-validate/Cargo.toml rename to packages/core/services/user/ops/profile-validate/Cargo.toml diff --git a/packages/services/user/ops/profile-validate/README.md b/packages/core/services/user/ops/profile-validate/README.md similarity index 100% rename from packages/services/user/ops/profile-validate/README.md rename to packages/core/services/user/ops/profile-validate/README.md diff --git a/packages/services/user/ops/profile-validate/src/lib.rs b/packages/core/services/user/ops/profile-validate/src/lib.rs similarity index 100% rename from packages/services/user/ops/profile-validate/src/lib.rs rename to packages/core/services/user/ops/profile-validate/src/lib.rs diff --git a/packages/services/user/ops/profile-validate/tests/integration.rs b/packages/core/services/user/ops/profile-validate/tests/integration.rs similarity index 100% rename from packages/services/user/ops/profile-validate/tests/integration.rs rename to packages/core/services/user/ops/profile-validate/tests/integration.rs diff --git a/packages/services/user/ops/resolve-email/Cargo.toml b/packages/core/services/user/ops/resolve-email/Cargo.toml similarity index 100% rename from packages/services/user/ops/resolve-email/Cargo.toml rename to packages/core/services/user/ops/resolve-email/Cargo.toml diff --git a/packages/services/user/ops/resolve-email/README.md b/packages/core/services/user/ops/resolve-email/README.md similarity index 100% rename from packages/services/user/ops/resolve-email/README.md rename to packages/core/services/user/ops/resolve-email/README.md diff --git a/packages/services/user/ops/resolve-email/src/lib.rs b/packages/core/services/user/ops/resolve-email/src/lib.rs similarity index 100% rename from packages/services/user/ops/resolve-email/src/lib.rs rename to packages/core/services/user/ops/resolve-email/src/lib.rs diff --git a/packages/services/user/ops/resolve-email/tests/integration.rs b/packages/core/services/user/ops/resolve-email/tests/integration.rs similarity index 100% rename from packages/services/user/ops/resolve-email/tests/integration.rs rename to packages/core/services/user/ops/resolve-email/tests/integration.rs diff --git a/packages/services/user/ops/team-list/Cargo.toml b/packages/core/services/user/ops/team-list/Cargo.toml similarity index 100% rename from packages/services/user/ops/team-list/Cargo.toml rename to packages/core/services/user/ops/team-list/Cargo.toml diff --git a/packages/services/user/ops/team-list/src/lib.rs b/packages/core/services/user/ops/team-list/src/lib.rs similarity index 100% rename from packages/services/user/ops/team-list/src/lib.rs rename to packages/core/services/user/ops/team-list/src/lib.rs diff --git a/packages/services/user/ops/team-list/tests/integration.rs b/packages/core/services/user/ops/team-list/tests/integration.rs similarity index 100% rename from packages/services/user/ops/team-list/tests/integration.rs rename to packages/core/services/user/ops/team-list/tests/integration.rs diff --git a/packages/services/user/ops/token-create/Cargo.toml b/packages/core/services/user/ops/token-create/Cargo.toml similarity index 100% rename from packages/services/user/ops/token-create/Cargo.toml rename to packages/core/services/user/ops/token-create/Cargo.toml diff --git a/packages/services/user/ops/token-create/README.md b/packages/core/services/user/ops/token-create/README.md similarity index 100% rename from packages/services/user/ops/token-create/README.md rename to packages/core/services/user/ops/token-create/README.md diff --git a/packages/services/user/ops/token-create/src/lib.rs b/packages/core/services/user/ops/token-create/src/lib.rs similarity index 100% rename from packages/services/user/ops/token-create/src/lib.rs rename to packages/core/services/user/ops/token-create/src/lib.rs diff --git a/packages/services/user/ops/token-create/tests/integration.rs b/packages/core/services/user/ops/token-create/tests/integration.rs similarity index 100% rename from packages/services/user/ops/token-create/tests/integration.rs rename to packages/core/services/user/ops/token-create/tests/integration.rs diff --git a/packages/services/user/proto/avatar-upload-complete.proto b/packages/core/services/user/proto/avatar-upload-complete.proto similarity index 100% rename from packages/services/user/proto/avatar-upload-complete.proto rename to packages/core/services/user/proto/avatar-upload-complete.proto diff --git a/packages/services/user/proto/get.proto b/packages/core/services/user/proto/get.proto similarity index 100% rename from packages/services/user/proto/get.proto rename to packages/core/services/user/proto/get.proto diff --git a/packages/services/user/proto/msg/admin-set.proto b/packages/core/services/user/proto/msg/admin-set.proto similarity index 100% rename from packages/services/user/proto/msg/admin-set.proto rename to packages/core/services/user/proto/msg/admin-set.proto diff --git a/packages/services/user/proto/msg/create-complete.proto b/packages/core/services/user/proto/msg/create-complete.proto similarity index 100% rename from packages/services/user/proto/msg/create-complete.proto rename to packages/core/services/user/proto/msg/create-complete.proto diff --git a/packages/services/user/proto/msg/create.proto b/packages/core/services/user/proto/msg/create.proto similarity index 100% rename from packages/services/user/proto/msg/create.proto rename to packages/core/services/user/proto/msg/create.proto diff --git a/packages/services/user/proto/msg/delete-complete.proto b/packages/core/services/user/proto/msg/delete-complete.proto similarity index 100% rename from packages/services/user/proto/msg/delete-complete.proto rename to packages/core/services/user/proto/msg/delete-complete.proto diff --git a/packages/services/user/proto/msg/delete.proto b/packages/core/services/user/proto/msg/delete.proto similarity index 100% rename from packages/services/user/proto/msg/delete.proto rename to packages/core/services/user/proto/msg/delete.proto diff --git a/packages/services/user/proto/msg/event.proto b/packages/core/services/user/proto/msg/event.proto similarity index 100% rename from packages/services/user/proto/msg/event.proto rename to packages/core/services/user/proto/msg/event.proto diff --git a/packages/services/user/proto/msg/game-update.proto b/packages/core/services/user/proto/msg/game-update.proto similarity index 100% rename from packages/services/user/proto/msg/game-update.proto rename to packages/core/services/user/proto/msg/game-update.proto diff --git a/packages/services/user/proto/msg/mm-lobby-join.proto b/packages/core/services/user/proto/msg/mm-lobby-join.proto similarity index 100% rename from packages/services/user/proto/msg/mm-lobby-join.proto rename to packages/core/services/user/proto/msg/mm-lobby-join.proto diff --git a/packages/services/user/proto/msg/profile-set.proto b/packages/core/services/user/proto/msg/profile-set.proto similarity index 100% rename from packages/services/user/proto/msg/profile-set.proto rename to packages/core/services/user/proto/msg/profile-set.proto diff --git a/packages/services/user/proto/msg/search-update.proto b/packages/core/services/user/proto/msg/search-update.proto similarity index 100% rename from packages/services/user/proto/msg/search-update.proto rename to packages/core/services/user/proto/msg/search-update.proto diff --git a/packages/services/user/proto/msg/update.proto b/packages/core/services/user/proto/msg/update.proto similarity index 100% rename from packages/services/user/proto/msg/update.proto rename to packages/core/services/user/proto/msg/update.proto diff --git a/packages/services/user/proto/msg/updated.proto b/packages/core/services/user/proto/msg/updated.proto similarity index 100% rename from packages/services/user/proto/msg/updated.proto rename to packages/core/services/user/proto/msg/updated.proto diff --git a/packages/services/user/proto/mutual-friend-list.proto b/packages/core/services/user/proto/mutual-friend-list.proto similarity index 100% rename from packages/services/user/proto/mutual-friend-list.proto rename to packages/core/services/user/proto/mutual-friend-list.proto diff --git a/packages/services/user/proto/my-test.proto b/packages/core/services/user/proto/my-test.proto similarity index 100% rename from packages/services/user/proto/my-test.proto rename to packages/core/services/user/proto/my-test.proto diff --git a/packages/services/user/proto/pending-delete-toggle.proto b/packages/core/services/user/proto/pending-delete-toggle.proto similarity index 100% rename from packages/services/user/proto/pending-delete-toggle.proto rename to packages/core/services/user/proto/pending-delete-toggle.proto diff --git a/packages/services/user/proto/profile-validate.proto b/packages/core/services/user/proto/profile-validate.proto similarity index 100% rename from packages/services/user/proto/profile-validate.proto rename to packages/core/services/user/proto/profile-validate.proto diff --git a/packages/services/user/proto/resolve-email.proto b/packages/core/services/user/proto/resolve-email.proto similarity index 100% rename from packages/services/user/proto/resolve-email.proto rename to packages/core/services/user/proto/resolve-email.proto diff --git a/packages/services/user/proto/search.proto b/packages/core/services/user/proto/search.proto similarity index 100% rename from packages/services/user/proto/search.proto rename to packages/core/services/user/proto/search.proto diff --git a/packages/services/user/proto/team-list.proto b/packages/core/services/user/proto/team-list.proto similarity index 100% rename from packages/services/user/proto/team-list.proto rename to packages/core/services/user/proto/team-list.proto diff --git a/packages/services/user/proto/token-create.proto b/packages/core/services/user/proto/token-create.proto similarity index 100% rename from packages/services/user/proto/token-create.proto rename to packages/core/services/user/proto/token-create.proto diff --git a/packages/services/user/src/lib.rs b/packages/core/services/user/src/lib.rs similarity index 100% rename from packages/services/user/src/lib.rs rename to packages/core/services/user/src/lib.rs diff --git a/packages/services/user/src/ops/mod.rs b/packages/core/services/user/src/ops/mod.rs similarity index 100% rename from packages/services/user/src/ops/mod.rs rename to packages/core/services/user/src/ops/mod.rs diff --git a/packages/services/user/src/ops/resolve_display_name.rs b/packages/core/services/user/src/ops/resolve_display_name.rs similarity index 100% rename from packages/services/user/src/ops/resolve_display_name.rs rename to packages/core/services/user/src/ops/resolve_display_name.rs diff --git a/packages/services/user/standalone/delete-pending/Cargo.toml b/packages/core/services/user/standalone/delete-pending/Cargo.toml similarity index 100% rename from packages/services/user/standalone/delete-pending/Cargo.toml rename to packages/core/services/user/standalone/delete-pending/Cargo.toml diff --git a/packages/services/user/standalone/delete-pending/README.md b/packages/core/services/user/standalone/delete-pending/README.md similarity index 100% rename from packages/services/user/standalone/delete-pending/README.md rename to packages/core/services/user/standalone/delete-pending/README.md diff --git a/packages/services/user/standalone/delete-pending/src/lib.rs b/packages/core/services/user/standalone/delete-pending/src/lib.rs similarity index 100% rename from packages/services/user/standalone/delete-pending/src/lib.rs rename to packages/core/services/user/standalone/delete-pending/src/lib.rs diff --git a/packages/services/user/standalone/delete-pending/tests/integration.rs b/packages/core/services/user/standalone/delete-pending/tests/integration.rs similarity index 100% rename from packages/services/user/standalone/delete-pending/tests/integration.rs rename to packages/core/services/user/standalone/delete-pending/tests/integration.rs diff --git a/packages/services/user/worker/Cargo.toml b/packages/core/services/user/worker/Cargo.toml similarity index 100% rename from packages/services/user/worker/Cargo.toml rename to packages/core/services/user/worker/Cargo.toml diff --git a/packages/services/user/worker/adjectives.txt b/packages/core/services/user/worker/adjectives.txt similarity index 100% rename from packages/services/user/worker/adjectives.txt rename to packages/core/services/user/worker/adjectives.txt diff --git a/packages/services/user/worker/src/lib.rs b/packages/core/services/user/worker/src/lib.rs similarity index 100% rename from packages/services/user/worker/src/lib.rs rename to packages/core/services/user/worker/src/lib.rs diff --git a/packages/services/user/worker/src/workers/admin_set.rs b/packages/core/services/user/worker/src/workers/admin_set.rs similarity index 100% rename from packages/services/user/worker/src/workers/admin_set.rs rename to packages/core/services/user/worker/src/workers/admin_set.rs diff --git a/packages/services/user/worker/src/workers/create.rs b/packages/core/services/user/worker/src/workers/create.rs similarity index 100% rename from packages/services/user/worker/src/workers/create.rs rename to packages/core/services/user/worker/src/workers/create.rs diff --git a/packages/services/user/worker/src/workers/delete.rs b/packages/core/services/user/worker/src/workers/delete.rs similarity index 100% rename from packages/services/user/worker/src/workers/delete.rs rename to packages/core/services/user/worker/src/workers/delete.rs diff --git a/packages/services/user/worker/src/workers/event_party_member_update.rs b/packages/core/services/user/worker/src/workers/event_party_member_update.rs similarity index 100% rename from packages/services/user/worker/src/workers/event_party_member_update.rs rename to packages/core/services/user/worker/src/workers/event_party_member_update.rs diff --git a/packages/services/user/worker/src/workers/event_party_update.rs b/packages/core/services/user/worker/src/workers/event_party_update.rs similarity index 100% rename from packages/services/user/worker/src/workers/event_party_update.rs rename to packages/core/services/user/worker/src/workers/event_party_update.rs diff --git a/packages/services/user/worker/src/workers/event_team_member_remove.rs b/packages/core/services/user/worker/src/workers/event_team_member_remove.rs similarity index 100% rename from packages/services/user/worker/src/workers/event_team_member_remove.rs rename to packages/core/services/user/worker/src/workers/event_team_member_remove.rs diff --git a/packages/services/user/worker/src/workers/event_user_update.rs b/packages/core/services/user/worker/src/workers/event_user_update.rs similarity index 100% rename from packages/services/user/worker/src/workers/event_user_update.rs rename to packages/core/services/user/worker/src/workers/event_user_update.rs diff --git a/packages/services/user/worker/src/workers/game_update.rs b/packages/core/services/user/worker/src/workers/game_update.rs similarity index 100% rename from packages/services/user/worker/src/workers/game_update.rs rename to packages/core/services/user/worker/src/workers/game_update.rs diff --git a/packages/services/user/worker/src/workers/mod.rs b/packages/core/services/user/worker/src/workers/mod.rs similarity index 100% rename from packages/services/user/worker/src/workers/mod.rs rename to packages/core/services/user/worker/src/workers/mod.rs diff --git a/packages/services/user/worker/src/workers/profile_set.rs b/packages/core/services/user/worker/src/workers/profile_set.rs similarity index 100% rename from packages/services/user/worker/src/workers/profile_set.rs rename to packages/core/services/user/worker/src/workers/profile_set.rs diff --git a/packages/services/user/worker/src/workers/updated_party_update.rs b/packages/core/services/user/worker/src/workers/updated_party_update.rs similarity index 100% rename from packages/services/user/worker/src/workers/updated_party_update.rs rename to packages/core/services/user/worker/src/workers/updated_party_update.rs diff --git a/packages/services/user/worker/src/workers/updated_user_update.rs b/packages/core/services/user/worker/src/workers/updated_user_update.rs similarity index 100% rename from packages/services/user/worker/src/workers/updated_user_update.rs rename to packages/core/services/user/worker/src/workers/updated_user_update.rs diff --git a/packages/services/user/worker/tests/admin_set.rs b/packages/core/services/user/worker/tests/admin_set.rs similarity index 100% rename from packages/services/user/worker/tests/admin_set.rs rename to packages/core/services/user/worker/tests/admin_set.rs diff --git a/packages/services/user/worker/tests/create.rs b/packages/core/services/user/worker/tests/create.rs similarity index 100% rename from packages/services/user/worker/tests/create.rs rename to packages/core/services/user/worker/tests/create.rs diff --git a/packages/services/user/worker/tests/delete.rs b/packages/core/services/user/worker/tests/delete.rs similarity index 100% rename from packages/services/user/worker/tests/delete.rs rename to packages/core/services/user/worker/tests/delete.rs diff --git a/packages/services/user/worker/tests/event_party_member_update.rs b/packages/core/services/user/worker/tests/event_party_member_update.rs similarity index 100% rename from packages/services/user/worker/tests/event_party_member_update.rs rename to packages/core/services/user/worker/tests/event_party_member_update.rs diff --git a/packages/services/user/worker/tests/event_party_update.rs b/packages/core/services/user/worker/tests/event_party_update.rs similarity index 100% rename from packages/services/user/worker/tests/event_party_update.rs rename to packages/core/services/user/worker/tests/event_party_update.rs diff --git a/packages/services/user/worker/tests/event_team_member_remove.rs b/packages/core/services/user/worker/tests/event_team_member_remove.rs similarity index 100% rename from packages/services/user/worker/tests/event_team_member_remove.rs rename to packages/core/services/user/worker/tests/event_team_member_remove.rs diff --git a/packages/services/user/worker/tests/event_user_mm_lobby_join.rs b/packages/core/services/user/worker/tests/event_user_mm_lobby_join.rs similarity index 100% rename from packages/services/user/worker/tests/event_user_mm_lobby_join.rs rename to packages/core/services/user/worker/tests/event_user_mm_lobby_join.rs diff --git a/packages/services/user/worker/tests/event_user_presence_update.rs b/packages/core/services/user/worker/tests/event_user_presence_update.rs similarity index 100% rename from packages/services/user/worker/tests/event_user_presence_update.rs rename to packages/core/services/user/worker/tests/event_user_presence_update.rs diff --git a/packages/services/user/worker/tests/event_user_update.rs b/packages/core/services/user/worker/tests/event_user_update.rs similarity index 100% rename from packages/services/user/worker/tests/event_user_update.rs rename to packages/core/services/user/worker/tests/event_user_update.rs diff --git a/packages/services/user/worker/tests/profile_set.rs b/packages/core/services/user/worker/tests/profile_set.rs similarity index 100% rename from packages/services/user/worker/tests/profile_set.rs rename to packages/core/services/user/worker/tests/profile_set.rs diff --git a/packages/services/user/worker/tests/search_update.rs b/packages/core/services/user/worker/tests/search_update.rs similarity index 100% rename from packages/services/user/worker/tests/search_update.rs rename to packages/core/services/user/worker/tests/search_update.rs diff --git a/packages/services/user/worker/tests/search_update_user_create_complete.rs b/packages/core/services/user/worker/tests/search_update_user_create_complete.rs similarity index 100% rename from packages/services/user/worker/tests/search_update_user_create_complete.rs rename to packages/core/services/user/worker/tests/search_update_user_create_complete.rs diff --git a/packages/services/user/worker/tests/search_update_user_follow_create.rs b/packages/core/services/user/worker/tests/search_update_user_follow_create.rs similarity index 100% rename from packages/services/user/worker/tests/search_update_user_follow_create.rs rename to packages/core/services/user/worker/tests/search_update_user_follow_create.rs diff --git a/packages/services/user/worker/tests/search_update_user_update.rs b/packages/core/services/user/worker/tests/search_update_user_update.rs similarity index 100% rename from packages/services/user/worker/tests/search_update_user_update.rs rename to packages/core/services/user/worker/tests/search_update_user_update.rs diff --git a/packages/services/user/worker/tests/updated_party_update.rs b/packages/core/services/user/worker/tests/updated_party_update.rs similarity index 100% rename from packages/services/user/worker/tests/updated_party_update.rs rename to packages/core/services/user/worker/tests/updated_party_update.rs diff --git a/packages/services/user/worker/tests/updated_user_follow_create.rs b/packages/core/services/user/worker/tests/updated_user_follow_create.rs similarity index 100% rename from packages/services/user/worker/tests/updated_user_follow_create.rs rename to packages/core/services/user/worker/tests/updated_user_follow_create.rs diff --git a/packages/services/user/worker/tests/updated_user_follow_delete.rs b/packages/core/services/user/worker/tests/updated_user_follow_delete.rs similarity index 100% rename from packages/services/user/worker/tests/updated_user_follow_delete.rs rename to packages/core/services/user/worker/tests/updated_user_follow_delete.rs diff --git a/packages/services/user/worker/tests/updated_user_presence_update.rs b/packages/core/services/user/worker/tests/updated_user_presence_update.rs similarity index 100% rename from packages/services/user/worker/tests/updated_user_presence_update.rs rename to packages/core/services/user/worker/tests/updated_user_presence_update.rs diff --git a/packages/services/user/worker/tests/updated_user_update.rs b/packages/core/services/user/worker/tests/updated_user_update.rs similarity index 100% rename from packages/services/user/worker/tests/updated_user_update.rs rename to packages/core/services/user/worker/tests/updated_user_update.rs diff --git a/packages/services/workflow/db/workflow/migrations/20240430191643_init.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240430191643_init.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240430191643_init.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240430191643_init.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240430191643_init.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240430191643_init.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240430191643_init.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240430191643_init.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240620200019_add_create_ts.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240626202744_add_tags.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240626202744_add_tags.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240626202744_add_tags.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240626202744_add_tags.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240626202744_add_tags.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240626202744_add_tags.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240626202744_add_tags.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240626202744_add_tags.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240628222206_signal_ack.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240628222206_signal_ack.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240628222206_signal_ack.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240628222206_signal_ack.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240628222206_signal_ack.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240628222206_signal_ack.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240628222206_signal_ack.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240628222206_signal_ack.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240711213725_signal_msg_events.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240712221043_fix_signals_idx.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240722174355_loops.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240722174355_loops.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240722174355_loops.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240722174355_loops.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240722174355_loops.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240722174355_loops.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240722174355_loops.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240722174355_loops.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240809005851_add_idx.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240809005851_add_idx.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240809005851_add_idx.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240809005851_add_idx.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240809005851_add_idx.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240809005851_add_idx.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240809005851_add_idx.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240809005851_add_idx.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240809230231_fix_loop_idx.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240816203112_add_sleep.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240816203112_add_sleep.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240816203112_add_sleep.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240816203112_add_sleep.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240816203112_add_sleep.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240816203112_add_sleep.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240816203112_add_sleep.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240816203112_add_sleep.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240905192157_manual_ack.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240905192157_manual_ack.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240905192157_manual_ack.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240905192157_manual_ack.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240905192157_manual_ack.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240905192157_manual_ack.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240905192157_manual_ack.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240905192157_manual_ack.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.down.sql b/packages/core/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.up.sql b/packages/core/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20240918235927_add_sleep_state.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.down.sql b/packages/core/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.up.sql b/packages/core/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20241001011424_activity_err_index.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241002185225_update_idx.down.sql b/packages/core/services/workflow/db/workflow/migrations/20241002185225_update_idx.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241002185225_update_idx.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20241002185225_update_idx.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241002185225_update_idx.up.sql b/packages/core/services/workflow/db/workflow/migrations/20241002185225_update_idx.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241002185225_update_idx.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20241002185225_update_idx.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241007201625_versioning.down.sql b/packages/core/services/workflow/db/workflow/migrations/20241007201625_versioning.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241007201625_versioning.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20241007201625_versioning.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241007201625_versioning.up.sql b/packages/core/services/workflow/db/workflow/migrations/20241007201625_versioning.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241007201625_versioning.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20241007201625_versioning.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.down.sql b/packages/core/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.up.sql b/packages/core/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20241007222710_versioning_pt2.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.down.sql b/packages/core/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.up.sql b/packages/core/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20241021182713_clean_up_indexes.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.down.sql b/packages/core/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.up.sql b/packages/core/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20241210032422_add_version_check_version.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.down.sql b/packages/core/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.up.sql b/packages/core/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20250108191734_delete_unused_idx.up.sql diff --git a/packages/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.down.sql b/packages/core/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.down.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.down.sql rename to packages/core/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.down.sql diff --git a/packages/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.up.sql b/packages/core/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.up.sql similarity index 100% rename from packages/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.up.sql rename to packages/core/services/workflow/db/workflow/migrations/20250124210139_add_loop_state.up.sql diff --git a/packages/core/services/workflow/db/workflow/migrations/20250131232545_add_wf_gc_and_metrics.down.sql b/packages/core/services/workflow/db/workflow/migrations/20250131232545_add_wf_gc_and_metrics.down.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/core/services/workflow/db/workflow/migrations/20250131232545_add_wf_gc_and_metrics.up.sql b/packages/core/services/workflow/db/workflow/migrations/20250131232545_add_wf_gc_and_metrics.up.sql new file mode 100644 index 0000000000..5c9967d078 --- /dev/null +++ b/packages/core/services/workflow/db/workflow/migrations/20250131232545_add_wf_gc_and_metrics.up.sql @@ -0,0 +1,13 @@ +CREATE TABLE workflow_gc ( + worker_instance_id UUID, + lock_ts INT +); + +INSERT INTO workflow_gc (worker_instance_id, lock_ts) VALUES (NULL, NULL); + +CREATE TABLE workflow_metrics ( + worker_instance_id UUID, + lock_ts INT +); + +INSERT INTO workflow_metrics (worker_instance_id, lock_ts) VALUES (NULL, NULL); diff --git a/packages/edge/api/actor/Cargo.toml b/packages/edge/api/actor/Cargo.toml new file mode 100644 index 0000000000..5a9795bafd --- /dev/null +++ b/packages/edge/api/actor/Cargo.toml @@ -0,0 +1,74 @@ +[package] +name = "api-edge-actor" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +chirp-client.workspace = true +chirp-workflow.workspace = true +rivet-operation.workspace = true +chrono = "0.4" +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } +lazy_static = "1.4" +rivet-api.workspace = true +rivet-cache.workspace = true +rivet-claims.workspace = true +rivet-health-checks.workspace = true +rivet-convert.workspace = true +rivet-pools.workspace = true +s3-util.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +base64 = "0.13" +tokio = { version = "1.40" } +tracing = "0.1" +tracing-futures = "0.2" +tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt", "json", "ansi"] } +url = "2.2.2" +util-team.workspace = true +uuid = { version = "1", features = ["v4"] } + +build-create.workspace = true +build-get.workspace = true +build-list-for-env.workspace = true +build.workspace = true +cluster.workspace = true +ds-log-export.workspace = true +ds-log-read.workspace = true +ds.workspace = true +game-get.workspace = true +game-namespace-get.workspace = true +game-namespace-resolve-name-id.workspace = true +game-resolve-name-id.workspace = true +game-version-get.workspace = true +pegboard.workspace = true +region-recommend.workspace = true +rivet-config.workspace = true +rivet-env.workspace = true +team-get.workspace = true +token-create.workspace = true +token-revoke.workspace = true +upload-complete.workspace = true +upload-get.workspace = true +user-get.workspace = true +user-identity-get.workspace = true +user-team-list.workspace = true + +[dev-dependencies] +rivet-connection.workspace = true +reqwest = "0.11" + +cdn-namespace-domain-create.workspace = true +cloud-namespace-token-development-create.workspace = true +cloud-namespace-token-public-create.workspace = true +faker-build.workspace = true +faker-game-namespace.workspace = true +faker-game-version.workspace = true +faker-game.workspace = true +faker-region.workspace = true +game-get.workspace = true +region-get.workspace = true diff --git a/packages/edge/api/actor/src/assert.rs b/packages/edge/api/actor/src/assert.rs new file mode 100644 index 0000000000..dcde9b5e23 --- /dev/null +++ b/packages/edge/api/actor/src/assert.rs @@ -0,0 +1,27 @@ +use api_helper::ctx::Ctx; +use ds::types::EndpointType; +use rivet_operation::prelude::*; + +use crate::auth::Auth; + +/// Validates that a server belongs to the given game ID. +pub async fn server_for_env( + ctx: &Ctx, + server_id: Uuid, + _game_id: Uuid, + env_id: Uuid, + endpoint_type: Option, +) -> GlobalResult { + let servers_res = ctx + .op(ds::ops::server::get::Input { + server_ids: vec![server_id], + endpoint_type, + }) + .await?; + let server = unwrap_with!(servers_res.servers.into_iter().next(), ACTOR_NOT_FOUND); + + // Validate token can access server + ensure_with!(server.env_id == env_id, ACTOR_NOT_FOUND); + + Ok(server) +} diff --git a/packages/edge/api/actor/src/auth.rs b/packages/edge/api/actor/src/auth.rs new file mode 100644 index 0000000000..506f319ffc --- /dev/null +++ b/packages/edge/api/actor/src/auth.rs @@ -0,0 +1,215 @@ +use api_helper::{ + auth::{ApiAuth, AuthRateLimitCtx}, + util::{as_auth_expired, basic_rate_limit}, +}; +use proto::claims::Claims; +use rivet_claims::ClaimsDecode; +use rivet_operation::prelude::*; + +use crate::route::GlobalQuery; + +pub struct Auth { + claims: Option, +} + +pub struct CheckOpts<'a> { + pub query: &'a GlobalQuery, + pub allow_service_token: bool, + pub opt_auth: bool, +} + +pub struct CheckOutput { + pub game_id: Uuid, + pub env_id: Uuid, +} + +#[async_trait] +impl ApiAuth for Auth { + async fn new( + config: rivet_config::Config, + api_token: Option, + rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult { + Self::rate_limit(&config, rate_limit_ctx).await?; + + Ok(Auth { + claims: if let Some(api_token) = api_token { + Some(as_auth_expired(rivet_claims::decode( + &config.server()?.jwt.public, + &api_token, + )?)?) + } else { + None + }, + }) + } + + async fn rate_limit( + config: &rivet_config::Config, + rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult<()> { + basic_rate_limit(config, rate_limit_ctx).await + } +} + +impl Auth { + pub fn claims(&self) -> GlobalResult<&Claims> { + self.claims + .as_ref() + .ok_or_else(|| err_code!(API_UNAUTHORIZED, reason = "No bearer token provided.")) + } + + pub fn env_service(&self) -> GlobalResult { + self.claims()?.as_env_service() + } + + /// Check if the provided token is authenticated for the provided project & env. + /// + /// If in development mode: + /// - The project & env will fallback to "default" if not provided + /// - The auth token will always pass + pub async fn check( + &self, + ctx: &OperationContext<()>, + opts: CheckOpts<'_>, + ) -> GlobalResult { + let is_development = ctx.config().server()?.rivet.auth.access_kind + == rivet_config::config::rivet::AccessKind::Development; + + let (project_query, environment_query) = opts.query.project_and_env()?; + + // Lookup project name ID + let project = if is_development { + project_query.unwrap_or(util::dev_defaults::PROJECT_SLUG) + } else { + unwrap_with!(project_query, PROJECT_NOT_FOUND) + }; + let game_res = op!([ctx] game_resolve_name_id { + name_ids: vec![project.to_string()], + }) + .await?; + let game = unwrap_with!(game_res.games.first(), PROJECT_NOT_FOUND); + let game_id = unwrap!(game.game_id).as_uuid(); + + // Lookup environment name ID + let environment = if is_development { + environment_query.unwrap_or(util::dev_defaults::ENVIRONMENT_SLUG) + } else { + unwrap_with!(environment_query, ENVIRONMENT_NOT_FOUND) + }; + let env_res = op!([ctx] game_namespace_resolve_name_id { + game_id: game.game_id, + name_ids: vec![environment.to_string()], + }) + .await?; + let env = unwrap_with!(env_res.namespaces.first(), ENVIRONMENT_NOT_FOUND); + let env_id = unwrap!(env.namespace_id).as_uuid(); + + // Get the game this env belongs to + let ns_res = op!([ctx] game_namespace_get { + namespace_ids: vec![env_id.into()], + }) + .await?; + let env = unwrap_with!(ns_res.namespaces.first(), ENVIRONMENT_NOT_FOUND); + + // Ensure belongs to game + ensure_with!( + unwrap!(env.game_id).as_uuid() == game_id, + ENVIRONMENT_NOT_FOUND + ); + + // Build output + let output = CheckOutput { game_id, env_id }; + + // Skip auth if in development mode + if self.claims.is_none() && is_development { + return Ok(output); + } + + // Skip auth if not needed + if self.claims.is_none() && opts.opt_auth { + return Ok(output); + } + + // Validate claims + let claims = self.claims()?; + + // Validate token + if let Ok(cloud_ent) = claims.as_game_cloud() { + ensure_with!( + cloud_ent.game_id == game_id, + API_FORBIDDEN, + reason = "Cloud token cannot write to this game", + ); + Ok(output) + } else if let Ok(service_ent) = claims.as_env_service() { + ensure_with!( + opts.allow_service_token, + API_FORBIDDEN, + reason = "Cannot use service token for this endpoint." + ); + ensure_with!( + service_ent.env_id == env_id, + API_FORBIDDEN, + reason = "Service token cannot write to this game", + ); + Ok(output) + } else if let Ok(user_ent) = claims.as_user() { + // Get the user + let (user_res, game_res, team_list_res) = tokio::try_join!( + op!([ctx] user_get { + user_ids: vec![user_ent.user_id.into()], + }), + op!([ctx] game_get { + game_ids: vec![game_id.into()], + }), + op!([ctx] user_team_list { + user_ids: vec![user_ent.user_id.into()], + }), + )?; + let Some(user) = user_res.users.first() else { + bail_with!(TOKEN_REVOKED) + }; + let game = unwrap_with!(game_res.games.first(), PROJECT_NOT_FOUND); + let user_teams = unwrap!(team_list_res.users.first()); + let dev_team_id = unwrap_ref!(game.developer_team_id).as_uuid(); + + // Allow admin + if user.is_admin { + return Ok(output); + } + + // Verify user is not deleted + ensure_with!(user.delete_complete_ts.is_none(), TOKEN_REVOKED); + + // Validate user is member of team + let is_part_of_team = user_teams + .teams + .iter() + .filter_map(|x| x.team_id) + .any(|x| x.as_uuid() == dev_team_id); + ensure_with!(is_part_of_team, GROUP_NOT_MEMBER); + + // Get team + let team_res = op!([ctx] team_get { + team_ids: vec![dev_team_id.into()], + }) + .await?; + let dev_team = unwrap!(team_res.teams.first()); + + // Check team active + ensure_with!( + dev_team.deactivate_reasons.is_empty(), + GROUP_DEACTIVATED, + reasons = util_team::format_deactivate_reasons(&dev_team.deactivate_reasons)?, + ); + + Ok(output) + } else { + bail_with!( + CLAIMS_MISSING_ENTITLEMENT, + entitlements = "User, GameCloud, EnvService" + ); + } + } +} diff --git a/packages/edge/api/actor/src/lib.rs b/packages/edge/api/actor/src/lib.rs new file mode 100644 index 0000000000..309c8f56dc --- /dev/null +++ b/packages/edge/api/actor/src/lib.rs @@ -0,0 +1,4 @@ +pub mod assert; +pub mod auth; +pub mod route; +pub mod utils; diff --git a/packages/edge/api/actor/src/route/actors.rs b/packages/edge/api/actor/src/route/actors.rs new file mode 100644 index 0000000000..b84b2ea2d8 --- /dev/null +++ b/packages/edge/api/actor/src/route/actors.rs @@ -0,0 +1,1054 @@ +use std::collections::{HashMap, HashSet}; + +use api_helper::{anchor::WatchIndexQuery, ctx::Ctx}; +use futures_util::{StreamExt, TryStreamExt}; +use proto::backend; +use rivet_api::models; +use rivet_convert::{ApiInto, ApiTryInto}; +use rivet_operation::prelude::*; +use serde::Deserialize; +use serde_json::json; + +use crate::{ + assert, + auth::{Auth, CheckOpts, CheckOutput}, + utils::build_global_query_compat, +}; + +use super::GlobalQuery; + +#[derive(Debug, Clone, Deserialize)] +pub struct GlobalEndpointTypeQuery { + #[serde(flatten)] + global: GlobalQuery, + endpoint_type: Option, +} + +// MARK: GET /actors/{} +pub async fn get( + ctx: Ctx, + actor_id: Uuid, + watch_index: WatchIndexQuery, + query: GlobalEndpointTypeQuery, +) -> GlobalResult { + get_inner(&ctx, actor_id, watch_index, query).await +} + +async fn get_inner( + ctx: &Ctx, + actor_id: Uuid, + _watch_index: WatchIndexQuery, + query: GlobalEndpointTypeQuery, +) -> GlobalResult { + let CheckOutput { env_id, .. } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + // Get the server + let servers_res = ctx + .op(ds::ops::server::get::Input { + server_ids: vec![actor_id], + endpoint_type: query.endpoint_type.map(ApiInto::api_into), + }) + .await?; + let server = unwrap_with!(servers_res.servers.first(), ACTOR_NOT_FOUND); + + // Get the datacenter + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![server.datacenter_id], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + // Validate token can access server + ensure_with!(server.env_id == env_id, ACTOR_NOT_FOUND); + + Ok(models::ActorGetActorResponse { + actor: Box::new(ds::types::convert_actor_to_api(server.clone(), dc)?), + }) +} + +pub async fn get_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + actor_id: Uuid, + watch_index: WatchIndexQuery, +) -> GlobalResult { + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + let get_res = get_inner( + &ctx, + actor_id, + watch_index, + GlobalEndpointTypeQuery { + global, + endpoint_type: None, + }, + ) + .await?; + + let game_res = ctx + .op(cluster::ops::get_for_game::Input { + game_ids: vec![game_id], + }) + .await?; + let game = unwrap!(game_res.games.first()); + + let dc_resolve_res = ctx + .op(cluster::ops::datacenter::resolve_for_name_id::Input { + cluster_id: game.cluster_id, + name_ids: vec![get_res.actor.region.clone()], + }) + .await?; + let dc_id = unwrap!(dc_resolve_res.datacenters.first()).datacenter_id; + + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![dc_id], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + Ok(models::ServersGetServerResponse { + server: Box::new(legacy_convert_actor_to_server(*get_res.actor, dc)?), + }) +} + +// MARK: POST /actors +pub async fn create( + ctx: Ctx, + body: models::ActorCreateActorRequest, + query: GlobalEndpointTypeQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + let (clusters_res, game_configs_res, build) = tokio::try_join!( + ctx.op(cluster::ops::get_for_game::Input { + game_ids: vec![game_id], + }), + ctx.op(ds::ops::game_config::get::Input { + game_ids: vec![game_id], + }), + resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()), + )?; + let cluster_id = unwrap!(clusters_res.games.first()).cluster_id; + let game_config = unwrap!(game_configs_res.game_configs.first()); + + let datacenter_id = resolve_dc_id(&ctx, cluster_id, body.region.clone()).await?; + + let tags = unwrap_with!( + serde_json::from_value(body.tags.unwrap_or_default()).ok(), + API_BAD_BODY, + error = "`tags` must be `Map`" + ); + + let resources = match build.kind { + build::types::BuildKind::DockerImage | build::types::BuildKind::OciBundle => { + let resources = unwrap_with!( + body.resources, + API_BAD_BODY, + error = "`resources` must be set for actors using Docker builds" + ); + + (*resources).api_into() + } + build::types::BuildKind::JavaScript => { + ensure_with!( + body.resources.is_none(), + API_BAD_BODY, + error = "actors using JavaScript builds cannot set `resources`" + ); + + ds::types::ServerResources::default_isolate() + } + }; + + tracing::info!(?tags, "creating server with tags"); + + let server_id = Uuid::new_v4(); + + let mut ready_sub = ctx + .subscribe::(("server_id", server_id)) + .await?; + let mut fail_sub = ctx + .subscribe::(("server_id", server_id)) + .await?; + let mut destroy_sub = ctx + .subscribe::(("server_id", server_id)) + .await?; + + let network = body.network.unwrap_or_default(); + + ctx.workflow(ds::workflows::server::Input { + server_id, + env_id, + datacenter_id, + cluster_id, + runtime: game_config.runtime, + tags, + resources, + lifecycle: body.lifecycle.map(|x| (*x).api_into()).unwrap_or_else(|| { + ds::types::ServerLifecycle { + kill_timeout_ms: 0, + durable: false, + } + }), + image_id: build.build_id, + root_user_enabled: game_config.root_user_enabled, + // args: body.runtime.arguments.unwrap_or_default(), + args: Vec::new(), + network_mode: network.mode.unwrap_or_default().api_into(), + environment: body.runtime.and_then(|r| r.environment).unwrap_or_default(), + network_ports: unwrap!(network + .ports + .unwrap_or_default() + .into_iter() + .map(|(s, p)| GlobalResult::Ok(( + s.clone(), + ds::workflows::server::Port { + internal_port: p.internal_port.map(TryInto::try_into).transpose()?, + routing: if let Some(routing) = p.routing { + match *routing { + models::ActorPortRouting { + guard: Some(_gg), + host: None, + } => ds::types::Routing::GameGuard { + protocol: p.protocol.api_into(), + // Temporarily disabled + // authorization: match gg.authorization.as_deref() { + // Some(models::ActorPortAuthorization { + // bearer: Some(token), + // .. + // }) => ds::types::PortAuthorization::Bearer(token.clone()), + // Some(models::ActorPortAuthorization { + // query: Some(query), + // .. + // }) => ds::types::PortAuthorization::Query( + // query.key.clone(), + // query.value.clone(), + // ), + // _ => ds::types::PortAuthorization::None, + // }, + authorization: ds::types::PortAuthorization::None, + }, + models::ActorPortRouting { + guard: None, + host: Some(_), + } => ds::types::Routing::Host { + protocol: match p.protocol.api_try_into() { + Err(err) if GlobalError::is(&err, formatted_error::code::ACTOR_FAILED_TO_CREATE) => { + // Add location + bail_with!( + ACTOR_FAILED_TO_CREATE, + error = format!("network.ports[{s:?}].protocol: Host port protocol must be either TCP or UDP.") + ); + } + x => x?, + }, + }, + models::ActorPortRouting { .. } => { + bail_with!( + ACTOR_FAILED_TO_CREATE, + error = format!("network.ports[{s:?}].routing: Must specify either `guard` or `host` routing type.") + ); + } + } + } else { + ds::types::Routing::GameGuard { + protocol: p.protocol.api_into(), + authorization: ds::types::PortAuthorization::None, + } + } + } + ))) + .collect::>>()), + }) + .tag("server_id", server_id) + .dispatch() + .await?; + + // Wait for ready, fail, or destroy + tokio::select! { + res = ready_sub.next() => { res?; }, + res = fail_sub.next() => { + let msg = res?; + bail_with!(ACTOR_FAILED_TO_CREATE, error = msg.message); + } + res = destroy_sub.next() => { + res?; + bail_with!(ACTOR_FAILED_TO_CREATE, error = "Actor failed before reaching a ready state."); + } + } + + let servers_res = ctx + .op(ds::ops::server::get::Input { + server_ids: vec![server_id], + endpoint_type: query.endpoint_type.map(ApiInto::api_into), + }) + .await?; + let server = unwrap_with!(servers_res.servers.first(), ACTOR_NOT_FOUND); + + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![server.datacenter_id], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + Ok(models::ActorCreateActorResponse { + actor: Box::new(ds::types::convert_actor_to_api(server.clone(), dc)?), + }) +} + +pub async fn create_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + body: models::ServersCreateServerRequest, +) -> GlobalResult { + // Resolve region slug + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![body.datacenter], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + let create_res = create( + ctx, + models::ActorCreateActorRequest { + region: Some(dc.name_id.clone()), + lifecycle: body.lifecycle.map(|l| { + Box::new(models::ActorLifecycle { + kill_timeout: l.kill_timeout, + durable: Some(false), + }) + }), + network: Some(Box::new(models::ActorCreateActorNetworkRequest { + mode: body.network.mode.map(|n| match n { + models::ServersNetworkMode::Host => models::ActorNetworkMode::Host, + models::ServersNetworkMode::Bridge => models::ActorNetworkMode::Bridge, + }), + ports: Some( + body.network + .ports + .into_iter() + .map(|(k, p)| { + ( + k, + models::ActorCreateActorPortRequest { + internal_port: p.internal_port, + protocol: match p.protocol { + models::ServersPortProtocol::Http => { + models::ActorPortProtocol::Http + } + models::ServersPortProtocol::Https => { + models::ActorPortProtocol::Https + } + models::ServersPortProtocol::Tcp => { + models::ActorPortProtocol::Tcp + } + models::ServersPortProtocol::TcpTls => { + models::ActorPortProtocol::TcpTls + } + models::ServersPortProtocol::Udp => { + models::ActorPortProtocol::Udp + } + }, + routing: p.routing.map(|r| { + Box::new(models::ActorPortRouting { + // Temporarily disabled + // guard: r.game_guard.map(|_| { + // Box::new(models::ActorGuardRouting::default()) + // }), + guard: r.game_guard.map(|_| json!({})), + host: r.host.map(|_| json!({})), + }) + }), + }, + ) + }) + .collect(), + ), + })), + resources: Some(Box::new(models::ActorResources { + cpu: body.resources.cpu, + memory: body.resources.memory, + })), + runtime: Some(Box::new(models::ActorCreateActorRuntimeRequest { + environment: body.runtime.environment, + })), + build: Some(body.runtime.build), + build_tags: None, + tags: body.tags, + }, + GlobalEndpointTypeQuery { + global, + endpoint_type: None, + }, + ) + .await?; + + Ok(models::ServersCreateServerResponse { + server: Box::new(legacy_convert_actor_to_server(*create_res.actor, &dc)?), + }) +} + +// MARK: DELETE /actors/{} +#[derive(Debug, Clone, Deserialize)] +pub struct DeleteQuery { + #[serde(flatten)] + global: GlobalQuery, + override_kill_timeout: Option, +} + +pub async fn destroy( + ctx: Ctx, + actor_id: Uuid, + query: DeleteQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + ensure_with!( + query.override_kill_timeout.unwrap_or(0) >= 0, + API_BAD_QUERY_PARAMETER, + parameter = "override_kill_timeout", + error = "must be positive" + ); + ensure_with!( + query.override_kill_timeout.unwrap_or(0) < 2 * 60 * 60 * 1000, + API_BAD_QUERY_PARAMETER, + parameter = "override_kill_timeout", + error = "cannot be longer than 2 hours" + ); + + let mut sub = ctx + .subscribe::(("server_id", actor_id)) + .await?; + + // Get server after sub is created + let server = assert::server_for_env(&ctx, actor_id, game_id, env_id, None).await?; + + // Already destroyed + if server.destroy_ts.is_some() { + return Ok(json!({})); + } + + ctx.signal(ds::workflows::server::Destroy { + override_kill_timeout_ms: query.override_kill_timeout, + }) + .tag("server_id", actor_id) + .send() + .await?; + + sub.next().await?; + + Ok(json!({})) +} + +pub async fn destroy_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + actor_id: Uuid, + query: DeleteQuery, +) -> GlobalResult { + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + destroy( + ctx, + actor_id, + DeleteQuery { + global, + override_kill_timeout: query.override_kill_timeout, + }, + ) + .await +} + +// MARK: POST /actors/{}/upgrade +pub async fn upgrade( + ctx: Ctx, + actor_id: Uuid, + body: models::ActorUpgradeActorRequest, + query: GlobalQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + assert::server_for_env(&ctx, actor_id, game_id, env_id, None).await?; + + let build = resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()).await?; + + // TODO: Add back once we figure out how to cleanly handle if a wf is already complete when + // upgrading + // let mut sub = ctx + // .subscribe::(("server_id", actor_id)) + // .await?; + + ctx.signal(ds::workflows::server::Upgrade { + image_id: build.build_id, + }) + .tag("server_id", actor_id) + .send() + .await?; + + // sub.next().await?; + + Ok(json!({})) +} + +// MARK: POST /actors/upgrade +pub async fn upgrade_all( + ctx: Ctx, + body: models::ActorUpgradeAllActorsRequest, + query: GlobalQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + let tags = unwrap_with!(body.tags, API_BAD_BODY, error = "missing property `tags`"); + + ensure_with!( + tags.as_object().map(|x| x.len()).unwrap_or_default() <= 8, + API_BAD_BODY, + error = "Too many tags (max 8)." + ); + + let tags = unwrap_with!( + serde_json::from_value::>(tags).ok(), + API_BAD_BODY, + error = "`tags` must be `Map`" + ); + + for (k, v) in &tags { + ensure_with!( + !k.is_empty(), + API_BAD_BODY, + error = "tags[]: Tag label cannot be empty." + ); + ensure_with!( + k.len() <= 32, + API_BAD_BODY, + error = format!( + "tags[{:?}]: Tag label too large (max 32 bytes).", + util::safe_slice(k, 0, 32), + ), + ); + ensure_with!( + !v.is_empty(), + API_BAD_BODY, + error = format!("tags[{k:?}]: Tag value cannot be empty.") + ); + ensure_with!( + v.len() <= 1024, + API_BAD_BODY, + error = format!("tags[{k:?}]: Tag value too large (max 1024 bytes)."), + ); + } + + let build = resolve_build(&ctx, game_id, env_id, body.build, body.build_tags.flatten()).await?; + + // Work in batches + let mut count = 0; + let mut cursor = None; + loop { + let list_res = ctx + .op(ds::ops::server::list_for_env::Input { + env_id, + tags: tags.clone(), + include_destroyed: false, + cursor, + limit: 10_000, + }) + .await?; + + count += list_res.server_ids.len(); + cursor = list_res.server_ids.last().cloned(); + + // TODO: Add back once we figure out how to cleanly handle if a wf is already complete when + // upgrading + // let subs = futures_util::stream::iter(list_res.server_ids.clone()) + // .map(|server_id| { + // ctx.subscribe::(("server_id", server_id)) + // }) + // .buffer_unordered(32) + // .try_collect::>() + // .await?; + + futures_util::stream::iter(list_res.server_ids) + .map(|server_id| { + ctx.signal(ds::workflows::server::Upgrade { + image_id: build.build_id, + }) + .tag("server_id", server_id) + .send() + }) + .buffer_unordered(32) + .try_collect::>() + .await?; + + // futures_util::stream::iter(subs) + // .map(|mut sub| async move { sub.next().await }) + // .buffer_unordered(32) + // .try_collect::>() + // .await?; + + if count < 10_000 { + break; + } + } + + Ok(models::ActorUpgradeAllActorsResponse { + count: count.try_into()?, + }) +} + +// MARK: GET /actors +#[derive(Debug, Clone, Deserialize)] +pub struct ListQuery { + #[serde(flatten)] + global_endpoint_type: GlobalEndpointTypeQuery, + tags_json: Option, + include_destroyed: Option, + cursor: Option, +} + +pub async fn list_actors( + ctx: Ctx, + watch_index: WatchIndexQuery, + query: ListQuery, +) -> GlobalResult { + list_actors_inner(&ctx, watch_index, query).await +} + +async fn list_actors_inner( + ctx: &Ctx, + _watch_index: WatchIndexQuery, + query: ListQuery, +) -> GlobalResult { + let CheckOutput { env_id, .. } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global_endpoint_type.global, + allow_service_token: true, + opt_auth: false, + }, + ) + .await?; + + let include_destroyed = query.include_destroyed.unwrap_or(false); + + let tags = unwrap_with!( + query + .tags_json + .as_deref() + .map_or(Ok(HashMap::new()), serde_json::from_str) + .ok(), + API_BAD_QUERY_PARAMETER, + parameter = "tags_json", + error = "must be `Map`" + ); + + let list_res = ctx + .op(ds::ops::server::list_for_env::Input { + env_id, + tags, + include_destroyed, + cursor: query.cursor, + // HACK: Until we have webhooks, there needs to be a good way to get all of the most + // recent crashed actors. 10k is a high limit intentionally. + limit: if include_destroyed { 64 } else { 10_000 }, + }) + .await?; + + let servers_res = ctx + .op(ds::ops::server::get::Input { + server_ids: list_res.server_ids.clone(), + endpoint_type: query + .global_endpoint_type + .endpoint_type + .map(ApiInto::api_into), + }) + .await?; + + let datacenter_ids = servers_res + .servers + .iter() + .map(|s| s.datacenter_id) + .collect::>() + .into_iter() + .collect::>(); + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { datacenter_ids }) + .await?; + + let servers = servers_res + .servers + .into_iter() + .map(|a| { + let dc = unwrap!(dc_res + .datacenters + .iter() + .find(|dc| dc.datacenter_id == a.datacenter_id)); + ds::types::convert_actor_to_api(a, &dc) + }) + .collect::>>()?; + + Ok(models::ActorListActorsResponse { actors: servers }) +} + +pub async fn list_servers_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + watch_index: WatchIndexQuery, + query: ListQuery, +) -> GlobalResult { + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + let actors_res = list_actors_inner( + &ctx, + watch_index, + ListQuery { + global_endpoint_type: GlobalEndpointTypeQuery { + global, + ..query.global_endpoint_type + }, + ..query + }, + ) + .await?; + + let clusters_res = ctx + .op(cluster::ops::get_for_game::Input { + game_ids: vec![game_id], + }) + .await?; + let cluster_id = unwrap!(clusters_res.games.first()).cluster_id; + + let dc_name_ids = actors_res + .actors + .iter() + .map(|s| s.region.clone()) + .collect::>() + .into_iter() + .collect::>(); + let dc_resolve_res = ctx + .op(cluster::ops::datacenter::resolve_for_name_id::Input { + cluster_id, + name_ids: dc_name_ids, + }) + .await?; + + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: dc_resolve_res + .datacenters + .iter() + .map(|x| x.datacenter_id) + .collect::>(), + }) + .await?; + + Ok(models::ServersListServersResponse { + servers: actors_res + .actors + .into_iter() + .map(|a| { + let dc = unwrap!(dc_res.datacenters.iter().find(|dc| dc.name_id == a.region)); + legacy_convert_actor_to_server(a, dc) + }) + .collect::, _>>()?, + }) +} + +fn legacy_convert_actor_to_server( + a: models::ActorActor, + datacenter: &cluster::types::Datacenter, +) -> GlobalResult { + Ok(models::ServersServer { + created_at: a + .created_at + .parse::>()? + .timestamp_millis(), + datacenter: datacenter.datacenter_id, + destroyed_at: a + .destroyed_at + .map(|ts| { + GlobalResult::Ok( + ts.parse::>()? + .timestamp_millis(), + ) + }) + .transpose()?, + environment: Uuid::nil(), + id: a.id, + lifecycle: Box::new(models::ServersLifecycle { + kill_timeout: a.lifecycle.kill_timeout, + }), + network: Box::new(models::ServersNetwork { + mode: Some(match a.network.mode { + models::ActorNetworkMode::Host => models::ServersNetworkMode::Host, + models::ActorNetworkMode::Bridge => models::ServersNetworkMode::Bridge, + }), + ports: a + .network + .ports + .into_iter() + .map(|(k, p)| { + ( + k, + models::ServersPort { + internal_port: p.internal_port, + protocol: match p.protocol { + models::ActorPortProtocol::Http => { + models::ServersPortProtocol::Http + } + models::ActorPortProtocol::Https => { + models::ServersPortProtocol::Https + } + models::ActorPortProtocol::Tcp => models::ServersPortProtocol::Tcp, + models::ActorPortProtocol::TcpTls => { + models::ServersPortProtocol::TcpTls + } + models::ActorPortProtocol::Udp => models::ServersPortProtocol::Udp, + }, + public_hostname: p.hostname, + public_port: p.port, + routing: Box::new(models::ServersPortRouting { + game_guard: p.routing.guard.map(|_| json!({})), + host: p.routing.host.map(|_| json!({})), + }), + }, + ) + }) + .collect(), + }), + resources: Box::new(models::ServersResources { + cpu: a.resources.cpu, + memory: a.resources.memory, + }), + runtime: Box::new(models::ServersRuntime { + arguments: a.runtime.arguments, + build: a.runtime.build, + environment: a.runtime.environment, + }), + started_at: a + .started_at + .map(|ts| { + GlobalResult::Ok( + ts.parse::>()? + .timestamp_millis(), + ) + }) + .transpose()?, + tags: a.tags, + }) +} + +async fn resolve_build( + ctx: &Ctx, + game_id: Uuid, + env_id: Uuid, + build_id: Option, + build_tags: Option, +) -> GlobalResult { + match (build_id, build_tags) { + (Some(build_id), None) => { + let builds_res = ctx + .op(build::ops::get::Input { + build_ids: vec![build_id], + }) + .await?; + let build = unwrap_with!(builds_res.builds.into_iter().next(), BUILD_NOT_FOUND); + + // Ensure build belongs to this game/env + if let Some(build_game_id) = build.game_id { + ensure_with!(build_game_id == game_id, BUILD_NOT_FOUND); + } else if let Some(build_env_id) = build.env_id { + ensure_with!(build_env_id == env_id, BUILD_NOT_FOUND); + } + + Ok(build) + } + // Resolve build from tags + (None, Some(build_tags)) => { + let build_tags = unwrap_with!( + serde_json::from_value::>(build_tags).ok(), + API_BAD_BODY, + error = "`build_tags` must be `Map`" + ); + + ensure_with!( + build_tags.len() < 8, + API_BAD_BODY, + error = "Too many build tags (max 8)." + ); + + for (k, v) in &build_tags { + ensure_with!( + !k.is_empty(), + API_BAD_BODY, + error = "build_tags[]: Build tag label cannot be empty." + ); + ensure_with!( + k.len() < 32, + API_BAD_BODY, + error = format!( + "build_tags[{:?}]: Build tag label too large (max 32 bytes).", + util::safe_slice(k, 0, 32), + ) + ); + ensure_with!( + !v.is_empty(), + API_BAD_BODY, + error = format!("build_tags[{k:?}]: Build tag value cannot be empty.") + ); + ensure_with!( + v.len() < 256, + API_BAD_BODY, + error = + format!("build_tags[{k:?}]: Build tag value too large (max 256 bytes).") + ); + } + + let builds_res = ctx + .op(build::ops::resolve_for_tags::Input { + env_id, + tags: build_tags, + }) + .await?; + + let build = unwrap_with!( + builds_res.builds.into_iter().next(), + BUILD_NOT_FOUND_WITH_TAGS + ); + + // Ensure build belongs to this game/env + if let Some(build_game_id) = build.game_id { + ensure_with!(build_game_id == game_id, BUILD_NOT_FOUND); + } else if let Some(build_env_id) = build.env_id { + ensure_with!(build_env_id == env_id, BUILD_NOT_FOUND); + } + + Ok(build) + } + _ => { + bail_with!( + API_BAD_BODY, + error = "must have either `build` or `build_tags`" + ); + } + } +} + +async fn resolve_dc_id( + ctx: &Ctx, + cluster_id: Uuid, + region: Option, +) -> GlobalResult { + if let Some(region) = region { + let dcs_res = ctx + .op(cluster::ops::datacenter::resolve_for_name_id::Input { + cluster_id, + name_ids: vec![region], + }) + .await?; + let dc = unwrap_with!( + dcs_res.datacenters.first(), + ACTOR_FAILED_TO_CREATE, + error = "Region not found." + ); + + Ok(dc.datacenter_id) + } + // Auto-select the closest region + else { + let clusters_res = ctx + .op(cluster::ops::datacenter::list::Input { + cluster_ids: vec![cluster_id], + }) + .await?; + let cluster = unwrap!(clusters_res.clusters.first()); + + if let Some((lat, long)) = ctx.coords() { + let recommend_res = op!([ctx] region_recommend { + region_ids: cluster + .datacenter_ids + .iter() + .cloned() + .map(Into::into) + .collect(), + coords: Some(backend::net::Coordinates { + latitude: lat, + longitude: long, + }), + ..Default::default() + }) + .await?; + let primary_region = unwrap!(recommend_res.regions.first()); + let primary_region_id = unwrap_ref!(primary_region.region_id).as_uuid(); + + Ok(primary_region_id) + } else { + tracing::warn!("coords not provided to select region"); + + let datacenter_id = *unwrap_with!( + cluster.datacenter_ids.first(), + ACTOR_FAILED_TO_CREATE, + error = "No regions found." + ); + + Ok(datacenter_id) + } + } +} diff --git a/packages/edge/api/actor/src/route/logs.rs b/packages/edge/api/actor/src/route/logs.rs new file mode 100644 index 0000000000..d76b4f2e8a --- /dev/null +++ b/packages/edge/api/actor/src/route/logs.rs @@ -0,0 +1,168 @@ +use api_helper::{ + anchor::{WatchIndexQuery, WatchResponse}, + ctx::Ctx, +}; +use proto::backend::{self, pkg::*}; +use rivet_api::models; +use rivet_operation::prelude::*; +use serde::Deserialize; +use std::time::Duration; + +use crate::{ + assert, + auth::{Auth, CheckOpts, CheckOutput}, + utils::build_global_query_compat, +}; + +use super::GlobalQuery; + +// MARK: GET /actors/{}/logs +#[derive(Debug, Deserialize)] +pub struct GetActorLogsQuery { + #[serde(flatten)] + pub global: GlobalQuery, + pub stream: models::CloudGamesLogStream, +} + +pub async fn get_logs( + ctx: Ctx, + server_id: Uuid, + watch_index: WatchIndexQuery, + query: GetActorLogsQuery, +) -> GlobalResult { + let CheckOutput { game_id, env_id } = ctx + .auth() + .check( + ctx.op_ctx(), + CheckOpts { + query: &query.global, + allow_service_token: false, + opt_auth: false, + }, + ) + .await?; + + // Validate server belongs to game + assert::server_for_env(&ctx, server_id, game_id, env_id, None).await?; + + // Determine stream type + let stream_type = match query.stream { + models::CloudGamesLogStream::StdOut => backend::job::log::StreamType::StdOut, + models::CloudGamesLogStream::StdErr => backend::job::log::StreamType::StdErr, + }; + + // Timestamp to start the query at + let before_nts = util::timestamp::now() * 1_000_000; + + // Handle anchor + let logs_res = if let Some(anchor) = watch_index.as_i64()? { + let query_start = tokio::time::Instant::now(); + + // Poll for new logs + let logs_res = loop { + // Read logs after the timestamp + // + // We read descending in order to get at most 256 of the most recent logs. If we used + // asc, we would be paginating through all the logs which would likely fall behind + // actual stream and strain the database. + // + // We return fewer logs than the non-anchor request since this will be called + // frequently and should not return a significant amount of logs. + let logs_res = op!([ctx] @dont_log_body ds_log_read { + server_id: Some(server_id.into()), + stream_type: stream_type as i32, + count: 64, + order_asc: false, + query: Some(ds_log::read::request::Query::AfterNts(anchor)) + + }) + .await?; + + // Return logs + if !logs_res.entries.is_empty() { + break logs_res; + } + + // Timeout cleanly + if query_start.elapsed().as_millis() > util::watch::DEFAULT_TIMEOUT as u128 { + break ds_log::read::Response { + entries: Vec::new(), + }; + } + + // Throttle request + // + // We don't use `tokio::time::interval` because if the request takes longer than 500 + // ms, we'll enter a tight loop of requests. + tokio::time::sleep(Duration::from_millis(500)).await; + }; + + // Since we're using watch, we don't want this request to return immediately if there's new + // results. Add an artificial timeout in order to prevent a tight loop if there's a high + // log frequency. + tokio::time::sleep_until(query_start + Duration::from_secs(1)).await; + + logs_res + } else { + // Read most recent logs + + op!([ctx] @dont_log_body ds_log_read { + server_id: Some(server_id.into()), + stream_type: stream_type as i32, + count: 256, + order_asc: false, + query: Some(ds_log::read::request::Query::BeforeNts(before_nts)), + }) + .await? + }; + + // Convert logs + let mut lines = logs_res + .entries + .iter() + .map(|entry| base64::encode(&entry.message)) + .collect::>(); + let mut timestamps = logs_res + .entries + .iter() + .map(|x| x.nts / 1_000_000) + .map(util::timestamp::to_string) + .collect::, _>>()?; + + // Order desc + lines.reverse(); + timestamps.reverse(); + + let watch_nts = logs_res.entries.first().map_or(before_nts, |x| x.nts); + Ok(models::ActorGetActorLogsResponse { + lines, + timestamps, + watch: WatchResponse::new_as_model(watch_nts), + }) +} + +pub async fn get_logs_deprecated( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + server_id: Uuid, + watch_index: WatchIndexQuery, + query: GetActorLogsQuery, +) -> GlobalResult { + let global = build_global_query_compat(&ctx, game_id, env_id).await?; + let logs_res = get_logs( + ctx, + server_id, + watch_index, + GetActorLogsQuery { + global, + stream: query.stream, + }, + ) + .await?; + Ok(models::ServersGetServerLogsResponse { + lines: logs_res.lines, + timestamps: logs_res.timestamps, + watch: logs_res.watch, + }) +} diff --git a/packages/edge/api/actor/src/route/mod.rs b/packages/edge/api/actor/src/route/mod.rs new file mode 100644 index 0000000000..10c7319ac8 --- /dev/null +++ b/packages/edge/api/actor/src/route/mod.rs @@ -0,0 +1,125 @@ +use api_helper::{define_router, util::CorsConfigBuilder}; +use hyper::{Body, Request, Response}; +use rivet_api::models; +use rivet_operation::prelude::*; +use serde::Deserialize; +use uuid::Uuid; + +pub mod actors; +pub mod logs; + +#[derive(Debug, Clone, Deserialize)] +pub struct GlobalQuery { + /// Slug of the project. + /// + /// If provided, `environment` must also be provided. + pub project: Option, + + /// Slug of the environment. + pub environment: Option, +} + +impl GlobalQuery { + /// Returns both the project and environment. + /// + /// Validates that the project can only be specified with the environment. + pub fn project_and_env(&self) -> GlobalResult<(Option<&str>, Option<&str>)> { + if let Some(environment) = &self.environment { + Ok((self.project.as_deref(), Some(environment))) + } else { + // Don't allow just the project + if self.project.is_some() { + bail_with!( + API_BAD_QUERY, + parameter = "project", + error = "Must provide both `project` and `environment` query together." + ) + } else { + Ok((None, None)) + } + } + } +} + +define_router! { + db_driver: chirp_workflow::db::DatabaseFdbSqliteNats, + cors: |_config| CorsConfigBuilder::public().build(), + routes: { + "actors": { + GET: actors::list_actors( + query: actors::ListQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + ), + POST: actors::create( + query: actors::GlobalEndpointTypeQuery, + body: models::ActorCreateActorRequest, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 1_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / "upgrade": { + POST: actors::upgrade_all( + query: GlobalQuery, + body: models::ActorUpgradeAllActorsRequest, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 1_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / Uuid: { + GET: actors::get( + query: actors::GlobalEndpointTypeQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 60_000, bucket: duration::minutes(1) }, + ], + }, + + ), + DELETE: actors::destroy( + query: actors::DeleteQuery, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 10_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / Uuid / "upgrade": { + POST: actors::upgrade( + query: GlobalQuery, + body: models::ActorUpgradeActorRequest, + opt_auth: true, + rate_limit: { + buckets: [ + { count: 1_000, bucket: duration::minutes(1) }, + ], + }, + ), + }, + + "actors" / Uuid / "logs": { + GET: logs::get_logs( + query: logs::GetActorLogsQuery, + opt_auth: true, + ), + }, + }, +} diff --git a/packages/edge/api/actor/src/utils.rs b/packages/edge/api/actor/src/utils.rs new file mode 100644 index 0000000000..c61afdced3 --- /dev/null +++ b/packages/edge/api/actor/src/utils.rs @@ -0,0 +1,30 @@ +use api_helper::ctx::Ctx; +use rivet_operation::prelude::*; + +use crate::{auth::Auth, route::GlobalQuery}; + +/// Converts the legacy UUID-based routing for games & ns to the slug-based routing. +pub async fn build_global_query_compat( + ctx: &Ctx, + project_id: Uuid, + env_id: Uuid, +) -> GlobalResult { + let (game_res, ns_res) = tokio::try_join!( + op!([ctx] game_get { + game_ids: vec![project_id.into()], + }), + op!([ctx] game_namespace_get { + namespace_ids: vec![env_id.into()] + }), + )?; + + let game = unwrap!(game_res.games.first()); + let ns = unwrap!(ns_res.namespaces.first()); + + ensure_eq!(ns.game_id, game.game_id, "env does not belong to project"); + + Ok(GlobalQuery { + project: Some(game.name_id.clone()), + environment: Some(ns.name_id.clone()), + }) +} diff --git a/packages/edge/api/intercom/Cargo.toml b/packages/edge/api/intercom/Cargo.toml new file mode 100644 index 0000000000..174bd3270e --- /dev/null +++ b/packages/edge/api/intercom/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "api-edge-intercom" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +async-trait = "0.1" +chirp-client.workspace = true +chirp-workflow.workspace = true +chrono = "0.4" +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } +lazy_static = "1.4" +prost = "0.10" +rivet-api.workspace = true +rivet-cache.workspace = true +rivet-claims.workspace = true +rivet-config.workspace = true +rivet-convert.workspace = true +rivet-env.workspace = true +rivet-health-checks.workspace = true +rivet-operation.workspace = true +rivet-pools.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +thiserror = "1.0" +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt", "json", "ansi"] } +url = "2.2.2" +uuid = { version = "1", features = ["v4"] } + +edge-pegboard.workspace = true diff --git a/packages/edge/api/intercom/src/auth.rs b/packages/edge/api/intercom/src/auth.rs new file mode 100644 index 0000000000..7c64dfa5c0 --- /dev/null +++ b/packages/edge/api/intercom/src/auth.rs @@ -0,0 +1,66 @@ +use api_helper::{ + auth::{ApiAuth, AuthRateLimitCtx}, + util::as_auth_expired, +}; +use chirp_workflow::prelude::ApiCtx; +use proto::claims::Claims; +use rivet_claims::ClaimsDecode; +use rivet_operation::prelude::*; + +/// Information derived from the authentication middleware. +pub struct Auth { + config: rivet_config::Config, + claims: Option, +} + +#[async_trait] +impl ApiAuth for Auth { + async fn new( + config: rivet_config::Config, + api_token: Option, + rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult { + Self::rate_limit(&config, rate_limit_ctx).await?; + + Ok(Auth { + config: config.clone(), + claims: if let Some(api_token) = api_token { + Some(as_auth_expired(rivet_claims::decode( + &config.server()?.jwt.public, + &api_token, + )?)?) + } else { + None + }, + }) + } + + async fn rate_limit( + _config: &rivet_config::Config, + _rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult<()> { + Ok(()) + } +} + +impl Auth { + pub fn claims(&self) -> GlobalResult<&Claims> { + self.claims + .as_ref() + .ok_or_else(|| err_code!(API_UNAUTHORIZED, reason = "No bearer token provided.")) + } + + pub fn server(&self, ctx: &ApiCtx) -> GlobalResult<()> { + let is_development = ctx.config().server()?.rivet.auth.access_kind + == rivet_config::config::rivet::AccessKind::Development; + + // Skip auth in development mode + if self.claims.is_none() && is_development { + return Ok(()); + } + + self.claims()?.as_provisioned_server()?; + + Ok(()) + } +} diff --git a/packages/edge/api/intercom/src/lib.rs b/packages/edge/api/intercom/src/lib.rs new file mode 100644 index 0000000000..eeaeaaafb7 --- /dev/null +++ b/packages/edge/api/intercom/src/lib.rs @@ -0,0 +1,2 @@ +pub mod auth; +pub mod route; diff --git a/packages/edge/api/intercom/src/route/mod.rs b/packages/edge/api/intercom/src/route/mod.rs new file mode 100644 index 0000000000..5eb5abd1b6 --- /dev/null +++ b/packages/edge/api/intercom/src/route/mod.rs @@ -0,0 +1,27 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; +use rivet_api::models; +use uuid::Uuid; + +pub mod pegboard; + +define_router! { + db_driver: chirp_workflow::db::DatabaseFdbSqliteNats, + routes: { + "pegboard" / "image" / Uuid / "prewarm": { + POST: pegboard::prewarm_image( + internal_endpoint: true, + opt_auth: true, + body: models::EdgeIntercomPegboardPrewarmImageRequest, + ), + }, + + "pegboard" / "client" / Uuid / "drain": { + POST: pegboard::drain_client( + internal_endpoint: true, + opt_auth: true, + body: models::EdgeIntercomPegboardToggleClientDrainRequest, + ), + } + }, +} diff --git a/packages/edge/api/intercom/src/route/pegboard.rs b/packages/edge/api/intercom/src/route/pegboard.rs new file mode 100644 index 0000000000..15bd8bceb0 --- /dev/null +++ b/packages/edge/api/intercom/src/route/pegboard.rs @@ -0,0 +1,40 @@ +use api_helper::ctx::Ctx; +use rivet_api::models; +use rivet_operation::prelude::*; +use serde_json::json; + +use crate::auth::Auth; + +// MARK: POST /pegboard/image/{}/prewarm +pub async fn prewarm_image( + ctx: Ctx, + image_id: Uuid, + body: models::EdgeIntercomPegboardPrewarmImageRequest, +) -> GlobalResult { + ctx.auth().server(&ctx)?; + + let client_id: Uuid = todo!("choose client"); + ctx.signal(edge_pegboard::workflows::client::PrewarmImage { + image_id, + image_artifact_url_stub: body.image_artifact_url_stub, + }) + .to_workflow::() + .tag("client_id", client_id) + .send() + .await?; + + Ok(json!({})) +} + +// MARK: POST /pegboard/client/{}/toggle-drain +pub async fn drain_client( + ctx: Ctx, + client_id: Uuid, + body: models::EdgeIntercomPegboardToggleClientDrainRequest, +) -> GlobalResult { + ctx.auth().server(&ctx)?; + + todo!("publish drain/undrain signal to client wf"); + + Ok(json!({})) +} diff --git a/packages/edge/api/intercom/tests/basic.rs b/packages/edge/api/intercom/tests/basic.rs new file mode 100644 index 0000000000..6c8ea4d0f2 --- /dev/null +++ b/packages/edge/api/intercom/tests/basic.rs @@ -0,0 +1 @@ +// TODO: diff --git a/packages/edge/api/monolith-edge/Cargo.toml b/packages/edge/api/monolith-edge/Cargo.toml new file mode 100644 index 0000000000..2b3d635e4c --- /dev/null +++ b/packages/edge/api/monolith-edge/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "api-edge-monolith-edge" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +async-trait = "0.1" +chirp-client.workspace = true +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "tcp"] } +rivet-config.workspace = true +rivet-env.workspace = true +rivet-operation.workspace = true +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "fmt", + "json", + "ansi", +] } +url = "2.2.2" + +api-edge-traefik-provider.workspace = true diff --git a/packages/edge/api/monolith-edge/src/lib.rs b/packages/edge/api/monolith-edge/src/lib.rs new file mode 100644 index 0000000000..34e187ead8 --- /dev/null +++ b/packages/edge/api/monolith-edge/src/lib.rs @@ -0,0 +1,15 @@ +use rivet_operation::prelude::*; + +pub mod route; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + api_helper::start( + config.clone(), + pools, + "edge", + config.server()?.rivet.api_edge.host(), + config.server()?.rivet.api_edge.port(), + route::handle, + ) + .await +} diff --git a/packages/edge/api/monolith-edge/src/route/mod.rs b/packages/edge/api/monolith-edge/src/route/mod.rs new file mode 100644 index 0000000000..1a275ee0c7 --- /dev/null +++ b/packages/edge/api/monolith-edge/src/route/mod.rs @@ -0,0 +1,36 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; +use rivet_operation::prelude::*; + +pub async fn handle( + shared_client: chirp_client::SharedClientHandle, + config: rivet_config::Config, + pools: rivet_pools::Pools, + cache: rivet_cache::Cache, + ray_id: uuid::Uuid, + request: Request, +) -> Result, http::Error> { + let response = Response::builder(); + + // Handle route + Router::handle( + shared_client, + config, + pools, + cache, + ray_id, + request, + response, + ) + .await +} + +define_router! { + routes: {}, + mounts: [ + { + path: api_edge_traefik_provider::route::Router, + prefix: "traefik-provider", + }, + ], +} diff --git a/packages/edge/api/monolith-public/Cargo.toml b/packages/edge/api/monolith-public/Cargo.toml new file mode 100644 index 0000000000..5803ef213d --- /dev/null +++ b/packages/edge/api/monolith-public/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "api-edge-monolith-public" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +async-trait = "0.1" +chirp-client.workspace = true +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "tcp"] } +rivet-config.workspace = true +rivet-env.workspace = true +rivet-operation.workspace = true +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "ansi", + "fmt", + "json", +] } +url = "2.2.2" + +api-edge-actor.workspace = true +api-edge-intercom.workspace = true diff --git a/packages/edge/api/monolith-public/src/lib.rs b/packages/edge/api/monolith-public/src/lib.rs new file mode 100644 index 0000000000..b033b2bb2f --- /dev/null +++ b/packages/edge/api/monolith-public/src/lib.rs @@ -0,0 +1,15 @@ +use rivet_operation::prelude::*; + +pub mod route; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + api_helper::start( + config.clone(), + pools, + "public", + config.server()?.rivet.api_public.host(), + config.server()?.rivet.api_public.port(), + route::handle, + ) + .await +} diff --git a/packages/edge/api/monolith-public/src/route/mod.rs b/packages/edge/api/monolith-public/src/route/mod.rs new file mode 100644 index 0000000000..0d42ea951f --- /dev/null +++ b/packages/edge/api/monolith-public/src/route/mod.rs @@ -0,0 +1,38 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; +use rivet_operation::prelude::*; + +pub async fn handle( + shared_client: chirp_client::SharedClientHandle, + config: rivet_config::Config, + pools: rivet_pools::Pools, + cache: rivet_cache::Cache, + ray_id: uuid::Uuid, + request: Request, +) -> Result, http::Error> { + let response = Response::builder(); + + // Handle route + Router::handle( + shared_client, + config, + pools, + cache, + ray_id, + request, + response, + ) + .await +} + +define_router! { + routes: {}, + mounts: [ + { + path: api_edge_actor::route::Router, + }, + { + path: api_edge_intercom::route::Router, + }, + ], +} diff --git a/packages/edge/api/monolith-public/tests/basic.rs b/packages/edge/api/monolith-public/tests/basic.rs new file mode 100644 index 0000000000..6c8ea4d0f2 --- /dev/null +++ b/packages/edge/api/monolith-public/tests/basic.rs @@ -0,0 +1 @@ +// TODO: diff --git a/packages/edge/api/traefik-provider/Cargo.toml b/packages/edge/api/traefik-provider/Cargo.toml new file mode 100644 index 0000000000..c3fbdf599c --- /dev/null +++ b/packages/edge/api/traefik-provider/Cargo.toml @@ -0,0 +1,65 @@ +[package] +name = "api-edge-traefik-provider" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +api-helper.workspace = true +async_once = "0.2" +async-trait = "0.1" +chirp-client.workspace = true +chirp-workflow.workspace = true +chrono = "0.4" +http = "0.2" +hyper = { version = "0.14", features = ["server", "http1", "stream", "tcp"] } +lazy_static = "1.4" +prost = "0.10" +rivet-cache.workspace = true +rivet-claims.workspace = true +rivet-config.workspace = true +rivet-convert.workspace = true +rivet-env.workspace = true +rivet-health-checks.workspace = true +rivet-operation.workspace = true +rivet-pools.workspace = true +s3-util.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +thiserror = "1.0" +tokio = { version = "1.40" } +tracing = "0.1" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "ansi", + "fmt", + "json", +] } +url = "2.2.2" +util-cdn.workspace = true +util-job.workspace = true +uuid = { version = "1", features = ["v4"] } + +api-core-traefik-provider.workspace = true +cluster.workspace = true +ds.workspace = true + +[dependencies.sqlx] +workspace = true +features = ["json"] + +[dev-dependencies] +rivet-connection.workspace = true +rivet-route.workspace = true +base64 = "0.13" +reqwest = "0.11" + +cdn-namespace-auth-user-update.workspace = true +cdn-namespace-domain-create.workspace = true +faker-cdn-site.workspace = true +faker-game.workspace = true +faker-game-namespace.workspace = true +faker-game-version.workspace = true +faker-job-run.workspace = true +faker-region.workspace = true +game-get.workspace = true diff --git a/packages/edge/api/traefik-provider/src/auth.rs b/packages/edge/api/traefik-provider/src/auth.rs new file mode 100644 index 0000000000..70ff77536f --- /dev/null +++ b/packages/edge/api/traefik-provider/src/auth.rs @@ -0,0 +1,52 @@ +use api_helper::auth::{ApiAuth, AuthRateLimitCtx}; +use proto::claims::Claims; +use rivet_operation::prelude::*; + +/// Information derived from the authentication middleware. +pub struct Auth { + config: rivet_config::Config, + _claims: Option, +} + +#[async_trait] +impl ApiAuth for Auth { + async fn new( + config: rivet_config::Config, + _api_token: Option, + rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult { + Self::rate_limit(&config, rate_limit_ctx).await?; + + Ok(Auth { + config, + _claims: None, + }) + } + + async fn rate_limit( + _config: &rivet_config::Config, + _rate_limit_ctx: AuthRateLimitCtx<'_>, + ) -> GlobalResult<()> { + Ok(()) + } +} + +impl Auth { + pub async fn token(&self, token: &Option) -> GlobalResult<()> { + if let Some(traefik_provider_token) = + &self.config.server()?.rivet.api_edge.traefik_provider_token + { + let token = unwrap_with_ref!(token, API_FORBIDDEN, reason = "Token not provided"); + ensure_eq_with!( + token, + traefik_provider_token.read().as_str(), + API_FORBIDDEN, + reason = "Invalid token", + ); + } else { + // Don't need to validate token + } + + Ok(()) + } +} diff --git a/packages/edge/api/traefik-provider/src/lib.rs b/packages/edge/api/traefik-provider/src/lib.rs new file mode 100644 index 0000000000..eeaeaaafb7 --- /dev/null +++ b/packages/edge/api/traefik-provider/src/lib.rs @@ -0,0 +1,2 @@ +pub mod auth; +pub mod route; diff --git a/packages/api/traefik-provider/src/route/game_guard/dynamic_servers.rs b/packages/edge/api/traefik-provider/src/route/game_guard/dynamic_servers.rs similarity index 90% rename from packages/api/traefik-provider/src/route/game_guard/dynamic_servers.rs rename to packages/edge/api/traefik-provider/src/route/game_guard/dynamic_servers.rs index e7e934a281..ba199c46c7 100644 --- a/packages/api/traefik-provider/src/route/game_guard/dynamic_servers.rs +++ b/packages/edge/api/traefik-provider/src/route/game_guard/dynamic_servers.rs @@ -11,8 +11,9 @@ use std::{ fmt::Write, hash::{Hash, Hasher}, }; +use api_traefik_provider::types; -use crate::{auth::Auth, types}; +use crate::{auth::Auth}; #[derive(sqlx::FromRow, Clone, Debug, Serialize, Deserialize)] struct DynamicServerProxiedPort { @@ -37,58 +38,46 @@ struct DynamicServerProxiedPort { pub async fn build_ds( ctx: &Ctx, - dc_id: Uuid, server_id: Option, config: &mut types::TraefikConfigResponse, ) -> GlobalResult> { - let proxied_ports = ctx - .cache() - .ttl(60_000) - .fetch_one_json("ds_proxied_ports2", dc_id, |mut cache, dc_id| async move { - let rows = sql_fetch_all!( - [ctx, DynamicServerProxiedPort] - " - SELECT - s.server_id, - s.datacenter_id, - s.create_ts, - dc.guard_public_hostname_dns_parent, - dc.guard_public_hostname_static, - pp.label, - pp.ip, - pp.source, - gg.gg_port, - gg.port_name, - gg.protocol, - gga.auth_type, - gga.key AS auth_key, - gga.value AS auth_value - FROM db_ds.server_proxied_ports AS pp - JOIN db_ds.servers AS s - ON pp.server_id = s.server_id - JOIN db_cluster.datacenters AS dc - ON s.datacenter_id = dc.datacenter_id - JOIN db_ds.server_ports_gg AS gg - ON - pp.server_id = gg.server_id AND - pp.label = gg.port_name - LEFT JOIN db_ds.server_ports_gg_auth AS gga - ON - gg.server_id = gga.server_id AND - gg.port_name = gga.port_name - WHERE - s.datacenter_id = $1 AND - s.destroy_ts IS NULL - ", - dc_id - ) - .await?; - cache.resolve(&dc_id, rows); - - Ok(cache) - }) - .await? - .unwrap_or_default(); + // let proxied_ports = ctx + // .cache() + // .ttl(60_000) + // .fetch_one_json("ds_proxied_ports2", dc_id, |mut cache, dc_id| async move { + // let rows = sql_fetch_all!( + // [ctx, DynamicServerProxiedPort] + // " + // SELECT + // s.server_id, + // s.create_ts, + // pp.label, + // pp.ip, + // pp.source, + // gg.gg_port, + // gg.port_name, + // gg.protocol + // FROM db_ds.server_proxied_ports AS pp + // JOIN db_ds.servers AS s + // ON pp.server_id = s.server_id + // JOIN db_ds.server_ports_gg AS gg + // ON + // pp.server_id = gg.server_id AND + // pp.label = gg.port_name + // WHERE + // s.destroy_ts IS NULL + // ", + // dc_id + // ) + // .await?; + // cache.resolve(&dc_id, rows); + + // Ok(cache) + // }) + // .await? + // .unwrap_or_default(); + + todo!("fdb range read proxied ports and gg ports, combine"); let latest_ds_create_ts = proxied_ports.iter().map(|pp| pp.create_ts).max(); diff --git a/packages/api/traefik-provider/src/route/game_guard/job.rs b/packages/edge/api/traefik-provider/src/route/game_guard/job.rs similarity index 99% rename from packages/api/traefik-provider/src/route/game_guard/job.rs rename to packages/edge/api/traefik-provider/src/route/game_guard/job.rs index b037ea5cf5..3241a1d2dc 100644 --- a/packages/api/traefik-provider/src/route/game_guard/job.rs +++ b/packages/edge/api/traefik-provider/src/route/game_guard/job.rs @@ -8,8 +8,9 @@ use proto::backend::{self, pkg::*}; use redis::AsyncCommands; use rivet_operation::prelude::*; use url::Url; +use api_traefik_provider::types; -use crate::{auth::Auth, types}; +use crate::{auth::Auth}; /// Builds configuration for job routes. #[tracing::instrument(skip(ctx))] diff --git a/packages/edge/api/traefik-provider/src/route/game_guard/mod.rs b/packages/edge/api/traefik-provider/src/route/game_guard/mod.rs new file mode 100644 index 0000000000..3cf2b6ec51 --- /dev/null +++ b/packages/edge/api/traefik-provider/src/route/game_guard/mod.rs @@ -0,0 +1,65 @@ +use api_helper::{anchor::WatchIndexQuery, ctx::Ctx}; +use dynamic_servers::build_ds; +use job::build_job; +use rivet_operation::prelude::*; +use serde::{Deserialize, Serialize}; +use api_traefik_provider::types; + +use crate::auth::Auth; + +pub mod dynamic_servers; +pub mod job; + +#[derive(Debug, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct ConfigQuery { + token: Option, + server: Option, +} + +#[tracing::instrument(skip(ctx))] +pub async fn config( + ctx: Ctx, + _watch_index: WatchIndexQuery, + ConfigQuery { + token, + server, + }: ConfigQuery, +) -> GlobalResult { + ctx.auth().token(&token).await?; + + // Fetch configs and catch any errors + let mut config = types::TraefikConfigResponse::default(); + build_job(&ctx, &mut config).await?; + let latest_ds_create_ts = build_ds(&ctx, server, &mut config).await?; + + // Publish message when the request is complete + if let Some(latest_ds_create_ts) = latest_ds_create_ts { + ctx.msg(ds::workflows::server::pegboard::TraefikPoll { + server_id: server, + latest_ds_create_ts, + }) + .tag("datacenter_id", datacenter_id) + .send() + .await?; + } + + tracing::debug!( + http_services = ?config.http.services.len(), + http_routers = config.http.routers.len(), + http_middlewares = ?config.http.middlewares.len(), + tcp_services = ?config.tcp.services.len(), + tcp_routers = config.tcp.routers.len(), + tcp_middlewares = ?config.tcp.middlewares.len(), + udp_services = ?config.udp.services.len(), + udp_routers = config.udp.routers.len(), + udp_middlewares = ?config.udp.middlewares.len(), + "traefik config" + ); + + Ok(types::TraefikConfigResponseNullified { + http: config.http.nullified(), + tcp: config.tcp.nullified(), + udp: config.udp.nullified(), + }) +} diff --git a/packages/edge/api/traefik-provider/src/route/mod.rs b/packages/edge/api/traefik-provider/src/route/mod.rs new file mode 100644 index 0000000000..c237e9c141 --- /dev/null +++ b/packages/edge/api/traefik-provider/src/route/mod.rs @@ -0,0 +1,17 @@ +use api_helper::define_router; +use hyper::{Body, Request, Response}; + +// pub mod game_guard; + +define_router! { + db_driver: chirp_workflow::db::DatabaseFdbSqliteNats, + routes: { + // "config" / "game-guard": { + // GET: game_guard::config( + // query: game_guard::ConfigQuery, + // internal_endpoint: true, + // opt_auth: true, + // ), + // } + } +} diff --git a/packages/edge/infra/edge-server/Cargo.toml b/packages/edge/infra/edge-server/Cargo.toml new file mode 100644 index 0000000000..3a3f5bc9ef --- /dev/null +++ b/packages/edge/infra/edge-server/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "rivet-edge-server" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[[bin]] +name = "rivet-edge-server" +path = "src/main.rs" + +[dependencies] +anyhow = "1.0" +chirp-workflow.workspace = true +clap = { version = "4.3", features = ["derive"] } +rivet-cache.workspace = true +rivet-config.workspace = true +rivet-connection.workspace = true +rivet-migrate.workspace = true +rivet-runtime.workspace = true +rivet-server-cli.workspace = true +rivet-service-manager.workspace = true +s3-util.workspace = true + +# Standalone +edge-monolith-workflow-worker.workspace = true +edge-pegboard-ws.workspace = true + +# API +api-edge-monolith-public.workspace = true +api-edge-monolith-edge.workspace = true diff --git a/packages/infra/server/src/lib.rs b/packages/edge/infra/edge-server/src/lib.rs similarity index 100% rename from packages/infra/server/src/lib.rs rename to packages/edge/infra/edge-server/src/lib.rs diff --git a/packages/infra/edge-server/src/main.rs b/packages/edge/infra/edge-server/src/main.rs similarity index 100% rename from packages/infra/edge-server/src/main.rs rename to packages/edge/infra/edge-server/src/main.rs diff --git a/packages/edge/infra/edge-server/src/run_config.rs b/packages/edge/infra/edge-server/src/run_config.rs new file mode 100644 index 0000000000..8a76dc7893 --- /dev/null +++ b/packages/edge/infra/edge-server/src/run_config.rs @@ -0,0 +1,32 @@ +use anyhow::*; +use rivet_service_manager::{RunConfigData, Service, ServiceKind}; + +pub fn config(_rivet_config: rivet_config::Config) -> Result { + let services = vec![ + // API + Service::new( + "api_edge_monolith_public", + ServiceKind::ApiPublic, + |config, pools| Box::pin(api_edge_monolith_public::start(config, pools)), + ), + Service::new( + "api_edge_monolith_edge", + ServiceKind::ApiEdge, + |config, pools| Box::pin(api_edge_monolith_edge::start(config, pools)), + ), + Service::new("edge_pegboard_ws", ServiceKind::ApiEdge, |config, pools| { + Box::pin(edge_pegboard_ws::start(config, pools)) + }), + Service::new( + "edge_monolith_workflow_worker", + ServiceKind::Standalone, + |config, pools| Box::pin(edge_monolith_workflow_worker::start(config, pools)), + ), + ]; + + Ok(RunConfigData { + services, + sql_services: Vec::new(), + s3_buckets: Vec::new(), + }) +} diff --git a/packages/edge/services/ds/Cargo.toml b/packages/edge/services/ds/Cargo.toml new file mode 100644 index 0000000000..9b174abe21 --- /dev/null +++ b/packages/edge/services/ds/Cargo.toml @@ -0,0 +1,81 @@ +[package] +name = "edge-ds" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +anyhow = "1.0" +bit-vec = "0.6" +chirp-client.workspace = true +chirp-worker.workspace = true +chirp-workflow.workspace = true +chrono = "0.4" +cjson = "0.1" +fdb-util.workspace = true +foundationdb.workspace = true +heck = "0.3" +hex = "0.4" +http = "0.2" +lazy_static = "1.4.0" +nix = { version = "0.27", default-features = false, features = ["signal"] } +nomad-client-old = { package = "nomad-client", version = "0.0.9" } +nomad-util.workspace = true +rand = "0.8" +regex = "1.10" +reqwest = { version = "0.12", features = ["json"] } +rivet-api.workspace = true +rivet-config.workspace = true +rivet-convert.workspace = true +rivet-health-checks.workspace = true +rivet-metrics.workspace = true +rivet-operation.workspace = true +rivet-runtime.workspace = true +rivet-util.workspace = true +s3-util.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0", features = ["preserve_order"] } +sha2 = "0.10" +sqlite-util.workspace = true +strum = { version = "0.24", features = ["derive"] } +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "ansi", + "fmt", + "json", +] } +util-build.workspace = true +util-job.workspace = true +uuid = { version = "1", features = ["v4", "serde"] } + +build-get.workspace = true +build.workspace = true +cluster.workspace = true +edge-pegboard.workspace = true +game-resolve-namespace-id.workspace = true +ip-info.workspace = true +mm-config-version-get.workspace = true +mm-lobby-get.workspace = true +mm-lobby-list-for-user-id.workspace = true +pegboard.workspace = true +region-get.workspace = true +tier.workspace = true +token-create.workspace = true +upload-get.workspace = true +user-identity-get.workspace = true +game-namespace-get.workspace = true +game-get.workspace = true + +[dependencies.sqlx] +workspace = true + +[dependencies.nomad_client] +workspace = true + +[dev-dependencies] +cluster.workspace = true +faker-build.workspace = true +faker-game.workspace = true +faker-region.workspace = true +faker-user.workspace = true +game-get.workspace = true diff --git a/packages/edge/services/ds/src/keys/env.rs b/packages/edge/services/ds/src/keys/env.rs new file mode 100644 index 0000000000..3aa6fd379b --- /dev/null +++ b/packages/edge/services/ds/src/keys/env.rs @@ -0,0 +1,98 @@ +use std::result::Result::Ok; + +use anyhow::*; +use chirp_workflow::prelude::*; +use fdb_util::prelude::*; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug)] +pub struct ServerKey { + environment_id: Uuid, + create_ts: i64, + pub server_id: Uuid, +} + +impl ServerKey { + pub fn new(environment_id: Uuid, create_ts: i64, server_id: Uuid) -> Self { + ServerKey { + environment_id, + create_ts, + server_id, + } + } + + pub fn subspace(environment_id: Uuid) -> ServerSubspaceKey { + ServerSubspaceKey::new(environment_id) + } +} + +impl FormalKey for ServerKey { + type Value = ServerKeyData; + + fn deserialize(&self, raw: &[u8]) -> Result { + serde_json::from_slice(raw).map_err(Into::into) + } + + fn serialize(&self, value: Self::Value) -> Result> { + serde_json::to_vec(&value).map_err(Into::into) + } +} + +impl TuplePack for ServerKey { + fn pack( + &self, + w: &mut W, + tuple_depth: TupleDepth, + ) -> std::io::Result { + let t = ( + "env", + self.environment_id, + "server", + self.create_ts, + self.server_id, + ); + t.pack(w, tuple_depth) + } +} + +impl<'de> TupleUnpack<'de> for ServerKey { + fn unpack(input: &[u8], tuple_depth: TupleDepth) -> PackResult<(&[u8], Self)> { + let (input, (_, environment_id, _, create_ts, server_id)) = + <(Cow, Uuid, Cow, i64, Uuid)>::unpack(input, tuple_depth)?; + let v = ServerKey { + environment_id, + create_ts, + server_id, + }; + + Ok((input, v)) + } +} + +#[derive(Serialize, Deserialize)] +pub struct ServerKeyData { + pub is_destroyed: bool, + pub tags: Vec<(String, String)>, +} + +pub struct ServerSubspaceKey { + environment_id: Uuid, +} + +impl ServerSubspaceKey { + pub fn new(environment_id: Uuid) -> Self { + ServerSubspaceKey { environment_id } + } +} + +impl TuplePack for ServerSubspaceKey { + fn pack( + &self, + w: &mut W, + tuple_depth: TupleDepth, + ) -> std::io::Result { + let t = ("env", self.environment_id, "server"); + t.pack(w, tuple_depth) + } +} diff --git a/packages/edge/services/ds/src/keys/mod.rs b/packages/edge/services/ds/src/keys/mod.rs new file mode 100644 index 0000000000..a7b3b16eec --- /dev/null +++ b/packages/edge/services/ds/src/keys/mod.rs @@ -0,0 +1,8 @@ +use foundationdb as fdb; + +pub mod env; +pub mod server; + +pub fn subspace() -> fdb::tuple::Subspace { + fdb::tuple::Subspace::all().subspace(&("ds")) +} diff --git a/packages/edge/services/ds/src/keys/server.rs b/packages/edge/services/ds/src/keys/server.rs new file mode 100644 index 0000000000..2737e48ee8 --- /dev/null +++ b/packages/edge/services/ds/src/keys/server.rs @@ -0,0 +1,50 @@ +use std::result::Result::Ok; + +use anyhow::*; +use chirp_workflow::prelude::*; +use fdb_util::prelude::*; + +#[derive(Debug)] +pub struct CreateTsKey { + server_id: Uuid, +} + +impl CreateTsKey { + pub fn new(server_id: Uuid) -> Self { + CreateTsKey { server_id } + } +} + +impl FormalKey for CreateTsKey { + // Timestamp. + type Value = i64; + + fn deserialize(&self, raw: &[u8]) -> Result { + Ok(i64::from_be_bytes(raw.try_into()?)) + } + + fn serialize(&self, value: Self::Value) -> Result> { + Ok(value.to_be_bytes().to_vec()) + } +} + +impl TuplePack for CreateTsKey { + fn pack( + &self, + w: &mut W, + tuple_depth: TupleDepth, + ) -> std::io::Result { + let t = ("server", "data", self.server_id, "create_ts"); + t.pack(w, tuple_depth) + } +} + +impl<'de> TupleUnpack<'de> for CreateTsKey { + fn unpack(input: &[u8], tuple_depth: TupleDepth) -> PackResult<(&[u8], Self)> { + let (input, (_, _, server_id, _)) = + <(Cow, Cow, Uuid, Cow)>::unpack(input, tuple_depth)?; + let v = CreateTsKey { server_id }; + + Ok((input, v)) + } +} diff --git a/packages/edge/services/ds/src/lib.rs b/packages/edge/services/ds/src/lib.rs new file mode 100644 index 0000000000..0fa8fca10e --- /dev/null +++ b/packages/edge/services/ds/src/lib.rs @@ -0,0 +1,18 @@ +use chirp_workflow::prelude::*; + +pub mod keys; +pub mod ops; +pub mod types; +pub mod util; +pub mod workflows; + +pub fn registry() -> WorkflowResult { + use workflows::*; + + let mut registry = Registry::new(); + registry.register_workflow::()?; + registry.register_workflow::()?; + registry.register_workflow::()?; + + Ok(registry) +} diff --git a/packages/edge/services/ds/src/ops/game_config/get.rs b/packages/edge/services/ds/src/ops/game_config/get.rs new file mode 100644 index 0000000000..89dbe6cf5c --- /dev/null +++ b/packages/edge/services/ds/src/ops/game_config/get.rs @@ -0,0 +1,62 @@ +use std::convert::{TryFrom, TryInto}; + +use chirp_workflow::prelude::*; + +use crate::types::GameConfig; + +#[derive(Debug, Default)] +pub struct Input { + pub game_ids: Vec, +} + +#[derive(Debug)] +pub struct Output { + pub game_configs: Vec, +} + +#[derive(sqlx::FromRow, Clone)] +struct GameConfigRow { + game_id: Uuid, + host_networking_enabled: bool, + root_user_enabled: bool, +} + +impl TryFrom for GameConfig { + type Error = GlobalError; + + fn try_from(value: GameConfigRow) -> GlobalResult { + Ok(GameConfig { + game_id: value.game_id, + host_networking_enabled: value.host_networking_enabled, + root_user_enabled: value.root_user_enabled, + }) + } +} + +#[operation] +pub async fn ds_game_config_get(ctx: &OperationCtx, input: &Input) -> GlobalResult { + let rows = sql_fetch_all!( + [ctx, GameConfigRow] + " + SELECT game_id, host_networking_enabled, root_user_enabled + FROM db_ds.game_config + WHERE game_id = ANY($1) + ", + &input.game_ids, + ) + .await?; + + let game_configs = input + .game_ids + .iter() + .map(|game_id| { + if let Some(row) = rows.iter().find(|x| x.game_id == *game_id) { + row.clone().try_into() + } else { + Ok(GameConfig::default(*game_id)) + } + }) + .collect::>>()?; + + Ok(Output { game_configs }) +} diff --git a/packages/edge/services/ds/src/ops/game_config/mod.rs b/packages/edge/services/ds/src/ops/game_config/mod.rs new file mode 100644 index 0000000000..796e2aad8c --- /dev/null +++ b/packages/edge/services/ds/src/ops/game_config/mod.rs @@ -0,0 +1,2 @@ +pub mod get; +pub mod upsert; diff --git a/packages/edge/services/ds/src/ops/game_config/upsert.rs b/packages/edge/services/ds/src/ops/game_config/upsert.rs new file mode 100644 index 0000000000..81e208c8fa --- /dev/null +++ b/packages/edge/services/ds/src/ops/game_config/upsert.rs @@ -0,0 +1,31 @@ +use chirp_workflow::prelude::*; + +#[derive(Debug, Default)] +pub struct Input { + pub game_id: Uuid, + pub host_networking_enabled: Option, + pub root_user_enabled: Option, +} + +#[operation] +pub async fn ds_game_config_upsert(ctx: &OperationCtx, input: &Input) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + INSERT INTO db_ds.game_config (game_id, host_networking_enabled, root_user_enabled, runtime) + SELECT $1, COALESCE($2, false), COALESCE($3, false), $4 + ON CONFLICT (game_id) DO UPDATE + SET + host_networking_enabled = COALESCE($2, EXCLUDED.host_networking_enabled), + root_user_enabled = COALESCE($3, EXCLUDED.root_user_enabled), + runtime = COALESCE($4, EXCLUDED.runtime) + ", + &input.game_id, + input.host_networking_enabled, + input.root_user_enabled, + 0, // Removed runtime + ) + .await?; + + Ok(()) +} diff --git a/packages/edge/services/ds/src/ops/mod.rs b/packages/edge/services/ds/src/ops/mod.rs new file mode 100644 index 0000000000..d87e5af7a0 --- /dev/null +++ b/packages/edge/services/ds/src/ops/mod.rs @@ -0,0 +1,2 @@ +pub mod game_config; +pub mod server; diff --git a/packages/edge/services/ds/src/ops/server/allocate_ingress_port.rs b/packages/edge/services/ds/src/ops/server/allocate_ingress_port.rs new file mode 100644 index 0000000000..d94d98ee7b --- /dev/null +++ b/packages/edge/services/ds/src/ops/server/allocate_ingress_port.rs @@ -0,0 +1,56 @@ +use std::collections::HashMap; + +use chirp_workflow::prelude::*; +use fdb_util::{FormalKey, SERIALIZABLE, SNAPSHOT}; +use foundationdb::{self as fdb, options::StreamingMode}; +use futures_util::TryStreamExt; + +use crate::keys; + +#[derive(Debug, Default)] +pub struct Input { + pub server_id: Uuid, + pub protocols: Vec, +} + +#[derive(Debug)] +pub struct Output { + pub ports: Vec, +} + +#[operation] +pub async fn ds_server_allocate_ingress_port(ctx: &OperationCtx, input: &Input) -> GlobalResult { + /// Choose which port to assign for a job's ingress port. + /// This is required because TCP and UDP do not have a `Host` header and thus cannot be re-routed by hostname. + /// + /// If not provided by `ProxiedPort`, then: + /// - HTTP: 80 + /// - HTTPS: 443 + /// - TCP/TLS: random + /// - UDP: random + + let gg_config = &ctx.config().server()?.rivet.guard; + + match protocol { + GameGuardProtocol::Http => Ok(gg_config.http_port()), + GameGuardProtocol::Https => Ok(gg_config.https_port()), + GameGuardProtocol::Tcp | GameGuardProtocol::TcpTls => { + bind_with_retries( + ctx, + tx, + protocol, + gg_config.min_ingress_port_tcp()..=gg_config.max_ingress_port_tcp(), + ) + .await + } + GameGuardProtocol::Udp => { + bind_with_retries( + ctx, + tx, + protocol, + gg_config.min_ingress_port_udp()..=gg_config.max_ingress_port_udp(), + ) + .await + } + } +} diff --git a/packages/edge/services/ds/src/ops/server/get.rs b/packages/edge/services/ds/src/ops/server/get.rs new file mode 100644 index 0000000000..1cd162ca41 --- /dev/null +++ b/packages/edge/services/ds/src/ops/server/get.rs @@ -0,0 +1,308 @@ +use std::{collections::HashMap, convert::TryInto}; + +use chirp_workflow::prelude::*; +use futures_util::{StreamExt, TryStreamExt}; + +use crate::types::{ + EndpointType, GameGuardProtocol, HostProtocol, NetworkMode, Port, Routing, Server, + ServerLifecycle, ServerResources, +}; + +#[derive(sqlx::FromRow)] +struct ServerRow { + env_id: Uuid, + cluster_id: Uuid, + tags: sqlx::types::Json>, + resources_cpu_millicores: i64, + resources_memory_mib: i64, + lifecycle_kill_timeout_ms: i64, + lifecycle_durable: bool, + create_ts: i64, + start_ts: Option, + connectable_ts: Option, + destroy_ts: Option, + image_id: Uuid, + args: sqlx::types::Json>, + network_mode: i64, + environment: sqlx::types::Json>, +} + +#[derive(sqlx::FromRow)] +struct PegboardRow { + client_wan_hostname: Option, +} + +#[derive(sqlx::FromRow)] +struct ServerPortGg { + port_name: String, + port_number: Option, + gg_port: i64, + protocol: i64, +} + +#[derive(sqlx::FromRow)] +struct ServerPortHost { + port_name: String, + protocol: i64, +} + +#[derive(sqlx::FromRow)] +struct ProxiedPort { + label: String, + source: i64, +} + +struct ServerData { + server_id: Uuid, + row: ServerRow, + pb_row: PegboardRow, + port_gg_rows: Vec, + port_host_rows: Vec, + proxied_port_rows: Vec, +} + +#[derive(Debug)] +pub struct Input { + pub server_ids: Vec, + + /// If null, will fall back to the default endpoint type for the datacenter. + /// + /// If the datacenter has a parent hostname, will use hostname endpoint. Otherwise, will use + /// path endpoint. + pub endpoint_type: Option, +} + +#[derive(Debug)] +pub struct Output { + pub servers: Vec, +} + +#[operation] +pub async fn ds_server_get(ctx: &OperationCtx, input: &Input) -> GlobalResult { + let server_data = futures_util::stream::iter(input.server_ids.clone()) + .map(|server_id| async move { + let Some(workflow_id) = ctx + .find_workflow::(("server_id", server_id)) + .await? + else { + return GlobalResult::Ok(None); + }; + let pool = &ctx.sqlite_for_workflow(workflow_id).await?; + + let (server_row, pb_row, port_gg_rows, port_host_rows, proxied_port_rows) = tokio::try_join!( + sql_fetch_one!( + [ctx, ServerRow, pool] + " + SELECT + env_id, + cluster_id, + json(tags), + resources_cpu_millicores, + resources_memory_mib, + lifecycle_kill_timeout_ms, + lifecycle_durable, + create_ts, + start_ts, + connectable_ts, + destroy_ts, + image_id, + json(args), + network_mode, + json(environment) + FROM state + ", + ), + sql_fetch_one!( + [ctx, PegboardRow, pool] + " + SELECT client_wan_hostname + FROM pegboard + ", + ), + sql_fetch_all!( + [ctx, ServerPortGg, pool] + " + SELECT + port_name, + port_number, + gg_port, + protocol + FROM server_ports_gg + ", + ), + sql_fetch_all!( + [ctx, ServerPortHost, pool] + " + SELECT + port_name, + protocol + FROM server_ports_host + ", + ), + sql_fetch_all!( + [ctx, ProxiedPort, pool] + " + SELECT + label, + source + FROM server_proxied_ports + ", + ), + )?; + + Ok(Some(ServerData { + server_id, + row: server_row, + pb_row, + port_gg_rows, + port_host_rows, + proxied_port_rows, + })) + }) + .buffer_unordered(1024) + .try_filter_map(|x| std::future::ready(Ok(x))) + .try_collect::>() + .await?; + + let dc_id = ctx.config().server()?.rivet.edge()?.datacenter_id; + let dc_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![dc_id], + }) + .await?; + let dc = unwrap!(dc_res.datacenters.first()); + + let servers = server_data + .iter() + .map(|s| { + let endpoint_type = + input + .endpoint_type + .unwrap_or(EndpointType::default_for_guard_public_hostname( + &dc.guard_public_hostname, + )); + + let is_connectable = s.row.connectable_ts.is_some(); + let wan_hostname = s.pb_row.client_wan_hostname.clone(); + + let ports = s + .port_gg_rows + .iter() + .map(|gg_port| { + Ok(( + gg_port.port_name.clone(), + create_port_gg( + s.server_id, + is_connectable, + gg_port, + unwrap!(GameGuardProtocol::from_repr(gg_port.protocol.try_into()?)), + endpoint_type, + &dc.guard_public_hostname, + )?, + )) + }) + .chain(s.port_host_rows.iter().map(|host_port| { + let proxied_port = s.proxied_port_rows.iter().find(|x| { + // Find the label to compare to based on the driver + let transformed_label = + crate::util::pegboard_normalize_port_label(&host_port.port_name); + + x.label == transformed_label + }); + + Ok(( + host_port.port_name.clone(), + create_port_host( + is_connectable, + wan_hostname.as_deref(), + host_port, + proxied_port, + )?, + )) + })) + .collect::>>()?; + + Ok(Server { + server_id: s.server_id, + env_id: s.row.env_id, + cluster_id: s.row.cluster_id, + tags: s.row.tags.0.clone(), + resources: ServerResources { + cpu_millicores: s.row.resources_cpu_millicores.try_into()?, + memory_mib: s.row.resources_memory_mib.try_into()?, + }, + lifecycle: ServerLifecycle { + kill_timeout_ms: s.row.lifecycle_kill_timeout_ms, + durable: s.row.lifecycle_durable, + }, + args: s.row.args.0.clone(), + environment: s.row.environment.0.clone(), + image_id: s.row.image_id, + network_mode: unwrap!(NetworkMode::from_repr(s.row.network_mode.try_into()?)), + network_ports: ports, + create_ts: s.row.create_ts, + start_ts: s.row.start_ts, + connectable_ts: s.row.connectable_ts, + destroy_ts: s.row.destroy_ts, + }) + }) + .collect::>>()?; + + Ok(Output { servers }) +} + +fn create_port_gg( + server_id: Uuid, + is_connectable: bool, + gg_port: &ServerPortGg, + protocol: GameGuardProtocol, + endpoint_type: EndpointType, + guard_public_hostname: &cluster::types::GuardPublicHostname, +) -> GlobalResult { + let (public_hostname, public_port, public_path) = if is_connectable { + let (hostname, path) = crate::util::build_ds_hostname_and_path( + server_id, + &gg_port.port_name, + protocol, + endpoint_type, + guard_public_hostname, + )?; + let port = gg_port.gg_port.try_into()?; + (Some(hostname), Some(port), path) + } else { + (None, None, None) + }; + + Ok(Port { + internal_port: gg_port.port_number.map(TryInto::try_into).transpose()?, + public_hostname, + public_port, + public_path, + routing: Routing::GameGuard { protocol }, + }) +} + +fn create_port_host( + is_connectable: bool, + wan_hostname: Option<&str>, + host_port: &ServerPortHost, + proxied_port: Option<&ProxiedPort>, +) -> GlobalResult { + Ok(Port { + internal_port: None, + public_hostname: if is_connectable { + proxied_port.and(wan_hostname).map(|x| x.to_string()) + } else { + None + }, + public_port: if is_connectable { + proxied_port.map(|x| x.source.try_into()).transpose()? + } else { + None + }, + public_path: None, + routing: Routing::Host { + protocol: unwrap!(HostProtocol::from_repr(host_port.protocol.try_into()?)), + }, + }) +} diff --git a/packages/edge/services/ds/src/ops/server/list_for_env.rs b/packages/edge/services/ds/src/ops/server/list_for_env.rs new file mode 100644 index 0000000000..a2753f5c84 --- /dev/null +++ b/packages/edge/services/ds/src/ops/server/list_for_env.rs @@ -0,0 +1,98 @@ +use std::collections::HashMap; + +use chirp_workflow::prelude::*; +use fdb_util::{FormalKey, SERIALIZABLE, SNAPSHOT}; +use foundationdb::{self as fdb, options::StreamingMode}; +use futures_util::TryStreamExt; + +use crate::keys; + +#[derive(Debug, Default)] +pub struct Input { + pub env_id: Uuid, + pub tags: HashMap, + pub include_destroyed: bool, + pub cursor: Option, + pub limit: usize, +} + +#[derive(Debug)] +pub struct Output { + pub server_ids: Vec, +} + +#[operation] +pub async fn ds_server_list_for_env(ctx: &OperationCtx, input: &Input) -> GlobalResult { + let server_ids = ctx + .fdb() + .await? + .run(|tx, _mc| async move { + let server_subspace = + keys::subspace().subspace(&keys::env::ServerKey::subspace(input.env_id)); + let (start, end) = server_subspace.range(); + + let end = if let Some(server_id) = input.cursor { + let create_ts_key = keys::server::CreateTsKey::new(server_id); + + // Get create ts of cursor + if let Some(entry) = tx + .get(&keys::subspace().pack(&create_ts_key), SERIALIZABLE) + .await? + { + let create_ts = create_ts_key + .deserialize(&entry) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + keys::subspace().pack(&keys::env::ServerKey::new( + input.env_id, + create_ts, + server_id, + )) + } else { + end + } + } else { + end + }; + + let mut stream = tx.get_ranges_keyvalues( + fdb::RangeOption { + mode: StreamingMode::Iterator, + reverse: true, + ..(start, end).into() + }, + // NOTE: Does not have to be serializable because we are listing, stale data does not matter + SNAPSHOT, + ); + let mut results = Vec::new(); + + while let Some(entry) = stream.try_next().await? { + let server_key = keys::subspace() + .unpack::(entry.key()) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + let data = server_key + .deserialize(entry.value()) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + + if input.include_destroyed || !data.is_destroyed { + // Compute intersection between ds tags and input tags + let tags_match = data + .tags + .iter() + .all(|(k, v)| input.tags.iter().any(|(k2, v2)| k == k2 && v == v2)); + + if tags_match { + results.push(server_key.server_id); + + if results.len() == input.limit { + break; + } + } + } + } + + Ok(results) + }) + .await?; + + Ok(Output { server_ids }) +} diff --git a/packages/edge/services/ds/src/ops/server/mod.rs b/packages/edge/services/ds/src/ops/server/mod.rs new file mode 100644 index 0000000000..f76d755aeb --- /dev/null +++ b/packages/edge/services/ds/src/ops/server/mod.rs @@ -0,0 +1,3 @@ +// pub mod allocate_ingress_port; +pub mod get; +pub mod list_for_env; diff --git a/packages/edge/services/ds/src/types.rs b/packages/edge/services/ds/src/types.rs new file mode 100644 index 0000000000..f32596fd7f --- /dev/null +++ b/packages/edge/services/ds/src/types.rs @@ -0,0 +1,365 @@ +use std::{collections::HashMap, fmt}; + +use chirp_workflow::prelude::*; +use rivet_api::models; +use rivet_convert::{ApiFrom, ApiInto, ApiTryFrom}; +use serde::{Deserialize, Serialize}; +use serde_json::json; +use strum::FromRepr; + +#[derive(Debug, Clone)] +pub struct Server { + pub server_id: Uuid, + pub env_id: Uuid, + pub cluster_id: Uuid, + pub tags: HashMap, + pub resources: ServerResources, + pub lifecycle: ServerLifecycle, + pub create_ts: i64, + pub start_ts: Option, + pub connectable_ts: Option, + pub destroy_ts: Option, + pub image_id: Uuid, + pub args: Vec, + pub network_mode: NetworkMode, + pub environment: HashMap, + pub network_ports: HashMap, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +pub struct ServerResources { + pub cpu_millicores: u32, + pub memory_mib: u32, +} + +impl ServerResources { + pub fn default_isolate() -> Self { + ServerResources { + cpu_millicores: 125, + memory_mib: 128, + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +pub struct ServerLifecycle { + pub kill_timeout_ms: i64, + pub durable: bool, +} + +#[derive(Serialize, Deserialize, Hash, Debug, Clone, Copy, PartialEq, Eq, FromRepr)] +pub enum NetworkMode { + Bridge = 0, + Host = 1, +} + +#[derive(Debug, Clone)] +pub struct Port { + // Null when using host networking since one is automatically assigned + pub internal_port: Option, + pub public_hostname: Option, + pub public_port: Option, + pub public_path: Option, + pub routing: Routing, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +pub enum Routing { + GameGuard { protocol: GameGuardProtocol }, + Host { protocol: HostProtocol }, +} + +#[derive(Serialize, Deserialize, Hash, Debug, Clone, Copy, PartialEq, Eq, FromRepr)] +pub enum GameGuardProtocol { + Http = 0, + Https = 1, + Tcp = 2, + TcpTls = 3, + Udp = 4, +} + +impl fmt::Display for GameGuardProtocol { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> 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(Serialize, Deserialize, Hash, Debug, Clone, Copy, PartialEq, Eq, FromRepr)] +pub enum HostProtocol { + Tcp = 0, + Udp = 1, +} + +#[derive(Debug, Clone)] +pub struct GameConfig { + pub game_id: Uuid, + pub host_networking_enabled: bool, + pub root_user_enabled: bool, +} + +impl GameConfig { + pub fn default(game_id: Uuid) -> Self { + GameConfig { + game_id, + host_networking_enabled: false, + root_user_enabled: false, + } + } +} + +/// Determines how port endpoints are returned. +#[derive(Debug, Copy, Clone, Hash, Serialize, Deserialize)] +#[repr(u8)] +pub enum EndpointType { + #[serde(rename = "hostname")] + Hostname = 0, + #[serde(rename = "path")] + Path = 1, +} + +impl EndpointType { + pub fn default_for_guard_public_hostname( + hostname: &cluster::types::GuardPublicHostname, + ) -> Self { + match hostname { + cluster::types::GuardPublicHostname::DnsParent(_) => Self::Hostname, + cluster::types::GuardPublicHostname::Static(_) => Self::Path, + } + } +} + +impl fmt::Display for EndpointType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + EndpointType::Hostname => write!(f, "hostname"), + EndpointType::Path => write!(f, "path"), + } + } +} + +pub fn convert_actor_to_api( + value: Server, + datacenter: &cluster::types::Datacenter, +) -> GlobalResult { + Ok(models::ActorActor { + id: value.server_id, + region: datacenter.name_id.clone(), + created_at: util::timestamp::to_string(value.create_ts)?, + // `started_at` -> `connectable_ts` is intentional. We don't expose the internal + // workings of DS to the API, so we need to return the timestamp at which the serer can + // actually do anything useful. + started_at: value + .connectable_ts + .map(util::timestamp::to_string) + .transpose()?, + destroyed_at: value + .destroy_ts + .map(util::timestamp::to_string) + .transpose()?, + tags: Some(serde_json::to_value(value.tags)?), + runtime: Box::new(models::ActorRuntime { + build: value.image_id, + arguments: Some(value.args), + environment: Some(value.environment), + }), + network: Box::new(models::ActorNetwork { + mode: value.network_mode.api_into(), + ports: value + .network_ports + .into_iter() + .map(|(s, p)| (s, p.api_into())) + .collect::>(), + }), + lifecycle: Box::new(value.lifecycle.api_into()), + resources: Box::new(value.resources.api_into()), + }) +} + +impl ApiFrom for ServerResources { + fn api_from(value: models::ActorResources) -> ServerResources { + ServerResources { + cpu_millicores: value.cpu as u32, + memory_mib: value.memory as u32, + } + } +} + +impl ApiFrom for models::ActorResources { + fn api_from(value: ServerResources) -> models::ActorResources { + models::ActorResources { + cpu: value.cpu_millicores as i32, + memory: value.memory_mib as i32, + } + } +} + +impl ApiFrom for ServerLifecycle { + fn api_from(value: models::ActorLifecycle) -> ServerLifecycle { + ServerLifecycle { + kill_timeout_ms: value.kill_timeout.unwrap_or_default(), + durable: value.durable.unwrap_or_default(), + } + } +} + +impl ApiFrom for models::ActorLifecycle { + fn api_from(value: ServerLifecycle) -> models::ActorLifecycle { + models::ActorLifecycle { + kill_timeout: Some(value.kill_timeout_ms), + durable: Some(value.durable), + } + } +} + +impl ApiFrom for NetworkMode { + fn api_from(value: models::ActorNetworkMode) -> NetworkMode { + match value { + models::ActorNetworkMode::Bridge => NetworkMode::Bridge, + models::ActorNetworkMode::Host => NetworkMode::Host, + } + } +} + +impl ApiFrom for models::ActorNetworkMode { + fn api_from(value: NetworkMode) -> models::ActorNetworkMode { + match value { + NetworkMode::Bridge => models::ActorNetworkMode::Bridge, + NetworkMode::Host => models::ActorNetworkMode::Host, + } + } +} + +impl ApiFrom for models::ActorPort { + fn api_from(value: Port) -> models::ActorPort { + let (protocol, routing, url) = match &value.routing { + Routing::GameGuard { protocol } => { + 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!({})), + ..Default::default() + }, + url, + ) + } + Routing::Host { protocol } => ( + (*protocol).api_into(), + models::ActorPortRouting { + host: Some(json!({})), + ..Default::default() + }, + None, + ), + }; + + models::ActorPort { + protocol, + internal_port: value.internal_port, + hostname: value.public_hostname, + port: value.public_port, + path: value.public_path, + url, + routing: Box::new(routing), + } + } +} + +impl ApiFrom for GameGuardProtocol { + fn api_from(value: models::ActorPortProtocol) -> GameGuardProtocol { + match value { + models::ActorPortProtocol::Udp => GameGuardProtocol::Udp, + models::ActorPortProtocol::Tcp => GameGuardProtocol::Tcp, + models::ActorPortProtocol::Http => GameGuardProtocol::Http, + models::ActorPortProtocol::Https => GameGuardProtocol::Https, + models::ActorPortProtocol::TcpTls => GameGuardProtocol::TcpTls, + } + } +} + +impl ApiFrom for models::ActorPortProtocol { + fn api_from(value: GameGuardProtocol) -> models::ActorPortProtocol { + match value { + GameGuardProtocol::Udp => models::ActorPortProtocol::Udp, + GameGuardProtocol::Tcp => models::ActorPortProtocol::Tcp, + GameGuardProtocol::Http => models::ActorPortProtocol::Http, + GameGuardProtocol::Https => models::ActorPortProtocol::Https, + GameGuardProtocol::TcpTls => models::ActorPortProtocol::TcpTls, + } + } +} + +impl ApiTryFrom for HostProtocol { + type Error = GlobalError; + fn api_try_from(value: models::ActorPortProtocol) -> GlobalResult { + Ok(match value { + models::ActorPortProtocol::Udp => HostProtocol::Udp, + models::ActorPortProtocol::Tcp => HostProtocol::Tcp, + _ => { + bail_with!( + ACTOR_FAILED_TO_CREATE, + error = "Host port protocol must be either TCP or UDP." + ); + } + }) + } +} + +impl ApiFrom for models::ActorPortProtocol { + fn api_from(value: HostProtocol) -> models::ActorPortProtocol { + match value { + HostProtocol::Udp => models::ActorPortProtocol::Udp, + HostProtocol::Tcp => models::ActorPortProtocol::Tcp, + } + } +} + +impl ApiFrom for EndpointType { + fn api_from(value: models::ActorEndpointType) -> EndpointType { + match value { + models::ActorEndpointType::Hostname => EndpointType::Hostname, + models::ActorEndpointType::Path => EndpointType::Path, + } + } +} + +impl ApiFrom for models::ActorEndpointType { + fn api_from(value: EndpointType) -> models::ActorEndpointType { + match value { + EndpointType::Hostname => models::ActorEndpointType::Hostname, + EndpointType::Path => models::ActorEndpointType::Path, + } + } +} diff --git a/packages/edge/services/ds/src/util/mod.rs b/packages/edge/services/ds/src/util/mod.rs new file mode 100644 index 0000000000..783e5f0f8f --- /dev/null +++ b/packages/edge/services/ds/src/util/mod.rs @@ -0,0 +1,61 @@ +use chirp_workflow::prelude::*; +use cluster::types::GuardPublicHostname; + +use crate::types::{EndpointType, GameGuardProtocol}; + +pub fn build_ds_hostname_and_path( + server_id: Uuid, + port_name: &str, + protocol: GameGuardProtocol, + endpoint_type: EndpointType, + guard_public_hostname: &GuardPublicHostname, +) -> GlobalResult<(String, Option)> { + let is_http = matches!(protocol, GameGuardProtocol::Http | GameGuardProtocol::Https); + match (is_http, endpoint_type, guard_public_hostname) { + // Non-HTTP protocols can use any hostname (since they route by port), but including the + // server in the subdomain is a convenience + (true, EndpointType::Hostname, GuardPublicHostname::DnsParent(dns_parent)) + | (false, _, GuardPublicHostname::DnsParent(dns_parent)) => { + Ok((format!("{server_id}-{port_name}.actor.{dns_parent}"), None)) + } + + (true, EndpointType::Hostname, GuardPublicHostname::Static(_)) => { + bail!("cannot use hostname endpoint type with static hostname") + } + + (true, EndpointType::Path, GuardPublicHostname::DnsParent(dns_parent)) => Ok(( + // This will not collide with host-based routing since server IDs are always UUIDs. + // + // This is stored on a subdomain of `actor` instead of `actor.{dns_parent}` since + // hosting actors on a parent domain of the `{actor_id}.actor.{dns_parent}` could lead + // to a security vulnerability if cookies on the parent domain have a misconfigured + // domain scope that grants access to the children. This is a very niche security + // vulnerability, but worth avoiding regardless. + format!("route.actor.{dns_parent}"), + Some(format!("/{server_id}-{port_name}")), + )), + + (true, EndpointType::Path, GuardPublicHostname::Static(static_)) => { + Ok((static_.clone(), Some(format!("/{server_id}-{port_name}")))) + } + + // Non-HTTP protocols will be routed via the port, so we can use the static protocol + (false, _, GuardPublicHostname::Static(static_)) => Ok((static_.clone(), None)), + } +} + +pub fn image_artifact_url_stub( + config: &rivet_config::Config, + upload_id: Uuid, + file_name: &str, +) -> GlobalResult { + Ok(format!( + "/s3-cache/{namespace}-bucket-build/{upload_id}/{file_name}", + namespace = config.server()?.rivet.namespace, + )) +} + +/// Standardize the port label format. +pub fn pegboard_normalize_port_label(port_label: &str) -> String { + heck::SnakeCase::to_snake_case(port_label) +} diff --git a/packages/edge/services/ds/src/workflows/mod.rs b/packages/edge/services/ds/src/workflows/mod.rs new file mode 100644 index 0000000000..74f47ad347 --- /dev/null +++ b/packages/edge/services/ds/src/workflows/mod.rs @@ -0,0 +1 @@ +pub mod server; diff --git a/packages/edge/services/ds/src/workflows/server/mod.rs b/packages/edge/services/ds/src/workflows/server/mod.rs new file mode 100644 index 0000000000..e78f4555c0 --- /dev/null +++ b/packages/edge/services/ds/src/workflows/server/mod.rs @@ -0,0 +1,636 @@ +use std::collections::HashMap; + +use build::types::{BuildCompression, BuildKind}; +use chirp_workflow::prelude::*; +use cluster::types::BuildDeliveryMethod; +use fdb_util::FormalKey; +use foundationdb as fdb; +use sqlite_util::SqlitePoolExt; +use util::serde::AsHashableExt; + +use crate::{ + keys, + types::{GameGuardProtocol, NetworkMode, Routing, ServerLifecycle, ServerResources}, +}; + +pub mod pegboard; + +// In ms, a small amount of time to separate the completion of the drain to the deletion of the +// cluster server. We want the drain to complete first. +const DRAIN_PADDING_MS: i64 = 10000; +/// Time to delay an actor from rescheduling after a rescheduling failure. +const BASE_RETRY_TIMEOUT_MS: usize = 2000; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Input { + pub server_id: Uuid, + pub env_id: Uuid, + pub tags: HashMap, + pub resources: ServerResources, + pub lifecycle: ServerLifecycle, + pub image_id: Uuid, + pub root_user_enabled: bool, + pub args: Vec, + pub network_mode: NetworkMode, + pub environment: HashMap, + pub network_ports: HashMap, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +pub struct Port { + // Null when using host networking since one is automatically assigned + pub internal_port: Option, + pub routing: Routing, +} + +#[workflow] +pub async fn ds_server(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + let validation_res = ctx + .activity(ValidateInput { + env_id: input.env_id, + tags: input.tags.as_hashable(), + resources: input.resources.clone(), + image_id: input.image_id, + root_user_enabled: input.root_user_enabled, + args: input.args.clone(), + network_mode: input.network_mode, + environment: input.environment.as_hashable(), + network_ports: input.network_ports.as_hashable(), + }) + .await?; + + if let Some(error_message) = validation_res { + ctx.msg(Failed { + message: error_message, + }) + .tag("server_id", input.server_id) + .send() + .await?; + + // TODO(RVT-3928): return Ok(Err); + return Ok(()); + } + + let network_ports = ctx + .activity(DisableTlsPortsInput { + network_ports: input.network_ports.as_hashable(), + }) + .await?; + + ctx.workflow(pegboard::Input { + server_id: input.server_id, + env_id: input.env_id, + tags: input.tags.clone(), + resources: input.resources.clone(), + lifecycle: input.lifecycle.clone(), + image_id: input.image_id, + root_user_enabled: input.root_user_enabled, + args: input.args.clone(), + network_mode: input.network_mode, + environment: input.environment.clone(), + network_ports: network_ports.into_iter().collect(), + }) + .output() + .await +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +struct ValidateInput { + env_id: Uuid, + tags: util::serde::HashableMap, + resources: ServerResources, + image_id: Uuid, + root_user_enabled: bool, + args: Vec, + network_mode: NetworkMode, + environment: util::serde::HashableMap, + network_ports: util::serde::HashableMap, +} + +// TODO: Redo once a solid global error solution is established so we dont have to have validation all in one +// place. +#[activity(Validate)] +async fn validate(ctx: &ActivityCtx, input: &ValidateInput) -> GlobalResult> { + let dc_id = ctx.config().server()?.rivet.edge()?.datacenter_id; + + let (has_tier, upload_res, game_config_res) = tokio::try_join!( + async { + let tier_res = ctx + .op(tier::ops::list::Input { + datacenter_ids: vec![dc_id], + pegboard: true, + }) + .await?; + let tier_dc = unwrap!(tier_res.datacenters.first()); + + // Find any tier that has more CPU and memory than the requested resources + GlobalResult::Ok(tier_dc.tiers.iter().any(|t| { + t.cpu_millicores >= input.resources.cpu_millicores + && t.memory >= input.resources.memory_mib + })) + }, + async { + let builds_res = ctx + .op(build::ops::get::Input { + build_ids: vec![input.image_id], + }) + .await?; + + let Some(build) = builds_res.builds.into_iter().next() else { + return Ok(None); + }; + + let uploads_res = op!([ctx] upload_get { + upload_ids: vec![build.upload_id.into()], + }) + .await?; + + Ok(Some(( + build, + unwrap!(uploads_res.uploads.first()).complete_ts.is_some(), + ))) + }, + async { + let games_res = op!([ctx] game_resolve_namespace_id { + namespace_ids: vec![input.env_id.into()], + }) + .await?; + + let Some(game) = games_res.games.first() else { + return Ok(None); + }; + + let game_config_res = ctx + .op(crate::ops::game_config::get::Input { + game_ids: vec![unwrap!(game.game_id).into()], + }) + .await?; + + Ok(Some(unwrap!(game_config_res.game_configs.first()).clone())) + } + )?; + + if !has_tier { + return Ok(Some("Too many resources allocated.".into())); + } + + let Some((build, upload_complete)) = upload_res else { + return Ok(Some("Build not found.".into())); + }; + + if !upload_complete { + return Ok(Some("Build upload not complete.".into())); + } + + let Some(game_config) = game_config_res else { + return Ok(Some("Environment not found.".into())); + }; + + if matches!(input.network_mode, NetworkMode::Host) && !game_config.host_networking_enabled { + return Ok(Some("Host networking is not enabled for this game.".into())); + } + + if input.root_user_enabled && !game_config.root_user_enabled { + return Ok(Some( + "Docker root user is not enabled for this game.".into(), + )); + } + + if input.tags.len() > 8 { + return Ok(Some("Too many tags (max 8).".into())); + } + + for (k, v) in &input.tags { + if k.is_empty() { + return Ok(Some("tags[]: Tag label cannot be empty.".into())); + } + if k.len() > 32 { + return Ok(Some(format!( + "tags[{:?}]: Tag label too large (max 32 bytes).", + util::safe_slice(k, 0, 32), + ))); + } + if v.is_empty() { + return Ok(Some(format!("tags[{k:?}]: Tag value cannot be empty.",))); + } + if v.len() > 1024 { + return Ok(Some(format!( + "tags[{k:?}]: Tag value too large (max 1024 bytes)." + ))); + } + } + + if input.args.len() > 64 { + return Ok(Some("Too many arguments (max 64).".into())); + } + + for (i, arg) in input.args.iter().enumerate() { + if arg.len() > 256 { + return Ok(Some(format!( + "runtime.args[{i}]: Argument too large (max 256 bytes)." + ))); + } + } + + if input.environment.len() > 64 { + return Ok(Some("Too many environment variables (max 64).".into())); + } + + for (k, v) in &input.environment { + if k.len() > 256 { + return Ok(Some(format!( + "runtime.environment[{:?}]: Key too large (max 256 bytes).", + util::safe_slice(k, 0, 256), + ))); + } + if v.len() > 1024 { + return Ok(Some(format!( + "runtime.environment[{k:?}]: Value too large (max 1024 bytes)." + ))); + } + } + + if input.network_ports.len() > 8 { + return Ok(Some("Too many ports (max 8).".into())); + } + + for (name, port) in &input.network_ports { + if name.len() > 16 { + return Ok(Some(format!( + "runtime.ports[{:?}]: Port name too large (max 16 bytes).", + util::safe_slice(name, 0, 16), + ))); + } + + match input.network_mode { + NetworkMode::Bridge => { + // NOTE: Temporary validation until we implement bridge networking for isolates + if let BuildKind::JavaScript = build.kind { + if port.internal_port.is_some() { + return Ok(Some(format!( + "runtime.ports[{name:?}].internal_port: Must be null when `network.mode` = \"bridge\" and using a JS build.", + ))); + } + } + } + NetworkMode::Host => { + if port.internal_port.is_some() { + return Ok(Some(format!( + "runtime.ports[{name:?}].internal_port: Must be null when `network.mode` = \"host\".", + ))); + } + } + } + } + + Ok(None) +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +struct DisableTlsPortsInput { + network_ports: util::serde::HashableMap, +} + +/// If TLS is not enabled in the cluster, we downgrade all protocols to the non-TLS equivalents. +/// This allows developers to develop locally with the same code they would use in production. +#[activity(DisableTlsPorts)] +async fn disable_tls_ports( + ctx: &ActivityCtx, + input: &DisableTlsPortsInput, +) -> GlobalResult> { + if ctx.config().server()?.rivet.guard.tls_enabled() { + // Do nothing + Ok(input.network_ports.clone()) + } else { + // Downgrade all TLS protocols to non-TLS protocols + let network_ports = input + .network_ports + .clone() + .into_iter() + .map(|(k, p)| { + ( + k, + Port { + internal_port: p.internal_port, + routing: match p.routing { + Routing::GameGuard { protocol } => Routing::GameGuard { + protocol: match protocol { + GameGuardProtocol::Https => GameGuardProtocol::Http, + GameGuardProtocol::TcpTls => GameGuardProtocol::Tcp, + x @ (GameGuardProtocol::Http + | GameGuardProtocol::Tcp + | GameGuardProtocol::Udp) => x, + }, + }, + x @ Routing::Host { .. } => x, + }, + }, + ) + }) + .collect(); + + Ok(network_ports) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +struct InsertDbInput { + server_id: Uuid, + env_id: Uuid, + tags: util::serde::HashableMap, + resources: ServerResources, + lifecycle: ServerLifecycle, + image_id: Uuid, + args: Vec, + network_mode: NetworkMode, + environment: util::serde::HashableMap, + network_ports: util::serde::HashableMap, +} + +#[activity(InsertDb)] +async fn insert_db(ctx: &ActivityCtx, input: &InsertDbInput) -> GlobalResult { + let mut tx = ctx.sqlite().await?.begin_immediate().await?; + let create_ts = ctx.ts(); + + sql_execute!( + [ctx, @tx &mut tx] + " + INSERT INTO state ( + env_id, + tags, + resources_cpu_millicores, + resources_memory_mib, + lifecycle_kill_timeout_ms, + lifecycle_durable, + create_ts, + image_id, + args, + network_mode, + environment + ) + VALUES (?, jsonb(?), ?, ?, ?, ?, ?, ?, jsonb(?), ?, jsonb(?)) + ", + input.env_id, + serde_json::to_string(&input.tags)?, + input.resources.cpu_millicores as i32, + input.resources.memory_mib as i32, + input.lifecycle.kill_timeout_ms, + input.lifecycle.durable, + create_ts, + input.image_id, + serde_json::to_string(&input.args)?, + input.network_mode as i32, + serde_json::to_string(&input.environment)?, + ) + .await?; + + sql_execute!( + [ctx, @tx &mut tx] + " + INSERT INTO pegboard (client_id, client_wan_hostname) + VALUES (NULL, NULL) + ", + ) + .await?; + + // TODO: implement AND move to its own activity + // Select ingress ports from global idx + // let ports = ctx.op(crate::ops::server::allocate_ingress_ports::Input { + // server_id: input.server_id, + // ports: , + // }).await?; + // ensure_eq!(ports.len(), input.network_ports.len(), "not all ports allocated"); + let mut ingress_ports = std::iter::repeat(0i32); + + for (name, port) in input.network_ports.iter() { + match port.routing { + Routing::GameGuard { protocol } => { + sql_execute!( + [ctx, @tx &mut tx] + " + INSERT INTO server_ports_gg ( + port_name, + port_number, + protocol, + gg_port + ) + VALUES (?, ?, ?, ?) + ", + name, + port.internal_port.map(|x| x as i32), + protocol as i32, + unwrap!(ingress_ports.next(), "missing ingress port"), + ) + .await?; + } + Routing::Host { protocol } => { + sql_execute!( + [ctx, @tx &mut tx] + " + INSERT INTO server_ports_host ( + port_name, + port_number, + protocol + ) + VALUES (?, ?, ?) + ", + name, + port.internal_port.map(|x| x as i32), + protocol as i32, + ) + .await?; + } + }; + } + + tx.commit().await?; + + Ok(create_ts) +} + +#[derive(Debug, Clone, Serialize, Deserialize, Hash)] +struct PopulateFdbIdxInput { + server_id: Uuid, + env_id: Uuid, + tags: util::serde::HashableMap, + create_ts: i64, +} + +#[activity(PopulateFdbIdx)] +async fn populate_fdb_idx(ctx: &ActivityCtx, input: &PopulateFdbIdxInput) -> GlobalResult<()> { + ctx.fdb() + .await? + .run(|tx, _mc| async move { + let create_ts_key = keys::server::CreateTsKey::new(input.server_id); + + tx.set( + &keys::subspace().pack(&create_ts_key), + &create_ts_key + .serialize(input.create_ts) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + + let server_key = + keys::env::ServerKey::new(input.env_id, input.create_ts, input.server_id); + let data = keys::env::ServerKeyData { + is_destroyed: false, + tags: input.tags.clone().into_iter().collect(), + }; + + tx.set( + &keys::subspace().pack(&server_key), + &server_key + .serialize(data) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + + Ok(()) + }) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct GetServerMetaInput { + env_id: Uuid, + image_id: Uuid, +} + +#[derive(Clone, Debug, Serialize, Deserialize, Hash)] +struct GetServerMetaOutput { + project_id: Uuid, + project_slug: String, + env_slug: String, + build_upload_id: Uuid, + build_file_name: String, + build_kind: BuildKind, + build_compression: BuildCompression, + dc_name_id: String, + dc_display_name: String, + dc_build_delivery_method: BuildDeliveryMethod, +} + +#[activity(GetServerMeta)] +async fn get_server_meta( + ctx: &ActivityCtx, + input: &GetServerMetaInput, +) -> GlobalResult { + let dc_id = ctx.config().server()?.rivet.edge()?.datacenter_id; + + // Validate build exists and belongs to this game + let (env_res, build_res, dc_res) = tokio::try_join!( + op!([ctx] game_namespace_get { + namespace_ids: vec![input.env_id.into()], + }), + ctx.op(build::ops::get::Input { + build_ids: vec![input.image_id], + }), + ctx.op(cluster::ops::datacenter::get::Input { + datacenter_ids: vec![dc_id], + }) + )?; + let env = unwrap_with!(env_res.namespaces.first(), ENVIRONMENT_NOT_FOUND); + let build = unwrap_with!(build_res.builds.first(), BUILD_NOT_FOUND); + let dc = unwrap!(dc_res.datacenters.first()); + + // Lookup project + let project_id = unwrap!(env.game_id).as_uuid(); + let projects_res = op!([ctx] game_get { + game_ids: vec![project_id.into()], + }) + .await?; + let project = unwrap!(projects_res.games.first()); + + Ok(GetServerMetaOutput { + project_id, + project_slug: project.name_id.clone(), + env_slug: env.name_id.clone(), + build_upload_id: build.upload_id, + build_file_name: build::utils::file_name(build.kind, build.compression), + build_kind: build.kind, + build_compression: build.compression, + dc_name_id: dc.name_id.clone(), + dc_display_name: dc.display_name.clone(), + dc_build_delivery_method: dc.build_delivery_method, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetConnectableInput { + connectable: bool, +} + +#[activity(SetConnectable)] +async fn set_connectable(ctx: &ActivityCtx, input: &SetConnectableInput) -> GlobalResult { + let res = sql_execute!( + [ctx] + " + UPDATE state + SET connectable_ts = ? + WHERE + CASE WHEN ? + THEN connectable_ts IS NULL + ELSE connectable_ts IS NOT NULL + END + ", + input.connectable.then(util::timestamp::now), + input.connectable, + ) + .await?; + + Ok(res.rows_affected() > 0) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateImageInput { + image_id: Uuid, +} + +#[activity(UpdateImage)] +async fn update_image(ctx: &ActivityCtx, input: &UpdateImageInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + UPDATE state + SET image_id = ? + ", + input.image_id, + ) + .await?; + + Ok(()) +} + +#[message("ds_server_create_complete")] +pub struct CreateComplete {} + +#[message("ds_server_failed")] +pub struct Failed { + pub message: String, +} + +#[message("ds_server_ready")] +pub struct Ready {} + +#[signal("ds_server_destroy")] +pub struct Destroy { + pub override_kill_timeout_ms: Option, +} + +#[message("ds_server_destroy_started")] +pub struct DestroyStarted {} + +#[message("ds_server_destroy_complete")] +pub struct DestroyComplete {} + +#[signal("ds_server_upgrade")] +pub struct Upgrade { + pub image_id: Uuid, +} + +#[message("ds_server_upgrade_started")] +pub struct UpgradeStarted {} + +#[message("ds_server_upgrade_complete")] +pub struct UpgradeComplete {} diff --git a/packages/edge/services/ds/src/workflows/server/pegboard/destroy.rs b/packages/edge/services/ds/src/workflows/server/pegboard/destroy.rs new file mode 100644 index 0000000000..7bd17a10e0 --- /dev/null +++ b/packages/edge/services/ds/src/workflows/server/pegboard/destroy.rs @@ -0,0 +1,166 @@ +use std::collections::HashMap; + +use chirp_workflow::prelude::*; +use fdb_util::FormalKey; +use foundationdb as fdb; +use nix::sys::signal::Signal; +use pegboard::protocol as pp; +use util::serde::AsHashableExt; + +use super::super::{DestroyComplete, DestroyStarted}; +use crate::keys; + +#[derive(Debug, Serialize, Deserialize)] +pub struct DestroyActor { + pub actor_id: Uuid, + pub client_id: Uuid, + pub kill_timeout_ms: i64, +} + +#[derive(Debug, Serialize, Deserialize)] +pub(crate) struct Input { + pub server_id: Uuid, + /// Whether or not to send signals to the pb actor. In the case that the actor was already stopped + /// or exited, signals are unnecessary. + pub destroy_actor: Option, +} + +#[workflow] +pub(crate) async fn ds_server_pegboard_destroy( + ctx: &mut WorkflowCtx, + input: &Input, +) -> GlobalResult<()> { + let ds = ctx.activity(UpdateDbInput {}).await?; + + if let Some(ds) = ds { + ctx.activity(UpdateFdbIdxInput { + server_id: input.server_id, + env_id: ds.env_id, + tags: ds.tags.as_hashable(), + create_ts: ds.create_ts, + }) + .await?; + } + + ctx.msg(DestroyStarted {}) + .tag("server_id", input.server_id) + .send() + .await?; + + if let Some(data) = &input.destroy_actor { + destroy_actor( + ctx, + data.actor_id, + data.client_id, + data.kill_timeout_ms, + false, + ) + .await?; + } + + ctx.msg(DestroyComplete {}) + .tag("server_id", input.server_id) + .send() + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateDbInput {} + +#[derive(Debug, Serialize, Deserialize, sqlx::FromRow)] +struct UpdateDbOutput { + env_id: Uuid, + tags: sqlx::types::Json>, + create_ts: i64, +} + +#[activity(UpdateDb)] +async fn update_db( + ctx: &ActivityCtx, + input: &UpdateDbInput, +) -> GlobalResult> { + let pool = ctx.sqlite().await?; + + sql_fetch_optional!( + [ctx, UpdateDbOutput, pool] + " + UPDATE state + SET destroy_ts = ? + WHERE destroy_ts IS NULL + RETURNING env_id, tags, create_ts + ", + ctx.ts(), + ) + .await +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateFdbIdxInput { + server_id: Uuid, + env_id: Uuid, + tags: util::serde::HashableMap, + create_ts: i64, +} + +#[activity(UpdateFdbIdx)] +async fn update_fdb_idx(ctx: &ActivityCtx, input: &UpdateFdbIdxInput) -> GlobalResult<()> { + ctx.fdb() + .await? + .run(|tx, _mc| async move { + let server_key = + keys::env::ServerKey::new(input.env_id, input.create_ts, input.server_id); + let data = keys::env::ServerKeyData { + is_destroyed: true, + tags: input.tags.clone().into_iter().collect(), + }; + + tx.set( + &keys::subspace().pack(&server_key), + &server_key + .serialize(data) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + + Ok(()) + }) + .await?; + + Ok(()) +} + +pub(crate) async fn destroy_actor( + ctx: &mut WorkflowCtx, + actor_id: Uuid, + client_id: Uuid, + kill_timeout_ms: i64, + persist_storage: bool, +) -> GlobalResult<()> { + if kill_timeout_ms != 0 { + ctx.signal(pp::Command::SignalActor { + actor_id, + signal: Signal::SIGTERM as i32, + persist_storage, + ignore_future_state: true, + }) + .tag("client_id", client_id) + .send() + .await?; + + // See `docs/packages/job/JOB_DRAINING_AND_KILL_TIMEOUTS.md` + ctx.sleep(kill_timeout_ms).await?; + } + + ctx.signal(pp::Command::SignalActor { + actor_id, + signal: Signal::SIGKILL as i32, + persist_storage, + ignore_future_state: true, + }) + .tag("client_id", client_id) + .send() + .await?; + + Ok(()) +} diff --git a/packages/edge/services/ds/src/workflows/server/pegboard/migrations.rs b/packages/edge/services/ds/src/workflows/server/pegboard/migrations.rs new file mode 100644 index 0000000000..c65b76d007 --- /dev/null +++ b/packages/edge/services/ds/src/workflows/server/pegboard/migrations.rs @@ -0,0 +1,71 @@ +use chirp_workflow::prelude::*; +use sqlite_util::SqlitePoolExt; + +pub async fn run(ctx: &mut WorkflowCtx) -> GlobalResult<()> { + ctx.activity(MigrateInitInput {}).await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct MigrateInitInput {} + +#[activity(MigrateInit)] +async fn migrate_init(ctx: &ActivityCtx, _input: &MigrateInitInput) -> GlobalResult<()> { + let mut tx = ctx.sqlite().await?.begin_immediate().await?; + + sql_execute!( + [ctx, @tx &mut tx] + " + CREATE TABLE state ( + env_id BLOB NOT NULL, -- UUID + tags BLOB NOT NULL, -- JSONB, map + resources_cpu_millicores INT NOT NULL, + resources_memory_mib INT NOT NULL, + + lifecycle_kill_timeout_ms INT NOT NULL, + lifecycle_durable BOOLEAN NOT NULL DEFAULT false, + + create_ts INT NOT NULL, + start_ts INT, + connectable_ts INT, + finish_ts INT, + destroy_ts INT, + + image_id BLOB NOT NULL, -- UUID + args BLOB NOT NULL, -- JSONB, list + network_mode INT NOT NULL, -- ds::types::NetworkMode + environment BLOB NOT NULL -- JSONB, map + ) STRICT; + + CREATE TABLE pegboard ( + client_id BLOB, -- UUID, + client_wan_hostname TEXT, + ) STRICT; + + CREATE TABLE server_ports_gg ( + port_name TEXT PRIMARY KEY, + port_number INT, + gg_port INT NOT NULL, + protocol INT NOT NULL -- ds::types::GameGuardProtocol + ) STRICT; + + CREATE TABLE server_ports_host ( + port_name TEXT PRIMARY KEY, + port_number INT, + protocol INT NOT NULL -- ds::types::HostProtocol + ) STRICT; + + CREATE TABLE server_proxied_ports ( + label TEXT PRIMARY KEY, + ip TEXT NOT NULL, + source INT NOT NULL + ) STRICT; + ", + ) + .await?; + + tx.commit().await?; + + Ok(()) +} diff --git a/packages/edge/services/ds/src/workflows/server/pegboard/mod.rs b/packages/edge/services/ds/src/workflows/server/pegboard/mod.rs new file mode 100644 index 0000000000..88d40653e5 --- /dev/null +++ b/packages/edge/services/ds/src/workflows/server/pegboard/mod.rs @@ -0,0 +1,976 @@ +use std::{ + collections::{HashMap, HashSet}, + time::Duration, +}; + +use build::types::{BuildCompression, BuildKind}; +use chirp_workflow::prelude::*; +use cluster::types::BuildDeliveryMethod; +use destroy::DestroyActor; +use futures_util::FutureExt; +use pegboard::protocol as pp; +use serde_json::json; +use sqlite_util::SqlitePoolExt; +use tokio::time::Instant; +use util::serde::AsHashableExt; + +use super::{ + CreateComplete, Destroy, Failed, GetServerMetaInput, GetServerMetaOutput, InsertDbInput, + PopulateFdbIdxInput, Port, Ready, SetConnectableInput, UpdateImageInput, Upgrade, + UpgradeComplete, UpgradeStarted, BASE_RETRY_TIMEOUT_MS, DRAIN_PADDING_MS, +}; +use crate::types::{ + GameGuardProtocol, HostProtocol, NetworkMode, Routing, ServerLifecycle, ServerResources, +}; + +pub mod destroy; +mod migrations; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub(crate) struct Input { + pub server_id: Uuid, + pub env_id: Uuid, + pub tags: HashMap, + pub resources: ServerResources, + pub lifecycle: ServerLifecycle, + pub image_id: Uuid, + pub root_user_enabled: bool, + pub args: Vec, + pub network_mode: NetworkMode, + pub environment: HashMap, + pub network_ports: HashMap, +} + +#[workflow] +pub(crate) async fn ds_server_pegboard(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + let res = setup(ctx, input, SetupCtx::Init).await; + let initial_actor_setup = match ctx.catch_unrecoverable(res)? { + Ok(res) => res, + Err(err) => { + tracing::error!(?err, "unrecoverable setup"); + + ctx.msg(Failed { + message: "Failed setup.".into(), + }) + .tag("server_id", input.server_id) + .send() + .await?; + + ctx.workflow(destroy::Input { + server_id: input.server_id, + destroy_actor: None, + }) + .output() + .await?; + + // Throw the original error from the setup activities + return Err(err); + } + }; + + ctx.msg(CreateComplete {}) + .tag("server_id", input.server_id) + .send() + .await?; + + let Some(client_id) = spawn_actor(ctx, input, &initial_actor_setup).await? else { + ctx.msg(Failed { + message: "Failed to allocate (no availability).".into(), + }) + .tag("server_id", input.server_id) + .send() + .await?; + + ctx.workflow(destroy::Input { + server_id: input.server_id, + destroy_actor: None, + }) + .output() + .await?; + + return Ok(()); + }; + + let state_res = ctx + .loope( + State::new(initial_actor_setup.actor_id, client_id), + |ctx, state| { + let input = input.clone(); + + async move { + let sig = if let Some(drain_timeout_ts) = state.drain_timeout_ts { + // Listen for signal with drain timeout + if let Some(sig) = ctx.listen_until::
(drain_timeout_ts).await? { + sig + } + // Reschedule durable actor on drain end + else if input.lifecycle.durable { + ctx.activity(SetConnectableInput { connectable: false }) + .await?; + + // Kill old actor immediately + destroy::destroy_actor(ctx, state.actor_id, state.client_id, 0, true) + .await?; + + if let Some(sig) = reschedule_actor(ctx, &input, state, None).await? { + // Destroyed early + return Ok(Loop::Break(StateRes { + destroy_actor: Some(DestroyActor { + actor_id: state.actor_id, + client_id: state.client_id, + kill_timeout_ms: sig + .override_kill_timeout_ms + .unwrap_or(input.lifecycle.kill_timeout_ms), + }), + })); + } else { + state.drain_timeout_ts = None; + return Ok(Loop::Continue); + } + } else { + return Ok(Loop::Break(StateRes { + destroy_actor: Some(DestroyActor { + actor_id: state.actor_id, + client_id: state.client_id, + kill_timeout_ms: input.lifecycle.kill_timeout_ms, + }), + })); + } + } else { + // Listen for signal normally + ctx.listen::
().await? + }; + + match sig { + Main::ActorStateUpdate(sig) => match sig.state { + pp::ActorState::Starting => { + ctx.activity(SetStartedInput {}).await?; + } + pp::ActorState::Running { ports, .. } => { + ctx.activity(UpdatePortsInput { ports }).await?; + + // Wait for Traefik to poll ports and update GG + ctx.activity(WaitForTraefikPollInput { + create_ts: ctx.ts(), + }) + .await?; + + let updated = ctx + .activity(SetConnectableInput { connectable: true }) + .await?; + + if updated { + ctx.msg(Ready {}) + .tag("server_id", input.server_id) + .send() + .await?; + } + } + pp::ActorState::Stopping | pp::ActorState::Stopped => {} + pp::ActorState::Exited { .. } | pp::ActorState::Lost => { + let exit_code = + if let pp::ActorState::Exited { exit_code } = sig.state { + exit_code + } else { + None + }; + + tracing::debug!(?exit_code, "actor stopped"); + + let failed = + exit_code.map(|exit_code| exit_code != 0).unwrap_or(true); + + // Reschedule durable actor if it errored + if input.lifecycle.durable && failed { + ctx.activity(SetConnectableInput { connectable: false }) + .await?; + + if reschedule_actor(ctx, &input, state, None).await?.is_some() { + // Destroyed early + return Ok(Loop::Break(StateRes { + // Destroy actor is none here because if we received the destroy + // signal, it is guaranteed that we did not allocate another actor. + destroy_actor: None, + })); + } + } else { + ctx.activity(SetFinishedInput {}).await?; + + return Ok(Loop::Break(StateRes { + destroy_actor: None, + })); + } + } + pp::ActorState::Draining { drain_timeout_ts } => { + state.drain_timeout_ts = Some( + drain_timeout_ts + - DRAIN_PADDING_MS - input.lifecycle.kill_timeout_ms, + ); + } + pp::ActorState::Undrained => { + state.drain_timeout_ts = None; + } + }, + Main::Upgrade(sig) => { + ctx.msg(UpgradeStarted {}) + .tag("server_id", input.server_id) + .send() + .await?; + + ctx.activity(SetConnectableInput { connectable: false }) + .await?; + + // Kill old actor immediately + destroy::destroy_actor(ctx, state.actor_id, state.client_id, 0, true) + .await?; + + if let Some(sig) = + reschedule_actor(ctx, &input, state, Some(sig.image_id)).await? + { + // Destroyed early + return Ok(Loop::Break(StateRes { + destroy_actor: Some(DestroyActor { + actor_id: state.actor_id, + client_id: state.client_id, + kill_timeout_ms: sig + .override_kill_timeout_ms + .unwrap_or(input.lifecycle.kill_timeout_ms), + }), + })); + } + + ctx.msg(UpgradeComplete {}) + .tag("server_id", input.server_id) + .send() + .await?; + } + Main::Destroy(sig) => { + return Ok(Loop::Break(StateRes { + destroy_actor: Some(DestroyActor { + actor_id: state.actor_id, + client_id: state.client_id, + kill_timeout_ms: sig + .override_kill_timeout_ms + .unwrap_or(input.lifecycle.kill_timeout_ms), + }), + })) + } + } + + Ok(Loop::Continue) + } + .boxed() + }, + ) + .await?; + + ctx.workflow(destroy::Input { + server_id: input.server_id, + destroy_actor: state_res.destroy_actor, + }) + .output() + .await?; + + Ok(()) +} + +#[derive(Deserialize, Serialize)] +struct State { + actor_id: Uuid, + client_id: Uuid, + drain_timeout_ts: Option, +} + +impl State { + fn new(actor_id: Uuid, client_id: Uuid) -> Self { + State { + actor_id, + client_id, + drain_timeout_ts: None, + } + } +} + +#[derive(Serialize, Deserialize)] +struct StateRes { + destroy_actor: Option, +} + +enum SetupCtx { + Init, + Reschedule { new_image_id: Option }, +} + +#[derive(Clone)] +struct ActorSetupCtx { + actor_id: Uuid, + server_meta: GetServerMetaOutput, + resources: pp::Resources, + artifact_url_stub: String, + fallback_artifact_url: Option, +} + +async fn setup( + ctx: &mut WorkflowCtx, + input: &Input, + setup: SetupCtx, +) -> GlobalResult { + migrations::run(ctx).await?; + + let image_id = match &setup { + SetupCtx::Init => { + let tags = input.tags.as_hashable(); + let create_ts = ctx + .activity(InsertDbInput { + server_id: input.server_id, + env_id: input.env_id, + tags: tags.clone(), + resources: input.resources.clone(), + lifecycle: input.lifecycle.clone(), + image_id: input.image_id, + args: input.args.clone(), + network_mode: input.network_mode, + environment: input.environment.as_hashable(), + network_ports: input.network_ports.as_hashable(), + }) + .await?; + + ctx.activity(PopulateFdbIdxInput { + server_id: input.server_id, + env_id: input.env_id, + tags, + create_ts, + }) + .await?; + + input.image_id + } + SetupCtx::Reschedule { new_image_id } => { + if let Some(image_id) = *new_image_id { + ctx.activity(UpdateImageInput { image_id }).await?; + + image_id + } else { + input.image_id + } + } + }; + + let server_meta = ctx + .activity(GetServerMetaInput { + env_id: input.env_id, + image_id, + }) + .await?; + + let (actor_id, resources, artifacts_res) = ctx + .join(( + activity(SelectActorIdInput {}), + activity(SelectResourcesInput { + resources: input.resources.clone(), + }), + activity(ResolveArtifactsInput { + build_upload_id: server_meta.build_upload_id, + build_file_name: server_meta.build_file_name.clone(), + dc_build_delivery_method: server_meta.dc_build_delivery_method, + }), + )) + .await?; + + Ok(ActorSetupCtx { + actor_id, + server_meta, + resources, + artifact_url_stub: artifacts_res.artifact_url_stub, + fallback_artifact_url: artifacts_res.fallback_artifact_url, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SelectActorIdInput {} + +#[activity(SelectActorId)] +async fn select_actor_id(ctx: &ActivityCtx, input: &SelectActorIdInput) -> GlobalResult { + Ok(Uuid::new_v4()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct AllocateActorInput { + actor_id: Uuid, + build_kind: BuildKind, + resources: pp::Resources, +} + +#[derive(Debug, Serialize, Deserialize)] +struct AllocateActorOutput { + client_id: Uuid, + client_workflow_id: Uuid, +} + +#[activity(AllocateActor)] +async fn allocate_actor( + ctx: &ActivityCtx, + input: &AllocateActorInput, +) -> GlobalResult> { + let client_flavor = match input.build_kind { + BuildKind::DockerImage | BuildKind::OciBundle => pp::ClientFlavor::Container, + BuildKind::JavaScript => pp::ClientFlavor::Isolate, + }; + let memory_mib = input.resources.memory / 1024 / 1024; + + let res = ctx + .op(edge_pegboard::ops::client::reserve::Input { + flavor: client_flavor, + memory: memory_mib, + }) + .await?; + + Ok(res.map(|res| AllocateActorOutput { + client_id: res.client_id, + client_workflow_id: res.client_workflow_id, + })) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateClientInput { + client_id: Uuid, + client_workflow_id: Uuid, +} + +#[activity(UpdateClient)] +async fn update_client(ctx: &ActivityCtx, input: &UpdateClientInput) -> GlobalResult<()> { + let client_pool = ctx.sqlite_for_workflow(input.client_workflow_id).await?; + let pool = ctx.sqlite().await?; + + let (client_wan_hostname,) = sql_fetch_one!( + [ctx, (String,), client_pool] + " + SELECT config->'network'->>'wan_hostname' AS wan_hostname + FROM state + ", + ) + .await?; + + sql_execute!( + [ctx, pool] + " + UPDATE pegboard + SET + client_id = ?, + client_wan_hostname = ? + ", + input.client_id, + client_wan_hostname, + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SelectResourcesInput { + resources: ServerResources, +} + +#[activity(SelectResources)] +async fn select_resources( + ctx: &ActivityCtx, + input: &SelectResourcesInput, +) -> GlobalResult { + let dc_id = ctx.config().server()?.rivet.edge()?.datacenter_id; + + let tier_res = ctx + .op(tier::ops::list::Input { + datacenter_ids: vec![dc_id], + pegboard: true, + }) + .await?; + let tier_dc = unwrap!(tier_res.datacenters.first()); + let mut tiers = tier_dc.tiers.iter().collect::>(); + + // Sort the tiers by cpu + tiers.sort_by(|a, b| a.cpu.cmp(&b.cpu)); + + // Find the first tier that has more CPU and memory than the requested + // resources + let tier = unwrap!(tiers.iter().find(|t| { + t.cpu_millicores >= input.resources.cpu_millicores && t.memory >= input.resources.memory_mib + })); + + // runc-compatible resources + let cpu = tier.rivet_cores_numerator as u64 * 1_000 / tier.rivet_cores_denominator as u64; // Millicore (1/1000 of a core) + let memory = tier.memory as u64 * (1024 * 1024); + let memory_max = tier.memory_max as u64 * (1024 * 1024); + + Ok(pp::Resources { + cpu, + memory, + memory_max, + disk: tier.disk, + }) +} + +/// Returns whether or not there was availability to spawn the actor. +async fn spawn_actor( + ctx: &mut WorkflowCtx, + input: &Input, + actor_setup: &ActorSetupCtx, +) -> GlobalResult> { + let Some(res) = ctx + .activity(AllocateActorInput { + actor_id: actor_setup.actor_id, + build_kind: actor_setup.server_meta.build_kind, + resources: actor_setup.resources.clone(), + }) + .await? + else { + return Ok(None); + }; + + ctx.activity(UpdateClientInput { + client_id: res.client_id, + client_workflow_id: res.client_workflow_id, + }) + .await?; + + let cluster_id = ctx.config().server()?.rivet.edge()?.cluster_id; + + ctx.signal(pp::Command::StartActor { + actor_id: actor_setup.actor_id, + config: Box::new(pp::ActorConfig { + image: pp::Image { + id: input.image_id, + artifact_url_stub: actor_setup.artifact_url_stub.clone(), + fallback_artifact_url: actor_setup.fallback_artifact_url.clone(), + kind: match actor_setup.server_meta.build_kind { + BuildKind::DockerImage => pp::ImageKind::DockerImage, + BuildKind::OciBundle => pp::ImageKind::OciBundle, + BuildKind::JavaScript => pp::ImageKind::JavaScript, + }, + compression: match actor_setup.server_meta.build_compression { + BuildCompression::None => pp::ImageCompression::None, + BuildCompression::Lz4 => pp::ImageCompression::Lz4, + }, + }, + root_user_enabled: input.root_user_enabled, + env: input.environment.as_hashable(), + ports: input + .network_ports + .iter() + .map(|(port_label, port)| match port.routing { + Routing::GameGuard { protocol, .. } => ( + crate::util::pegboard_normalize_port_label(port_label), + pp::Port { + target: port.internal_port, + protocol: match protocol { + GameGuardProtocol::Http + | GameGuardProtocol::Https + | GameGuardProtocol::Tcp + | GameGuardProtocol::TcpTls => pp::TransportProtocol::Tcp, + GameGuardProtocol::Udp => pp::TransportProtocol::Udp, + }, + routing: pp::PortRouting::GameGuard, + }, + ), + Routing::Host { protocol } => ( + crate::util::pegboard_normalize_port_label(port_label), + pp::Port { + target: port.internal_port, + protocol: match protocol { + HostProtocol::Tcp => pp::TransportProtocol::Tcp, + HostProtocol::Udp => pp::TransportProtocol::Udp, + }, + routing: pp::PortRouting::Host, + }, + ), + }) + .collect(), + network_mode: match input.network_mode { + NetworkMode::Bridge => pp::NetworkMode::Bridge, + NetworkMode::Host => pp::NetworkMode::Host, + }, + resources: actor_setup.resources.clone(), + owner: pp::ActorOwner::DynamicServer { + server_id: input.server_id, + workflow_id: ctx.workflow_id(), + }, + metadata: util::serde::Raw::new(&pp::ActorMetadata { + actor: pp::ActorMetadataActor { + actor_id: actor_setup.actor_id, + tags: input.tags.as_hashable(), + // Represents when the pegboard actor was created, not the ds workflow. + create_ts: ctx.ts(), + }, + project: pp::ActorMetadataProject { + project_id: actor_setup.server_meta.project_id, + slug: actor_setup.server_meta.project_slug.clone(), + }, + environment: pp::ActorMetadataEnvironment { + env_id: input.env_id, + slug: actor_setup.server_meta.env_slug.clone(), + }, + datacenter: pp::ActorMetadataDatacenter { + name_id: actor_setup.server_meta.dc_name_id.clone(), + display_name: actor_setup.server_meta.dc_display_name.clone(), + }, + cluster: pp::ActorMetadataCluster { cluster_id }, + build: pp::ActorMetadataBuild { + build_id: input.image_id, + }, + })?, + }), + }) + .to_workflow_id(res.client_workflow_id) + .send() + .await?; + + Ok(Some(res.client_id)) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ResolveArtifactsInput { + build_upload_id: Uuid, + build_file_name: String, + dc_build_delivery_method: BuildDeliveryMethod, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ResolveArtifactsOutput { + artifact_url_stub: String, + fallback_artifact_url: Option, +} + +#[activity(ResolveArtifacts)] +async fn resolve_artifacts( + ctx: &ActivityCtx, + input: &ResolveArtifactsInput, +) -> GlobalResult { + let fallback_artifact_url = + if let BuildDeliveryMethod::S3Direct = input.dc_build_delivery_method { + tracing::debug!("using s3 direct delivery"); + + // Build client + let s3_client = s3_util::Client::with_bucket_and_endpoint( + ctx.config(), + "bucket-build", + s3_util::EndpointKind::EdgeInternal, + ) + .await?; + + let presigned_req = s3_client + .get_object() + .bucket(s3_client.bucket()) + .key(format!( + "{upload_id}/{file_name}", + upload_id = input.build_upload_id, + file_name = input.build_file_name, + )) + .presigned( + s3_util::aws_sdk_s3::presigning::PresigningConfig::builder() + .expires_in(std::time::Duration::from_secs(15 * 60)) + .build()?, + ) + .await?; + + let addr_str = presigned_req.uri().to_string(); + tracing::debug!(addr = %addr_str, "resolved artifact s3 presigned request"); + + Some(addr_str) + } else { + None + }; + + Ok(ResolveArtifactsOutput { + artifact_url_stub: crate::util::image_artifact_url_stub( + ctx.config(), + input.build_upload_id, + &input.build_file_name, + )?, + fallback_artifact_url, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetStartedInput {} + +#[activity(SetStarted)] +async fn set_started(ctx: &ActivityCtx, input: &SetStartedInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + UPDATE state + SET start_ts = ? + WHERE start_ts IS NULL + ", + util::timestamp::now(), + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdatePortsInput { + ports: util::serde::HashableMap, +} + +#[activity(UpdatePorts)] +async fn update_ports(ctx: &ActivityCtx, input: &UpdatePortsInput) -> GlobalResult<()> { + let mut tx = ctx.sqlite().await?.begin_immediate().await?; + + for (label, port) in &input.ports { + sql_execute!( + [ctx, @tx &mut tx] + " + INSERT INTO server_proxied_ports ( + label, + source, + ip + ) + VALUES (?, ?, ?) + ", + label, + port.source as i64, + &port.lan_hostname, + ) + .await?; + } + + tx.commit().await?; + + Ok(()) +} + +async fn reschedule_actor( + ctx: &mut WorkflowCtx, + input: &Input, + state: &mut State, + new_image_id: Option, +) -> GlobalResult> { + tracing::info!("rescheduling actor"); + + // Remove old proxied ports + ctx.activity(ClearPortsInput {}).await?; + + let actor_setup = setup(ctx, &input, SetupCtx::Reschedule { new_image_id }).await?; + state.actor_id = actor_setup.actor_id; + + // Waits for the actor to be ready (or destroyed) and automatically retries if failed to allocate. + let res = ctx + .loope(RescheduleState::default(), |ctx, state| { + let input = input.clone(); + let actor_setup = actor_setup.clone(); + + async move { + // Determine next backoff sleep duration + let mut backoff = rivet_util::Backoff::new_at( + 8, + None, + BASE_RETRY_TIMEOUT_MS, + 500, + state.retry_count, + ); + + // If the last retry ts is more than 2 * backoff ago, reset retry count to 0 + let now = util::timestamp::now(); + state.retry_count = + if state.last_retry_ts < now - i64::try_from(2 * backoff.current_duration())? { + state.retry_count + 1 + } else { + 0 + }; + state.last_retry_ts = now; + + // Don't sleep for first retry + if state.retry_count > 0 { + let next = backoff.step().expect("should not have max retry"); + + // Sleep for backoff or destroy early + if let Some(sig) = ctx + .listen_with_timeout::(next - Instant::now()) + .await? + { + tracing::debug!("destroying before actor start"); + + return Ok(Loop::Break(Err(sig))); + } + } + + if let Some(client_id) = spawn_actor(ctx, &input, &actor_setup).await? { + Ok(Loop::Break(Ok(client_id))) + } else { + Ok(Loop::Continue) + } + } + .boxed() + }) + .await?; + + match res { + Ok(client_id) => { + state.client_id = client_id; + Ok(None) + } + Err(sig) => Ok(Some(sig)), + } +} + +#[derive(Serialize, Deserialize, Default)] +struct RescheduleState { + last_retry_ts: i64, + retry_count: usize, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ClearPortsInput {} + +#[activity(ClearPorts)] +async fn clear_ports(ctx: &ActivityCtx, input: &ClearPortsInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + DELETE FROM server_proxied_ports + ", + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetFinishedInput {} + +#[activity(SetFinished)] +async fn set_finished(ctx: &ActivityCtx, input: &SetFinishedInput) -> GlobalResult<()> { + sql_execute!( + [ctx] + " + UPDATE state + SET finish_ts = ? + ", + util::timestamp::now(), + ) + .await?; + + Ok(()) +} + +/// Amount of time to wait after all servers have successfully polled to wait to return in order to +/// avoid a race condition. +/// +/// This can likely be decreased to < 100 ms safely. +const TRAEFIK_POLL_COMPLETE_GRACE: Duration = Duration::from_millis(750); + +/// Max time to wait for servers to poll their configs. +const TRAEFIK_POLL_TIMEOUT: Duration = Duration::from_secs(5); + +/// How logn to wait if no GG servers were returned from the list. This is either from: +/// - Cluster without provisioning configured +/// - Edge case where all GG servers were destroyed and waiting for new servers to come up +const TRAFEIK_NO_SERVERS_GRACE: Duration = Duration::from_millis(500); + +#[message("ds_traefik_poll")] +pub struct TraefikPoll { + /// Server ID will be `None` if: + /// - Not using provisioning (i.e. self-hosted cluster) or + /// - Older GG node that's being upgraded + pub server_id: Option, + pub latest_ds_create_ts: i64, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct WaitForTraefikPollInput { + create_ts: i64, +} + +/// Waits for all of the GG nodes to poll the Traefik config. +/// +/// This is done by waiting for an event to be published for each of the GG server IDs with a +/// timestamp for the latest DS it's seen that's > than this DS's create ts. +#[activity(WaitForTraefikPoll)] +async fn wait_for_traefik_poll( + ctx: &ActivityCtx, + input: &WaitForTraefikPollInput, +) -> GlobalResult<()> { + // TODO: This will only work with 1 node on self-hosted. RG 2 will be out by then which fixes + // this issue. + + let cluster_id = ctx.config().server()?.rivet.edge()?.cluster_id; + let dc_id = ctx.config().server()?.rivet.edge()?.datacenter_id; + + // Start sub first since the messages may arrive while fetching the server list + let mut sub = ctx + .subscribe::(&json!({ "datacenter_id": dc_id })) + .await?; + + // Fetch servers + let servers_res = ctx + .op(cluster::ops::server::list::Input { + filter: cluster::types::Filter { + pool_types: Some(vec![cluster::types::PoolType::Gg]), + cluster_ids: Some(vec![cluster_id]), + ..Default::default() + }, + include_destroyed: false, + exclude_draining: true, + exclude_no_vlan: false, + }) + .await?; + + let mut remaining_servers: HashSet = if servers_res.servers.is_empty() { + // HACK: Will wait for a single server poll if we don't have the server list. Wait for a + // static amount of time. + tokio::time::sleep(TRAFEIK_NO_SERVERS_GRACE).await; + return Ok(()); + } else { + 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", + ); + let res = tokio::time::timeout(TRAEFIK_POLL_TIMEOUT, async { + // Wait for servers to fetch their configs + loop { + let msg = sub.next().await?; + + 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); + + 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() { + return GlobalResult::Ok(()); + } + } + } + } + }) + .await; + + match res { + Ok(_) => { + tracing::debug!("received poll from all traefik servers, waiting for grace period"); + tokio::time::sleep(TRAEFIK_POLL_COMPLETE_GRACE).await; + } + Err(_) => { + tracing::warn!(missing_server_ids = ?remaining_servers, "did not receive poll from all gg servers before deadline"); + } + } + + Ok(()) +} + +join_signal!(Main { + ActorStateUpdate(edge_pegboard::workflows::actor::StateUpdate), + Upgrade, + Destroy, +}); diff --git a/packages/edge/services/ds/tests/common.rs b/packages/edge/services/ds/tests/common.rs new file mode 100644 index 0000000000..38b0b4ec92 --- /dev/null +++ b/packages/edge/services/ds/tests/common.rs @@ -0,0 +1,151 @@ +use std::collections::HashMap; + +use chirp_workflow::prelude::*; +use ds::types; +use rivet_operation::prelude::proto::backend; +use serde_json::json; + +pub struct Setup { + pub env_id: Uuid, + pub cluster_id: Uuid, + pub datacenter_id: Uuid, + pub image_id: Uuid, +} + +impl Setup { + pub async fn init(ctx: &TestCtx) -> Self { + let region_res = op!([ctx] faker_region {}).await.unwrap(); + let region_id = region_res.region_id.as_ref().unwrap().as_uuid(); + + let game_res = op!([ctx] faker_game { + ..Default::default() + }) + .await + .unwrap(); + + let build_res = op!([ctx] faker_build { + env_id: game_res.prod_env_id, + image: backend::faker::Image::DsEcho as i32, + }) + .await + .unwrap(); + + // Pick an existing cluster + let cluster_id = ctx + .op(cluster::ops::list::Input {}) + .await + .unwrap() + .cluster_ids + .first() + .unwrap() + .to_owned(); + + Setup { + env_id: game_res.prod_env_id.unwrap().as_uuid(), + cluster_id, + datacenter_id: region_id, + image_id: build_res.build_id.unwrap().as_uuid(), + } + } + + /// Create bridge server + pub async fn create_bridge_server(&self, ctx: &TestCtx) -> Uuid { + self.create_server_inner(ctx, types::NetworkMode::Bridge) + .await + } + + /// Create host server + pub async fn create_host_server(&self, ctx: &TestCtx) -> Uuid { + self.create_server_inner(ctx, types::NetworkMode::Host) + .await + } + + async fn create_server_inner(&self, ctx: &TestCtx, network_mode: types::NetworkMode) -> Uuid { + let env = vec![ + ("HTTP_PORT".to_string(), 8001.to_string()), + ("TCP_PORT".to_string(), 8002.to_string()), + ("UDP_PORT".to_string(), 8003.to_string()), + ] + .into_iter() + .collect(); + + let ports = vec![ + ( + "test-http".to_string(), + ds::workflows::server::Port { + internal_port: Some(8001), + routing: types::Routing::GameGuard { + protocol: types::GameGuardProtocol::Http, + authorization: types::PortAuthorization::None, + }, + }, + ), + ( + "test-tcp".to_string(), + ds::workflows::server::Port { + internal_port: Some(8002), + routing: types::Routing::GameGuard { + protocol: types::GameGuardProtocol::Tcp, + authorization: types::PortAuthorization::None, + }, + }, + ), + ( + "test-udp".to_string(), + ds::workflows::server::Port { + internal_port: Some(8003), + routing: types::Routing::GameGuard { + protocol: types::GameGuardProtocol::Udp, + authorization: types::PortAuthorization::None, + }, + }, + ), + ] + // Collect into hashmap + .into_iter() + .collect(); + + let server_id = Uuid::new_v4(); + + let mut sub = ctx + .subscribe::(&json!({ + "server_id": server_id, + })) + .await + .unwrap(); + + ctx.workflow(ds::workflows::server::Input { + server_id, + env_id: self.env_id, + datacenter_id: self.datacenter_id, + cluster_id: self.cluster_id, + runtime: ds::types::ServerRuntime::Nomad, + resources: ds::types::ServerResources { + cpu_millicores: 100, + memory_mib: 200, + }, + lifecycle: ds::types::ServerLifecycle { + kill_timeout_ms: 0, + durable: false, + }, + tags: HashMap::new(), + root_user_enabled: false, + args: Vec::new(), + environment: env, + image_id: self.image_id, + network_mode, + network_ports: ports, + }) + .tag("server_id", server_id) + .dispatch() + .await + .unwrap(); + + sub.next().await.unwrap(); + + // Sleep for 5 seconds + tokio::time::sleep(std::time::Duration::from_secs(5)).await; + + server_id + } +} diff --git a/packages/edge/services/ds/tests/lobby_connectivity.rs b/packages/edge/services/ds/tests/lobby_connectivity.rs new file mode 100644 index 0000000000..948c253162 --- /dev/null +++ b/packages/edge/services/ds/tests/lobby_connectivity.rs @@ -0,0 +1,287 @@ +mod common; + +use std::{ + io::{BufRead, BufReader, Write}, + net::{TcpStream, UdpSocket}, +}; + +use chirp_workflow::prelude::*; +use common::*; + +#[workflow_test] +async fn server_connectivity_http_normal(ctx: TestCtx) { + if ctx.config().server().unwrap().rivet.job_run.is_none() { + return; + } + + let setup = Setup::init(&ctx).await; + + let server_id = setup.create_bridge_server(&ctx).await; + + let (hostname, _) = get_server_addr(&ctx, server_id, "test-http").await; + tracing::info!("testing http to {}", hostname); + + // Echo body + let random_body = Uuid::new_v4().to_string(); + let client = reqwest::Client::new(); + let res = client + .post(format!("http://{hostname}")) + .body(random_body.clone()) + .send() + .await + .unwrap() + .error_for_status() + .unwrap(); + let res_text = res.text().await.unwrap(); + assert_eq!(random_body, res_text, "echoed wrong response"); +} + +#[workflow_test] +async fn server_connectivity_http_host(ctx: TestCtx) { + if ctx.config().server().unwrap().rivet.job_run.is_none() { + return; + } + + let setup = Setup::init(&ctx).await; + + let server_id = setup.create_host_server(&ctx).await; + + // Echo body (bridge) + { + let (hostname, _) = get_server_addr(&ctx, server_id, "test-http").await; + tracing::info!("testing http to {}", hostname); + + let random_body = Uuid::new_v4().to_string(); + let client = reqwest::Client::new(); + let res = client + .post(format!("http://{hostname}")) + .body(random_body.clone()) + .send() + .await + .unwrap() + .error_for_status() + .unwrap(); + let res_text = res.text().await.unwrap(); + assert_eq!(random_body, res_text, "echoed wrong response"); + } + + // // Echo body (host) + // { + // let (hostname, port) = get_server_addr(&ctx, server_id, "test-host-http").await; + // tracing::info!("testing http to {}:{}", hostname, port); + + // let random_body = Uuid::new_v4().to_string(); + // let client = reqwest::Client::new(); + // let res = client + // .post(format!("http://{hostname}:{port}")) + // .body(random_body.clone()) + // .send() + // .await + // .unwrap() + // .error_for_status() + // .unwrap(); + // let res_text = res.text().await.unwrap(); + // assert_eq!(random_body, res_text, "echoed wrong response"); + // } +} + +#[workflow_test] +async fn server_connectivity_tcp(ctx: TestCtx) { + if ctx.config().server().unwrap().rivet.job_run.is_none() { + return; + } + + let setup = Setup::init(&ctx).await; + + let server_id = setup.create_bridge_server(&ctx).await; + + let (hostname, port) = get_server_addr(&ctx, server_id, "test-tcp").await; + tracing::info!("testing tcp to {}:{}", hostname, port); + + // Echo body + let random_body = Uuid::new_v4().to_string(); + let mut stream = TcpStream::connect((hostname, port)).unwrap(); + + stream.write_all(random_body.as_ref()).unwrap(); + stream.write_all(b"\n").unwrap(); + stream.flush().unwrap(); + + let mut reader = BufReader::new(&stream); + let mut response = String::new(); + reader.read_line(&mut response).expect("read line"); + + assert_eq!( + &random_body, + &response[..response.len() - 1], + "echoed wrong response" + ); +} + +#[workflow_test] +async fn server_connectivity_tcp_host(ctx: TestCtx) { + if ctx.config().server().unwrap().rivet.job_run.is_none() { + return; + } + + let setup = Setup::init(&ctx).await; + + let server_id = setup.create_host_server(&ctx).await; + + // Echo body (bridge) + { + let (hostname, port) = get_server_addr(&ctx, server_id, "test-tcp").await; + tracing::info!("testing tcp to {}:{}", hostname, port); + + // Echo body + let random_body = Uuid::new_v4().to_string(); + let mut stream = TcpStream::connect((hostname, port)).unwrap(); + + stream.write_all(random_body.as_ref()).unwrap(); + stream.write_all(b"\n").unwrap(); + stream.flush().unwrap(); + + let mut reader = BufReader::new(&stream); + let mut response = String::new(); + reader.read_line(&mut response).expect("read line"); + + assert_eq!( + &random_body, + &response[..response.len() - 1], + "echoed wrong response" + ); + } + + // // Echo body (host) + // { + // let (hostname, port) = get_server_addr(&ctx, server_id, "test-host-tcp").await; + // tracing::info!("testing tcp to {}:{}", hostname, port); + + // let random_body = Uuid::new_v4().to_string(); + // let mut stream = TcpStream::connect((hostname, port)).unwrap(); + + // stream.write_all(random_body.as_ref()).unwrap(); + // stream.write_all(b"\n").unwrap(); + // stream.flush().unwrap(); + + // let mut reader = BufReader::new(&stream); + // let mut response = String::new(); + // reader.read_line(&mut response).expect("read line"); + + // assert_eq!( + // &random_body, + // &response[..response.len() - 1], + // "echoed wrong response" + // ); + // } +} + +#[workflow_test] +async fn server_connectivity_udp(ctx: TestCtx) { + if ctx.config().server().unwrap().rivet.job_run.is_none() { + return; + } + + let setup = Setup::init(&ctx).await; + + let server_id = setup.create_bridge_server(&ctx).await; + + let (hostname, port) = get_server_addr(&ctx, server_id, "test-udp").await; + tracing::info!("testing udp to {}:{}", hostname, port); + + // Echo body + let random_body = Uuid::new_v4(); + let socket = UdpSocket::bind(("0.0.0.0", 0)).unwrap(); + socket.connect((hostname, port)).unwrap(); + socket.send(random_body.as_ref()).unwrap(); + + let mut response = [0; 2048]; + let recv_len = socket.recv(&mut response).unwrap(); + + assert_eq!( + random_body.as_bytes(), + &response[..recv_len], + "echoed wrong response" + ); +} + +#[workflow_test] +async fn server_connectivity_udp_host(ctx: TestCtx) { + if ctx.config().server().unwrap().rivet.job_run.is_none() { + return; + } + + let setup = Setup::init(&ctx).await; + + let server_id = setup.create_host_server(&ctx).await; + + // Echo body (host) + { + let (hostname, port) = get_server_addr(&ctx, server_id, "test-udp").await; + tracing::info!("testing udp to {}:{}", hostname, port); + + let random_body = Uuid::new_v4(); + let socket = UdpSocket::bind(("0.0.0.0", 0)).unwrap(); + socket.connect((hostname, port)).unwrap(); + socket.send(random_body.as_ref()).unwrap(); + + let mut response = [0; 2048]; + let recv_len = socket.recv(&mut response).unwrap(); + + assert_eq!( + random_body.as_bytes(), + &response[..recv_len], + "echoed wrong response" + ); + } + + // // Echo body (host) + // { + // let (hostname, port) = get_server_addr(&ctx, server_id, "test-host-udp").await; + // tracing::info!("testing udp to {}:{}", hostname, port); + + // let random_body = Uuid::new_v4(); + // let socket = UdpSocket::bind(("0.0.0.0", 0)).unwrap(); + // socket.connect((hostname, port)).unwrap(); + // socket.send(random_body.as_ref()).unwrap(); + + // let mut response = [0; 2048]; + // let recv_len = socket.recv(&mut response).unwrap(); + + // assert_eq!( + // random_body.as_bytes(), + // &response[..recv_len], + // "echoed wrong response" + // ); + // } +} + +async fn get_server_addr(ctx: &TestCtx, server_id: Uuid, port: &str) -> (String, u16) { + let server = ctx + .op(ds::ops::server::get::Input { + server_ids: vec![server_id], + endpoint_type: Some(ds::types::EndpointType::Hostname), + }) + .await + .unwrap() + .servers + .into_iter() + .next() + .unwrap(); + + let hostname = server + .network_ports + .get(port) + .expect("no port") + .public_hostname + .as_ref() + .expect("no public hostname"); + let port = server + .network_ports + .get(port) + .expect("no port") + .public_port + .as_ref() + .expect("no public port"); + + (hostname.clone(), *port as u16) +} diff --git a/packages/edge/services/ds/tests/print_test_data.rs b/packages/edge/services/ds/tests/print_test_data.rs new file mode 100644 index 0000000000..b1314a2304 --- /dev/null +++ b/packages/edge/services/ds/tests/print_test_data.rs @@ -0,0 +1,232 @@ +use chirp_workflow::prelude::*; +use ds::types; +use rivet_operation::prelude::proto::{ + self, + backend::{self, pkg::token}, +}; +use serde_json::json; + +#[workflow_test] +async fn print_test_data(ctx: TestCtx) { + let game_res = op!([ctx] faker_game { + ..Default::default() + }) + .await + .unwrap(); + let env_id = game_res.prod_env_id.unwrap(); + + let user_res = op!([ctx] faker_user { + ..Default::default() + }) + .await + .unwrap(); + let user_id = user_res.user_id.unwrap(); + + // Pick an existing cluster + let cluster_id = ctx + .op(cluster::ops::list::Input {}) + .await + .unwrap() + .cluster_ids + .first() + .unwrap() + .to_owned(); + + // Pick an existing datacenter + let datacenter_id = ctx + .op(cluster::ops::datacenter::list::Input { + cluster_ids: vec![cluster_id], + }) + .await + .unwrap() + .clusters + .first() + .unwrap() + .datacenter_ids + .first() + .unwrap() + .to_owned(); + + let build_res: backend::pkg::faker::build::Response = op!([ctx] faker_build { + env_id: Some(env_id), + image: backend::faker::Image::DsEcho as i32, + }) + .await + .unwrap(); + + // Create token + let token_res = op!([ctx] token_create { + token_config: Some(token::create::request::TokenConfig { + ttl: util::duration::days(90), + }), + issuer: "test".to_owned(), + kind: Some(token::create::request::Kind::New( + token::create::request::KindNew { entitlements: vec![proto::claims::Entitlement { + kind: Some(proto::claims::entitlement::Kind::EnvService( + proto::claims::entitlement::EnvService { + env_id: Some(env_id), + } + )), + }]}, + )), + label: Some("env".to_owned()), + ..Default::default() + }) + .await + .unwrap(); + + // Create token + let cloud_token_res = op!([ctx] token_create { + token_config: Some(token::create::request::TokenConfig { + ttl: util::duration::days(90), + }), + issuer: "test".to_owned(), + kind: Some(token::create::request::Kind::New( + token::create::request::KindNew { entitlements: vec![proto::claims::Entitlement { + kind: Some(proto::claims::entitlement::Kind::EnvService( + proto::claims::entitlement::EnvService { + env_id: Some(env_id), + } + )), + },proto::claims::Entitlement { + kind: Some(proto::claims::entitlement::Kind::User( + proto::claims::entitlement::User { + user_id: Some(user_id), + } + )), + }]}, + )), + label: Some("env_service".to_owned()), + ..Default::default() + }) + .await + .unwrap(); + + // Invalid token + let invalid_token = op!([ctx] token_create { + token_config: Some(token::create::request::TokenConfig { + ttl: util::duration::days(90), + }), + issuer: "test".to_owned(), + kind: Some(token::create::request::Kind::New( + token::create::request::KindNew { entitlements: vec![proto::claims::Entitlement { + kind: Some(proto::claims::entitlement::Kind::User( + proto::claims::entitlement::User { + user_id: Some(user_id), + } + )), + }]}, + )), + label: Some("user".to_owned()), + ..Default::default() + }) + .await + .unwrap(); + + tracing::info!( + ?env_id, + ?datacenter_id, + service_token = ?token_res.token.clone().unwrap().token, + cloud_token = ?cloud_token_res.token.clone().unwrap().token, + invalid_token = ?invalid_token.token.clone().unwrap().token, + build_id = ?build_res.build_id.unwrap(), + env_id = ?env_id, + "test data" + ); + + let faker_region = op!([ctx] faker_region {}).await.unwrap(); + + let env = vec![ + ("some_envkey_test".to_string(), "2134523".to_string()), + ("HTTP_PORT".to_string(), "28234".to_string()), + ] + .into_iter() + .collect(); + + let ports = vec![( + "testing2".to_string(), + ds::workflows::server::Port { + internal_port: Some(28234), + routing: types::Routing::GameGuard { + protocol: types::GameGuardProtocol::Http, + authorization: types::PortAuthorization::None, + }, + }, + )] + // Collect into hashmap + .into_iter() + .collect(); + + let server_id = Uuid::new_v4(); + + let mut sub = ctx + .subscribe::(&json!({ + "server_id": server_id, + })) + .await + .unwrap(); + + ctx.workflow(ds::workflows::server::Input { + server_id, + env_id: *env_id, + datacenter_id: faker_region.region_id.unwrap().as_uuid(), + cluster_id, + runtime: ds::types::ServerRuntime::Nomad, + resources: ds::types::ServerResources { + cpu_millicores: 100, + memory_mib: 200, + }, + lifecycle: ds::types::ServerLifecycle { + kill_timeout_ms: 0, + durable: false, + }, + tags: vec![(String::from("test"), String::from("123"))] + .into_iter() + .collect(), + root_user_enabled: false, + args: Vec::new(), + environment: env, + image_id: build_res.build_id.unwrap().as_uuid(), + network_mode: types::NetworkMode::Bridge, + network_ports: ports, + }) + .tag("server_id", server_id) + .dispatch() + .await + .unwrap(); + + sub.next().await.unwrap(); + + let hostname = format!( + "{}-{}.actor.{}.{}", + server_id, + "testing2", + faker_region.region_id.unwrap(), + ctx.config() + .server() + .unwrap() + .rivet + .dns() + .unwrap() + .domain_job + .as_ref() + .unwrap(), + ); + + // Async sleep for 5 seconds + tokio::time::sleep(std::time::Duration::from_secs(5)).await; + + // Echo body + let random_body = Uuid::new_v4().to_string(); + let client = reqwest::Client::new(); + let res = client + .post(format!("http://{hostname}")) + .body(random_body.clone()) + .send() + .await + .unwrap() + .error_for_status() + .unwrap(); + let res_text = res.text().await.unwrap(); + assert_eq!(random_body, res_text, "echoed wrong response"); +} diff --git a/packages/edge/services/ds/tests/server_create.rs b/packages/edge/services/ds/tests/server_create.rs new file mode 100644 index 0000000000..8b03eacc0a --- /dev/null +++ b/packages/edge/services/ds/tests/server_create.rs @@ -0,0 +1,167 @@ +use chirp_workflow::prelude::*; +use ds::types; +use rivet_operation::prelude::proto::backend; +use serde_json::json; + +#[workflow_test] +async fn server_create(ctx: TestCtx) { + let game_res = op!([ctx] faker_game { + ..Default::default() + }) + .await + .unwrap(); + let env_id = game_res.prod_env_id.unwrap(); + + ctx.op(ds::ops::game_config::upsert::Input { + game_id: game_res.game_id.unwrap().as_uuid(), + host_networking_enabled: Some(true), + ..Default::default() + }) + .await + .unwrap(); + + // Pick an existing cluster + let cluster_id = ctx + .op(cluster::ops::list::Input {}) + .await + .unwrap() + .cluster_ids + .first() + .unwrap() + .to_owned(); + + let build_res = op!([ctx] faker_build { + env_id: Some(env_id), + image: backend::faker::Image::JsEcho as i32, + }) + .await + .unwrap(); + + let faker_region = op!([ctx] faker_region {}).await.unwrap(); + + let env = vec![ + ("some_envkey_test".to_string(), "2134523".to_string()), + ( + "some_other_envkey_test".to_string(), + "4325234356".to_string(), + ), + ] + .into_iter() + .collect(); + + let ports = vec![( + "ds_testing2".to_string(), + ds::workflows::server::Port { + internal_port: None, + routing: types::Routing::GameGuard { + protocol: types::GameGuardProtocol::Http, + authorization: types::PortAuthorization::None, + }, + }, + )] + // Collect into hashmap + .into_iter() + .collect(); + + let server_id = Uuid::new_v4(); + + let mut sub = ctx + .subscribe::(&json!({ + "server_id": server_id, + })) + .await + .unwrap(); + + ctx.workflow(ds::workflows::server::Input { + server_id, + env_id: *env_id, + datacenter_id: faker_region.region_id.unwrap().as_uuid(), + cluster_id, + runtime: ds::types::ServerRuntime::Pegboard, + resources: ds::types::ServerResources { + cpu_millicores: 100, + memory_mib: 200, + }, + lifecycle: ds::types::ServerLifecycle { + kill_timeout_ms: 0, + durable: false, + }, + tags: vec![(String::from("test"), String::from("123"))] + .into_iter() + .collect(), + root_user_enabled: false, + args: Vec::new(), + environment: env, + image_id: build_res.build_id.unwrap().as_uuid(), + network_mode: types::NetworkMode::Host, + network_ports: ports, + }) + .tag("server_id", server_id) + .dispatch() + .await + .unwrap(); + + sub.next().await.unwrap(); + + tracing::info!("waiting for public hostname"); + + let (hostname, port) = loop { + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + + let server = ctx + .op(ds::ops::server::get::Input { + server_ids: vec![server_id], + endpoint_type: Some(ds::types::EndpointType::Hostname), + }) + .await + .unwrap() + .servers + .into_iter() + .next() + .unwrap(); + + let port = server.network_ports.get("ds_testing2").unwrap(); + + if let Some(hostname) = port.public_hostname.as_ref() { + break (hostname.clone(), port.public_port.unwrap()); + } + }; + + tracing::info!(%hostname, %port, "echoing"); + + // Echo body + let random_body = Uuid::new_v4().to_string(); + + loop { + // Create a new client each time to prevent cache + let client = reqwest::Client::new(); + let res = tokio::time::timeout(std::time::Duration::from_secs(3), async { + client + .post(format!("http://{hostname}:{port}")) + .body(random_body.clone()) + .send() + .await + .unwrap() + }) + .await; + + let Ok(res) = res else { + tracing::warn!("timed out for some reason"); + continue; + }; + + if let reqwest::StatusCode::NOT_FOUND = res.status() { + tracing::warn!("endpoint not found yet"); + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + continue; + } + + let res = res.error_for_status().unwrap(); + let res_text = res.text().await.unwrap(); + assert_eq!(random_body, res_text, "echoed wrong response"); + + break; + } + + // assert_eq!(game_res.prod_env_id.unwrap(), server.env_id.unwrap().as_uuid()); +} diff --git a/packages/edge/services/ds/tests/server_drain.rs b/packages/edge/services/ds/tests/server_drain.rs new file mode 100644 index 0000000000..8b79ad1626 --- /dev/null +++ b/packages/edge/services/ds/tests/server_drain.rs @@ -0,0 +1,120 @@ +use chirp_workflow::prelude::*; +use ds::types; +use rivet_operation::prelude::proto::backend; +use serde_json::json; + +#[workflow_test] +async fn server_drain(ctx: TestCtx) { + let game_res = op!([ctx] faker_game { + ..Default::default() + }) + .await + .unwrap(); + let env_id = game_res.prod_env_id.unwrap(); + + // Pick an existing cluster + let cluster_id = ctx + .op(cluster::ops::list::Input {}) + .await + .unwrap() + .cluster_ids + .first() + .unwrap() + .to_owned(); + + let build_res = op!([ctx] faker_build { + env_id: Some(env_id), + image: backend::faker::Image::DsEcho as i32, + }) + .await + .unwrap(); + + let faker_region = op!([ctx] faker_region {}).await.unwrap(); + + let env = vec![ + ("some_envkey_test".to_string(), "2134523".to_string()), + ( + "some_other_envkey_test".to_string(), + "4325234356".to_string(), + ), + ("HTTP_PORT".to_string(), 28234.to_string()), + ] + .into_iter() + .collect(); + + let ports = vec![( + "testing2".to_string(), + ds::workflows::server::Port { + internal_port: Some(28234), + routing: types::Routing::GameGuard { + protocol: types::GameGuardProtocol::Http, + authorization: types::PortAuthorization::None, + }, + }, + )] + // Collect into hashmap + .into_iter() + .collect(); + + let server_id = Uuid::new_v4(); + + let mut sub = ctx + .subscribe::(&json!({ + "server_id": server_id, + })) + .await + .unwrap(); + + ctx.workflow(ds::workflows::server::Input { + server_id, + env_id: *env_id, + datacenter_id: faker_region.region_id.unwrap().as_uuid(), + cluster_id, + runtime: ds::types::ServerRuntime::Pegboard, + resources: ds::types::ServerResources { + cpu_millicores: 50, + memory_mib: 50, + }, + lifecycle: ds::types::ServerLifecycle { + kill_timeout_ms: 10000, + durable: false, + }, + tags: vec![(String::from("test"), String::from("123"))] + .into_iter() + .collect(), + root_user_enabled: false, + args: Vec::new(), + environment: env, + image_id: build_res.build_id.unwrap().as_uuid(), + network_mode: types::NetworkMode::Bridge, + network_ports: ports, + }) + .tag("server_id", server_id) + .dispatch() + .await + .unwrap(); + + sub.next().await.unwrap(); + + ctx.signal(ds::workflows::server::Drain { + drain_timeout: 30000, + }) + .tag("server_id", server_id) + .send() + .await + .unwrap(); + + tokio::time::sleep(std::time::Duration::from_secs(5)).await; + + ctx.signal(ds::workflows::server::Undrain {}) + .tag("server_id", server_id) + .send() + .await + .unwrap(); + + ctx.signal(ds::workflows::server::Drain { drain_timeout: 0 }) + .tag("server_id", server_id) + .send() + .await + .unwrap(); +} diff --git a/packages/edge/services/ds/tests/server_get.rs b/packages/edge/services/ds/tests/server_get.rs new file mode 100644 index 0000000000..a86af6c212 --- /dev/null +++ b/packages/edge/services/ds/tests/server_get.rs @@ -0,0 +1,107 @@ +use std::collections::HashMap; + +use chirp_workflow::prelude::*; +use ds::types; +use rivet_operation::prelude::proto::backend; +use serde_json::json; + +#[workflow_test] +async fn server_get(ctx: TestCtx) { + let game_res = op!([ctx] faker_game { + ..Default::default() + }) + .await + .unwrap(); + let env_id = game_res.prod_env_id.unwrap(); + + // Pick an existing cluster + let cluster_id = ctx + .op(cluster::ops::list::Input {}) + .await + .unwrap() + .cluster_ids + .first() + .unwrap() + .to_owned(); + + let build_res: backend::pkg::faker::build::Response = op!([ctx] faker_build { + env_id: Some(env_id), + image: backend::faker::Image::DsEcho as i32, + }) + .await + .unwrap(); + + let faker_region = op!([ctx] faker_region {}).await.unwrap(); + + let env = vec![ + ("some_envkey_test".to_string(), "2134523".to_string()), + ( + "some_other_envkey_test".to_string(), + "4325234356".to_string(), + ), + ("HTTP_PORT".to_string(), "28234".to_string()), + ] + .into_iter() + .collect(); + + let ports = vec![( + "testing2".to_string(), + ds::workflows::server::Port { + internal_port: Some(28234), + routing: types::Routing::GameGuard { + protocol: types::GameGuardProtocol::Http, + authorization: types::PortAuthorization::None, + }, + }, + )] + .into_iter() + .collect(); + + let server_id = Uuid::new_v4(); + + let mut sub = ctx + .subscribe::(&json!({ + "server_id": server_id, + })) + .await + .unwrap(); + + ctx.workflow(ds::workflows::server::Input { + server_id, + env_id: *env_id, + datacenter_id: faker_region.region_id.unwrap().as_uuid(), + cluster_id, + runtime: ds::types::ServerRuntime::Nomad, + resources: ds::types::ServerResources { + cpu_millicores: 100, + memory_mib: 200, + }, + lifecycle: ds::types::ServerLifecycle { + kill_timeout_ms: 0, + durable: false, + }, + tags: HashMap::new(), + root_user_enabled: false, + args: Vec::new(), + environment: env, + image_id: build_res.build_id.unwrap().as_uuid(), + network_mode: types::NetworkMode::Bridge, + network_ports: ports, + }) + .tag("server_id", server_id) + .dispatch() + .await + .unwrap(); + + sub.next().await.unwrap(); + + ctx.op(ds::ops::server::get::Input { + server_ids: vec![server_id], + endpoint_type: Some(ds::types::EndpointType::Hostname), + }) + .await + .unwrap() + .servers + .first() + .unwrap(); +} diff --git a/packages/edge/services/monolith/standalone/workflow-worker/Cargo.toml b/packages/edge/services/monolith/standalone/workflow-worker/Cargo.toml new file mode 100644 index 0000000000..011a034fb5 --- /dev/null +++ b/packages/edge/services/monolith/standalone/workflow-worker/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "edge-monolith-workflow-worker" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +chirp-workflow.workspace = true +rivet-config.workspace = true +rivet-health-checks.workspace = true +rivet-metrics.workspace = true +rivet-runtime.workspace = true + +edge-ds.workspace = true +edge-pegboard.workspace = true diff --git a/packages/edge/services/monolith/standalone/workflow-worker/src/lib.rs b/packages/edge/services/monolith/standalone/workflow-worker/src/lib.rs new file mode 100644 index 0000000000..97b4fcaaa6 --- /dev/null +++ b/packages/edge/services/monolith/standalone/workflow-worker/src/lib.rs @@ -0,0 +1,22 @@ +use chirp_workflow::prelude::*; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + run_from_env(config, pools).await?; + + Ok(()) +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let reg = edge_ds::registry()?.merge(edge_pegboard::registry()?)?; + + let db = db::DatabaseFdbSqliteNats::from_pools(pools.clone())?; + let worker = Worker::new(reg.handle(), db); + + // Start worker + worker.start(config, pools).await?; + bail!("worker exited unexpectedly"); +} diff --git a/packages/edge/services/pegboard/Cargo.toml b/packages/edge/services/pegboard/Cargo.toml new file mode 100644 index 0000000000..a77e6e7f44 --- /dev/null +++ b/packages/edge/services/pegboard/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "edge-pegboard" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[features] +default = ["workflows"] +workflows = ["chirp", "foundationdb", "fdb-util"] +chirp = ["chirp-workflow", "sqlx", "nix", "server-spec"] + +[dependencies] +anyhow = "1.0" +chirp-workflow = { workspace = true, optional = true } +fdb-util = { workspace = true, optional = true } +foundationdb = { workspace = true, optional = true } +lazy_static = "1.4" +nix = { version = "0.27", default-features = false, features = ["user", "signal"], optional = true } +rivet-api.workspace = true +rivet-config.workspace = true +rivet-metrics.workspace = true +schemars = { version = "0.8.21", features = ["url", "uuid1"] } +serde = { version = "1.0.198", features = ["derive"] } +serde_json = "1.0.132" +sqlite-util.workspace = true +strum = { version = "0.24", features = ["derive"] } +thiserror = "1.0" +util.workspace = true +uuid = "1.11.0" + +pegboard.workspace = true +server-spec = { workspace = true, optional = true } + +[dependencies.sqlx] +optional = true +workspace = true +features = [ "json", "ipnetwork" ] diff --git a/packages/edge/services/pegboard/src/keys/client.rs b/packages/edge/services/pegboard/src/keys/client.rs new file mode 100644 index 0000000000..63fc9acaad --- /dev/null +++ b/packages/edge/services/pegboard/src/keys/client.rs @@ -0,0 +1,95 @@ +use std::result::Result::Ok; + +use anyhow::*; +use chirp_workflow::prelude::*; +use fdb_util::prelude::*; + +#[derive(Debug)] +pub struct RemainingMemKey { + client_id: Uuid, +} + +impl RemainingMemKey { + pub fn new(client_id: Uuid) -> Self { + RemainingMemKey { client_id } + } +} + +impl FormalKey for RemainingMemKey { + /// MiB. + type Value = u64; + + fn deserialize(&self, raw: &[u8]) -> Result { + Ok(u64::from_be_bytes(raw.try_into()?)) + } + + fn serialize(&self, value: Self::Value) -> Result> { + Ok(value.to_be_bytes().to_vec()) + } +} + +impl TuplePack for RemainingMemKey { + fn pack( + &self, + w: &mut W, + tuple_depth: TupleDepth, + ) -> std::io::Result { + let t = ("client", "data", self.client_id, "remaining_mem"); + t.pack(w, tuple_depth) + } +} + +impl<'de> TupleUnpack<'de> for RemainingMemKey { + fn unpack(input: &[u8], tuple_depth: TupleDepth) -> PackResult<(&[u8], Self)> { + let (input, (_, _, client_id, _)) = + <(Cow, Cow, Uuid, Cow)>::unpack(input, tuple_depth)?; + let v = RemainingMemKey { client_id }; + + Ok((input, v)) + } +} + +#[derive(Debug)] +pub struct LastPingTsKey { + client_id: Uuid, +} + +impl LastPingTsKey { + pub fn new(client_id: Uuid) -> Self { + LastPingTsKey { client_id } + } +} + +impl FormalKey for LastPingTsKey { + // Timestamp. + type Value = i64; + + fn deserialize(&self, raw: &[u8]) -> Result { + Ok(i64::from_be_bytes(raw.try_into()?)) + } + + fn serialize(&self, value: Self::Value) -> Result> { + Ok(value.to_be_bytes().to_vec()) + } +} + +impl TuplePack for LastPingTsKey { + fn pack( + &self, + w: &mut W, + tuple_depth: TupleDepth, + ) -> std::io::Result { + let t = ("client", "data", self.client_id, "last_ping_ts"); + t.pack(w, tuple_depth) + } +} + +impl<'de> TupleUnpack<'de> for LastPingTsKey { + fn unpack(input: &[u8], tuple_depth: TupleDepth) -> PackResult<(&[u8], Self)> { + let (input, (_, _, client_id, _)) = + <(Cow, Cow, Uuid, Cow)>::unpack(input, tuple_depth)?; + let v = LastPingTsKey { client_id }; + + Ok((input, v)) + } +} diff --git a/packages/edge/services/pegboard/src/keys/datacenter.rs b/packages/edge/services/pegboard/src/keys/datacenter.rs new file mode 100644 index 0000000000..0f26ab4982 --- /dev/null +++ b/packages/edge/services/pegboard/src/keys/datacenter.rs @@ -0,0 +1,136 @@ +use std::result::Result::Ok; + +use anyhow::*; +use chirp_workflow::prelude::*; +use fdb_util::prelude::*; +use pegboard::protocol; + +#[derive(Debug)] +pub struct ClientsByRemainingMemKey { + pub flavor: protocol::ClientFlavor, + /// MiB. + pub remaining_mem: u64, + pub last_ping_ts: i64, + pub client_id: Uuid, +} + +impl ClientsByRemainingMemKey { + pub fn new( + flavor: protocol::ClientFlavor, + remaining_mem: u64, + last_ping_ts: i64, + client_id: Uuid, + ) -> Self { + ClientsByRemainingMemKey { + flavor, + last_ping_ts, + remaining_mem, + client_id, + } + } + + pub fn subspace(flavor: protocol::ClientFlavor) -> ClientsByRemainingMemSubspaceKey { + ClientsByRemainingMemSubspaceKey::new(flavor) + } + + pub fn subspace_with_mem( + flavor: protocol::ClientFlavor, + remaining_mem: u64, + ) -> ClientsByRemainingMemSubspaceKey { + ClientsByRemainingMemSubspaceKey::new_with_mem(flavor, remaining_mem) + } +} + +impl FormalKey for ClientsByRemainingMemKey { + /// Client workflow id. + type Value = Uuid; + + fn deserialize(&self, raw: &[u8]) -> Result { + Ok(Uuid::from_slice(raw)?) + } + + fn serialize(&self, value: Self::Value) -> Result> { + Ok(value.as_bytes().to_vec()) + } +} + +impl TuplePack for ClientsByRemainingMemKey { + fn pack( + &self, + w: &mut W, + tuple_depth: TupleDepth, + ) -> std::io::Result { + let t = ( + "datacenter", + "clients_by_remaining_mem", + self.flavor as usize, + self.remaining_mem, + self.last_ping_ts, + self.client_id, + ); + t.pack(w, tuple_depth) + } +} + +impl<'de> TupleUnpack<'de> for ClientsByRemainingMemKey { + fn unpack(input: &[u8], tuple_depth: TupleDepth) -> PackResult<(&[u8], Self)> { + let (input, (_, _, flavor, remaining_mem, last_ping_ts, client_id)) = + <(Cow, Cow, usize, u64, i64, Uuid)>::unpack(input, tuple_depth)?; + let flavor = protocol::ClientFlavor::from_repr(flavor).ok_or_else(|| { + PackError::Message(format!("invalid flavor `{flavor}` in key").into()) + })?; + + let v = ClientsByRemainingMemKey { + flavor, + remaining_mem, + last_ping_ts, + client_id, + }; + + Ok((input, v)) + } +} + +pub struct ClientsByRemainingMemSubspaceKey { + pub flavor: protocol::ClientFlavor, + pub remaining_mem: Option, +} + +impl ClientsByRemainingMemSubspaceKey { + pub fn new(flavor: protocol::ClientFlavor) -> Self { + ClientsByRemainingMemSubspaceKey { + flavor, + remaining_mem: None, + } + } + + pub fn new_with_mem(flavor: protocol::ClientFlavor, remaining_mem: u64) -> Self { + ClientsByRemainingMemSubspaceKey { + flavor, + remaining_mem: Some(remaining_mem), + } + } +} + +impl TuplePack for ClientsByRemainingMemSubspaceKey { + fn pack( + &self, + w: &mut W, + tuple_depth: TupleDepth, + ) -> std::io::Result { + let mut offset = VersionstampOffset::None { size: 0 }; + + let t = ( + "datacenter", + "clients_by_remaining_mem", + self.flavor as usize, + ); + offset += t.pack(w, tuple_depth)?; + + if let Some(remaining_mem) = &self.remaining_mem { + offset += remaining_mem.pack(w, tuple_depth)?; + } + + Ok(offset) + } +} diff --git a/packages/edge/services/pegboard/src/keys/mod.rs b/packages/edge/services/pegboard/src/keys/mod.rs new file mode 100644 index 0000000000..d605471dc0 --- /dev/null +++ b/packages/edge/services/pegboard/src/keys/mod.rs @@ -0,0 +1,8 @@ +use foundationdb as fdb; + +pub mod client; +pub mod datacenter; + +pub fn subspace() -> fdb::tuple::Subspace { + fdb::tuple::Subspace::all().subspace(&("pegboard")) +} diff --git a/packages/edge/services/pegboard/src/lib.rs b/packages/edge/services/pegboard/src/lib.rs new file mode 100644 index 0000000000..8f8fc494d4 --- /dev/null +++ b/packages/edge/services/pegboard/src/lib.rs @@ -0,0 +1,20 @@ +#[cfg(feature = "chirp")] +use chirp_workflow::prelude::*; + +#[cfg(feature = "workflows")] +pub mod keys; +#[cfg(feature = "workflows")] +pub mod ops; +#[cfg(feature = "workflows")] +pub mod workflows; + +#[cfg(feature = "workflows")] +pub fn registry() -> WorkflowResult { + use workflows::*; + + let mut registry = Registry::new(); + registry.register_workflow::()?; + registry.register_workflow::()?; + + Ok(registry) +} diff --git a/packages/edge/services/pegboard/src/ops/client/mod.rs b/packages/edge/services/pegboard/src/ops/client/mod.rs new file mode 100644 index 0000000000..08f7006297 --- /dev/null +++ b/packages/edge/services/pegboard/src/ops/client/mod.rs @@ -0,0 +1,2 @@ +pub mod reserve; +pub mod update_allocation_idx; diff --git a/packages/edge/services/pegboard/src/ops/client/reserve.rs b/packages/edge/services/pegboard/src/ops/client/reserve.rs new file mode 100644 index 0000000000..b2449283a6 --- /dev/null +++ b/packages/edge/services/pegboard/src/ops/client/reserve.rs @@ -0,0 +1,117 @@ +use chirp_workflow::prelude::*; +use fdb_util::{FormalKey, SNAPSHOT}; +use foundationdb::{ + self as fdb, + options::{ConflictRangeType, StreamingMode}, +}; +use futures_util::TryStreamExt; +use pegboard::protocol; + +use crate::keys; + +/// How long after last ping before not considering a client for allocation. +const CLIENT_ELIGIBLE_THRESHOLD_MS: i64 = util::duration::seconds(10); + +// TODO: Only uses memory for allocation atm, not cpu as well +#[derive(Debug)] +pub struct Input { + pub flavor: protocol::ClientFlavor, + /// MiB. + pub memory: u64, +} + +#[derive(Debug)] +pub struct Output { + pub client_id: Uuid, + pub client_workflow_id: Uuid, +} + +#[operation] +pub async fn pegboard_client_reserve( + ctx: &OperationCtx, + input: &Input, +) -> GlobalResult> { + ctx.fdb() + .await? + .run(|tx, _mc| async move { + let ping_threshold_ts = util::timestamp::now() - CLIENT_ELIGIBLE_THRESHOLD_MS; + + // Select a range that only includes clients that have enough remaining mem to allocate this actor + let client_allocation_subspace = + keys::datacenter::ClientsByRemainingMemKey::subspace(input.flavor); + let start = keys::subspace().pack( + &keys::datacenter::ClientsByRemainingMemKey::subspace_with_mem( + input.flavor, + input.memory, + ), + ); + let end = keys::subspace() + .subspace(&client_allocation_subspace) + .range() + .1; + + let mut stream = tx.get_ranges_keyvalues( + fdb::RangeOption { + mode: StreamingMode::Iterator, + // Containers bin pack so we reverse the order + reverse: matches!(input.flavor, protocol::ClientFlavor::Container), + ..(start, end).into() + }, + // NOTE: This is not SERIALIZABLE because we don't want to conflict with all of the keys, just + // the one we choose + SNAPSHOT, + ); + + loop { + let Some(entry) = stream.try_next().await? else { + return Ok(None); + }; + + let old_allocation_key = keys::subspace() + .unpack::(entry.key()) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + + // Scan by last ping + if old_allocation_key.last_ping_ts < ping_threshold_ts { + continue; + } + + let client_workflow_id = old_allocation_key + .deserialize(entry.value()) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + + // Add read conflict only for this key + tx.add_conflict_range(entry.key(), entry.key(), ConflictRangeType::Read)?; + + // Clear old entry + tx.clear(entry.key()); + + // Update allocated amount + let remaining_mem = old_allocation_key.remaining_mem - input.memory; + let new_allocation_key = keys::datacenter::ClientsByRemainingMemKey::new( + input.flavor, + remaining_mem, + old_allocation_key.last_ping_ts, + old_allocation_key.client_id, + ); + tx.set(&keys::subspace().pack(&new_allocation_key), entry.value()); + + // Update client record + let client_allocation_key = + keys::client::RemainingMemKey::new(old_allocation_key.client_id); + tx.set( + &keys::subspace().pack(&client_allocation_key), + &client_allocation_key + .serialize(remaining_mem) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + + return Ok(Some(Output { + client_id: old_allocation_key.client_id, + client_workflow_id, + })); + } + }) + .await + .map_err(Into::into) +} diff --git a/packages/edge/services/pegboard/src/ops/client/update_allocation_idx.rs b/packages/edge/services/pegboard/src/ops/client/update_allocation_idx.rs new file mode 100644 index 0000000000..a199685060 --- /dev/null +++ b/packages/edge/services/pegboard/src/ops/client/update_allocation_idx.rs @@ -0,0 +1,125 @@ +use chirp_workflow::prelude::*; +use fdb_util::{FormalKey, SERIALIZABLE}; +use foundationdb::{self as fdb, options::ConflictRangeType}; +use pegboard::protocol; + +use crate::keys; + +#[derive(Debug)] +pub enum Action { + ClearIdx, + AddIdx, + UpdatePing, +} + +#[derive(Debug)] +pub struct Input { + pub client_id: Uuid, + pub client_workflow_id: Uuid, + pub flavor: protocol::ClientFlavor, + pub action: Action, +} + +#[operation] +pub async fn pegboard_client_update_allocation_idx( + ctx: &OperationCtx, + input: &Input, +) -> GlobalResult<()> { + ctx.fdb() + .await? + .run(|tx, _mc| async move { + let remaining_mem_key = keys::client::RemainingMemKey::new(input.client_id); + let last_ping_ts_key = keys::client::LastPingTsKey::new(input.client_id); + let last_ping_ts_key_buf = keys::subspace().pack(&last_ping_ts_key); + + // Read current allocated memory and last ping + let (allocated_mem, last_ping_ts) = tokio::try_join!( + tx.get(&keys::subspace().pack(&remaining_mem_key), SERIALIZABLE), + tx.get(&last_ping_ts_key_buf, SERIALIZABLE), + )?; + let allocated_mem = remaining_mem_key + .deserialize(&allocated_mem.ok_or(fdb::FdbBindingError::CustomError( + format!("key should exist: {remaining_mem_key:?}").into(), + ))?) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + let last_ping_ts = last_ping_ts_key + .deserialize(&last_ping_ts.ok_or(fdb::FdbBindingError::CustomError( + format!("key should exist: {last_ping_ts_key:?}").into(), + ))?) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + + let old_allocation_key = keys::datacenter::ClientsByRemainingMemKey::new( + input.flavor, + allocated_mem, + last_ping_ts, + input.client_id, + ); + let old_allocation_key_buf = keys::subspace().pack(&old_allocation_key); + + match input.action { + Action::ClearIdx => { + // Add read conflict + tx.add_conflict_range( + &old_allocation_key_buf, + &old_allocation_key_buf, + ConflictRangeType::Read, + )?; + + tx.clear(&old_allocation_key_buf); + } + Action::AddIdx => { + // Add read conflict + tx.add_conflict_range( + &old_allocation_key_buf, + &old_allocation_key_buf, + ConflictRangeType::Read, + )?; + + tx.set( + &old_allocation_key_buf, + &old_allocation_key + .serialize(input.client_workflow_id) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + } + // TODO: Could be improved somehow to not require another `.get` + Action::UpdatePing => { + let last_ping_ts = util::timestamp::now(); + + // Update ping key + tx.set( + &last_ping_ts_key_buf, + &last_ping_ts_key + .serialize(last_ping_ts) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + + // Only update allocation idx if it existed before + if tx + .get(&old_allocation_key_buf, SERIALIZABLE) + .await? + .is_some() + { + let new_allocation_key = keys::datacenter::ClientsByRemainingMemKey::new( + input.flavor, + allocated_mem, + last_ping_ts, + input.client_id, + ); + let new_allocation_key_buf = keys::subspace().pack(&new_allocation_key); + + tx.set( + &new_allocation_key_buf, + &new_allocation_key + .serialize(input.client_workflow_id) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + } + } + } + + Ok(()) + }) + .await + .map_err(Into::into) +} diff --git a/packages/edge/services/pegboard/src/ops/mod.rs b/packages/edge/services/pegboard/src/ops/mod.rs new file mode 100644 index 0000000000..b9babe5bc1 --- /dev/null +++ b/packages/edge/services/pegboard/src/ops/mod.rs @@ -0,0 +1 @@ +pub mod client; diff --git a/packages/edge/services/pegboard/src/workflows/actor.rs b/packages/edge/services/pegboard/src/workflows/actor.rs new file mode 100644 index 0000000000..26b33ed6b1 --- /dev/null +++ b/packages/edge/services/pegboard/src/workflows/actor.rs @@ -0,0 +1,219 @@ +use chirp_workflow::prelude::*; +use futures_util::FutureExt; +use pegboard::protocol::{self, ActorState::*}; + +/// How long to wait after creating and not receiving a starting state before setting actor as lost. +const ACTOR_START_THRESHOLD_MS: i64 = util::duration::seconds(30); +/// How long to wait after stopping and not receiving a stop state before setting actor as lost. +const ACTOR_STOP_THRESHOLD_MS: i64 = util::duration::seconds(30); +/// How long to wait after stopped and not receiving an exit state before setting actor as lost. +const ACTOR_EXIT_THRESHOLD_MS: i64 = util::duration::seconds(5); + +#[derive(Debug, Serialize, Deserialize)] +pub struct Input { + pub actor_id: Uuid, + pub parent_workflow_id: Uuid, + pub config: protocol::ActorConfig, +} + +#[workflow] +pub async fn pegboard_actor(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + ctx.loope(State::default(), |ctx, state| { + let actor_id = input.actor_id; + let parent_workflow_id = input.parent_workflow_id; + let owner = input.config.owner.clone(); + async move { + let sig = if let Some(timeout_ts) = state.timeout_ts { + // If a timeout happens, it means this actor is lost + if let Some(sig) = ctx.listen_until::(timeout_ts).await? { + sig + } else { + // Fake signal + StateUpdate { + state: Lost, + ignore_future_state: false, + } + } + } else { + ctx.listen::().await? + }; + + // Write to DB + if !matches!(sig.state, Draining { .. } | Undrained) { + ctx.activity(UpdateStateInput { + actor_id, + parent_workflow_id, + state: sig.state.clone(), + }) + .await?; + } + + // Update timeout + let complete = match &sig.state { + Starting => { + state.timeout_ts = None; + false + } + Running { .. } => false, + Stopping => { + state.timeout_ts = Some(util::timestamp::now() + ACTOR_STOP_THRESHOLD_MS); + false + } + Stopped => { + state.timeout_ts = Some(util::timestamp::now() + ACTOR_EXIT_THRESHOLD_MS); + false + } + Exited { .. } | Lost => true, + Draining { .. } | Undrained => false, + }; + + // Forward signal to owner + if !state.ignore_future_state { + state.ignore_future_state = sig.ignore_future_state; + + match owner { + protocol::ActorOwner::DynamicServer { workflow_id, .. } => { + ctx.signal(sig).to_workflow_id(workflow_id).send().await?; + } + } + } + + if complete { + Ok(Loop::Break(())) + } else { + Ok(Loop::Continue) + } + } + .boxed() + }) + .await?; + + Ok(()) +} + +#[derive(Serialize, Deserialize)] +struct State { + timeout_ts: Option, + ignore_future_state: bool, +} + +impl Default for State { + fn default() -> Self { + State { + timeout_ts: Some(util::timestamp::now() + ACTOR_START_THRESHOLD_MS), + ignore_future_state: false, + } + } +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct UpdateStateInput { + actor_id: Uuid, + parent_workflow_id: Uuid, + state: protocol::ActorState, +} + +#[activity(UpdateState)] +async fn update_state(ctx: &ActivityCtx, input: &UpdateStateInput) -> GlobalResult<()> { + let pool = &ctx.sqlite_for_workflow(input.parent_workflow_id).await?; + + match &input.state { + Starting => { + sql_execute!( + [ctx, pool] + " + UPDATE actors + SET start_ts = $2 + WHERE actor_id = $1 + ", + input.actor_id, + util::timestamp::now(), + ) + .await?; + } + Running { pid, .. } => { + sql_execute!( + [ctx, pool] + " + UPDATE actors + SET + running_ts = $2, + pid = $3 + WHERE actor_id = $1 + ", + input.actor_id, + util::timestamp::now(), + *pid as i64, + ) + .await?; + } + Stopping => { + sql_execute!( + [ctx, pool] + " + UPDATE actors + SET + stopping_ts = $2 + WHERE actor_id = $1 AND stopping_ts IS NULL + ", + input.actor_id, + util::timestamp::now(), + ) + .await?; + } + Stopped => { + sql_execute!( + [ctx, pool] + " + UPDATE actors + SET stop_ts = $2 + WHERE actor_id = $1 + ", + input.actor_id, + util::timestamp::now(), + ) + .await?; + } + Lost => { + sql_execute!( + [ctx, pool] + " + UPDATE actors + SET + lost_ts = $2 + WHERE actor_id = $1 + RETURNING ignore_future_state + ", + input.actor_id, + util::timestamp::now(), + ) + .await?; + } + Exited { exit_code } => { + sql_execute!( + [ctx, pool] + " + UPDATE actors + SET + exit_ts = $2, + exit_code = $3 + WHERE actor_id = $1 + RETURNING ignore_future_state + ", + input.actor_id, + util::timestamp::now(), + exit_code, + ) + .await?; + } + _ => unreachable!(), + } + + Ok(()) +} + +#[signal("pegboard_actor_state_update")] +pub struct StateUpdate { + pub state: protocol::ActorState, + pub ignore_future_state: bool, +} diff --git a/packages/edge/services/pegboard/src/workflows/client/migrations.rs b/packages/edge/services/pegboard/src/workflows/client/migrations.rs new file mode 100644 index 0000000000..a5f110ef63 --- /dev/null +++ b/packages/edge/services/pegboard/src/workflows/client/migrations.rs @@ -0,0 +1,67 @@ +use chirp_workflow::prelude::*; +use sqlite_util::SqlitePoolExt; + +pub async fn run(ctx: &mut WorkflowCtx) -> GlobalResult<()> { + ctx.activity(MigrateInitInput {}).await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct MigrateInitInput {} + +#[activity(MigrateInit)] +async fn migrate_init(ctx: &ActivityCtx, _input: &MigrateInitInput) -> GlobalResult<()> { + let mut tx = ctx.sqlite().await?.begin_immediate().await?; + + sql_execute!( + [ctx, @tx &mut tx] + " + CREATE TABLE state ( + create_ts INT NOT NULL, + last_event_idx INT NOT NULL DEFAULT -1, + last_command_idx INT NOT NULL DEFAULT -1, + + flavor INT NOT NULL, -- pegboard::protocol::ClientFlavor + system_info BLOB, -- JSONB + config BLOB -- JSONB + ) STRICT; + + CREATE TABLE events ( + idx INT PRIMARY KEY, + payload BLOB NOT NULL, -- JSONB + ack_ts INT NOT NULL + ) STRICT; + + CREATE TABLE commands ( + idx INT PRIMARY KEY, + payload BLOB NOT NULL, -- JSONB + create_ts INT NOT NULL + ) STRICT; + + CREATE TABLE actors ( + actor_id BLOB PRIMARY KEY, -- UUID + config BLOB NOT NULL, -- pegboard::protocol::ActorConfig + create_ts INT NOT NULL, + + -- See protocol.rs `ActorState` for info + start_ts INT, + running_ts INT, + stopping_ts INT, + stop_ts INT, + exit_ts INT, + lost_ts INT, + + pid INT, + exit_code INT, + + ignore_future_state INT NOT NULL DEFAULT false -- BOOLEAN + ) STRICT; + ", + ) + .await?; + + tx.commit().await?; + + Ok(()) +} diff --git a/packages/edge/services/pegboard/src/workflows/client/mod.rs b/packages/edge/services/pegboard/src/workflows/client/mod.rs new file mode 100644 index 0000000000..217d74a2c3 --- /dev/null +++ b/packages/edge/services/pegboard/src/workflows/client/mod.rs @@ -0,0 +1,692 @@ +use std::convert::TryInto; + +use chirp_workflow::prelude::*; +use fdb_util::{FormalKey, SERIALIZABLE}; +use foundationdb as fdb; +use futures_util::FutureExt; +use nix::sys::signal::Signal; +use pegboard::{client_config, metrics, protocol, protocol::ClientFlavor, system_info}; +use rivet_api::apis::{ + configuration::Configuration, + core_intercom_pegboard_api::core_intercom_pegboard_mark_client_registered, +}; +use sqlite_util::SqlitePoolExt; + +use crate::keys; + +mod migrations; + +/// How long to wait after last ping before forcibly removing a client from the database and deleting its +/// workflow, evicting all actors. Note that the client may still be running and can reconnect. +const CLIENT_LOST_THRESHOLD_MS: i64 = util::duration::minutes(2); + +#[derive(Debug, Serialize, Deserialize)] +pub struct Input { + pub client_id: Uuid, + pub flavor: ClientFlavor, +} + +#[workflow] +pub async fn pegboard_client(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { + migrations::run(ctx).await?; + + ctx.activity(InsertDbInput { + flavor: input.flavor, + }) + .await?; + + ctx.activity(PublishRegisteredInput { + client_id: input.client_id, + }) + .await?; + + ctx.loope(State::default(), |ctx, state| { + let client_id = input.client_id; + let flavor = input.flavor; + + async move { + match ctx + .listen_with_timeout::
(CLIENT_LOST_THRESHOLD_MS) + .await? + { + Some(Main::Forward(sig)) => { + match sig { + protocol::ToServer::Init { + last_command_idx, + config, + system, + } => { + let allocable_memory = system.memory.total_memory / 1024 / 1024 + - config.reserved_resources.memory; + + let init_data = ctx + .activity(ProcessInitInput { + config, + system, + last_command_idx, + }) + .await?; + + // Send init packet + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::Init { + last_event_idx: init_data.last_event_idx, + }, + }) + .send() + .await?; + + // Send missed commands + if !init_data.missed_commands.is_empty() { + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::Commands(init_data.missed_commands), + }) + .send() + .await?; + } + + ctx.activity(InsertFdbInput { + client_id, + allocable_memory, + flavor, + }) + .await?; + } + // We assume events are in order by index + protocol::ToServer::Events(events) => { + // Write to db + ctx.activity(InsertEventsInput { + client_id, + events: events.clone(), + }) + .await?; + + // NOTE: This should not be parallelized because signals should be sent in order + // Forward to actor workflows + for event in events { + #[allow(irrefutable_let_patterns)] + if let protocol::Event::ActorStateUpdate { actor_id, state } = + event.inner.deserialize()? + { + ctx.signal(crate::workflows::actor::StateUpdate { + state, + ignore_future_state: false, + }) + .to_workflow::() + .tag("actor_id", actor_id) + .send() + .await?; + } + } + } + } + } + Some(Main::Command(command)) => { + handle_commands(ctx, client_id, state.drain_timeout_ts, vec![command]).await?; + } + Some(Main::PrewarmImage(sig)) => { + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::PrewarmImage { + image_id: sig.image_id, + image_artifact_url_stub: sig.image_artifact_url_stub, + }, + }) + .send() + .await?; + } + Some(Main::Drain(sig)) => { + state.drain_timeout_ts = Some(sig.drain_timeout_ts); + + ctx.activity(SetDrainInput { + client_id, + flavor, + draining: true, + }) + .await?; + } + Some(Main::Undrain(_)) => { + state.drain_timeout_ts = None; + + ctx.activity(SetDrainInput { + client_id, + flavor, + draining: false, + }) + .await?; + } + None => { + if ctx.activity(CheckExpiredInput { client_id }).await? { + return Ok(Loop::Break(())); + } + } + } + + Ok(Loop::Continue) + } + .boxed() + }) + .await?; + + ctx.activity(ClearFdbInput { + client_id: input.client_id, + flavor: input.flavor, + }) + .await?; + + let actor_ids = ctx.activity(FetchAllActorsInput {}).await?; + + // Set all remaining actors as lost + for actor_id in actor_ids { + ctx.signal(crate::workflows::actor::StateUpdate { + state: protocol::ActorState::Lost, + ignore_future_state: false, + }) + .to_workflow::() + .tag("actor_id", actor_id) + .send() + .await?; + } + + // Close websocket connection (its unlikely to be open) + ctx.msg(CloseWs { + client_id: input.client_id, + }) + .send() + .await?; + + Ok(()) +} + +#[derive(Serialize, Deserialize, Default)] +struct State { + drain_timeout_ts: Option, +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct InsertDbInput { + flavor: ClientFlavor, +} + +#[activity(InsertDb)] +async fn insert_db(ctx: &ActivityCtx, input: &InsertDbInput) -> GlobalResult<()> { + let pool = ctx.sqlite().await?; + + sql_execute!( + [ctx, pool] + " + INSERT INTO state (create_ts, flavor) + VALUES (?, ?) + ", + util::timestamp::now(), + input.flavor as i32, + ) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct InsertFdbInput { + client_id: Uuid, + /// MiB. + allocable_memory: u64, + flavor: ClientFlavor, +} + +#[activity(InsertFdb)] +async fn insert_fdb(ctx: &ActivityCtx, input: &InsertFdbInput) -> GlobalResult<()> { + ctx.fdb() + .await? + .run(|tx, _mc| async move { + let remaining_mem_key = keys::client::RemainingMemKey::new(input.client_id); + let last_ping_key = keys::client::LastPingTsKey::new(input.client_id); + + // See if key already exists + if tx + .get(&keys::subspace().pack(&remaining_mem_key), SERIALIZABLE) + .await? + .is_none() + { + // Set remaining memory + tx.set( + &keys::subspace().pack(&remaining_mem_key), + &remaining_mem_key + .serialize(input.allocable_memory) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + + // Set last ping + let last_ping_ts = util::timestamp::now(); + tx.set( + &keys::subspace().pack(&last_ping_key), + &last_ping_key + .serialize(last_ping_ts) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + + // Insert into index + let allocation_key = keys::datacenter::ClientsByRemainingMemKey::new( + input.flavor, + input.allocable_memory, + last_ping_ts, + input.client_id, + ); + tx.set( + &keys::subspace().pack(&allocation_key), + &allocation_key + .serialize(ctx.workflow_id()) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?, + ); + } + + Ok(()) + }) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct PublishRegisteredInput { + client_id: Uuid, +} + +#[activity(PublishRegistered)] +async fn publish_registered(ctx: &ActivityCtx, input: &PublishRegisteredInput) -> GlobalResult<()> { + let edge = ctx.config().server()?.rivet.edge()?; + + let config = Configuration { + base_path: edge.intercom_endpoint.clone(), + bearer_access_token: edge.server_token.as_ref().map(|x| x.read().clone()), + ..Default::default() + }; + + core_intercom_pegboard_mark_client_registered(&config, &input.client_id.to_string()).await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ProcessInitInput { + last_command_idx: i64, + config: client_config::ClientConfig, + system: system_info::SystemInfo, +} + +#[derive(Debug, Serialize, Deserialize)] +struct ProcessInitOutput { + last_event_idx: i64, + missed_commands: Vec, +} + +#[activity(ProcessInit)] +async fn process_init( + ctx: &ActivityCtx, + input: &ProcessInitInput, +) -> GlobalResult { + let pool = &ctx.sqlite().await?; + + let ((last_event_idx,), commands) = tokio::try_join!( + sql_fetch_one!( + [ctx, (i64,), pool] + " + UPDATE state + SET config = jsonb(?), system_info = jsonb(?) + RETURNING last_event_idx + ", + serde_json::to_value(&input.config)?, + serde_json::to_value(&input.system)?, + ), + sql_fetch_all!( + [ctx, (i64, String), pool] + " + SELECT idx, json(payload) + FROM commands + WHERE idx > ? + ORDER BY idx ASC + ", + input.last_command_idx, + ), + )?; + + Ok(ProcessInitOutput { + last_event_idx, + missed_commands: commands + .into_iter() + .map(|(index, payload)| { + Ok(protocol::CommandWrapper { + index, + inner: protocol::Raw::from_string(payload)?, + }) + }) + .collect::>()?, + }) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct InsertEventsInput { + client_id: Uuid, + events: Vec, +} + +#[activity(InsertEvents)] +async fn insert_events(ctx: &ActivityCtx, input: &InsertEventsInput) -> GlobalResult<()> { + let last_event_idx = if let Some(last_event_wrapper) = input.events.last() { + last_event_wrapper.index + } else { + return Ok(()); + }; + + let mut tx = ctx.sqlite().await?.begin_immediate().await?; + + // TODO(RVT-4450): `last_event_idx < $2` and `ON CONFLICT DO NOTHING` is a workaround + sql_execute!( + [ctx, @tx &mut tx] + " + UPDATE state + SET last_event_idx = $2 + WHERE last_event_idx < $2 + ", + last_event_idx, + ) + .await?; + + // TODO: Parallelize + for event in &input.events { + let res = sql_execute!( + [ctx, @tx &mut tx] + " + INSERT INTO events (idx, payload, ack_ts) + VALUES (?, jsonb(?), ?) + ON CONFLICT (idx) DO NOTHING + ", + event.index, + &event.inner, + util::timestamp::now(), + ) + .await?; + + if res.rows_affected() == 0 { + metrics::CLIENT_DUPLICATE_EVENT + .with_label_values(&[&input.client_id.to_string(), &event.index.to_string()]) + .inc(); + } + } + + tx.commit().await?; + + Ok(()) +} + +pub async fn handle_commands( + ctx: &mut WorkflowCtx, + client_id: Uuid, + drain_timeout_ts: Option, + commands: Vec, +) -> GlobalResult<()> { + if commands.is_empty() { + return Ok(()); + } + + let raw_commands = commands + .iter() + .map(protocol::Raw::new) + .collect::, _>>()?; + + // Write to db + let index = ctx + .activity(InsertCommandsInput { + commands: raw_commands.clone(), + }) + .await?; + + // TODO: Send as a single message + for (i, raw_command) in raw_commands.into_iter().enumerate() { + let wrapped_command = protocol::CommandWrapper { + index: index + i as i64, + inner: raw_command, + }; + + // Forward signal to ws as message + ctx.msg(ToWs { + client_id, + inner: protocol::ToClient::Commands(vec![wrapped_command]), + }) + .send() + .await?; + } + + // NOTE: Cannot parallelize because these must be sent in order + // Update actor state based on commands + for command in commands { + match command { + protocol::Command::StartActor { actor_id, config } => { + let actor_workflow_id = ctx + .workflow(crate::workflows::actor::Input { + actor_id, + parent_workflow_id: ctx.workflow_id(), + config: *config, + }) + .tag("actor_id", actor_id) + .dispatch() + .await?; + + // If this start actor command was received after the client started draining, immediately + // inform the actor wf that it is draining + if let Some(drain_timeout_ts) = drain_timeout_ts { + ctx.signal(crate::workflows::actor::StateUpdate { + state: protocol::ActorState::Draining { drain_timeout_ts }, + ignore_future_state: false, + }) + .to_workflow_id(actor_workflow_id) + .send() + .await?; + } + } + protocol::Command::SignalActor { + actor_id, + signal, + ignore_future_state, + .. + } => { + if matches!(signal.try_into()?, Signal::SIGTERM | Signal::SIGKILL) { + ctx.signal(crate::workflows::actor::StateUpdate { + state: protocol::ActorState::Stopping, + ignore_future_state, + }) + .to_workflow::() + .tag("actor_id", actor_id) + .send() + .await?; + } + } + } + } + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct InsertCommandsInput { + commands: Vec>, +} + +#[activity(InsertCommands)] +async fn insert_commands(ctx: &ActivityCtx, input: &InsertCommandsInput) -> GlobalResult { + let mut tx = ctx.sqlite().await?.begin_immediate().await?; + + let (last_command_index,) = sql_fetch_one!( + [ctx, (i64,), @tx &mut tx] + " + UPDATE state + SET last_command_idx = last_command_idx + ? + RETURNING last_command_idx - ? + ", + input.commands.len() as i64, + ) + .await?; + + // TODO: Parallelize + for (index, command) in input.commands.iter().enumerate() { + sql_execute!( + [ctx, @tx &mut tx] + " + INSERT INTO commands ( + idx, + payload, + create_ts + ) + VALUES (?, jsonb(?), ?) + ", + last_command_index + index as i64 + 1, + command, + util::timestamp::now(), + ) + .await?; + } + + tx.commit().await?; + + Ok(last_command_index) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct SetDrainInput { + client_id: Uuid, + flavor: ClientFlavor, + draining: bool, +} + +#[activity(SetDrain)] +async fn set_drain(ctx: &ActivityCtx, input: &SetDrainInput) -> GlobalResult<()> { + ctx.op(crate::ops::client::update_allocation_idx::Input { + client_id: input.client_id, + client_workflow_id: ctx.workflow_id(), + flavor: input.flavor, + action: if input.draining { + crate::ops::client::update_allocation_idx::Action::ClearIdx + } else { + crate::ops::client::update_allocation_idx::Action::AddIdx + }, + }) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct ClearFdbInput { + client_id: Uuid, + flavor: ClientFlavor, +} + +#[activity(ClearFdb)] +async fn clear_fdb(ctx: &ActivityCtx, input: &ClearFdbInput) -> GlobalResult<()> { + // Does not clear the data keys like last ping ts + ctx.op(crate::ops::client::update_allocation_idx::Input { + client_id: input.client_id, + client_workflow_id: ctx.workflow_id(), + flavor: input.flavor, + action: crate::ops::client::update_allocation_idx::Action::ClearIdx, + }) + .await?; + + Ok(()) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct FetchAllActorsInput {} + +#[activity(FetchAllActors)] +async fn fetch_all_actors( + ctx: &ActivityCtx, + input: &FetchAllActorsInput, +) -> GlobalResult> { + let pool = ctx.sqlite().await?; + + let actor_ids = sql_fetch_all!( + [ctx, (Uuid,), pool] + " + SELECT actor_id + FROM actors + WHERE + stopping_ts IS NULL AND + stop_ts IS NULL AND + exit_ts IS NULL + ", + ) + .await? + .into_iter() + .map(|(id,)| id) + .collect(); + + Ok(actor_ids) +} + +#[derive(Debug, Serialize, Deserialize, Hash)] +struct CheckExpiredInput { + client_id: Uuid, +} + +#[activity(CheckExpired)] +async fn check_expired(ctx: &ActivityCtx, input: &CheckExpiredInput) -> GlobalResult { + let last_ping_ts = ctx + .fdb() + .await? + .run(|tx, _mc| async move { + let last_ping_ts_key = keys::client::LastPingTsKey::new(input.client_id); + + let last_ping_ts = tx + .get(&keys::subspace().pack(&last_ping_ts_key), SERIALIZABLE) + .await?; + let last_ping_ts = last_ping_ts_key + .deserialize(&last_ping_ts.ok_or(fdb::FdbBindingError::CustomError( + format!("key should exist: {last_ping_ts_key:?}").into(), + ))?) + .map_err(|x| fdb::FdbBindingError::CustomError(x.into()))?; + + Ok(last_ping_ts) + }) + .await?; + + Ok(last_ping_ts < util::timestamp::now() - CLIENT_LOST_THRESHOLD_MS) +} + +#[signal("pegboard_client_registered")] +pub struct Registered {} + +#[message("pegboard_client_to_ws")] +pub struct ToWs { + pub client_id: Uuid, + pub inner: protocol::ToClient, +} + +#[signal("pegboard_prewarm_image")] +pub struct PrewarmImage { + pub image_id: Uuid, + pub image_artifact_url_stub: String, +} +#[message("pegboard_client_close_ws")] +pub struct CloseWs { + pub client_id: Uuid, +} + +#[signal("pegboard_client_drain")] +pub struct Drain { + drain_timeout_ts: i64, +} + +#[signal("pegboard_client_undrain")] +pub struct Undrain {} + +join_signal!(Main { + Command(protocol::Command), + // Forwarded from the ws to this workflow + Forward(protocol::ToServer), + PrewarmImage, + Drain, + Undrain, +}); diff --git a/packages/edge/services/pegboard/src/workflows/mod.rs b/packages/edge/services/pegboard/src/workflows/mod.rs new file mode 100644 index 0000000000..69eb77c1dc --- /dev/null +++ b/packages/edge/services/pegboard/src/workflows/mod.rs @@ -0,0 +1,2 @@ +pub mod actor; +pub mod client; diff --git a/packages/edge/services/pegboard/standalone/ws/Cargo.toml b/packages/edge/services/pegboard/standalone/ws/Cargo.toml new file mode 100644 index 0000000000..1d83f643a4 --- /dev/null +++ b/packages/edge/services/pegboard/standalone/ws/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "edge-pegboard-ws" +version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true + +[dependencies] +chirp-client.workspace = true +chirp-workflow.workspace = true +hyper = "1.4" +rivet-connection.workspace = true +rivet-config.workspace = true +rivet-health-checks.workspace = true +rivet-metrics.workspace = true +rivet-runtime.workspace = true +serde = { version = "1.0", features = ["derive"] } +tokio-tungstenite = "0.23.1" +url = "2.2.2" + +pegboard.workspace = true +edge-pegboard.workspace = true diff --git a/packages/edge/services/pegboard/standalone/ws/src/lib.rs b/packages/edge/services/pegboard/standalone/ws/src/lib.rs new file mode 100644 index 0000000000..4c0ffb91ec --- /dev/null +++ b/packages/edge/services/pegboard/standalone/ws/src/lib.rs @@ -0,0 +1,458 @@ +use std::{ + collections::HashMap, + net::SocketAddr, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + time::Duration, +}; + +use chirp_workflow::prelude::*; +use futures_util::{stream::SplitSink, SinkExt, StreamExt}; +use serde_json::json; +use tokio::{ + net::{TcpListener, TcpStream}, + sync::{Mutex, RwLock}, +}; +use tokio_tungstenite::{ + tungstenite::protocol::{ + frame::{coding::CloseCode, CloseFrame}, + Message, + }, + WebSocketStream, +}; + +use pegboard::protocol; + +const UPDATE_PING_INTERVAL: Duration = Duration::from_secs(3); + +struct Connection { + // Set after init packet is received + workflow_id: RwLock>, + protocol_version: u16, + flavor: protocol::ClientFlavor, + tx: Mutex, Message>>, + update_ping: AtomicBool, +} + +type Connections = HashMap>; + +pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { + run_from_env(config.clone(), pools.clone()).await +} + +#[tracing::instrument(skip_all)] +pub async fn run_from_env( + config: rivet_config::Config, + pools: rivet_pools::Pools, +) -> GlobalResult<()> { + let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-ws"); + let cache = rivet_cache::CacheInner::from_env(pools.clone())?; + let ctx = StandaloneCtx::new( + db::DatabaseFdbSqliteNats::from_pools(pools.clone())?, + config, + rivet_connection::Connection::new(client, pools, cache), + "pegboard-ws", + ) + .await?; + + let conns: Arc> = Arc::new(RwLock::new(HashMap::new())); + + let host = ctx.config().server()?.rivet.pegboard.host(); + let port = ctx.config().server()?.rivet.pegboard.port(); + let addr = SocketAddr::from((host, port)); + + let listener = TcpListener::bind(addr).await?; + tracing::info!(?port, ?port, "pegboard ws server listening"); + + // None of these should ever exit + // + // If these do exit, then the `handle_connection` task will run indefinitely and never + // send/receive anything to clients. Client workflows will then expire because of their ping, + // their workflow will complete, and clients will be unusable unless they reconnect. + tokio::join!( + socket_thread(&ctx, conns.clone(), listener), + msg_thread(&ctx, conns.clone()), + update_ping_thread(&ctx, conns.clone()), + ); + + Ok(()) +} + +#[tracing::instrument(skip_all)] +async fn socket_thread( + ctx: &StandaloneCtx, + conns: Arc>, + listener: TcpListener, +) { + loop { + match listener.accept().await { + Ok((stream, addr)) => handle_connection(ctx, conns.clone(), stream, addr).await, + Err(err) => tracing::error!(?err, "failed to connect websocket"), + } + } +} + +#[tracing::instrument(skip_all)] +async fn handle_connection( + ctx: &StandaloneCtx, + conns: Arc>, + raw_stream: TcpStream, + addr: SocketAddr, +) { + tracing::debug!(?addr, "new connection"); + + let ctx = ctx.clone(); + + tokio::spawn(async move { + let (ws_stream, url_data) = match setup_connection(raw_stream, addr).await { + Ok(x) => x, + Err(err) => { + tracing::error!(?addr, ?err, "setup connection failed"); + return; + } + }; + + if let Err(err) = handle_connection_inner(&ctx, conns.clone(), ws_stream, url_data).await { + tracing::error!(?addr, ?err, "handle connection inner failed"); + } + + // Clean up + let conn = conns.write().await.remove(&url_data.client_id); + if let Some(conn) = conn { + let close_frame = CloseFrame { + code: CloseCode::Normal, + reason: "handle_connection_inner event loop closed".into(), + }; + if let Err(err) = conn + .tx + .lock() + .await + .send(Message::Close(Some(close_frame))) + .await + { + tracing::error!(?addr, ?err, "failed closing socket"); + } + } + }); +} + +#[tracing::instrument(skip_all)] +async fn setup_connection( + raw_stream: TcpStream, + addr: SocketAddr, +) -> GlobalResult<(WebSocketStream, UrlData)> { + let mut uri = None; + let ws_stream = tokio_tungstenite::accept_hdr_async( + raw_stream, + |req: &tokio_tungstenite::tungstenite::handshake::server::Request, res| { + // Bootleg way of reading the uri + uri = Some(req.uri().clone()); + + tracing::debug!(?addr, ?uri, "handshake"); + + Ok(res) + }, + ) + .await?; + + // Parse URL + let uri = unwrap!(uri, "socket has no associated request"); + let url_data = parse_url(addr, uri)?; + + Ok((ws_stream, url_data)) +} + +#[tracing::instrument(skip_all)] +async fn handle_connection_inner( + ctx: &StandaloneCtx, + conns: Arc>, + ws_stream: WebSocketStream, + UrlData { + protocol_version, + client_id, + flavor, + }: UrlData, +) -> GlobalResult<()> { + let (tx, mut rx) = ws_stream.split(); + + let conn = Arc::new(Connection { + workflow_id: RwLock::new(None), + protocol_version, + flavor, + tx: Mutex::new(tx), + update_ping: AtomicBool::new(false), + }); + let mut workflow_id_guard = conn.workflow_id.write().await; + + // Store connection + { + let mut conns = conns.write().await; + if let Some(old_conn) = conns.insert(client_id, conn.clone()) { + tracing::warn!( + ?client_id, + "client already connected, closing old connection" + ); + + let close_frame = CloseFrame { + code: CloseCode::Normal, + reason: "client already connected, closing old connection".into(), + }; + old_conn + .tx + .lock() + .await + .send(Message::Close(Some(close_frame))) + .await?; + } + } + + // Only create the client after receiving the init packet to prevent a race condition + if let Some(msg) = rx.next().await { + match msg? { + Message::Binary(buf) => { + let packet = protocol::ToServer::deserialize(protocol_version, &buf)?; + + if let protocol::ToServer::Init { .. } = &packet { + // Spawn a new client workflow if one doesn't already exist + let workflow_id = ctx + .workflow(edge_pegboard::workflows::client::Input { client_id, flavor }) + .tag("client_id", client_id) + .unique() + .dispatch() + .await?; + + *workflow_id_guard = Some(workflow_id); + drop(workflow_id_guard); + } else { + bail!("unexpected initial packet: {packet:?}"); + } + + // Forward to client wf + ctx.signal(packet) + .to_workflow::() + .tag("client_id", client_id) + .send() + .await?; + } + Message::Close(_) => { + bail!("socket closed {client_id}"); + } + msg => bail!("unexpected initial message: {msg:?}"), + } + } + + // Receive messages from socket + while let Some(msg) = rx.next().await { + match msg? { + Message::Binary(buf) => { + let packet = protocol::ToServer::deserialize(protocol_version, &buf)?; + + // Forward to client wf + ctx.signal(packet) + .to_workflow::() + .tag("client_id", client_id) + .send() + .await?; + } + Message::Ping(_) => { + conn.update_ping.store(true, Ordering::Relaxed); + } + Message::Close(_) => { + bail!("socket closed {client_id}"); + } + msg => tracing::warn!(?client_id, ?msg, "unexpected message"), + } + } + + bail!("stream closed {client_id}"); + + // Only way I could figure out to help the complier infer type + #[allow(unreachable_code)] + GlobalResult::Ok(()) +} + +#[tracing::instrument(skip_all)] +async fn update_ping_thread(ctx: &StandaloneCtx, conns: Arc>) { + loop { + match update_ping_thread_inner(ctx, conns.clone()).await { + Ok(_) => { + tracing::warn!("update ping thread thread exited early"); + } + Err(err) => { + tracing::error!(?err, "update ping thread error"); + } + } + + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + } +} + +/// Updates the ping of all clients requesting a ping update at once. +#[tracing::instrument(skip_all)] +async fn update_ping_thread_inner( + ctx: &StandaloneCtx, + conns: Arc>, +) -> GlobalResult<()> { + loop { + tokio::time::sleep(UPDATE_PING_INTERVAL).await; + + let clients = { + let conns = conns.read().await; + + // Select all clients that required a ping update + let futs = conns + .iter() + .filter_map(|(client_id, conn)| { + conn.update_ping + .swap(false, Ordering::Relaxed) + .then(|| async move { + // Read workflow id + (*client_id, conn.flavor, *conn.workflow_id.read().await) + }) + }) + .collect::>(); + + futures_util::stream::iter(futs) + .buffer_unordered(32) + .collect::>() + .await + }; + + if clients.is_empty() { + continue; + } + + // Update ping in fdb idx for each client + for (client_id, flavor, workflow_id) in clients { + let Some(workflow_id) = workflow_id else { + continue; + }; + + ctx.op(edge_pegboard::ops::client::update_allocation_idx::Input { + client_id, + client_workflow_id: workflow_id, + flavor, + action: edge_pegboard::ops::client::update_allocation_idx::Action::UpdatePing, + }) + .await?; + } + } +} + +#[tracing::instrument(skip_all)] +async fn msg_thread(ctx: &StandaloneCtx, conns: Arc>) { + loop { + match msg_thread_inner(ctx, conns.clone()).await { + Ok(_) => { + tracing::warn!("msg thread exited early"); + } + Err(err) => { + tracing::error!(?err, "msg thread error"); + } + } + + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + } +} + +#[tracing::instrument(skip_all)] +async fn msg_thread_inner( + ctx: &StandaloneCtx, + conns: Arc>, +) -> GlobalResult<()> { + // Listen for commands from client workflows + let mut sub = ctx + .subscribe::(&json!({})) + .await?; + let mut close_sub = ctx + .subscribe::(&json!({})) + .await?; + + loop { + tokio::select! { + msg = sub.next() => { + let msg = msg?; + + { + let conns = conns.read().await; + + // Send command to socket + if let Some(conn) = conns.get(&msg.client_id) { + let buf = msg.inner.serialize(conn.protocol_version)?; + conn.tx.lock().await.send(Message::Binary(buf)).await?; + } else { + tracing::debug!( + client_id=?msg.client_id, + "received command for client that isn't connected, ignoring" + ); + } + } + } + msg = close_sub.next() => { + let msg = msg?; + + { + let conns = conns.read().await; + + // Close socket + if let Some(conn) = conns.get(&msg.client_id) { + tracing::info!(client_id = ?msg.client_id, "received close ws event, closing socket"); + + let close_frame = CloseFrame { + code: CloseCode::Normal, + reason: "received close ws event".into(), + }; + conn.tx.lock().await.send(Message::Close(Some(close_frame))).await?; + } else { + tracing::debug!( + client_id=?msg.client_id, + "received close command for client that isn't connected, ignoring" + ); + } + } + } + } + } +} + +#[derive(Clone, Copy)] +struct UrlData { + protocol_version: u16, + client_id: Uuid, + flavor: protocol::ClientFlavor, +} + +fn parse_url(addr: SocketAddr, uri: hyper::Uri) -> GlobalResult { + let url = url::Url::parse(&format!("ws://{addr}{uri}"))?; + + // Get protocol version from last path segment + let last_segment = unwrap!( + unwrap!(url.path_segments(), "invalid url").last(), + "no path segments" + ); + ensure!(last_segment.starts_with('v'), "invalid protocol version"); + let protocol_version = last_segment[1..].parse::()?; + + // Read client_id from query parameters + let client_id = unwrap!( + url.query_pairs() + .find_map(|(n, v)| (n == "client_id").then_some(v)), + "missing `client_id` query parameter" + ); + let client_id = util::uuid::parse(client_id.as_ref())?; + + let flavor = unwrap!( + url.query_pairs() + .find_map(|(n, v)| (n == "flavor").then_some(v)), + "missing `flavor` query parameter" + ); + let flavor = flavor.parse()?; + + Ok(UrlData { + protocol_version, + client_id, + flavor, + }) +} diff --git a/packages/edge/services/pegboard/standalone/ws/tests/integration.rs b/packages/edge/services/pegboard/standalone/ws/tests/integration.rs new file mode 100644 index 0000000000..6c8ea4d0f2 --- /dev/null +++ b/packages/edge/services/pegboard/standalone/ws/tests/integration.rs @@ -0,0 +1 @@ +// TODO: diff --git a/packages/infra/client/actor-kv/src/lib.rs b/packages/infra/client/actor-kv/src/lib.rs deleted file mode 100644 index dfc434d528..0000000000 --- a/packages/infra/client/actor-kv/src/lib.rs +++ /dev/null @@ -1,415 +0,0 @@ -use std::{ - collections::HashMap, - result::Result::{Err, Ok}, -}; - -use anyhow::*; -use deno_core::JsBuffer; -pub use entry::Entry; -use entry::{EntryBuilder, SubKey}; -use foundationdb::{self as fdb, directory::Directory, tuple::Subspace}; -use futures_util::{StreamExt, TryStreamExt}; -use indexmap::IndexMap; -use key::Key; -use list_query::ListLimitReached; -pub use list_query::ListQuery; -pub use metadata::Metadata; -use pegboard::protocol; -use prost::Message; -use utils::{owner_segment, validate_entries, validate_keys, TransactionExt}; - -mod entry; -pub mod key; -mod list_query; -mod metadata; -mod utils; - -const MAX_KEY_SIZE: usize = 2 * 1024; -const MAX_VALUE_SIZE: usize = 128 * 1024; -const MAX_KEYS: usize = 128; -const MAX_PUT_PAYLOAD_SIZE: usize = 976 * 1024; -const MAX_STORAGE_SIZE: usize = 1024 * 1024 * 1024; // 1 GiB -const VALUE_CHUNK_SIZE: usize = 1000; // 1 KB, not KiB - -// Currently designed largely around the Deno runtime. More abstractions can be made later. -pub struct ActorKv { - version: &'static str, - db: fdb::Database, - owner: protocol::ActorOwner, - subspace: Option, -} - -impl ActorKv { - pub fn new(db: fdb::Database, owner: protocol::ActorOwner) -> Self { - Self { - version: env!("CARGO_PKG_VERSION"), - db, - owner, - subspace: None, - } - } - - /// Initializes actor's KV. - /// - /// If FDB is down, this will hang indefinitely until connected. - pub async fn init(&mut self) -> Result<()> { - tracing::info!("initializing actor KV"); - - let root = fdb::directory::DirectoryLayer::default(); - - let tx = self.db.create_trx()?; - let actor_dir = root - .create_or_open( - &tx, - &["pegboard".into(), owner_segment(&self.owner)], - None, - Some(b"partition"), - ) - .await - .map_err(|err| anyhow!("{err:?}"))?; - let kv_dir = actor_dir - .create_or_open(&tx, &["kv".into()], None, None) - .await - .map_err(|err| anyhow!("{err:?}"))?; - tx.commit().await.map_err(|err| anyhow!("{err:?}"))?; - - self.subspace = Some(kv_dir.subspace(&()).map_err(|err| anyhow!("{err:?}"))?); - - tracing::info!("successfully initialized KV"); - - Ok(()) - } - - /// Returns estimated size of the given subspace. - pub async fn get_subspace_size(&self, subspace: &Subspace) -> Result { - let (start, end) = subspace.range(); - - // This txn does not have to be committed because we are not modifying any data - let tx = self.db.create_trx()?; - tx.get_estimated_range_size_bytes(&start, &end) - .await - .map_err(Into::into) - } - - /// Gets keys from the KV store. - pub async fn get(&self, keys: Vec) -> Result> { - let subspace = self - .subspace - .as_ref() - .context("must call `ActorKv::init` before using KV operations")?; - - validate_keys(&keys)?; - - self.db - .run(|tx, _mc| { - let keys = keys.clone(); - async move { - futures_util::stream::iter(keys) - .map(|key| { - let tx = tx.clone(); - let key_subspace = subspace.subspace(&key); - - async move { - // Get all sub keys in the key subspace - let stream = tx.get_ranges_keyvalues_owned( - fdb::RangeOption { - mode: fdb::options::StreamingMode::WantAll, - ..key_subspace.range().into() - }, - false, - ); - - stream.map(move |res| { - match res { - Ok(value) => { - // Parse key as string - if let Ok(sub_key) = - key_subspace.unpack::(value.key()) - { - if sub_key != "metadata" { - bail!("unexpected sub key: {sub_key:?}"); - } - - Ok((key.clone(), SubKey::Metadata(value))) - } else { - // Parse sub key as idx - let (_, idx) = key_subspace - .unpack::<(String, usize)>(value.key())?; - - Ok((key.clone(), SubKey::Chunk(idx, value))) - } - } - Err(err) => Err(err.into()), - } - }) - } - }) - // Should remain in order - .buffered(32) - .flatten() - .try_fold(HashMap::new(), |mut acc, (key, sub_key)| async { - acc.entry(key) - .or_insert_with(EntryBuilder::default) - .add_sub_key(sub_key)?; - - Ok(acc) - }) - .await - .map_err(|x| fdb::FdbBindingError::CustomError(x.into())) - } - }) - .await - .map_err(Into::::into)? - .into_iter() - .map(|(key, builder)| { - let entry = builder.build(&key)?; - - Ok((key, entry)) - }) - .collect() - } - - /// Gets keys from the KV store. - pub async fn list( - &self, - query: ListQuery, - reverse: bool, - limit: Option, - ) -> Result> { - let subspace = self - .subspace - .as_ref() - .context("must call `ActorKv::init` before using KV operations")?; - - query.validate()?; - - let list_range = query.range(&subspace); - - let res = self - .db - .run(|tx, _mc| { - let list_range = list_range.clone(); - - async move { - // TODO: Make this use `RangeOption.limit` instead of the weird custom limit impl with an - // error - // Get all sub keys in the key subspace - let stream = tx.get_ranges_keyvalues_owned( - fdb::RangeOption { - mode: if limit.is_some() { - fdb::options::StreamingMode::Iterator - } else { - fdb::options::StreamingMode::WantAll - }, - reverse, - ..list_range.into() - }, - false, - ); - - let stream = stream.map(move |res| { - match res { - Ok(value) => { - // Parse key as string - if let Ok((key, sub_key)) = - subspace.unpack::<(Key, String)>(value.key()) - { - if sub_key != "metadata" { - bail!("unexpected sub key: {sub_key:?}"); - } - - Ok((key, SubKey::Metadata(value))) - } else { - // Parse sub key as idx - let (key, _, idx) = - subspace.unpack::<(Key, String, usize)>(value.key())?; - - Ok((key, SubKey::Chunk(idx, value))) - } - } - Err(err) => Err(err.into()), - } - }); - - // With a limit, we short circuit out of the `try_fold` once the limit is reached - if let Some(limit) = limit { - stream - .try_fold(IndexMap::new(), |mut acc, (key, sub_key)| async { - let size = acc.len(); - let entry = acc.entry(key); - - // Short circuit when limit is reached. This relies on data from the stream - // being in order. - if size == limit && matches!(entry, indexmap::map::Entry::Vacant(_)) - { - return Err(ListLimitReached(acc).into()); - } - - entry - .or_insert_with(EntryBuilder::default) - .add_sub_key(sub_key)?; - - Ok(acc) - }) - .await - // The downcast further down doesn't work without this downcast, I have no idea why - .map_err(|x| match x.downcast::() { - Ok(err) => fdb::FdbBindingError::CustomError(err.into()), - Err(err) => fdb::FdbBindingError::CustomError(err.into()), - }) - } else { - stream - .try_fold(IndexMap::new(), |mut acc, (key, sub_key)| async { - acc.entry(key) - .or_insert_with(EntryBuilder::default) - .add_sub_key(sub_key)?; - - Ok(acc) - }) - .await - .map_err(|x| fdb::FdbBindingError::CustomError(x.into())) - } - } - }) - .await; - - let values = match res { - Ok(values) => values, - Err(fdb::FdbBindingError::CustomError(err)) => { - let ListLimitReached(values) = *err - .downcast::() - .map_err(fdb::FdbBindingError::CustomError)?; - - values - } - Err(err) => return Err(err.into()), - }; - - values - .into_iter() - .map(|(key, builder)| { - let entry = builder.build(&key)?; - - Ok((key, entry)) - }) - .collect() - } - - /// Puts keys into the KV store. - pub async fn put(&self, entries: HashMap) -> Result<()> { - let subspace = self - .subspace - .as_ref() - .context("must call `ActorKv::init` before using KV operations")?; - let total_size = self.get_subspace_size(subspace).await? as usize; - - validate_entries(&entries, total_size)?; - - self.db - .run(|tx, _mc| { - // TODO: Potentially costly clone - let entries = entries.clone(); - let subspace = subspace.clone(); - - async move { - futures_util::stream::iter(entries) - .map(|(key, value)| { - let tx = tx.clone(); - let key_subspace = subspace.subspace(&key); - - async move { - // Clear previous before setting - tx.clear_subspace_range(&key_subspace); - - let metadata = Metadata { - kv_version: self.version.as_bytes().to_vec(), - create_ts: utils::now(), - }; - let mut buf = Vec::new(); - metadata - .encode(&mut buf) - .map_err(|err| fdb::FdbBindingError::CustomError(err.into()))?; - - // Set metadata - tx.set(&key_subspace.pack(&"metadata"), &buf); - - // Set data - for start in (0..value.len()).step_by(VALUE_CHUNK_SIZE) { - let idx = start / VALUE_CHUNK_SIZE; - let end = (start + VALUE_CHUNK_SIZE).min(value.len()); - - tx.set( - &key_subspace.pack(&("data", idx)), - &value.get(start..end).context("bad slice").map_err( - |err| fdb::FdbBindingError::CustomError(err.into()), - )?, - ); - } - - Ok(()) - } - }) - .buffer_unordered(32) - .try_collect() - .await - } - }) - .await - .map_err(Into::into) - } - - /// Deletes keys from the KV store. - pub async fn delete(&self, keys: Vec) -> Result<()> { - let subspace = self - .subspace - .as_ref() - .context("must call `ActorKv::init` before using KV operations")?; - - validate_keys(&keys)?; - - self.db - .run(|tx, _mc| { - let keys = keys.clone(); - async move { - for key in keys { - let key_subspace = subspace.subspace(&key); - - tx.clear_subspace_range(&key_subspace); - } - - Ok(()) - } - }) - .await - .map_err(Into::into) - } - - /// Deletes all keys from the KV store. - pub async fn delete_all(&self) -> Result<()> { - let subspace = self - .subspace - .as_ref() - .context("must call `ActorKv::init` before using KV operations")?; - - self.db - .run(|tx, _mc| async move { - tx.clear_subspace_range(&subspace); - Ok(()) - }) - .await - .map_err(Into::into) - } - - /// **Destroys entire actor's KV. Cannot be undone.** - pub async fn destroy(self) -> Result<()> { - let root = fdb::directory::DirectoryLayer::default(); - - let tx = self.db.create_trx()?; - root.remove_if_exists(&tx, &["pegboard".into(), owner_segment(&self.owner)]) - .await - .map_err(|err| anyhow!("{err:?}"))?; - tx.commit().await.map_err(|err| anyhow!("{err:?}"))?; - - Ok(()) - } -} diff --git a/packages/infra/client/actor-kv/src/utils.rs b/packages/infra/client/actor-kv/src/utils.rs deleted file mode 100644 index 10e1d5b508..0000000000 --- a/packages/infra/client/actor-kv/src/utils.rs +++ /dev/null @@ -1,131 +0,0 @@ -use std::{collections::HashMap, result::Result::Ok}; - -use anyhow::*; -use deno_core::JsBuffer; -use foundationdb as fdb; -use futures_util::{FutureExt, TryStreamExt}; -use pegboard::protocol; - -use crate::{ - key::Key, MAX_KEYS, MAX_KEY_SIZE, MAX_PUT_PAYLOAD_SIZE, MAX_STORAGE_SIZE, MAX_VALUE_SIZE, -}; - -pub trait TransactionExt { - /// Owned version of `Transaction.get_ranges` (self is owned). - fn get_ranges_owned<'a>( - self, - opt: fdb::RangeOption<'a>, - snapshot: bool, - ) -> impl futures_util::Stream> - + Send - + Sync - + Unpin - + 'a; - - /// Owned version of `Transaction.get_ranges_keyvalues` (self is owned). - fn get_ranges_keyvalues_owned<'a>( - self, - opt: fdb::RangeOption<'a>, - snapshot: bool, - ) -> impl futures_util::Stream> + Unpin + 'a; -} - -impl TransactionExt for fdb::RetryableTransaction { - fn get_ranges_owned<'a>( - self, - opt: fdb::RangeOption<'a>, - snapshot: bool, - ) -> impl futures_util::Stream> - + Send - + Sync - + Unpin - + 'a { - futures_util::stream::unfold((1, Some(opt)), move |(iteration, maybe_opt)| { - if let Some(opt) = maybe_opt { - futures_util::future::Either::Left( - self.get_range(&opt, iteration as usize, snapshot) - .map(move |maybe_values| { - let next_opt = match &maybe_values { - Ok(values) => opt.next_range(values), - Err(..) => None, - }; - Some((maybe_values, (iteration + 1, next_opt))) - }), - ) - } else { - futures_util::future::Either::Right(std::future::ready(None)) - } - }) - } - - fn get_ranges_keyvalues_owned<'a>( - self, - opt: fdb::RangeOption<'a>, - snapshot: bool, - ) -> impl futures_util::Stream> + Unpin + 'a { - self.get_ranges_owned(opt, snapshot) - .map_ok(|values| futures_util::stream::iter(values.into_iter().map(Ok))) - .try_flatten() - } -} - -pub fn now() -> i64 { - std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap_or_else(|err| unreachable!("time is broken: {}", err)) - .as_millis() - .try_into() - .expect("now doesn't fit in i64") -} - -pub fn owner_segment(owner: &protocol::ActorOwner) -> String { - match owner { - protocol::ActorOwner::DynamicServer { server_id } => (*server_id).into(), - } -} - -pub fn validate_keys(keys: &[Key]) -> Result<()> { - ensure!(keys.len() <= MAX_KEYS, "a maximum of 128 keys is allowed"); - - for key in keys { - ensure!( - key.len() <= MAX_KEY_SIZE, - "key is too long (max 2048 bytes)" - ); - } - - Ok(()) -} - -pub fn validate_entries(entries: &HashMap, total_size: usize) -> Result<()> { - ensure!( - entries.len() <= MAX_KEYS, - "A maximum of 128 key-value entries is allowed" - ); - let payload_size = entries - .iter() - .fold(0, |acc, (k, v)| acc + k.len() + v.len()); - ensure!( - payload_size <= MAX_PUT_PAYLOAD_SIZE, - "total payload is too large (max 976 KiB)" - ); - - let storage_remaining = MAX_STORAGE_SIZE.saturating_sub(total_size); - ensure!( - payload_size <= storage_remaining, - "not enough space left in storage ({storage_remaining} bytes remaining, current payload is {payload_size} bytes)" - ); - - for (key, value) in entries { - ensure!( - key.len() <= MAX_KEY_SIZE, - "key is too long (max 2048 bytes)" - ); - ensure!( - value.len() <= MAX_VALUE_SIZE, - "value is too large (max 128 KiB)" - ); - } - - Ok(()) -} diff --git a/packages/infra/client/manager/Cargo.toml b/packages/infra/client/manager/Cargo.toml deleted file mode 100644 index ad0bf9323c..0000000000 --- a/packages/infra/client/manager/Cargo.toml +++ /dev/null @@ -1,63 +0,0 @@ -[package] -name = "pegboard-manager" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[[bin]] -name = "rivet-client" -path = "src/main.rs" - -[features] -# Enable this feature flag to build and run integration tests -test = [] - -[dependencies] -anyhow.workspace = true -bytes = "1.0" -futures-util = { version = "0.3" } -hyper = { version = "0.14", features = ["server", "http1", "tcp", "stream"] } -indoc = "2.0" -lazy_static = "1.4" -nix.workspace = true -notify = { version = "6.1.1", default-features = false, features = ["serde", "fsevent-sys"] } -prometheus = "0.13" -rand = "0.8" -rand_chacha = "0.3.1" -reqwest = { version = "0.11", default-features = false, features = ["stream", "rustls-tls", "json"] } -serde = { version = "1.0.195", features = ["derive"] } -serde_json = "1.0.111" -sqlite-util.workspace = true -sysinfo = "0.31.4" -tempfile = "3.2" -thiserror = "1.0" -tokio = { workspace = true, default-features = false, features = ["fs", "process", "macros", "rt", "rt-multi-thread"] } -tokio-tungstenite = "0.23.1" -tokio-util = { version = "0.7", default-features = false, features = ["io-util"] } -tracing-logfmt.workspace = true -tracing-subscriber.workspace = true -tracing.workspace = true -url = "2.4" -uuid = { version = "1.6.1", features = ["v4"] } - -pegboard = { path = "../../../services/pegboard", default-features = false } -pegboard-config.workspace = true -pegboard-logs.workspace = true -serde_yaml = "0.9.34" - -[dependencies.sqlx] -workspace = true -features = [ - "runtime-tokio", - "migrate", - "sqlite", - "uuid", - "json", - "ipnetwork", - "derive", -] - -[dev-dependencies] -portpicker = "0.1" -rivet-util = { path = "../../../common/util/core", default-features = false } diff --git a/packages/infra/client/manager/src/utils/mod.rs b/packages/infra/client/manager/src/utils/mod.rs deleted file mode 100644 index e94fe49c9a..0000000000 --- a/packages/infra/client/manager/src/utils/mod.rs +++ /dev/null @@ -1,402 +0,0 @@ -use std::{ - hash::{DefaultHasher, Hasher}, - net::Ipv4Addr, - path::Path, - result::Result::{Err, Ok}, - time::{self, Duration}, -}; - -use anyhow::*; -use futures_util::Stream; -use indoc::indoc; -use notify::{ - event::{AccessKind, AccessMode}, - Event, EventKind, RecommendedWatcher, RecursiveMode, Watcher, -}; -use pegboard::protocol; -use pegboard_config::{Addresses, Config}; -use rand::{prelude::SliceRandom, SeedableRng}; -use serde::Deserialize; -use sqlx::{ - migrate::MigrateDatabase, - sqlite::{SqlitePool, SqlitePoolOptions}, - Sqlite, -}; -use tokio::{ - fs, - sync::mpsc::{channel, Receiver}, -}; -use url::Url; -use uuid::Uuid; - -use crate::ctx::Ctx; - -pub mod sql; - -pub async fn init_dir(config: &Config) -> Result<()> { - let data_dir = config.client.data_dir(); - - if fs::metadata(&data_dir).await.is_err() { - bail!("data dir `{}` does not exist", data_dir.display()); - } - - if config.client.runner.flavor == protocol::ClientFlavor::Container - && fs::metadata(&config.client.runner.container_runner_binary_path()) - .await - .is_err() - { - bail!( - "container runner binary `{}` does not exist", - config - .client - .runner - .container_runner_binary_path() - .display() - ); - } - - if config.client.runner.flavor == protocol::ClientFlavor::Isolate - && fs::metadata(&config.client.runner.isolate_runner_binary_path()) - .await - .is_err() - { - bail!( - "isolate runner binary `{}` does not exist", - config.client.runner.isolate_runner_binary_path().display() - ); - } - - // Create actors dir - match fs::create_dir(data_dir.join("actors")).await { - Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} - x => x.context("failed to create /actors dir in data dir")?, - } - - // Create runner dir - match fs::create_dir(data_dir.join("runner")).await { - Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} - x => x.context("failed to create /runner dir in data dir")?, - } - - // Create db dir - match fs::create_dir(data_dir.join("db")).await { - Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => {} - x => x.context("failed to create /db dir in data dir")?, - } - - Ok(()) -} - -pub async fn init_sqlite_db(db_url: &str) -> Result<()> { - if !Sqlite::database_exists(db_url).await? { - Sqlite::create_database(db_url).await?; - } - - Ok(()) -} - -pub async fn build_sqlite_pool(db_url: &str) -> Result { - SqlitePoolOptions::new() - .connect(db_url) - .await - .map_err(Into::into) -} - -pub async fn init_sqlite_schema(pool: &SqlitePool) -> Result<()> { - // Attempt to use an existing connection - let mut conn = if let Some(conn) = pool.try_acquire() { - conn - } else { - // Create a new connection - pool.acquire().await? - }; - - let settings = [ - // Set the journal mode to Write-Ahead Logging for concurrency - "PRAGMA journal_mode = WAL", - // Set synchronous mode to NORMAL for performance and data safety balance - "PRAGMA synchronous = NORMAL", - // Set busy timeout to 5 seconds to avoid "database is locked" errors - "PRAGMA busy_timeout = 5000", - // Enable foreign key constraint enforcement - "PRAGMA foreign_keys = ON", - // Enable auto vacuuming and set it to incremental mode for gradual space reclaiming - "PRAGMA auto_vacuum = INCREMENTAL", - ]; - - for setting in settings { - sqlx::query(setting).execute(&mut *conn).await?; - } - - sqlx::query(indoc!( - " - CREATE TABLE IF NOT EXISTS state ( - last_event_idx INTEGER NOT NULL, - last_command_idx INTEGER NOT NULL, - - isolate_runner_pid INTEGER, - - -- Keeps this table having one row - _persistence INTEGER UNIQUE NOT NULL DEFAULT TRUE -- BOOLEAN - ) STRICT - ", - )) - .execute(&mut *conn) - .await?; - - sqlx::query(indoc!( - " - INSERT INTO state (last_event_idx, last_command_idx) - VALUES (-1, -1) - ON CONFLICT DO NOTHING - ", - )) - .execute(&mut *conn) - .await?; - - sqlx::query(indoc!( - " - CREATE TABLE IF NOT EXISTS events ( - idx INTEGER NOT NULL UNIQUE, - payload BLOB NOT NULL, - create_ts INTEGER NOT NULL - ) STRICT - ", - )) - .execute(&mut *conn) - .await?; - - sqlx::query(indoc!( - " - CREATE TABLE IF NOT EXISTS commands ( - idx INTEGER NOT NULL UNIQUE, - payload BLOB NOT NULL, - ack_ts INTEGER NOT NULL - ) STRICT - ", - )) - .execute(&mut *conn) - .await?; - - sqlx::query(indoc!( - " - CREATE TABLE IF NOT EXISTS actors ( - actor_id BLOB PRIMARY KEY, -- UUID - config BLOB NOT NULL, - - start_ts INTEGER NOT NULL, - running_ts INTEGER, - stop_ts INTEGER, - exit_ts INTEGER, - - pid INTEGER, - exit_code INTEGER - ) STRICT - ", - )) - .execute(&mut *conn) - .await?; - - sqlx::query(indoc!( - " - CREATE TABLE IF NOT EXISTS actor_ports ( - actor_id BLOB NOT NULL, -- UUID - port INT NOT NULL, - protocol INT NOT NULL, -- protocol::TransportProtocol - - delete_ts INT - ) STRICT - ", - )) - .execute(&mut *conn) - .await?; - - sqlx::query(indoc!( - " - CREATE INDEX IF NOT EXISTS actor_ports_id_idx - ON actor_ports(actor_id) - ", - )) - .execute(&mut *conn) - .await?; - - sqlx::query(indoc!( - " - CREATE UNIQUE INDEX IF NOT EXISTS actor_ports_unique_idx - ON actor_ports(port, protocol) - WHERE delete_ts IS NULL - ", - )) - .execute(&mut *conn) - .await?; - - Ok(()) -} - -#[derive(Deserialize)] -pub struct ApiResponse { - pub servers: Vec, -} - -#[derive(Deserialize)] -pub struct ApiServer { - pub lan_ip: Option, -} - -pub async fn init_fdb_config(config: &Config) -> Result<()> { - let ips = match &config.client.foundationdb.addresses { - Addresses::Dynamic { fetch_endpoint } => reqwest::get(fetch_endpoint.clone()) - .await? - .error_for_status()? - .json::() - .await? - .servers - .into_iter() - .filter_map(|server| server.lan_ip) - .map(|lan_ip| format!("{lan_ip}:4500")) - .collect::>(), - Addresses::Static(addresses) => addresses.clone(), - }; - - ensure!(!ips.is_empty(), "no fdb clusters found"); - - let joined = ips - .into_iter() - .map(|x| x.to_string()) - .collect::>() - .join(","); - - fs::write( - config.client.data_dir().join("fdb.cluster"), - format!( - "{cluster_description}:{cluster_id}@{joined}", - cluster_description = config.client.foundationdb.cluster_description, - cluster_id = config.client.foundationdb.cluster_id, - ), - ) - .await?; - - Ok(()) -} - -pub fn now() -> i64 { - time::SystemTime::now() - .duration_since(time::UNIX_EPOCH) - .unwrap_or_else(|err| unreachable!("time is broken: {}", err)) - .as_millis() - .try_into() - .expect("now doesn't fit in i64") -} - -/// Creates an async file watcher. -fn async_watcher() -> Result<(RecommendedWatcher, Receiver>)> { - let (tx, rx) = channel(1); - - // Automatically select the best implementation for your platform. - let watcher = RecommendedWatcher::new( - move |res| { - let tx = tx.clone(); - - // Send event. We ignore the result because the watcher and channel are dropped after the first - // `Create` event is received in wait_for_write - let _ = tx.blocking_send(res); - }, - notify::Config::default().with_poll_interval(Duration::from_secs(2)), - )?; - - Ok((watcher, rx)) -} - -pub async fn wait_for_write>(path: P) -> Result<()> { - let path = path.as_ref(); - let (mut watcher, mut rx) = async_watcher()?; - - // Watch parent - watcher.watch( - path.parent().context("path has no parent")?, - RecursiveMode::NonRecursive, - )?; - - // File already exists - if fs::metadata(&path).await.is_ok() { - return Ok(()); - } - - while let Some(res) = rx.recv().await { - let res = res?; - - // Wait for data to be written to path - if let EventKind::Access(AccessKind::Close(AccessMode::Write)) = res.kind { - if res.paths.iter().any(|p| p == path) { - break; - } - } - } - - Ok(()) -} - -/// Deterministically shuffles a list of available ATS URL's to download the image from based on the image -// ID and attempts to download from each URL until success. -pub async fn fetch_image_stream( - ctx: &Ctx, - image_id: Uuid, - image_artifact_url_stub: &str, - image_fallback_artifact_url: Option<&str>, -) -> Result>> { - // Get hash from image id - let mut hasher = DefaultHasher::new(); - hasher.write(image_id.as_bytes()); - let hash = hasher.finish(); - - let mut rng = rand_chacha::ChaCha12Rng::seed_from_u64(hash); - - // Shuffle based on hash - let mut addresses = ctx - .pull_addr_handler - .addresses(ctx.config()) - .await? - .iter() - .map(|addr| { - Ok(Url::parse(&format!("{addr}{}", image_artifact_url_stub)) - .context("failed to build artifact url")? - .to_string()) - }) - .collect::>>()?; - addresses.shuffle(&mut rng); - - // Add fallback url to the end if one is set - if let Some(fallback_artifact_url) = image_fallback_artifact_url { - addresses.push(fallback_artifact_url.to_string()); - } - - let mut iter = addresses.into_iter(); - while let Some(artifact_url) = iter.next() { - match reqwest::get(&artifact_url) - .await - .and_then(|res| res.error_for_status()) - { - Ok(res) => return Ok(res.bytes_stream()), - Err(err) => { - tracing::warn!( - ?image_id, - "failed to start download from {artifact_url}: {err}" - ); - } - } - } - - bail!("artifact url could not be resolved"); -} - -pub async fn prewarm_image(ctx: &Ctx, image_id: Uuid, image_artifact_url_stub: &str) { - tracing::debug!(?image_id, "prewarming"); - - match fetch_image_stream(ctx, image_id, image_artifact_url_stub, None).await { - Ok(_) => tracing::debug!(?image_id, "prewarm complete"), - Err(_) => tracing::warn!( - ?image_id, - "prewarm failed, artifact url could not be resolved" - ), - } -} diff --git a/packages/infra/client/manager/tests/common.rs b/packages/infra/client/manager/tests/common.rs deleted file mode 100644 index 72d88d426e..0000000000 --- a/packages/infra/client/manager/tests/common.rs +++ /dev/null @@ -1,674 +0,0 @@ -use std::{ - convert::Infallible, - net::SocketAddr, - path::{Path, PathBuf}, - sync::{ - atomic::{AtomicBool, Ordering}, - Arc, Once, - }, - time::Duration, -}; - -use anyhow::Context; -use futures_util::{stream::SplitSink, SinkExt, StreamExt}; -use hyper::{ - service::{make_service_fn, service_fn}, - Body, Response, Server, -}; -use pegboard::protocol; -use pegboard_config::*; -use pegboard_manager::{system_info, utils, Ctx}; -use tokio::{ - fs::File, - io::BufReader, - net::{TcpListener, TcpStream}, - process::Command, - sync::Mutex, -}; -use tokio_tungstenite::{tungstenite::protocol::Message, WebSocketStream}; -use tokio_util::io::ReaderStream; -use tracing_subscriber::prelude::*; -use url::Url; -use uuid::Uuid; - -pub const PROTOCOL_VERSION: u16 = 2; -pub const ARTIFACTS_PORT: u16 = 1234; - -pub async fn send_packet( - tx: &mut SplitSink, Message>, - packet: protocol::ToClient, -) { - let buf = packet.serialize(PROTOCOL_VERSION).unwrap(); - tx.send(Message::Binary(buf)).await.unwrap(); -} - -pub async fn send_command( - tx: &mut SplitSink, Message>, - cmd: protocol::Command, -) { - let packet = protocol::ToClient::Commands(vec![protocol::CommandWrapper { - index: utils::now(), - inner: protocol::Raw::new(&cmd).unwrap(), - }]); - - send_packet(tx, packet).await -} - -pub async fn send_init_packet(tx: &mut SplitSink, Message>) { - send_packet( - tx, - protocol::ToClient::Init { - last_event_idx: utils::now(), - }, - ) - .await -} - -pub async fn start_echo_actor( - tx: &mut SplitSink, Message>, - actor_id: Uuid, - port: u16, -) { - let cmd = protocol::Command::StartActor { - actor_id, - config: Box::new(protocol::ActorConfig { - image: protocol::Image { - id: Uuid::nil(), - artifact_url_stub: "/image".into(), - fallback_artifact_url: None, - kind: protocol::ImageKind::DockerImage, - compression: protocol::ImageCompression::None, - }, - root_user_enabled: false, - env: [("PORT".to_string(), port.to_string())] - .into_iter() - .collect(), - ports: [( - "main".to_string(), - protocol::Port { - target: None, - protocol: protocol::TransportProtocol::Tcp, - routing: protocol::PortRouting::Host, - }, - )] - .into_iter() - .collect(), - network_mode: protocol::NetworkMode::Host, - resources: protocol::Resources { - cpu: 100, - memory: 10 * 1024 * 1024, - memory_max: 15 * 1024 * 1024, - disk: 15, - }, - owner: protocol::ActorOwner::DynamicServer { - server_id: actor_id, - }, - metadata: protocol::Raw::new(&protocol::ActorMetadata { - actor: protocol::ActorMetadataActor { - actor_id, - tags: [("foo".to_string(), "bar".to_string())] - .into_iter() - .collect(), - create_ts: 0, - }, - project: protocol::ActorMetadataProject { - project_id: Uuid::nil(), - slug: "foo".to_string(), - }, - environment: protocol::ActorMetadataEnvironment { - env_id: Uuid::nil(), - slug: "foo".to_string(), - }, - datacenter: protocol::ActorMetadataDatacenter { - name_id: "local".to_string(), - display_name: "Local".to_string(), - }, - cluster: protocol::ActorMetadataCluster { - cluster_id: Uuid::nil(), - }, - build: protocol::ActorMetadataBuild { - build_id: Uuid::nil(), - }, - }) - .unwrap(), - }), - }; - - send_command(tx, cmd).await; -} - -pub async fn start_js_echo_actor( - tx: &mut SplitSink, Message>, - actor_id: Uuid, -) { - let cmd = protocol::Command::StartActor { - actor_id, - config: Box::new(protocol::ActorConfig { - image: protocol::Image { - id: Uuid::nil(), - artifact_url_stub: "/js-image".into(), - fallback_artifact_url: None, - kind: protocol::ImageKind::JavaScript, - compression: protocol::ImageCompression::None, - }, - root_user_enabled: false, - env: Default::default(), - ports: [( - "main".to_string(), - protocol::Port { - target: None, - protocol: protocol::TransportProtocol::Tcp, - routing: protocol::PortRouting::Host, - }, - )] - .into_iter() - .collect(), - network_mode: protocol::NetworkMode::Host, - resources: protocol::Resources { - cpu: 100, - memory: 10 * 1024 * 1024, - memory_max: 15 * 1024 * 1024, - disk: 15, - }, - owner: protocol::ActorOwner::DynamicServer { - server_id: actor_id, - }, - metadata: protocol::Raw::new(&protocol::ActorMetadata { - actor: protocol::ActorMetadataActor { - actor_id, - tags: [("foo".to_string(), "bar".to_string())] - .into_iter() - .collect(), - create_ts: 0, - }, - project: protocol::ActorMetadataProject { - project_id: Uuid::nil(), - slug: "foo".to_string(), - }, - environment: protocol::ActorMetadataEnvironment { - env_id: Uuid::nil(), - slug: "foo".to_string(), - }, - datacenter: protocol::ActorMetadataDatacenter { - name_id: "local".to_string(), - display_name: "Local".to_string(), - }, - cluster: protocol::ActorMetadataCluster { - cluster_id: Uuid::nil(), - }, - build: protocol::ActorMetadataBuild { - build_id: Uuid::nil(), - }, - }) - .unwrap(), - }), - }; - - send_command(tx, cmd).await; -} - -pub fn start_server( - ctx_wrapper: Arc>>>, - close_tx: Arc>, - port: u16, - handle_connection: F, -) where - F: Fn(Arc>>>, Arc>, TcpStream) -> Fut - + Send - + 'static, - Fut: std::future::Future + Send, -{ - tokio::spawn(async move { - let addr = SocketAddr::from(([0, 0, 0, 0], port)); - - let listener = TcpListener::bind(addr).await.unwrap(); - tracing::info!(?port, "server listening"); - - loop { - let (stream, _) = listener.accept().await.unwrap(); - - handle_connection(ctx_wrapper.clone(), close_tx.clone(), stream).await; - } - }); -} - -pub async fn init_client(gen_path: &Path, working_path: &Path) -> Config { - let container_runner_binary_path = working_path.join("bin").join("container-runner"); - let isolate_runner_binary_path = working_path.join("bin").join("isolate-runner"); - - tokio::fs::create_dir(working_path.join("bin")) - .await - .unwrap(); - - // Copy binaries - tokio::fs::copy( - container_runner_path(gen_path), - &container_runner_binary_path, - ) - .await - .unwrap(); - tokio::fs::copy( - isolate_v8_runner_path(gen_path), - &isolate_runner_binary_path, - ) - .await - .unwrap(); - - let config = Config { - client: Client { - data_dir: Some(working_path.to_path_buf()), - cluster: Cluster { - client_id: Uuid::new_v4(), - datacenter_id: Uuid::new_v4(), - pegboard_endpoint: Url::parse("ws://127.0.0.1:5030").unwrap(), - // Not necessary for the test - api_endpoint: Url::parse("http://127.0.0.1").unwrap(), - }, - runner: Runner { - // Not necessary for the test - flavor: protocol::ClientFlavor::Container, - port: None, - use_mounts: Some(false), - container_runner_binary_path: Some(container_runner_binary_path), - isolate_runner_binary_path: Some(isolate_runner_binary_path), - }, - images: Images { - // Should match the URL in `serve_binaries` - pull_addresses: Some(Addresses::Static(vec![format!( - "http://127.0.0.1:{ARTIFACTS_PORT}" - )])), - }, - network: Network { - bind_ip: "127.0.0.1".parse().unwrap(), - lan_hostname: "127.0.0.1".into(), - wan_hostname: "127.0.0.1".into(), - lan_port_range_min: None, - lan_port_range_max: None, - wan_port_range_min: None, - wan_port_range_max: None, - }, - cni: Default::default(), - reserved_resources: Default::default(), - logs: Logs { - redirect_logs: Some(false), - retention: None, - }, - metrics: Default::default(), - foundationdb: FoundationDb { - cluster_description: "fdb".into(), - cluster_id: "fdb".into(), - addresses: Addresses::Static(vec!["127.0.0.1:4500".into()]), - }, - vector: Some(Vector { - address: "127.0.0.1:5021".into(), - }), - }, - }; - - utils::init_dir(&config).await.unwrap(); - - config -} - -pub async fn start_client( - config: Config, - ctx_wrapper: Arc>>>, - mut close_rx: tokio::sync::watch::Receiver<()>, - port: u16, -) { - let system = system_info::fetch().await.unwrap(); - - // Init sqlite db - let sqlite_db_url = format!( - "sqlite://{}", - config - .client - .data_dir() - .join("db") - .join("database.db") - .display() - ); - utils::init_sqlite_db(&sqlite_db_url).await.unwrap(); - - // Connect to sqlite db - let pool = utils::build_sqlite_pool(&sqlite_db_url).await.unwrap(); - utils::init_sqlite_schema(&pool).await.unwrap(); - - // Init FDB config files - utils::init_fdb_config(&config).await.unwrap(); - - // Build WS connection URL - let mut url = Url::parse("ws://127.0.0.1").unwrap(); - url.set_port(Some(port)).unwrap(); - url.set_path(&format!("/v{PROTOCOL_VERSION}")); - url.query_pairs_mut() - .append_pair("client_id", &config.client.cluster.client_id.to_string()) - .append_pair( - "datacenter_id", - &config.client.cluster.datacenter_id.to_string(), - ); - - tracing::info!("connecting to ws: {url}"); - - // Connect to WS - let (ws_stream, _) = tokio_tungstenite::connect_async(url.to_string()) - .await - .context("failed to connect to websocket") - .unwrap(); - let (tx, rx) = ws_stream.split(); - - tracing::info!("connected"); - - let ctx = Ctx::new(config, system, pool, tx); - - // Share reference - { - *ctx_wrapper.lock().await = Some(ctx.clone()); - } - - tokio::select! { - res = ctx.run(rx) => res.unwrap(), - _ = close_rx.changed() => {} - } - - // Remove reference - { - *ctx_wrapper.lock().await = None; - } - - tracing::info!("client stopped"); -} - -pub async fn build_binaries(gen_path: &Path) { - let pkg_path = Path::new(env!("CARGO_MANIFEST_DIR")).join(".."); - let status = Command::new("docker") - .arg("build") - .arg("--platform") - .arg("linux/amd64") - .arg("-t") - .arg("pegboard-echo-server") - .arg("-f") - .arg(pkg_path.join(format!("echo")).join("Dockerfile")) - .arg(pkg_path.join("..").join("..").join("..")) - .status() - .await - .unwrap(); - - assert!(status.success()); - - tracing::info!("saving echo image"); - - let status = Command::new("docker") - .arg("save") - .arg("-o") - .arg(image_path(gen_path)) - .arg("pegboard-echo-server") - .status() - .await - .unwrap(); - - assert!(status.success()); - - // Js image - let status = Command::new("tar") - .arg("-cf") - .arg(js_image_path(gen_path)) - .arg("-C") - .arg(Path::new(env!("CARGO_MANIFEST_DIR")).join("tests")) - .arg("index.js") - .status() - .await - .unwrap(); - - assert!(status.success()); - - build_runner(gen_path, "container").await; - build_runner(gen_path, "isolate-v8").await; -} - -async fn build_runner(gen_path: &Path, variant: &str) { - tracing::info!("building {variant} runner"); - - let pkg_path = Path::new(env!("CARGO_MANIFEST_DIR")).join(".."); - let image_name = format!("pegboard-{variant}-runner"); - - // Build runner binary - let status = Command::new("docker") - .arg("build") - .arg("--platform") - .arg("linux/amd64") - .arg("-t") - .arg(&image_name) - .arg("-f") - .arg( - pkg_path - .join(format!("{variant}-runner")) - .join("Dockerfile"), - ) - .arg(pkg_path.join("..").join("..").join("..")) - .status() - .await - .unwrap(); - - assert!(status.success()); - - tracing::info!("copying runner image"); - - let container_name = format!("temp-pegboard-{variant}-runner-container"); - let binary_path_in_container = format!("/rivet-{variant}-runner"); - - // Create a temporary container - let status = Command::new("docker") - .arg("create") - .arg("--name") - .arg(&container_name) - .arg(&image_name) - .status() - .await - .expect("Failed to create container"); - assert!(status.success()); - - // Copy the binary from the container to the host - let status = Command::new("docker") - .arg("cp") - .arg(format!("{}:{}", container_name, binary_path_in_container)) - .arg(if variant == "container" { - container_runner_path(gen_path) - } else { - isolate_v8_runner_path(gen_path) - }) - .status() - .await - .expect("Failed to copy binary from container"); - assert!(status.success()); - - // Remove the temporary container - let status = Command::new("docker") - .arg("rm") - .arg(container_name) - .status() - .await - .expect("Failed to remove container"); - assert!(status.success()); -} - -pub async fn serve_binaries(gen_path: PathBuf) { - let make_svc = make_service_fn(|_conn| { - let gen_path = gen_path.clone(); - async move { - Ok::<_, Infallible>(service_fn(move |req| { - let gen_path = gen_path.clone(); - async move { - let gen_path = gen_path; - let path = req.uri().path(); - - let path = if path == "/image" { - image_path(&gen_path) - } else if path == "/js-image" { - js_image_path(&gen_path) - } else { - panic!("invalid path: {path}"); - }; - - let file = File::open(path).await?; - let stream = ReaderStream::new(BufReader::new(file)); - let body = Body::wrap_stream(stream); - - Result::<_, std::io::Error>::Ok(Response::new(body)) - } - })) - } - }); - - let server = Server::bind(&([127, 0, 0, 1], ARTIFACTS_PORT).into()).serve(make_svc); - - tracing::info!(port=?ARTIFACTS_PORT, "serving binaries"); - - server.await.unwrap(); -} - -pub async fn start_vector() { - let config_path = Path::new(env!("CARGO_MANIFEST_DIR")) - .join("tests") - .join("vector.json"); - - Command::new("docker") - .arg("rm") - .arg("test-vector") - .arg("--force") - .status() - .await - .unwrap(); - - let status = Command::new("docker") - .arg("run") - .arg("-v") - .arg(format!( - "{}:/etc/vector/vector.json:ro", - config_path.display() - )) - .arg("--rm") - .arg("-p") - .arg("5020:5020") - .arg("-p") - .arg("5021:5021") - .arg("--name") - .arg("test-vector") - .arg("timberio/vector:0.42.0-debian") - .arg("-c") - .arg("/etc/vector/vector.json") - .status() - .await - .unwrap(); - - assert!(status.success()); -} - -pub async fn start_fdb() { - Command::new("docker") - .arg("rm") - .arg("test-fdb") - .arg("--force") - .status() - .await - .unwrap(); - - let status = Command::new("docker") - .arg("run") - .arg("--rm") - .arg("-p") - .arg("4500:4500") - .arg("--name") - .arg("test-fdb") - .arg("-e") - .arg("FDB_CLUSTER_FILE_CONTENTS=fdb:fdb@127.0.0.1:4500") - // See docs-internal/infrastructure/fdb/AVX.md - .arg("foundationdb/foundationdb:7.1.60") - .status() - .await - .unwrap(); - - assert!(status.success()); -} - -pub async fn create_fdb_db() { - loop { - // Create db - let status = Command::new("docker") - .arg("exec") - .arg("test-fdb") - .arg("fdbcli") - .arg("--exec") - .arg(r#"configure new single ssd"#) - .status() - .await - .unwrap(); - - if status.success() { - break; - } else { - tracing::error!("failed to create fdb database"); - } - - tokio::time::sleep(Duration::from_secs(1)).await; - } -} - -static SETUP_DEPENDENCIES: AtomicBool = AtomicBool::new(false); -static mut TEMP_DIR_PATH: Option = None; - -pub async fn setup_dependencies() -> (Option, PathBuf) { - if !SETUP_DEPENDENCIES.swap(true, Ordering::SeqCst) { - let tmp_dir = tempfile::TempDir::new().unwrap(); - let tmp_dir_path = tmp_dir.path().to_path_buf(); - - // SAFETY: We are the only thread that can modify TEMP_DIR_PATH at this point, as we have just - // swapped SETUP_DEPENDENCIES to true. - unsafe { - TEMP_DIR_PATH = Some(tmp_dir_path.clone()); - } - - build_binaries(tmp_dir.path()).await; - - tokio::spawn(serve_binaries(tmp_dir.path().to_path_buf())); - - tokio::spawn(start_vector()); - - tokio::spawn(start_fdb()); - create_fdb_db().await; - - (Some(tmp_dir), tmp_dir_path) - } else { - // SAFETY: Once SETUP_DEPENDENCIES is true, TEMP_DIR_PATH is guaranteed to be initialized. - (None, unsafe { TEMP_DIR_PATH.clone().unwrap() }) - } -} - -pub fn container_runner_path(gen_path: &Path) -> PathBuf { - gen_path.join("pegboard-container-runner").to_path_buf() -} - -pub fn isolate_v8_runner_path(gen_path: &Path) -> PathBuf { - gen_path.join("pegboard-isolate-v8-runner").to_path_buf() -} - -pub fn image_path(gen_path: &Path) -> PathBuf { - gen_path.join("pegboard-echo-server").to_path_buf() -} - -pub fn js_image_path(gen_path: &Path) -> PathBuf { - gen_path.join("pegboard-js-echo-server.js").to_path_buf() -} - -static SETUP_TRACING: Once = Once::new(); -pub fn setup_tracing() { - SETUP_TRACING.call_once(|| { - tracing_subscriber::registry() - .with( - tracing_logfmt::builder() - .layer() - .with_filter(tracing_subscriber::filter::LevelFilter::INFO), - ) - .init(); - }); -} diff --git a/packages/infra/edge-server/Cargo.toml b/packages/infra/edge-server/Cargo.toml deleted file mode 100644 index febd1d990b..0000000000 --- a/packages/infra/edge-server/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "rivet-edge-server" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[[bin]] -name = "rivet-edge-server" -path = "src/main.rs" - -[dependencies] -anyhow = "1.0" -chirp-workflow.workspace = true -clap = { version = "4.3", features = ["derive"] } -rivet-cache.workspace = true -rivet-config.workspace = true -rivet-connection.workspace = true -rivet-migrate.workspace = true -rivet-runtime.workspace = true -rivet-server-cli.workspace = true -rivet-service-manager.workspace = true -s3-util.workspace = true - -# Standalone -edge-monolith-workflow-worker.workspace = true -pegboard-ws.workspace = true - -# API -# api-monolith-edge.workspace = true diff --git a/packages/infra/edge-server/src/run_config.rs b/packages/infra/edge-server/src/run_config.rs deleted file mode 100644 index 82fe6695ce..0000000000 --- a/packages/infra/edge-server/src/run_config.rs +++ /dev/null @@ -1,32 +0,0 @@ -use anyhow::*; -use rivet_service_manager::{RunConfigData, Service, ServiceKind}; - -pub fn config(_rivet_config: rivet_config::Config) -> Result { - let services = vec![ - // API - // Service::new( - // "api_monolith_edge", - // ServiceKind::ApiEdge, - // |config, pools| Box::pin(api_monolith_edge::start(config, pools)), - // ), - Service::new("pegboard_ws", ServiceKind::ApiEdge, |config, pools| { - Box::pin(pegboard_ws::start(config, pools)) - }), - Service::new( - "edge_monolith_workflow_worker", - ServiceKind::Standalone, - |config, pools| Box::pin(edge_monolith_workflow_worker::start(config, pools)), - ), - Service::new( - "workflow_metrics_publish", - ServiceKind::Singleton, - |config, pools| Box::pin(workflow_metrics_publish::start(config, pools)), - ), - ]; - - Ok(RunConfigData { - services, - sql_services: Vec::new(), - s3_buckets: Vec::new(), - }) -} diff --git a/packages/infra/server/Cargo.toml b/packages/infra/server/Cargo.toml deleted file mode 100644 index 93f29faeab..0000000000 --- a/packages/infra/server/Cargo.toml +++ /dev/null @@ -1,58 +0,0 @@ -[package] -name = "rivet-server" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[[bin]] -name = "rivet-server" -path = "src/main.rs" - -[dependencies] -anyhow = "1.0" -chirp-workflow.workspace = true -clap = { version = "4.3", features = ["derive"] } -include_dir = "0.7.4" -rivet-cache.workspace = true -rivet-config.workspace = true -rivet-connection.workspace = true -rivet-migrate.workspace = true -rivet-runtime.workspace = true -rivet-server-cli.workspace = true -rivet-service-manager.workspace = true -s3-util.workspace = true - -# Standalone -cluster-datacenter-tls-renew.workspace = true -cluster-gc.workspace = true -cluster-metrics-publish.workspace = true -job-gc.workspace = true -linode-gc.workspace = true -load-test-api-cloud.workspace = true -load-test-mm-sustain.workspace = true -load-test-mm.workspace = true -load-test-sqlx.workspace = true -load-test-watch-requests.workspace = true -mm-gc.workspace = true -monolith-worker.workspace = true -monolith-workflow-worker.workspace = true -nomad-monitor.workspace = true -pegboard-gc.workspace = true -pegboard-metrics-publish.workspace = true -pegboard-ws.workspace = true - -# Cron -telemetry-beacon.workspace = true -user-delete-pending.workspace = true - -# API -api-monolith-edge.workspace = true -api-monolith-public.workspace = true - -# Oneshot -build-default-create.workspace = true -chirp-client.workspace = true -cloud-default-create.workspace = true -cluster-default-update.workspace = true -pegboard-dc-init.workspace = true diff --git a/packages/infra/server/src/run_config.rs b/packages/infra/server/src/run_config.rs deleted file mode 100644 index 33ea8bb964..0000000000 --- a/packages/infra/server/src/run_config.rs +++ /dev/null @@ -1,304 +0,0 @@ -use anyhow::*; -use include_dir::include_dir; -use rivet_migrate::{SqlService, SqlServiceKind}; -use rivet_service_manager::{CronConfig, RunConfigData, Service, ServiceKind}; -use s3_util::S3Bucket; - -pub fn config(rivet_config: rivet_config::Config) -> Result { - let server_config = rivet_config.server().map_err(|err| anyhow!("{err:?}"))?; - - let mut services = vec![ - // API - Service::new( - "api_monolith_public", - ServiceKind::ApiPublic, - |config, pools| Box::pin(api_monolith_public::start(config, pools)), - ), - Service::new( - "api_monolith_edge", - ServiceKind::ApiEdge, - |config, pools| Box::pin(api_monolith_edge::start(config, pools)), - ), - Service::new( - "monolith_worker", - ServiceKind::Standalone, - |config, pools| Box::pin(monolith_worker::start(config, pools)), - ), - Service::new( - "monolith_workflow_worker", - ServiceKind::Standalone, - |config, pools| Box::pin(monolith_workflow_worker::start(config, pools)), - ), - Service::new("mm_gc", ServiceKind::Singleton, |config, pools| { - Box::pin(mm_gc::start(config, pools)) - }), - Service::new( - "build_default_create", - ServiceKind::Oneshot, - |config, pools| Box::pin(build_default_create::start(config, pools)), - ), - Service::new( - "user_delete_pending", - ServiceKind::Cron(CronConfig { - run_immediately: false, - schedule: "0 0 0 * * *".into(), - }), - |config, pools| Box::pin(user_delete_pending::start(config, pools)), - ), - Service::new( - "cluster_metrics_publish", - ServiceKind::Singleton, - |config, pools| Box::pin(cluster_metrics_publish::start(config, pools)), - ), - Service::new("cluster_gc", ServiceKind::Singleton, |config, pools| { - Box::pin(cluster_gc::start(config, pools)) - }), - Service::new( - "cluster_default_update", - ServiceKind::Oneshot, - |config, pools| Box::pin(cluster_default_update::start(config, pools)), - ), - Service::new( - "pegboard_metrics_publish", - ServiceKind::Singleton, - |config, pools| Box::pin(pegboard_metrics_publish::start(config, pools)), - ), - ]; - - if server_config.is_tls_enabled() { - services.push(Service::new( - "cluster_datacenter_tls_renew", - ServiceKind::Singleton, - |config, pools| Box::pin(cluster_datacenter_tls_renew::start(config, pools)), - )); - } - - if server_config.rivet.auth.access_kind == rivet_config::config::rivet::AccessKind::Development - { - services.push(Service::new( - "cloud_default_create", - ServiceKind::Oneshot, - |config, pools| Box::pin(cloud_default_create::start(config, pools)), - )); - } - - if server_config.linode.is_some() { - services.push(Service::new( - "linode_gc", - ServiceKind::Singleton, - |config, pools| Box::pin(linode_gc::start(config, pools)), - )); - } - - if server_config.nomad.is_some() { - services.push(Service::new( - "nomad_monitor", - ServiceKind::Singleton, - |config, pools| Box::pin(nomad_monitor::start(config, pools)), - )); - } - - if server_config.nomad.is_some() && server_config.rivet.job_run.is_some() { - services.push(Service::new( - "job_gc", - ServiceKind::Singleton, - |config, pools| Box::pin(job_gc::start(config, pools)), - )); - } - - if server_config.rivet.telemetry.enable { - services.push(Service::new( - "telemetry_beacon", - ServiceKind::Cron(CronConfig { - run_immediately: true, - schedule: "0 0 * * * *".into(), - }), - |config, pools| Box::pin(telemetry_beacon::start(config, pools)), - )); - } - - let sql_services = vec![ - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/build/db/build"), - db_name: "db_build", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/captcha/db/captcha"), - db_name: "db_captcha", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/cdn/db/cdn"), - db_name: "db_cdn", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!( - "$CARGO_MANIFEST_DIR/../../services/cf-custom-hostname/db/cf-custom-hostname" - ), - db_name: "db_cf_custom_hostname", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/cloud/db/cloud"), - db_name: "db_cloud", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/cluster/db/cluster"), - db_name: "db_cluster", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!( - "$CARGO_MANIFEST_DIR/../../services/custom-user-avatar/db/custom-avatar" - ), - db_name: "db_custom_avatar", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!( - "$CARGO_MANIFEST_DIR/../../services/dynamic-config/db/dynamic-config" - ), - db_name: "db_dynamic_config", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!( - "$CARGO_MANIFEST_DIR/../../services/email-verification/db/email-verification" - ), - db_name: "db_email_verification", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/game/db/game"), - db_name: "db_game", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/ip/db/info"), - db_name: "db_ip_info", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/job/db/config"), - db_name: "db_job_config", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/job/db/state"), - db_name: "db_job_state", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/linode/db/linode"), - db_name: "db_linode", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/mm-config/db/mm-config"), - db_name: "db_mm_config", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/mm/db/state"), - db_name: "db_mm_state", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!( - "$CARGO_MANIFEST_DIR/../../services/team-invite/db/team-invite" - ), - db_name: "db_team_invite", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/team/db/team"), - db_name: "db_team", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/token/db/token"), - db_name: "db_token", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/upload/db/upload"), - db_name: "db_upload", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!( - "$CARGO_MANIFEST_DIR/../../services/user-identity/db/user-identity" - ), - db_name: "db_user_identity", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/user/db/user"), - db_name: "db_user", - }, - SqlService { - kind: SqlServiceKind::CockroachDB, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/workflow/db/workflow"), - db_name: "db_workflow", - }, - SqlService { - kind: SqlServiceKind::ClickHouse, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/ds-log/db/log"), - db_name: "db_ds_log", - }, - SqlService { - kind: SqlServiceKind::ClickHouse, - migrations: include_dir!("$CARGO_MANIFEST_DIR/../../services/job-log/db/log"), - db_name: "db_job_log", - }, - ]; - - let s3_buckets = vec![ - S3Bucket { - name: "bucket-build", - }, - S3Bucket { name: "bucket-cdn" }, - S3Bucket { - name: "bucket-export", - }, - S3Bucket { - name: "bucket-banner", - }, - S3Bucket { - name: "bucket-logo", - }, - S3Bucket { - name: "bucket-artifacts", - }, - S3Bucket { - name: "bucket-export", - }, - S3Bucket { name: "bucket-log" }, - S3Bucket { - name: "bucket-svc-build", - }, - S3Bucket { - name: "bucket-lobby-history-export", - }, - S3Bucket { name: "bucket-log" }, - S3Bucket { - name: "bucket-avatar", - }, - S3Bucket { - name: "bucket-billing", - }, - S3Bucket { - name: "bucket-avatar", - }, - ]; - - Ok(RunConfigData { - services, - sql_services, - s3_buckets, - }) -} diff --git a/packages/services/cloud/standalone/default-create/src/lib.rs b/packages/services/cloud/standalone/default-create/src/lib.rs deleted file mode 100644 index db2e1559db..0000000000 --- a/packages/services/cloud/standalone/default-create/src/lib.rs +++ /dev/null @@ -1,184 +0,0 @@ -use ::ds; -use chirp_workflow::prelude::*; -use rivet_operation::prelude::proto::backend::{self, pkg::*}; -use util::dev_defaults; - -#[tracing::instrument(skip_all)] -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let client = - chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cloud-default-create"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "cloud-default-create", - ) - .await?; - - ensure!( - ctx.config().server()?.rivet.auth.access_kind - == rivet_config::config::rivet::AccessKind::Development, - "access kind must be development" - ); - - wait_for_consumers(&ctx).await?; - - // Create user - let user_resolve_res = ctx - .op(::user::ops::resolve_display_name::Input { - display_name: dev_defaults::USER_NAME.into(), - }) - .await?; - let user_id = if let Some(user_id) = user_resolve_res.user_id { - user_id - } else { - let user_id = Uuid::new_v4(); - msg!([ctx] user::msg::create(user_id) -> user::msg::create_complete { - user_id: Some(user_id.into()), - namespace_id: None, - display_name: Some(dev_defaults::USER_NAME.into()), - }) - .await?; - - user_id - }; - - // Create team - let team_resolve_res = op!([ctx] team_resolve_display_name { - display_names: vec![dev_defaults::TEAM_NAME.into()], - }) - .await?; - let team_id = if let Some(team) = team_resolve_res.teams.first() { - unwrap!(team.team_id).as_uuid() - } else { - let team_id = Uuid::new_v4(); - msg!([ctx] team::msg::create(team_id) -> team::msg::create_complete { - team_id: Some(team_id.into()), - display_name: dev_defaults::TEAM_NAME.to_string(), - owner_user_id: Some(user_id.into()) - }) - .await?; - - team_id - }; - - // Create game - let game_resolve_res = op!([ctx] game_resolve_name_id { - name_ids: vec![dev_defaults::PROJECT_SLUG.into()], - }) - .await?; - let game_id = if let Some(existing) = game_resolve_res.games.first() { - tracing::debug!("default game already exists"); - unwrap!(existing.game_id).as_uuid() - } else { - let create_game_res = op!([ctx] game_create { - name_id: dev_defaults::PROJECT_SLUG.into(), - display_name: dev_defaults::PROJECT_NAME.into(), - developer_team_id: Some(team_id.into()), - creator_user_id: Some(user_id.into()), - }) - .await?; - - op!([ctx] cloud_game_config_create { - game_id: create_game_res.game_id, - }) - .await?; - - let game_id = unwrap_ref!(create_game_res.game_id).as_uuid(); - - ctx.op(ds::ops::game_config::upsert::Input { - game_id, - host_networking_enabled: Some(true), - root_user_enabled: Some(true), - ..Default::default() - }) - .await?; - - game_id - }; - - // Create namespace - let ns_resolve_res = op!([ctx] game_namespace_resolve_name_id { - game_id: Some(game_id.into()), - name_ids: vec![dev_defaults::ENVIRONMENT_SLUG.into()], - }) - .await?; - if ns_resolve_res.namespaces.is_empty() { - // Publish default version - let publish_res = op!([ctx] cloud_version_publish { - game_id: Some(game_id.into()), - display_name: "0.0.1".into(), - config: Some(backend::cloud::VersionConfig { - cdn: None, - matchmaker: None, - }), - creator_user_id: Some(user_id.into()), - }) - .await?; - let version_id = unwrap_ref!(publish_res.version_id).as_uuid(); - - // Create namespace - let create_ns_res = op!([ctx] game_namespace_create { - game_id: Some(game_id.into()), - display_name: dev_defaults::ENVIRONMENT_NAME.into(), - version_id: Some(version_id.into()), - name_id: dev_defaults::ENVIRONMENT_SLUG.into(), - }) - .await?; - let namespace_id = unwrap_ref!(create_ns_res.namespace_id).as_uuid(); - - op!([ctx] cloud_namespace_create { - namespace_id: Some(namespace_id.into()), - }) - .await?; - } - - Ok(()) -} - -/// Keys that must have consumers before proceeding. -const REQUIRED_CONSUMER_KEYS: &[&str] = &[ - "{topic:msg-user-create}:topic", - "{topic:msg-team-create}:topic", -]; - -/// HACK: Wait until there has been a consumer created before publishing messages. This is -/// required because `chirp-worker` must create the consumers before they can start accepting -/// messages. -async fn wait_for_consumers(ctx: &StandaloneCtx) -> GlobalResult<()> { - let mut interval = tokio::time::interval(std::time::Duration::from_millis(100)); - 'poll: loop { - interval.tick().await; - - for key in REQUIRED_CONSUMER_KEYS { - // Check if the stream key exists - let exists: bool = redis::cmd("EXISTS") - .arg(&key) - .query_async(&mut ctx.redis_chirp().await?) - .await?; - - if !exists { - tracing::debug!(?key, "key does not exist"); - continue 'poll; - } - - // Check if there are consumers for the stream - let groups: Vec = redis::cmd("XINFO") - .arg("GROUPS") - .arg(&key) - .query_async(&mut ctx.redis_chirp().await?) - .await?; - - if groups.is_empty() { - tracing::debug!(?key, "missing consumers"); - continue 'poll; - } - } - - tracing::debug!("all consumers found"); - break; - } - - Ok(()) -} diff --git a/packages/services/cluster/Cargo.toml b/packages/services/cluster/Cargo.toml deleted file mode 100644 index b95082e44c..0000000000 --- a/packages/services/cluster/Cargo.toml +++ /dev/null @@ -1,49 +0,0 @@ -[package] -name = "cluster" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -acme-lib = "0.9" -anyhow = "1.0" -chirp-workflow.workspace = true -chrono = "0.4" -cloudflare.workspace = true -http = "0.2" -include_dir = "0.7.3" -indoc = "1.0" -lazy_static = "1.4" -nomad-util.workspace = true -rand = "0.8" -reqwest = { version = "0.11", features = ["json"] } -rivet-metrics.workspace = true -rivet-operation.workspace = true -rivet-runtime.workspace = true -s3-util.workspace = true -serde = { version = "1.0.198", features = ["derive"] } -serde_urlencoded = "0.7.0" -ssh2 = "0.9.4" -strum = { version = "0.24", features = ["derive"] } -trust-dns-resolver = { version = "0.23.2", features = ["dns-over-native-tls"] } - -ip-info.workspace = true -linode.workspace = true -server-spec.workspace = true -pegboard.workspace = true -token-create.workspace = true -rivet-config.workspace = true -ipnet = "2.10.1" - -[dependencies.nomad_client] -workspace = true - -[dependencies.sqlx] -workspace = true -features = [ "json", "ipnetwork" ] - -[build-dependencies] -merkle_hash = "3.6" -hex = "0.4" -tokio = { version = "1.40", features = ["full"] } diff --git a/packages/services/cluster/src/util/mod.rs b/packages/services/cluster/src/util/mod.rs deleted file mode 100644 index da4643f814..0000000000 --- a/packages/services/cluster/src/util/mod.rs +++ /dev/null @@ -1,195 +0,0 @@ -use chirp_workflow::prelude::*; -use cloudflare::{endpoints as cf, framework as cf_framework}; - -use crate::types::PoolType; - -pub mod test; - -// Use the hash of the server install script in the image variant so that if the install scripts are updated -// we won't be using the old image anymore -pub const INSTALL_SCRIPT_HASH: &str = include_str!(concat!(env!("OUT_DIR"), "/hash.txt")); - -// TTL of the token written to prebake images. Prebake images are renewed before the token would expire -pub const SERVER_TOKEN_TTL: i64 = util::duration::days(30 * 6); - -pub fn server_name( - config: &rivet_config::Config, - provider_datacenter_id: &str, - pool_type: PoolType, - server_id: Uuid, -) -> GlobalResult { - let ns = &config.server()?.rivet.namespace; - - Ok(format!( - "{ns}-{provider_datacenter_id}-{pool_type}-{server_id}" - )) -} - -pub(crate) async fn cf_client( - config: &rivet_config::Config, - cf_token: Option<&str>, -) -> GlobalResult { - // Create CF client - let cf_token = if let Some(cf_token) = cf_token { - cf_token.to_string() - } else { - config.server()?.cloudflare()?.auth_token.read().clone() - }; - let client = cf_framework::async_api::Client::new( - cf_framework::auth::Credentials::UserAuthToken { token: cf_token }, - Default::default(), - cf_framework::Environment::Production, - )?; - - Ok(client) -} - -/// Tries to create a DNS record. If a 400 error is received, it deletes the existing record and tries again. -pub(crate) async fn create_dns_record( - client: &cf_framework::async_api::Client, - cf_token: &str, - zone_id: &str, - record_name: &str, - content: cf::dns::DnsContent, -) -> GlobalResult { - tracing::info!(%record_name, "creating dns record"); - - let create_record_res = client - .request(&cf::dns::CreateDnsRecord { - zone_identifier: zone_id, - params: cf::dns::CreateDnsRecordParams { - name: record_name, - content: content.clone(), - proxied: Some(false), - ttl: Some(60), - priority: None, - }, - }) - .await; - - match create_record_res { - Ok(create_record_res) => Ok(create_record_res.result.id), - // Try to delete record on error - Err(err) => { - if let cf_framework::response::ApiFailure::Error( - http::status::StatusCode::BAD_REQUEST, - _, - ) = err - { - tracing::warn!(%record_name, "failed to create dns record, trying to delete"); - - let dns_type = match content { - cf::dns::DnsContent::A { .. } => "A", - cf::dns::DnsContent::AAAA { .. } => "AAAA", - cf::dns::DnsContent::CNAME { .. } => "CNAME", - cf::dns::DnsContent::NS { .. } => "NS", - cf::dns::DnsContent::MX { .. } => "MX", - cf::dns::DnsContent::TXT { .. } => "TXT", - cf::dns::DnsContent::SRV { .. } => "SRV", - }; - - // Find record to delete - let list_records_res = match content { - cf::dns::DnsContent::A { .. } => { - get_dns_record(cf_token, zone_id, record_name, dns_type).await? - } - cf::dns::DnsContent::TXT { .. } => { - // Get DNS record with content comparison - client - .request(&cf::dns::ListDnsRecords { - zone_identifier: zone_id, - params: cf::dns::ListDnsRecordsParams { - record_type: Some(content.clone()), - name: Some(record_name.to_string()), - ..Default::default() - }, - }) - .await? - .result - .into_iter() - .next() - } - _ => { - unimplemented!("must configure whether to search for records via content vs no content for this DNS record type"); - } - }; - - if let Some(record) = list_records_res { - delete_dns_record(client, zone_id, &record.id).await?; - tracing::info!(%record_name, "deleted dns record, trying again"); - - // Second try - let create_record_res2 = client - .request(&cf::dns::CreateDnsRecord { - zone_identifier: zone_id, - params: cf::dns::CreateDnsRecordParams { - name: record_name, - content, - proxied: Some(false), - ttl: Some(60), - priority: None, - }, - }) - .await?; - - return Ok(create_record_res2.result.id); - } else { - tracing::warn!(%record_name, "failed to get matching dns record"); - } - } - - // Throw original error - Err(err.into()) - } - } -} - -pub(crate) async fn delete_dns_record( - client: &cf_framework::async_api::Client, - zone_id: &str, - record_id: &str, -) -> GlobalResult<()> { - tracing::info!(%record_id, "deleting dns record"); - - client - .request(&cf::dns::DeleteDnsRecord { - zone_identifier: zone_id, - identifier: record_id, - }) - .await?; - - Ok(()) -} - -/// Fetches a dns record by name and type, not content. -async fn get_dns_record( - cf_token: &str, - zone_id: &str, - record_name: &str, - dns_type: &str, -) -> GlobalResult> { - let list_records_res = reqwest::Client::new() - .get(format!( - "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" - )) - .bearer_auth(cf_token) - .query(&[("name", record_name), ("type", dns_type)]) - .send() - .await?; - - let status = list_records_res.status(); - if status.is_success() { - match list_records_res - .json::>>() - .await - { - Ok(api_resp) => Ok(api_resp.result.into_iter().next()), - Err(e) => Err(cf_framework::response::ApiFailure::Invalid(e).into()), - } - } else { - let parsed: Result = - list_records_res.json().await; - let errors = parsed.unwrap_or_default(); - Err(cf_framework::response::ApiFailure::Error(status, errors).into()) - } -} diff --git a/packages/services/cluster/src/workflows/server/drain.rs b/packages/services/cluster/src/workflows/server/drain.rs deleted file mode 100644 index fb2f8978d4..0000000000 --- a/packages/services/cluster/src/workflows/server/drain.rs +++ /dev/null @@ -1,210 +0,0 @@ -use chirp_workflow::prelude::*; -use nomad_client::{apis::nodes_api, models}; -use rivet_operation::prelude::proto::backend::pkg::*; - -use crate::types::PoolType; - -#[derive(Debug, Serialize, Deserialize)] -pub(crate) struct Input { - pub datacenter_id: Uuid, - pub server_id: Uuid, - pub pool_type: PoolType, -} - -#[workflow] -pub(crate) async fn cluster_server_drain(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - let drain_timeout = ctx - .activity(GetDrainTimeoutInput { - datacenter_id: input.datacenter_id, - pool_type: input.pool_type, - }) - .await?; - - match input.pool_type { - PoolType::Job => { - ctx.activity(DrainNodeInput { - datacenter_id: input.datacenter_id, - server_id: input.server_id, - drain_timeout, - }) - .await?; - } - PoolType::Gg => { - ctx.signal(crate::workflows::server::DnsDelete {}) - .tag("server_id", input.server_id) - .send() - .await?; - } - PoolType::Pegboard | PoolType::PegboardIsolate => { - let pegboard_client_id = ctx - .activity(GetPegboardClientInput { - server_id: input.server_id, - }) - .await?; - - if let Some(pegboard_client_id) = pegboard_client_id { - // Important that the pegboard client is set to draining first - ctx.signal(pegboard::workflows::client::Drain {}) - .tag("client_id", pegboard_client_id) - .send() - .await?; - - ctx.activity(DrainDynamicServersInput { - pegboard_client_id, - drain_timeout, - }) - .await?; - } - } - PoolType::Ats | PoolType::Fdb => {} - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -pub(crate) struct GetDrainTimeoutInput { - pub datacenter_id: Uuid, - pub pool_type: PoolType, -} - -#[activity(GetDrainTimeout)] -pub(crate) async fn get_drain_timeout( - ctx: &ActivityCtx, - input: &GetDrainTimeoutInput, -) -> GlobalResult { - let dcs_res = ctx - .op(crate::ops::datacenter::get::Input { - datacenter_ids: vec![input.datacenter_id], - }) - .await?; - let dc = unwrap!(dcs_res.datacenters.into_iter().next()); - - let pool = unwrap!( - dc.pools.iter().find(|p| p.pool_type == input.pool_type), - "datacenter does not have this type of pool configured" - ); - - Ok(pool.drain_timeout) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct DrainNodeInput { - datacenter_id: Uuid, - server_id: Uuid, - drain_timeout: u64, -} - -#[activity(DrainNode)] -async fn drain_node(ctx: &ActivityCtx, input: &DrainNodeInput) -> GlobalResult<()> { - let (nomad_node_id,) = sql_fetch_one!( - [ctx, (Option,)] - " - SELECT nomad_node_id - FROM db_cluster.servers - WHERE server_id = $1 - ", - input.server_id, - ) - .await?; - - if let Some(nomad_node_id) = nomad_node_id { - let nomad_config = nomad_util::new_build_config(ctx.config())?; - let res = nodes_api::update_node_eligibility( - &nomad_config, - &nomad_node_id, - models::NodeUpdateEligibilityRequest { - eligibility: Some("ineligible".to_string()), - node_id: Some(nomad_node_id.clone()), - }, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ) - .await; - - // Catch "node not found" error - if let Err(nomad_client::apis::Error::ResponseError( - nomad_client::apis::ResponseContent { content, .. }, - )) = res - { - if content == "node not found" { - tracing::warn!("node does not exist, not draining"); - } - } - - // Prevent new matchmaker requests to the node running on this server - msg!([ctx] mm::msg::nomad_node_closed_set(&nomad_node_id) { - datacenter_id: Some(input.datacenter_id.into()), - nomad_node_id: nomad_node_id.clone(), - is_closed: true, - }) - .await?; - - msg!([ctx] job_run::msg::drain_all(&nomad_node_id) { - nomad_node_id: nomad_node_id.clone(), - drain_timeout: input.drain_timeout, - }) - .await?; - - msg!([ctx] ds::msg::drain_all(&nomad_node_id) { - nomad_node_id: Some(nomad_node_id.clone()), - pegboard_client_id: None, - drain_timeout: input.drain_timeout, - }) - .await?; - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct GetPegboardClientInput { - server_id: Uuid, -} - -#[activity(GetPegboardClient)] -async fn get_pegboard_client( - ctx: &ActivityCtx, - input: &GetPegboardClientInput, -) -> GlobalResult> { - let (pegboard_client_id,) = sql_fetch_one!( - [ctx, (Option,)] - " - SELECT pegboard_client_id - FROM db_cluster.servers - WHERE server_id = $1 - ", - input.server_id, - ) - .await?; - - Ok(pegboard_client_id) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct DrainDynamicServersInput { - pegboard_client_id: Uuid, - drain_timeout: u64, -} - -#[activity(DrainDynamicServers)] -async fn drain_dynamic_servers( - ctx: &ActivityCtx, - input: &DrainDynamicServersInput, -) -> GlobalResult<()> { - msg!([ctx] ds::msg::drain_all(&input.pegboard_client_id) { - nomad_node_id: None, - pegboard_client_id: Some(input.pegboard_client_id.into()), - drain_timeout: input.drain_timeout, - }) - .await?; - - Ok(()) -} diff --git a/packages/services/cluster/src/workflows/server/mod.rs b/packages/services/cluster/src/workflows/server/mod.rs deleted file mode 100644 index c528cff316..0000000000 --- a/packages/services/cluster/src/workflows/server/mod.rs +++ /dev/null @@ -1,1051 +0,0 @@ -use chirp_workflow::prelude::*; -use futures_util::FutureExt; -use ipnet::Ipv4Net; -use rand::Rng; -use serde_json::json; -use std::{ - convert::TryInto, - net::{IpAddr, Ipv4Addr}, -}; - -pub(crate) mod dns_create; -pub(crate) mod dns_delete; -pub(crate) mod drain; -pub(crate) mod install; -pub(crate) mod undrain; - -use crate::{ - metrics, - types::{Pool, PoolType, Provider}, -}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub(crate) struct Input2 { - pub datacenter_id: Uuid, - pub server_id: Uuid, - pub pool_type: PoolType, - pub tags: Vec, -} - -#[workflow(Workflow2)] -pub(crate) async fn cluster_server2(ctx: &mut WorkflowCtx, input: &Input2) -> GlobalResult<()> { - let (dc, provider_server_workflow_id) = provision_server(ctx, input).await?; - - let has_dns = ctx - .loope(State::default(), |ctx, state| { - let input = input.clone(); - let dc = dc.clone(); - - async move { lifecycle(ctx, &input, &dc, state).await }.boxed() - }) - .await?; - - cleanup( - ctx, - input, - &dc.provider, - provider_server_workflow_id, - has_dns, - ) - .await?; - - Ok(()) -} - -/// Old cluster_server workflow before loop state was implemented. -#[derive(Debug, Clone, Serialize, Deserialize)] -pub(crate) struct Input { - pub datacenter_id: Uuid, - pub server_id: Uuid, - pub pool_type: PoolType, - pub tags: Vec, -} - -impl From for Input2 { - fn from(input: Input) -> Self { - Input2 { - datacenter_id: input.datacenter_id, - server_id: input.server_id, - pool_type: input.pool_type, - tags: input.tags, - } - } -} - -#[workflow] -pub(crate) async fn cluster_server(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - let input = input.clone().into(); - let (dc, provider_server_workflow_id) = provision_server(ctx, &input).await?; - - // NOTE: This loop has side effects (for state) so we do not use `ctx.repeat` - let mut state = State::default(); - loop { - match lifecycle(ctx, &input, &dc, &mut state).await? { - Loop::Continue => {} - Loop::Break(_) => break, - } - } - - cleanup( - ctx, - &input, - &dc.provider, - provider_server_workflow_id, - state.has_dns, - ) - .await?; - - Ok(()) -} - -async fn provision_server( - ctx: &mut WorkflowCtx, - input: &Input2, -) -> GlobalResult<(GetDcOutput, Uuid)> { - let dc = ctx - .activity(GetDcInput { - datacenter_id: input.datacenter_id, - }) - .await?; - - let pool = unwrap!( - dc.pools.iter().find(|p| p.pool_type == input.pool_type), - "datacenter does not have this type of pool configured" - ); - - // Get a new vlan ip - let vlan_ip = ctx - .activity(GetVlanIpInput { - datacenter_id: input.datacenter_id, - server_id: input.server_id, - pool_type: input.pool_type, - }) - .await?; - - let custom_image = if dc.prebakes_enabled { - let image_res = ctx - .activity(GetPrebakeInput { - datacenter_id: input.datacenter_id, - pool_type: input.pool_type, - provider: dc.provider, - }) - .await?; - - // Start custom image creation process - if image_res.updated { - ctx.workflow(crate::workflows::prebake::Input { - datacenter_id: input.datacenter_id, - provider: dc.provider, - pool_type: input.pool_type, - install_script_hash: crate::util::INSTALL_SCRIPT_HASH.to_string(), - tags: Vec::new(), - }) - .dispatch() - .await?; - } - - image_res.custom_image - } else { - None - }; - let already_installed = custom_image.is_some(); - - // Iterate through list of hardware and attempt to schedule a server. Goes to the next - // hardware if an error happens during provisioning - let mut hardware_list = pool.hardware.iter(); - let provision_res = loop { - // List exhausted - let Some(hardware) = hardware_list.next() else { - break None; - }; - - tracing::info!( - "attempting to provision hardware: {}", - hardware.provider_hardware, - ); - - match dc.provider { - Provider::Manual => { - // Noop - } - Provider::Linode => { - let workflow_id = ctx - .workflow(linode::workflows::server::Input { - server_id: input.server_id, - provider_datacenter_id: dc.provider_datacenter_id.clone(), - custom_image: custom_image.clone(), - api_token: dc.provider_api_token.clone(), - hardware: hardware.provider_hardware.clone(), - firewall_preset: match input.pool_type { - PoolType::Job | PoolType::Pegboard | PoolType::PegboardIsolate => { - linode::types::FirewallPreset::Job - } - PoolType::Gg => linode::types::FirewallPreset::Gg, - PoolType::Ats => linode::types::FirewallPreset::Ats, - PoolType::Fdb => linode::types::FirewallPreset::Fdb, - }, - vlan_ip: Some(vlan_ip.ip()), - vlan_ip_net: Some(vlan_ip.ip_net()), - tags: input.tags.clone(), - }) - .tag("server_id", input.server_id) - .dispatch() - .await?; - - match ctx.listen::().await? { - Linode::ProvisionComplete(sig) => { - break Some(ProvisionResponse { - provider_server_workflow_id: workflow_id, - provider_server_id: sig.linode_id.to_string(), - provider_hardware: hardware.provider_hardware.clone(), - public_ip: sig.public_ip, - }); - } - Linode::ProvisionFailed(_) => { - tracing::error!( - provision_workflow_id=%workflow_id, - server_id=?input.server_id, - "failed to provision server" - ); - } - } - } - } - }; - - let provider_server_workflow_id = if let Some(provision_res) = provision_res { - let provider_server_workflow_id = provision_res.provider_server_workflow_id; - let public_ip = provision_res.public_ip; - - ctx.activity(UpdateDbInput { - server_id: input.server_id, - pool_type: input.pool_type, - cluster_id: dc.cluster_id, - datacenter_id: dc.datacenter_id, - provider_datacenter_id: dc.provider_datacenter_id.clone(), - datacenter_name_id: dc.name_id.clone(), - provider_server_id: provision_res.provider_server_id.clone(), - provider_hardware: provision_res.provider_hardware.clone(), - public_ip: provision_res.public_ip, - already_installed, - }) - .await?; - - // Install components on server - if !already_installed { - let install_res = ctx - .workflow(install::Input { - datacenter_id: input.datacenter_id, - server_id: Some(input.server_id), - public_ip, - pool_type: input.pool_type, - initialize_immediately: true, - }) - .output() - .await; - - // If the server failed all attempts to install, clean it up - if let Err(err) = ctx.catch_unrecoverable(install_res)? { - tracing::warn!(?err, "failed installing server, cleaning up"); - - ctx.activity(MarkDestroyedInput { - server_id: input.server_id, - }) - .await?; - - cleanup(ctx, input, &dc.provider, provider_server_workflow_id, false).await?; - - return Err(err); - } - } - - // Scale to get rid of tainted servers - ctx.signal(crate::workflows::datacenter::Scale {}) - .tag("datacenter_id", input.datacenter_id) - .send() - .await?; - - match input.pool_type { - // Create DNS record because the server is already installed - PoolType::Gg => { - ctx.workflow(dns_create::Input { - server_id: input.server_id, - }) - .output() - .await?; - } - // Update tags to include pegboard client_id (currently the same as the server_id) - PoolType::Pegboard | PoolType::PegboardIsolate => { - ctx.activity(UpdateTagsInput { - server_id: input.server_id, - client_id: input.server_id, - }) - .await?; - } - _ => {} - } - - provider_server_workflow_id - } else { - tracing::error!( - server_id=?input.server_id, - hardware_options=?pool.hardware.len(), - "failed all attempts to provision server" - ); - - // Mark as destroyed (cleanup already occurred in the linode server workflow) - ctx.activity(MarkDestroyedInput { - server_id: input.server_id, - }) - .await?; - - // Scale to bring up a new server to take this server's place - ctx.signal(crate::workflows::datacenter::Scale {}) - .tag("datacenter_id", input.datacenter_id) - .send() - .await?; - - bail!("failed all attempts to provision server"); - }; - - Ok((dc, provider_server_workflow_id)) -} - -async fn lifecycle( - ctx: &mut WorkflowCtx, - input: &Input2, - dc: &GetDcOutput, - state: &mut State, -) -> GlobalResult> { - match state.run(ctx).await? { - Main::DnsCreate(_) => { - ctx.workflow(dns_create::Input { - server_id: input.server_id, - }) - .output() - .await?; - } - Main::DnsDelete(_) => { - ctx.workflow(dns_delete::Input { - server_id: input.server_id, - }) - .output() - .await?; - } - Main::NomadRegistered(sig) => { - ctx.activity(SetNomadNodeIdInput { - server_id: input.server_id, - cluster_id: dc.cluster_id, - datacenter_id: dc.datacenter_id, - provider_datacenter_id: dc.provider_datacenter_id.clone(), - datacenter_name_id: dc.name_id.clone(), - node_id: sig.node_id, - }) - .await?; - - // Scale to get rid of tainted servers - ctx.signal(crate::workflows::datacenter::Scale {}) - .tag("datacenter_id", input.datacenter_id) - .send() - .await?; - } - Main::PegboardRegistered(_) => { - ctx.activity(SetPegboardClientIdInput { - server_id: input.server_id, - cluster_id: dc.cluster_id, - datacenter_id: dc.datacenter_id, - provider_datacenter_id: dc.provider_datacenter_id.clone(), - datacenter_name_id: dc.name_id.clone(), - client_id: input.server_id, - }) - .await?; - - // Scale to get rid of tainted servers - ctx.signal(crate::workflows::datacenter::Scale {}) - .tag("datacenter_id", input.datacenter_id) - .send() - .await?; - } - Main::Drain(_) => { - ctx.workflow(drain::Input { - datacenter_id: input.datacenter_id, - server_id: input.server_id, - pool_type: input.pool_type, - }) - .output() - .await?; - } - Main::Undrain(_) => { - ctx.workflow(undrain::Input { - datacenter_id: input.datacenter_id, - server_id: input.server_id, - pool_type: input.pool_type, - }) - .output() - .await?; - } - Main::Taint(_) => {} // Only for state - Main::Destroy(_) => { - if let PoolType::Fdb = input.pool_type { - bail!("you cant kill fdb you stupid chud"); - } - - return Ok(Loop::Break(state.has_dns)); - } - } - - Ok(Loop::Continue) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -pub(crate) struct GetDcInput { - pub datacenter_id: Uuid, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub(crate) struct GetDcOutput { - pub datacenter_id: Uuid, - pub cluster_id: Uuid, - pub name_id: String, - pub provider: Provider, - pub provider_datacenter_id: String, - pub provider_api_token: Option, - pub pools: Vec, - pub prebakes_enabled: bool, -} - -#[activity(GetDc)] -pub(crate) async fn get_dc(ctx: &ActivityCtx, input: &GetDcInput) -> GlobalResult { - let dcs_res = ctx - .op(crate::ops::datacenter::get::Input { - datacenter_ids: vec![input.datacenter_id], - }) - .await?; - let dc = unwrap!(dcs_res.datacenters.into_iter().next()); - - Ok(GetDcOutput { - pools: dc.pools, - prebakes_enabled: dc.prebakes_enabled, - provider: dc.provider, - provider_datacenter_id: dc.provider_datacenter_id, - provider_api_token: dc.provider_api_token, - cluster_id: dc.cluster_id, - datacenter_id: dc.datacenter_id, - name_id: dc.name_id, - }) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct GetVlanIpInput { - datacenter_id: Uuid, - server_id: Uuid, - pool_type: PoolType, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -#[serde(untagged)] -enum GetVlanIpOutput { - Current { - vlan_ip: Ipv4Addr, - vlan_ip_net: ipnet::Ipv4Net, - }, - Deprecated(Ipv4Addr), -} - -impl GetVlanIpOutput { - fn ip(&self) -> Ipv4Addr { - match self { - Self::Current { vlan_ip, .. } => *vlan_ip, - Self::Deprecated(vlan_ip) => *vlan_ip, - } - } - - fn ip_net(&self) -> Ipv4Net { - match self { - Self::Current { vlan_ip_net, .. } => *vlan_ip_net, - Self::Deprecated(_) => { - // Fall back to default VLAN IP - Ipv4Net::new(Ipv4Addr::new(10, 0, 0, 0), 16).unwrap() - } - } - } -} - -#[activity(GetVlanIp)] -async fn get_vlan_ip(ctx: &ActivityCtx, input: &GetVlanIpInput) -> GlobalResult { - let provision_config = &ctx.config().server()?.rivet.provision()?; - - // Find next available vlan index - let mut vlan_addr_range = match input.pool_type { - PoolType::Job | PoolType::Pegboard | PoolType::PegboardIsolate => { - provision_config.pools.pegboard.vlan_addr_range() - } - PoolType::Gg => provision_config.pools.gg.vlan_addr_range(), - PoolType::Ats => provision_config.pools.ats.vlan_addr_range(), - PoolType::Fdb => provision_config.pools.fdb.vlan_addr_range(), - }; - let max_idx = vlan_addr_range.count() as i64; - - // HACK: We should be storing `FirewallPreset` in the database and comparing against that instead of pool - // type since certain pool types share vlan ip networks. This converts the actual pool type to the pool - // types that share the ip network. - let shared_net_pool_types = match input.pool_type { - PoolType::Job | PoolType::Pegboard | PoolType::PegboardIsolate => { - vec![ - PoolType::Job as i32, - PoolType::Pegboard as i32, - PoolType::PegboardIsolate as i32, - ] - } - PoolType::Gg => vec![PoolType::Gg as i32], - PoolType::Ats => vec![PoolType::Ats as i32], - PoolType::Fdb => vec![PoolType::Fdb as i32], - }; - - let (network_idx,) = sql_fetch_one!( - [ctx, (i64,)] - " - WITH - get_next_network_idx AS ( - SELECT mod(idx + $1, $2) AS idx - FROM generate_series(0, $2) AS s(idx) - WHERE NOT EXISTS ( - SELECT 1 - FROM db_cluster.servers - WHERE - pool_type = ANY($3) AND - -- Technically this should check all servers where their datacenter's provider and - -- provider_datacenter_id are the same because VLAN is separated by irl datacenter - -- but this is good enough - datacenter_id = $4 AND - network_idx = mod(idx + $1, $2) AND - cloud_destroy_ts IS NULL - ) - LIMIT 1 - ), - update_network_idx AS ( - UPDATE db_cluster.servers - SET network_idx = (SELECT idx FROM get_next_network_idx) - WHERE server_id = $5 - RETURNING 1 - ) - SELECT idx FROM get_next_network_idx - ", - // Choose a random index to start from for better index spread - rand::thread_rng().gen_range(0i64..max_idx), - max_idx, - shared_net_pool_types, - input.datacenter_id, - input.server_id, - ) - .await?; - - let vlan_ip = unwrap!(vlan_addr_range.nth(network_idx.try_into()?)); - - // Write vlan ip - sql_execute!( - [ctx] - " - UPDATE db_cluster.servers - SET vlan_ip = $2 - WHERE server_id = $1 - ", - input.server_id, - IpAddr::V4(vlan_ip), - ) - .await?; - - Ok(GetVlanIpOutput::Current { - vlan_ip, - vlan_ip_net: provision_config.vlan_ip_net(), - }) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct GetPrebakeInput { - datacenter_id: Uuid, - pool_type: PoolType, - provider: Provider, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct GetPrebakeOutput { - custom_image: Option, - updated: bool, -} - -#[activity(GetPrebake)] -async fn get_prebake(ctx: &ActivityCtx, input: &GetPrebakeInput) -> GlobalResult { - // Get the custom image id for this server, or insert a record and start creating one - let (image_id, updated) = sql_fetch_one!( - [ctx, (Option, bool)] - " - WITH - updated AS ( - INSERT INTO db_cluster.server_images2 AS s ( - provider, install_hash, datacenter_id, pool_type, create_ts - ) - VALUES ($1, $2, $3, $4, $5) - ON CONFLICT (provider, install_hash, datacenter_id, pool_type) DO UPDATE - SET - provider_image_id = NULL, - create_ts = $5 - WHERE s.create_ts < $6 - RETURNING provider, install_hash, datacenter_id, pool_type - ), - selected AS ( - SELECT provider, install_hash, datacenter_id, pool_type, provider_image_id - FROM db_cluster.server_images2 - WHERE - provider = $1 AND - install_hash = $2 AND - datacenter_id = $3 AND - pool_type = $4 - ) - SELECT - selected.provider_image_id, - -- Primary key is not null - (updated.provider IS NOT NULL) AS updated - FROM selected - FULL OUTER JOIN updated - ON true - ", - input.provider as i32, - crate::util::INSTALL_SCRIPT_HASH, - input.datacenter_id, - input.pool_type as i32, - util::timestamp::now(), - // 5 month expiration - util::timestamp::now() - util::duration::days(5 * 30), - ) - .await?; - - // Updated is true if this specific sql call either reset (if expired) or inserted the row - Ok(GetPrebakeOutput { - custom_image: if updated { None } else { image_id }, - updated, - }) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct ProvisionResponse { - provider_server_workflow_id: Uuid, - provider_server_id: String, - provider_hardware: String, - public_ip: Ipv4Addr, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct UpdateDbInput { - server_id: Uuid, - pool_type: PoolType, - cluster_id: Uuid, - datacenter_id: Uuid, - provider_datacenter_id: String, - datacenter_name_id: String, - provider_server_id: String, - provider_hardware: String, - public_ip: Ipv4Addr, - already_installed: bool, -} - -#[activity(UpdateDb)] -async fn update_db(ctx: &ActivityCtx, input: &UpdateDbInput) -> GlobalResult<()> { - let provision_complete_ts = util::timestamp::now(); - - let (create_ts,) = sql_fetch_one!( - [ctx, (i64,)] - " - UPDATE db_cluster.servers - SET - provider_server_id = $2, - provider_hardware = $3, - public_ip = $4, - provision_complete_ts = $5, - install_complete_ts = $6 - WHERE server_id = $1 - RETURNING create_ts - ", - input.server_id, - &input.provider_server_id, - &input.provider_hardware, - IpAddr::V4(input.public_ip), - provision_complete_ts, - if input.already_installed { - Some(provision_complete_ts) - } else { - None - }, - ) - .await?; - - // Insert metrics - let dt = (provision_complete_ts - create_ts) as f64 / 1000.0; - - metrics::PROVISION_DURATION - .with_label_values(&[ - &input.cluster_id.to_string(), - &input.datacenter_id.to_string(), - &input.provider_datacenter_id, - &input.datacenter_name_id, - &input.pool_type.to_string(), - ]) - .observe(dt); - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct UpdateTagsInput { - server_id: Uuid, - client_id: Uuid, -} - -#[activity(UpdateTags)] -async fn update_tags(ctx: &ActivityCtx, input: &UpdateTagsInput) -> GlobalResult<()> { - ctx.update_workflow_tags(&json!({ - "server_id": input.server_id, - "client_id": input.client_id, - })) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct MarkDestroyedInput { - server_id: Uuid, -} - -#[activity(MarkDestroyed)] -async fn mark_destroyed(ctx: &ActivityCtx, input: &MarkDestroyedInput) -> GlobalResult<()> { - // Mark servers for destruction in db - sql_execute!( - [ctx] - " - UPDATE db_cluster.servers - SET cloud_destroy_ts = $2 - WHERE server_id = $1 - ", - input.server_id, - util::timestamp::now(), - ) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SetNomadNodeIdInput { - server_id: Uuid, - cluster_id: Uuid, - datacenter_id: Uuid, - provider_datacenter_id: String, - datacenter_name_id: String, - node_id: String, -} - -#[activity(SetNomadNodeId)] -async fn set_nomad_node_id(ctx: &ActivityCtx, input: &SetNomadNodeIdInput) -> GlobalResult<()> { - let nomad_join_ts = util::timestamp::now(); - - let (old_nomad_node_id, install_complete_ts) = sql_fetch_one!( - [ctx, (Option, Option)] - " - UPDATE db_cluster.servers - SET - nomad_node_id = $2, - nomad_join_ts = $3 - WHERE server_id = $1 - RETURNING nomad_node_id, install_complete_ts - ", - input.server_id, - &input.node_id, - nomad_join_ts, - ) - .await?; - - if let Some(old_nomad_node_id) = old_nomad_node_id { - tracing::warn!(%old_nomad_node_id, "nomad node id was already set"); - } - - // Insert metrics - if let Some(install_complete_ts) = install_complete_ts { - let dt = (nomad_join_ts - install_complete_ts) as f64 / 1000.0; - - metrics::NOMAD_JOIN_DURATION - .with_label_values(&[ - &input.cluster_id.to_string(), - &input.datacenter_id.to_string(), - &input.provider_datacenter_id, - &input.datacenter_name_id, - ]) - .observe(dt); - } else { - tracing::warn!("missing install_complete_ts"); - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SetPegboardClientIdInput { - server_id: Uuid, - cluster_id: Uuid, - datacenter_id: Uuid, - provider_datacenter_id: String, - datacenter_name_id: String, - client_id: Uuid, -} - -#[activity(SetPegboardClientId)] -async fn set_pegboard_client_id( - ctx: &ActivityCtx, - input: &SetPegboardClientIdInput, -) -> GlobalResult<()> { - let pegboard_join_ts = util::timestamp::now(); - - let (old_pegboard_client_id, install_complete_ts) = sql_fetch_one!( - [ctx, (Option, Option)] - " - UPDATE db_cluster.servers - SET - pegboard_client_id = $2 - WHERE server_id = $1 - RETURNING pegboard_client_id, install_complete_ts - ", - input.server_id, - &input.client_id, - ) - .await?; - - if let Some(old_pegboard_client_id) = old_pegboard_client_id { - tracing::warn!(%old_pegboard_client_id, "pegboard client id was already set"); - } - - // Insert metrics - if let Some(install_complete_ts) = install_complete_ts { - let dt = (pegboard_join_ts - install_complete_ts) as f64 / 1000.0; - - metrics::PEGBOARD_JOIN_DURATION - .with_label_values(&[ - &input.cluster_id.to_string(), - &input.datacenter_id.to_string(), - &input.provider_datacenter_id, - &input.datacenter_name_id, - ]) - .observe(dt); - } else { - tracing::warn!("missing install_complete_ts"); - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SetDrainCompleteInput { - server_id: Uuid, -} - -#[activity(SetDrainComplete)] -async fn set_drain_complete(ctx: &ActivityCtx, input: &SetDrainCompleteInput) -> GlobalResult<()> { - // Set as completed draining. Will be destroyed by `cluster-datacenter-scale` - sql_execute!( - [ctx] - " - UPDATE db_cluster.servers - SET drain_complete_ts = $2 - WHERE server_id = $1 - ", - input.server_id, - util::timestamp::now(), - ) - .await?; - - Ok(()) -} - -async fn cleanup( - ctx: &mut WorkflowCtx, - input: &Input2, - provider: &Provider, - provider_server_workflow_id: Uuid, - cleanup_dns: bool, -) -> GlobalResult<()> { - if cleanup_dns { - // Cleanup DNS - if let PoolType::Gg = input.pool_type { - ctx.workflow(dns_delete::Input { - server_id: input.server_id, - }) - .output() - .await?; - } - } - - // Cleanup server - match provider { - Provider::Manual => { - // Noop - } - Provider::Linode => { - tracing::info!(server_id=?input.server_id, "destroying linode server"); - - ctx.signal(linode::workflows::server::Destroy {}) - .to_workflow_id(provider_server_workflow_id) - .send() - .await?; - - // Wait for workflow to complete - ctx.wait_for_workflow::( - provider_server_workflow_id, - ) - .await?; - } - } - - Ok(()) -} - -/// Finite state machine for handling server updates. -#[derive(Debug, Serialize, Deserialize)] -struct State { - draining: bool, - has_dns: bool, - is_tainted: bool, -} - -impl State { - async fn run(&mut self, ctx: &mut WorkflowCtx) -> GlobalResult
{ - let signal = ctx.custom_listener(self).await?; - - // Update state - self.transition(&signal); - - Ok(signal) - } - - fn transition(&mut self, signal: &Main) { - match signal { - Main::Drain(_) => self.draining = true, - Main::Undrain(_) => self.draining = false, - Main::Taint(_) => self.is_tainted = true, - Main::DnsCreate(_) => self.has_dns = true, - Main::DnsDelete(_) => self.has_dns = false, - _ => {} - } - } -} - -#[async_trait::async_trait] -impl CustomListener for State { - type Output = Main; - - /* ==== BINARY CONDITION DECOMPOSITION ==== - - // state - drain dns taint // available actions - 0 0 0 // drain, taint, dns create - 0 0 1 // drain - 0 1 0 // drain, taint, dns delete - 0 1 1 // drain, dns delete - 1 0 0 // undrain, taint, nomad drain complete - 1 0 1 // nomad drain complete - 1 1 0 // undrain, taint, dns delete, nomad drain complete - 1 1 1 // dns delete, nomad drain complete - - destroy // always - drain // if !drain - undrain // if drain && !taint - taint // if !taint - dns create // if !dns && !drain && !taint - dns delete // if dns - nomad registered // always - nomad drain complete // if drain - */ - async fn listen(&self, ctx: &mut ListenCtx) -> WorkflowResult { - // Determine which signals to listen to - let mut signals = vec![ - Destroy::NAME, - NomadRegistered::NAME, - pegboard::workflows::client::Registered::NAME, - ]; - - if !self.draining { - signals.push(Drain::NAME); - } else if !self.is_tainted { - signals.push(Undrain::NAME); - } - - if !self.is_tainted { - signals.push(Taint::NAME); - } - - if !self.has_dns && !self.draining && !self.is_tainted { - signals.push(DnsCreate::NAME); - } - - if self.has_dns { - signals.push(DnsDelete::NAME); - } - - let row = ctx.listen_any(&signals).await?; - Self::parse(&row.signal_name, &row.body) - } - - fn parse(name: &str, body: &serde_json::value::RawValue) -> WorkflowResult { - Main::parse(name, body) - } -} - -impl Default for State { - fn default() -> Self { - State { - draining: false, - has_dns: true, - is_tainted: false, - } - } -} - -// Listen for linode provision signals -type ProvisionComplete = linode::workflows::server::ProvisionComplete; -type ProvisionFailed = linode::workflows::server::ProvisionFailed; -join_signal!(pub(crate) Linode { - ProvisionComplete, - ProvisionFailed, -}); - -#[signal("cluster_server_drain")] -pub struct Drain {} - -#[signal("cluster_server_undrain")] -pub struct Undrain {} - -#[signal("cluster_server_taint")] -pub struct Taint {} - -#[signal("cluster_server_dns_create")] -pub struct DnsCreate {} - -#[signal("cluster_server_dns_delete")] -pub struct DnsDelete {} - -#[signal("cluster_server_destroy")] -pub struct Destroy {} - -#[signal("cluster_server_nomad_registered")] -pub struct NomadRegistered { - pub node_id: String, -} - -join_signal!(Main { - Drain, - Undrain, - Taint, - DnsCreate, - DnsDelete, - Destroy, - NomadRegistered, - PegboardRegistered(pegboard::workflows::client::Registered), -}); diff --git a/packages/services/cluster/standalone/datacenter-tls-renew/src/lib.rs b/packages/services/cluster/standalone/datacenter-tls-renew/src/lib.rs deleted file mode 100644 index 8a3da439d3..0000000000 --- a/packages/services/cluster/standalone/datacenter-tls-renew/src/lib.rs +++ /dev/null @@ -1,60 +0,0 @@ -use chirp_workflow::prelude::*; - -use cluster::types::TlsState; - -// How much time before the cert expires to renew it -const EXPIRE_PADDING: i64 = util::duration::days(30); - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let mut interval = tokio::time::interval(std::time::Duration::from_secs(60 * 60)); - loop { - interval.tick().await; - - run_from_env(config.clone(), pools.clone()).await?; - } -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())? - .wrap_new("cluster-datacenter-tls-renew"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "cluster-datacenter-tls-renew", - ) - .await?; - - let updated_datacenter_ids = sql_fetch_all!( - [ctx, (Uuid,)] - " - UPDATE db_cluster.datacenter_tls - SET state = $3 - WHERE - state = $1 AND - expire_ts < $2 - RETURNING datacenter_id - ", - TlsState::Active as i32, - util::timestamp::now() + EXPIRE_PADDING, - TlsState::Renewing as i32, - ) - .await? - .into_iter() - .map(|(datacenter_id,)| datacenter_id) - .collect::>(); - - for datacenter_id in updated_datacenter_ids { - ctx.signal(cluster::workflows::datacenter::TlsRenew {}) - .tag("datacenter_id", datacenter_id) - .send() - .await?; - } - - Ok(()) -} diff --git a/packages/services/cluster/standalone/default-update/src/lib.rs b/packages/services/cluster/standalone/default-update/src/lib.rs deleted file mode 100644 index 61c5af3fc3..0000000000 --- a/packages/services/cluster/standalone/default-update/src/lib.rs +++ /dev/null @@ -1,212 +0,0 @@ -use chirp_workflow::prelude::*; -use rivet_config::config; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - // TODO: When running bolt up, this service gets created first before `cluster-worker` so the messages - // sent from here are received but effectively forgotten because `cluster-worker` gets restarted - // immediately afterwards. This server will be replaced with a bolt infra step - tokio::time::sleep(std::time::Duration::from_secs(3)).await; - - start_inner(config, pools).await -} - -#[tracing::instrument(skip_all)] -pub async fn start_inner( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let client = - chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cluster-default-update"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "cluster-default-update", - ) - .await?; - - let rivet_config = &ctx.config().server()?.rivet; - - let cluster_configs = rivet_config.clusters(); - - for (cluster_slug, cluster) in cluster_configs.iter() { - upsert_cluster(&ctx, cluster_slug, cluster).await?; - } - - Ok(()) -} - -/// Creates or updates an existing cluster. -async fn upsert_cluster( - ctx: &StandaloneCtx, - cluster_slug: &str, - cluster_config: &config::rivet::Cluster, -) -> GlobalResult<()> { - // Fetch cluster data - let cluster_res = ctx - .op(cluster::ops::get::Input { - cluster_ids: vec![cluster_config.id], - }) - .await?; - - // Create cluster if needed - let cluster = if let Some(cluster) = cluster_res.clusters.first() { - // Validate the cluster config has not changed - ensure_eq!( - cluster_slug, - cluster.name_id, - "cluster id does not match config" - ); - - cluster.clone() - } else { - tracing::debug!("creating default cluster"); - - let mut create_sub = ctx - .subscribe::(( - "cluster_id", - cluster_config.id, - )) - .await?; - ctx.workflow(cluster::workflows::cluster::Input { - cluster_id: cluster_config.id, - name_id: cluster_slug.to_string(), - owner_team_id: None, - }) - .tag("cluster_id", cluster_config.id) - .dispatch() - .await?; - create_sub.next().await?; - - let cluster_res = ctx - .op(cluster::ops::get::Input { - cluster_ids: vec![cluster_config.id], - }) - .await?; - - unwrap!(cluster_res.clusters.first().cloned()) - }; - - // Get all datacenters - let datacenter_list_res = ctx - .op(cluster::ops::datacenter::list::Input { - cluster_ids: vec![cluster_config.id], - }) - .await?; - let datacenter_ids = unwrap!(datacenter_list_res.clusters.first()) - .datacenter_ids - .clone(); - let datacenters_res = ctx - .op(cluster::ops::datacenter::get::Input { datacenter_ids }) - .await?; - - // Log dcs that are trying to be deleted - for existing_datacenter in &datacenters_res.datacenters { - if !cluster_config - .bootstrap_datacenters - .contains_key(&existing_datacenter.name_id) - { - // Warn about removing datacenter - tracing::warn!( - dc_id = ?existing_datacenter.datacenter_id, - dc_name = existing_datacenter.name_id, - "deleting datacenters is currently unimplemented" - ); - } - } - - // Upsert datacenters - for (dc_slug, dc_config) in &cluster_config.bootstrap_datacenters { - let existing_datacenter = datacenters_res - .datacenters - .iter() - .find(|x| x.datacenter_id == dc_config.id); - upsert_datacenter( - ctx, - UpsertDatacenterArgs { - cluster_id: cluster.cluster_id, - dc_slug, - dc_config, - existing_datacenter, - }, - ) - .await?; - } - - Ok(()) -} - -struct UpsertDatacenterArgs<'a> { - cluster_id: Uuid, - dc_slug: &'a str, - dc_config: &'a config::rivet::Datacenter, - existing_datacenter: Option<&'a cluster::types::Datacenter>, -} - -/// Create or update an existing cluster. -async fn upsert_datacenter( - ctx: &StandaloneCtx, - UpsertDatacenterArgs { - cluster_id, - dc_slug, - dc_config, - existing_datacenter, - }: UpsertDatacenterArgs<'_>, -) -> GlobalResult<()> { - let guard_public_hostname = match &dc_config.guard.public_hostname { - Some(rivet_config::config::server::rivet::GuardPublicHostname::DnsParent(x)) => { - Some(cluster::types::GuardPublicHostname::DnsParent(x.clone())) - } - Some(rivet_config::config::server::rivet::GuardPublicHostname::Static(x)) => { - Some(cluster::types::GuardPublicHostname::Static(x.clone())) - } - None => None, - }; - - if let Some(existing_datacenter) = existing_datacenter { - // Validate IDs match - ensure_eq!( - dc_slug, - existing_datacenter.name_id, - "datacenter id does not match config" - ); - - ctx.signal(cluster::workflows::datacenter::Update { - pools: Vec::new(), - prebakes_enabled: None, - guard_public_hostname, - }) - .tag("datacenter_id", existing_datacenter.datacenter_id) - .send() - .await?; - } else { - // Create new datacenter - - let datacenter_id = dc_config.id; - - let provider = cluster::types::Provider::Manual; - let provider_datacenter_id = "dev".to_string(); - - ctx.signal(cluster::workflows::cluster::DatacenterCreate { - datacenter_id, - name_id: dc_slug.to_string(), - display_name: dc_config.name.clone(), - - provider, - provider_datacenter_id, - provider_api_token: None, - - pools: Vec::new(), - - build_delivery_method: dc_config.build_delivery_method.into(), - prebakes_enabled: false, - guard_public_hostname, - }) - .tag("cluster_id", cluster_id) - .send() - .await?; - } - - Ok(()) -} diff --git a/packages/services/cluster/standalone/gc/src/lib.rs b/packages/services/cluster/standalone/gc/src/lib.rs deleted file mode 100644 index 7f46b34629..0000000000 --- a/packages/services/cluster/standalone/gc/src/lib.rs +++ /dev/null @@ -1,141 +0,0 @@ -use std::convert::TryInto; - -use chirp_workflow::prelude::*; -use cluster::types::PoolType; -use futures_util::FutureExt; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let mut interval = tokio::time::interval(std::time::Duration::from_secs(120)); - loop { - interval.tick().await; - - let ts = util::timestamp::now(); - run_from_env(config.clone(), pools.clone(), ts).await?; - } -} - -#[derive(sqlx::FromRow)] -struct ServerRow { - server_id: Uuid, - datacenter_id: Uuid, - pool_type: i64, - drain_ts: i64, -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, - ts: i64, -) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cluster-gc"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "cluster-gc", - ) - .await?; - - let datacenter_ids = rivet_pools::utils::crdb::tx(&ctx.crdb().await?, |tx| { - let ctx = ctx.clone(); - - async move { - // Select all draining servers - let servers = sql_fetch_all!( - [ctx, ServerRow, @tx tx] - " - SELECT server_id, datacenter_id, pool_type, drain_ts - FROM db_cluster.servers - WHERE - drain_ts IS NOT NULL AND - drain_complete_ts IS NULL AND - cloud_destroy_ts IS NULL - ", - ) - .await?; - if servers.is_empty() { - return Ok(Vec::new()); - } - - // Fetch relevant datacenters - let datacenters_res = ctx - .op(cluster::ops::datacenter::get::Input { - datacenter_ids: servers - .iter() - .map(|server| server.datacenter_id) - .collect::>(), - }) - .await?; - - // Determine which servers are finished draining via their drain timeout - let drained_servers = servers - .into_iter() - .map(|server| { - let pool_type = unwrap!(PoolType::from_repr(server.pool_type.try_into()?)); - let datacenter = unwrap!(datacenters_res - .datacenters - .iter() - .find(|dc| dc.datacenter_id == server.datacenter_id)); - let pool = unwrap!(datacenter - .pools - .iter() - .find(|pool| pool.pool_type == pool_type)); - let drain_completed = server.drain_ts < ts - pool.drain_timeout as i64; - - tracing::info!( - server_id=?server.server_id, - drain_ts=%server.drain_ts, - pool_drain_timeout=%pool.drain_timeout, - %drain_completed, - ); - - Ok((server, drain_completed)) - }) - .filter(|res| { - res.as_ref() - .map_or(true, |(_, drain_completed)| *drain_completed) - }) - .collect::>>()?; - - if drained_servers.is_empty() { - return Ok(Vec::new()); - } - - tracing::info!("{} servers done draining", drained_servers.len()); - - // Update servers that have completed draining - sql_execute!( - [ctx, @tx tx] - " - UPDATE db_cluster.servers - SET drain_complete_ts = $2 - WHERE - server_id = ANY($1) AND - cloud_destroy_ts IS NULL - ", - drained_servers.iter().map(|(server, _)| server.server_id).collect::>(), - ts, - ) - .await?; - - Ok(drained_servers - .into_iter() - .map(|(server, _)| server.datacenter_id) - .collect::>()) - } - .boxed() - }) - .await?; - - // Scale - for datacenter_id in datacenter_ids { - ctx.signal(cluster::workflows::datacenter::Scale {}) - .tag("datacenter_id", datacenter_id) - .send() - .await?; - } - - Ok(()) -} diff --git a/packages/services/cluster/standalone/metrics-publish/src/lib.rs b/packages/services/cluster/standalone/metrics-publish/src/lib.rs deleted file mode 100644 index 45ef0f7be5..0000000000 --- a/packages/services/cluster/standalone/metrics-publish/src/lib.rs +++ /dev/null @@ -1,250 +0,0 @@ -use std::convert::{TryFrom, TryInto}; - -use chirp_workflow::prelude::*; -use cluster::{ - metrics, - types::{Datacenter, PoolType}, -}; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let mut interval = tokio::time::interval(std::time::Duration::from_secs(7)); - loop { - interval.tick().await; - - run_from_env(config.clone(), pools.clone()).await?; - } -} - -#[derive(sqlx::FromRow)] -struct ServerRow { - datacenter_id: Uuid, - pool_type: i64, - is_provisioned: bool, - is_installed: bool, - has_nomad_node: bool, - has_pegboard_client: bool, - is_draining: bool, - is_drained: bool, - is_tainted: bool, -} - -#[derive(Debug)] -struct Server { - datacenter_id: Uuid, - pool_type: PoolType, - is_provisioned: bool, - is_installed: bool, - has_nomad_node: bool, - has_pegboard_client: bool, - is_draining: bool, - is_tainted: bool, -} - -impl TryFrom for Server { - type Error = GlobalError; - - fn try_from(value: ServerRow) -> GlobalResult { - Ok(Server { - datacenter_id: value.datacenter_id, - pool_type: unwrap!(PoolType::from_repr(value.pool_type.try_into()?)), - is_provisioned: value.is_provisioned, - is_installed: value.is_installed, - has_nomad_node: value.has_nomad_node, - has_pegboard_client: value.has_pegboard_client, - is_tainted: value.is_tainted, - is_draining: value.is_draining && !value.is_drained, - }) - } -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let client = - chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("cluster-metrics-publish"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "cluster-metrics-publish", - ) - .await?; - - let servers = select_servers(&ctx).await?; - - let datacenters_res = ctx - .op(cluster::ops::datacenter::get::Input { - datacenter_ids: servers.iter().map(|s| s.datacenter_id).collect::>(), - }) - .await?; - - for dc in &datacenters_res.datacenters { - insert_metrics(dc, &servers)?; - } - - Ok(()) -} - -async fn select_servers(ctx: &StandaloneCtx) -> GlobalResult> { - let servers = sql_fetch_all!( - [ctx, ServerRow] - " - SELECT - datacenter_id, pool_type, - (provider_server_id IS NOT NULL) AS is_provisioned, - (install_complete_ts IS NOT NULL) AS is_installed, - (nomad_node_id IS NOT NULL) AS has_nomad_node, - (pegboard_client_id IS NOT NULL) AS has_pegboard_client, - (drain_ts IS NOT NULL) AS is_draining, - (drain_complete_ts IS NOT NULL) AS is_drained, - (taint_ts IS NOT NULL) AS is_tainted - FROM db_cluster.servers AS OF SYSTEM TIME '-1s' - WHERE - -- Filters out servers that are being destroyed/already destroyed - cloud_destroy_ts IS NULL - ", - ) - .await?; - - servers - .into_iter() - .map(TryInto::try_into) - .collect::>>() -} - -fn insert_metrics(dc: &Datacenter, servers: &[Server]) -> GlobalResult<()> { - let servers_in_dc = servers - .iter() - .filter(|s| s.datacenter_id == dc.datacenter_id); - - let datacenter_id = dc.datacenter_id.to_string(); - let cluster_id = dc.cluster_id.to_string(); - - let servers_per_pool = [ - PoolType::Job, - PoolType::Gg, - PoolType::Ats, - PoolType::Pegboard, - PoolType::PegboardIsolate, - PoolType::Fdb, - ] - .into_iter() - .map(|pool_type| { - ( - pool_type, - servers_in_dc - .clone() - .filter(|s| s.pool_type == pool_type) - .collect::>(), - ) - }) - .collect::>(); - - // Aggregate all states per pool type - for (pool_type, servers) in servers_per_pool { - let mut provisioning = 0; - let mut installing = 0; - let mut active = 0; - let mut nomad = 0; - let mut pegboard = 0; - let mut draining = 0; - let mut tainted = 0; - let mut draining_tainted = 0; - - for server in servers { - if server.is_draining { - draining += 1; - } else if server.is_provisioned { - if server.is_installed { - active += 1; - - if server.has_nomad_node { - nomad += 1; - } - - if server.has_pegboard_client { - pegboard += 1; - } - } else { - installing += 1; - } - } else { - provisioning += 1; - } - - if server.is_tainted { - tainted += 1; - - if server.is_draining { - draining_tainted += 1; - } - } - } - - let labels = [ - cluster_id.as_str(), - datacenter_id.as_str(), - &dc.provider_datacenter_id, - &dc.name_id, - &pool_type.to_string(), - ]; - - metrics::PROVISIONING_SERVERS - .with_label_values(&labels) - .set(provisioning); - metrics::INSTALLING_SERVERS - .with_label_values(&labels) - .set(installing); - metrics::ACTIVE_SERVERS - .with_label_values(&labels) - .set(active); - metrics::DRAINING_SERVERS - .with_label_values(&labels) - .set(draining); - metrics::TAINTED_SERVERS - .with_label_values(&labels) - .set(tainted); - metrics::DRAINING_TAINTED_SERVERS - .with_label_values(&labels) - .set(draining_tainted); - - match pool_type { - PoolType::Job => { - metrics::NOMAD_SERVERS - .with_label_values(&[ - &cluster_id, - &datacenter_id, - &dc.provider_datacenter_id, - &dc.name_id, - ]) - .set(nomad); - } - PoolType::Pegboard => { - metrics::PEGBOARD_SERVERS - .with_label_values(&[ - &cluster_id, - &datacenter_id, - &dc.provider_datacenter_id, - &dc.name_id, - ]) - .set(pegboard); - } - PoolType::PegboardIsolate => { - metrics::PEGBOARD_ISOLATE_SERVERS - .with_label_values(&[ - &cluster_id, - &datacenter_id, - &dc.provider_datacenter_id, - &dc.name_id, - ]) - .set(pegboard); - } - _ => {} - } - } - - Ok(()) -} diff --git a/packages/services/ds/src/lib.rs b/packages/services/ds/src/lib.rs deleted file mode 100644 index fa1151b00b..0000000000 --- a/packages/services/ds/src/lib.rs +++ /dev/null @@ -1,23 +0,0 @@ -use chirp_workflow::prelude::*; - -pub mod ops; -pub mod types; -pub mod util; -pub mod workers; -pub mod workflows; - -pub fn registry() -> WorkflowResult { - use workflows::*; - - let mut registry = Registry::new(); - registry.register_workflow::()?; - registry.register_workflow::()?; - registry.register_workflow::()?; - registry.register_workflow::()?; - registry.register_workflow::()?; - registry.register_workflow::()?; - registry.register_workflow::()?; - registry.register_workflow::()?; - - Ok(registry) -} diff --git a/packages/services/ds/src/workflows/server/pegboard/mod.rs b/packages/services/ds/src/workflows/server/pegboard/mod.rs deleted file mode 100644 index 93132a6ba9..0000000000 --- a/packages/services/ds/src/workflows/server/pegboard/mod.rs +++ /dev/null @@ -1,985 +0,0 @@ -use std::{ - collections::{HashMap, HashSet}, - time::Duration, -}; - -use build::types::{BuildCompression, BuildKind}; -use chirp_workflow::prelude::*; -use cluster::types::BuildDeliveryMethod; -use futures_util::FutureExt; -use pegboard::protocol as pp; -use serde_json::json; -use tokio::time::Instant; -use util::serde::AsHashableExt; - -use super::{ - CreateComplete, Destroy, Drain, DrainState, Failed, GetServerMetaInput, GetServerMetaOutput, - InsertDbInput, Port, Ready, SetConnectableInput, UpdateImageInput, UpdateRescheduleRetryInput, - Upgrade, UpgradeComplete, UpgradeStarted, BASE_RETRY_TIMEOUT_MS, DRAIN_PADDING_MS, -}; -use crate::types::{ - GameGuardProtocol, HostProtocol, NetworkMode, Routing, ServerLifecycle, ServerResources, -}; - -pub mod destroy; - -#[derive(Serialize, Deserialize)] -struct StateRes { - signal_actor: bool, - override_kill_timeout_ms: Option, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub(crate) struct Input { - pub server_id: Uuid, - pub env_id: Uuid, - pub datacenter_id: Uuid, - pub cluster_id: Uuid, - pub tags: HashMap, - pub resources: ServerResources, - pub lifecycle: ServerLifecycle, - pub image_id: Uuid, - pub root_user_enabled: bool, - pub args: Vec, - pub network_mode: NetworkMode, - pub environment: HashMap, - pub network_ports: HashMap, -} - -#[workflow] -pub(crate) async fn ds_server_pegboard(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - let res = setup(ctx, input, SetupCtx::Init).await; - match ctx.catch_unrecoverable(res)? { - Ok(_actor_id) => {} - Err(err) => { - tracing::error!(?err, "unrecoverable setup"); - - ctx.msg(Failed { - message: "Failed setup.".into(), - }) - .tag("server_id", input.server_id) - .send() - .await?; - - ctx.workflow(destroy::Input { - server_id: input.server_id, - override_kill_timeout_ms: None, - signal_actor: false, - }) - .output() - .await?; - - // Throw the original error from the setup activities - return Err(err); - } - }; - - ctx.msg(CreateComplete {}) - .tag("server_id", input.server_id) - .send() - .await?; - - let _client_id = match ctx.listen::().await? { - Init::ActorStateUpdate(sig) => match sig.state { - pp::ActorState::Allocated { client_id } => client_id, - pp::ActorState::FailedToAllocate => { - ctx.msg(Failed { - message: "Failed to allocate (no availability).".into(), - }) - .tag("server_id", input.server_id) - .send() - .await?; - - ctx.workflow(destroy::Input { - server_id: input.server_id, - override_kill_timeout_ms: None, - signal_actor: false, - }) - .output() - .await?; - - bail!("failed to allocate actor"); - } - state => bail!("unexpected actor state: {state:?}"), - }, - Init::Destroy(sig) => { - tracing::debug!("destroying before actor start"); - - ctx.workflow(destroy::Input { - server_id: input.server_id, - override_kill_timeout_ms: sig.override_kill_timeout_ms, - signal_actor: true, - }) - .output() - .await?; - - return Ok(()); - } - }; - - let state_res = ctx - .repeat(|ctx| { - let input = input.clone(); - - async move { - match ctx.listen::
().await? { - Main::ActorStateUpdate(sig) => match sig.state { - pp::ActorState::Starting => { - ctx.activity(SetStartedInput { - server_id: input.server_id, - }) - .await?; - } - pp::ActorState::Running { ports, .. } => { - ctx.activity(UpdatePortsInput { - server_id: input.server_id, - datacenter_id: input.datacenter_id, - ports, - }) - .await?; - - // Wait for Traefik to poll ports and update GG - let create_ts = ctx.ts(); - match ctx.check_version(2).await? { - 1 => ctx.removed::().await?, - _latest => { - ctx.activity(WaitForTraefikPollInput { - create_ts, - cluster_id: input.cluster_id, - datacenter_id: input.datacenter_id, - }) - .await?; - } - } - - let updated = ctx - .activity(SetConnectableInput { - server_id: input.server_id, - }) - .await?; - - if updated { - ctx.msg(Ready {}) - .tag("server_id", input.server_id) - .send() - .await?; - } - } - pp::ActorState::Stopping | pp::ActorState::Stopped => {} - pp::ActorState::Exited { .. } | pp::ActorState::Lost => { - let exit_code = if let pp::ActorState::Exited { exit_code } = sig.state - { - exit_code - } else { - None - }; - - tracing::debug!(?exit_code, "actor stopped"); - - let failed = exit_code.map(|exit_code| exit_code != 0).unwrap_or(true); - - // Reschedule durable actor if it errored - if input.lifecycle.durable && failed { - if let Some(sig) = reschedule_actor(ctx, &input, None).await? { - // Destroyed early - return Ok(Loop::Break(StateRes { - signal_actor: true, - override_kill_timeout_ms: sig.override_kill_timeout_ms, - })); - } - } else { - ctx.activity(SetFinishedInput { - server_id: input.server_id, - }) - .await?; - - return Ok(Loop::Break(StateRes { - signal_actor: false, - override_kill_timeout_ms: None, - })); - } - } - state => bail!("unexpected actor state: {state:?}"), - }, - Main::Drain(sig) => { - let drain_timeout = sig.drain_timeout.saturating_sub(DRAIN_PADDING_MS); - let sleep_for = if drain_timeout < input.lifecycle.kill_timeout_ms { - 0 - } else { - drain_timeout - input.lifecycle.kill_timeout_ms - }; - - match ctx.listen_with_timeout::(sleep_for).await? { - Some(DrainState::Undrain(_)) => {} - // Destroyed early - Some(DrainState::Destroy(sig)) => { - // TODO: Compare the override timeout to the remaining drain timeout and choose the - // smaller one - return Ok(Loop::Break(StateRes { - signal_actor: true, - override_kill_timeout_ms: sig.override_kill_timeout_ms, - })); - } - // Drain timeout complete - None => { - // Reschedule durable actor on drain end - if input.lifecycle.durable { - // Important that we get the current actor id as durable actors can be - // rescheduled many times - let actor_id = ctx - .activity(GetActorIdInput { - server_id: input.server_id, - }) - .await?; - - // Kill old actor immediately - destroy::destroy_actor( - ctx, - input.datacenter_id, - 0, - true, - actor_id, - ) - .await?; - - if let Some(sig) = reschedule_actor(ctx, &input, None).await? { - // Destroyed early - return Ok(Loop::Break(StateRes { - signal_actor: true, - override_kill_timeout_ms: sig.override_kill_timeout_ms, - })); - } - } else { - return Ok(Loop::Break(StateRes { - signal_actor: true, - override_kill_timeout_ms: Some( - input.lifecycle.kill_timeout_ms.min(drain_timeout), - ), - })); - } - } - } - } - Main::Upgrade(sig) => { - ctx.msg(UpgradeStarted {}) - .tag("server_id", input.server_id) - .send() - .await?; - - // Important that we get the current actor id as durable actors can be - // rescheduled many times - let actor_id = ctx - .activity(GetActorIdInput { - server_id: input.server_id, - }) - .await?; - - // Kill old actor immediately - destroy::destroy_actor(ctx, input.datacenter_id, 0, true, actor_id).await?; - - if let Some(sig) = reschedule_actor(ctx, &input, Some(sig.image_id)).await? - { - // Destroyed early - return Ok(Loop::Break(StateRes { - signal_actor: true, - override_kill_timeout_ms: sig.override_kill_timeout_ms, - })); - } - - ctx.msg(UpgradeComplete {}) - .tag("server_id", input.server_id) - .send() - .await?; - } - Main::Destroy(sig) => { - return Ok(Loop::Break(StateRes { - signal_actor: true, - override_kill_timeout_ms: sig.override_kill_timeout_ms, - })) - } - } - - Ok(Loop::Continue) - } - .boxed() - }) - .await?; - - ctx.workflow(destroy::Input { - server_id: input.server_id, - override_kill_timeout_ms: state_res.override_kill_timeout_ms, - signal_actor: state_res.signal_actor, - }) - .output() - .await?; - - Ok(()) -} - -enum SetupCtx { - Init, - Reschedule { new_image_id: Option }, -} - -#[derive(Clone)] -struct ActorSetupCtx { - actor_id: Uuid, - server_meta: GetServerMetaOutput, - resources: pp::Resources, - artifact_url_stub: String, - fallback_artifact_url: Option, -} - -async fn setup( - ctx: &mut WorkflowCtx, - input: &Input, - setup: SetupCtx, -) -> GlobalResult { - let image_id = match &setup { - SetupCtx::Init => { - ctx.activity(InsertDbInput { - server_id: input.server_id, - env_id: input.env_id, - datacenter_id: input.datacenter_id, - cluster_id: input.cluster_id, - tags: input.tags.as_hashable(), - resources: input.resources.clone(), - lifecycle: input.lifecycle.clone(), - image_id: input.image_id, - args: input.args.clone(), - network_mode: input.network_mode, - environment: input.environment.as_hashable(), - network_ports: input.network_ports.as_hashable(), - }) - .await?; - - input.image_id - } - SetupCtx::Reschedule { new_image_id } => { - if let Some(image_id) = *new_image_id { - ctx.activity(UpdateImageInput { - server_id: input.server_id, - image_id, - }) - .await?; - - image_id - } else { - input.image_id - } - } - }; - - let server_meta = ctx - .activity(GetServerMetaInput { - env_id: input.env_id, - image_id, - datacenter_id: input.datacenter_id, - }) - .await?; - - let (actor_id, resources, artifacts_res) = ctx - .join(( - activity(SelectActorIdInput { - server_id: input.server_id, - }), - activity(SelectResourcesInput { - datacenter_id: input.datacenter_id, - resources: input.resources.clone(), - }), - activity(ResolveArtifactsInput { - build_upload_id: server_meta.build_upload_id, - build_file_name: server_meta.build_file_name.clone(), - dc_build_delivery_method: server_meta.dc_build_delivery_method, - }), - )) - .await?; - - let actor_setup = ActorSetupCtx { - actor_id, - server_meta, - resources, - artifact_url_stub: artifacts_res.artifact_url_stub, - fallback_artifact_url: artifacts_res.fallback_artifact_url, - }; - - // Rescheduling handles spawning the actor manually - if let SetupCtx::Init = setup { - spawn_actor(ctx, input, &actor_setup).await?; - } - - Ok(actor_setup) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SelectActorIdInput { - server_id: Uuid, -} - -#[activity(SelectActorId)] -async fn select_actor_id(ctx: &ActivityCtx, input: &SelectActorIdInput) -> GlobalResult { - let actor_id = Uuid::new_v4(); - - sql_execute!( - [ctx] - " - -- NOTE: We upsert here because the actor can be reassigned in the event of a reschedule - UPSERT INTO db_ds.servers_pegboard (server_id, pegboard_actor_id) - VALUES ($1, $2) - ", - input.server_id, - actor_id, - ) - .await?; - - ctx.update_workflow_tags(&json!({ - "server_id": input.server_id, - "actor_id": actor_id, - })) - .await?; - - Ok(actor_id) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SelectResourcesInput { - datacenter_id: Uuid, - resources: ServerResources, -} - -#[activity(SelectResources)] -async fn select_resources( - ctx: &ActivityCtx, - input: &SelectResourcesInput, -) -> GlobalResult { - let tier_res = ctx - .op(tier::ops::list::Input { - datacenter_ids: vec![input.datacenter_id], - pegboard: true, - }) - .await?; - let tier_dc = unwrap!(tier_res.datacenters.first()); - let mut tiers = tier_dc.tiers.iter().collect::>(); - - // Sort the tiers by cpu - tiers.sort_by(|a, b| a.cpu.cmp(&b.cpu)); - - // Find the first tier that has more CPU and memory than the requested - // resources - let tier = unwrap!(tiers.iter().find(|t| { - t.cpu_millicores >= input.resources.cpu_millicores && t.memory >= input.resources.memory_mib - })); - - // runc-compatible resources - let cpu = tier.rivet_cores_numerator as u64 * 1_000 / tier.rivet_cores_denominator as u64; // Millicore (1/1000 of a core) - let memory = tier.memory as u64 * (1024 * 1024); - let memory_max = tier.memory_max as u64 * (1024 * 1024); - - Ok(pp::Resources { - cpu, - memory, - memory_max, - disk: tier.disk, - }) -} - -async fn spawn_actor( - ctx: &mut WorkflowCtx, - input: &Input, - actor_setup: &ActorSetupCtx, -) -> GlobalResult<()> { - ctx.signal(pp::Command::StartActor { - actor_id: actor_setup.actor_id, - config: Box::new(pp::ActorConfig { - image: pp::Image { - id: input.image_id, - artifact_url_stub: actor_setup.artifact_url_stub.clone(), - fallback_artifact_url: actor_setup.fallback_artifact_url.clone(), - kind: match actor_setup.server_meta.build_kind { - BuildKind::DockerImage => pp::ImageKind::DockerImage, - BuildKind::OciBundle => pp::ImageKind::OciBundle, - BuildKind::JavaScript => pp::ImageKind::JavaScript, - }, - compression: match actor_setup.server_meta.build_compression { - BuildCompression::None => pp::ImageCompression::None, - BuildCompression::Lz4 => pp::ImageCompression::Lz4, - }, - }, - root_user_enabled: input.root_user_enabled, - env: input.environment.as_hashable(), - ports: input - .network_ports - .iter() - .map(|(port_label, port)| match port.routing { - Routing::GameGuard { protocol, .. } => ( - crate::util::pegboard_normalize_port_label(port_label), - pp::Port { - target: port.internal_port, - protocol: match protocol { - GameGuardProtocol::Http - | GameGuardProtocol::Https - | GameGuardProtocol::Tcp - | GameGuardProtocol::TcpTls => pp::TransportProtocol::Tcp, - GameGuardProtocol::Udp => pp::TransportProtocol::Udp, - }, - routing: pp::PortRouting::GameGuard, - }, - ), - Routing::Host { protocol } => ( - crate::util::pegboard_normalize_port_label(port_label), - pp::Port { - target: port.internal_port, - protocol: match protocol { - HostProtocol::Tcp => pp::TransportProtocol::Tcp, - HostProtocol::Udp => pp::TransportProtocol::Udp, - }, - routing: pp::PortRouting::Host, - }, - ), - }) - .collect(), - network_mode: match input.network_mode { - NetworkMode::Bridge => pp::NetworkMode::Bridge, - NetworkMode::Host => pp::NetworkMode::Host, - }, - resources: actor_setup.resources.clone(), - owner: pp::ActorOwner::DynamicServer { - server_id: input.server_id, - }, - metadata: util::serde::Raw::new(&pp::ActorMetadata { - actor: pp::ActorMetadataActor { - actor_id: actor_setup.actor_id, - tags: input.tags.as_hashable(), - // Represents when the pegboard actor was created, not the ds workflow. - create_ts: ctx.ts(), - }, - project: pp::ActorMetadataProject { - project_id: actor_setup.server_meta.project_id, - slug: actor_setup.server_meta.project_slug.clone(), - }, - environment: pp::ActorMetadataEnvironment { - env_id: input.env_id, - slug: actor_setup.server_meta.env_slug.clone(), - }, - datacenter: pp::ActorMetadataDatacenter { - name_id: actor_setup.server_meta.dc_name_id.clone(), - display_name: actor_setup.server_meta.dc_display_name.clone(), - }, - cluster: pp::ActorMetadataCluster { - cluster_id: input.cluster_id, - }, - build: pp::ActorMetadataBuild { - build_id: input.image_id, - }, - })?, - }), - }) - .tag("datacenter_id", input.datacenter_id) - .send() - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct ResolveArtifactsInput { - build_upload_id: Uuid, - build_file_name: String, - dc_build_delivery_method: BuildDeliveryMethod, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct ResolveArtifactsOutput { - artifact_url_stub: String, - fallback_artifact_url: Option, -} - -#[activity(ResolveArtifacts)] -async fn resolve_artifacts( - ctx: &ActivityCtx, - input: &ResolveArtifactsInput, -) -> GlobalResult { - let artifact_url_stub = format!( - "/s3-cache/{namespace}-bucket-build/{upload_id}/{file_name}", - namespace = ctx.config().server()?.rivet.namespace, - upload_id = input.build_upload_id, - file_name = input.build_file_name, - ); - - let fallback_artifact_url = - if let BuildDeliveryMethod::S3Direct = input.dc_build_delivery_method { - tracing::debug!("using s3 direct delivery"); - - // Build client - let s3_client = s3_util::Client::with_bucket_and_endpoint( - ctx.config(), - "bucket-build", - s3_util::EndpointKind::EdgeInternal, - ) - .await?; - - let presigned_req = s3_client - .get_object() - .bucket(s3_client.bucket()) - .key(format!( - "{upload_id}/{file_name}", - upload_id = input.build_upload_id, - file_name = input.build_file_name, - )) - .presigned( - s3_util::aws_sdk_s3::presigning::PresigningConfig::builder() - .expires_in(std::time::Duration::from_secs(15 * 60)) - .build()?, - ) - .await?; - - let addr_str = presigned_req.uri().to_string(); - tracing::debug!(addr = %addr_str, "resolved artifact s3 presigned request"); - - Some(addr_str) - } else { - None - }; - - Ok(ResolveArtifactsOutput { - artifact_url_stub: crate::util::image_artifact_url_stub( - ctx.config(), - input.build_upload_id, - &input.build_file_name, - )?, - fallback_artifact_url, - }) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SetStartedInput { - server_id: Uuid, -} - -#[activity(SetStarted)] -async fn set_started(ctx: &ActivityCtx, input: &SetStartedInput) -> GlobalResult<()> { - sql_execute!( - [ctx] - " - UPDATE db_ds.servers - SET start_ts = $2 - WHERE - server_id = $1 AND - start_ts IS NULL - ", - input.server_id, - util::timestamp::now(), - ) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct UpdatePortsInput { - server_id: Uuid, - datacenter_id: Uuid, - ports: util::serde::HashableMap, -} - -#[activity(UpdatePorts)] -async fn update_ports(ctx: &ActivityCtx, input: &UpdatePortsInput) -> GlobalResult<()> { - let mut flat_port_labels = Vec::new(); - let mut flat_port_sources = Vec::new(); - let mut flat_port_ips = Vec::new(); - - for (label, port) in &input.ports { - flat_port_labels.push(label.as_str()); - flat_port_sources.push(port.source as i64); - flat_port_ips.push(port.lan_hostname.clone()); - } - - sql_execute!( - [ctx] - " - INSERT INTO db_ds.server_proxied_ports ( - server_id, - label, - source, - ip - ) - SELECT $1, label, source, ip - FROM unnest($2, $3, $4) AS n(label, source, ip) - ", - input.server_id, - flat_port_labels, - flat_port_sources, - flat_port_ips, - ) - .await?; - - // Invalidate cache when ports are updated - if !input.ports.is_empty() { - ctx.cache() - .purge("ds_proxied_ports2", [input.datacenter_id]) - .await?; - } - - Ok(()) -} - -async fn reschedule_actor( - ctx: &mut WorkflowCtx, - input: &Input, - new_image_id: Option, -) -> GlobalResult> { - tracing::info!("rescheduling actor"); - - // Remove old proxied ports - ctx.activity(ClearPortsInput { - server_id: input.server_id, - }) - .await?; - - let actor_setup = setup(ctx, &input, SetupCtx::Reschedule { new_image_id }).await?; - - // Waits for the actor to be ready (or destroyed) and automatically retries if failed to allocate. - ctx.repeat(|ctx| { - let input = input.clone(); - let actor_setup = actor_setup.clone(); - - async move { - // Get and increment retry count - let retry_count = ctx - .activity(UpdateRescheduleRetryInput { - server_id: input.server_id, - }) - .await?; - - // Don't sleep for first retry - if retry_count > 0 { - // Determine next backoff sleep duration - let mut backoff = rivet_util::Backoff::new_at( - 8, - None, - BASE_RETRY_TIMEOUT_MS, - 500, - (retry_count - 1).try_into()?, - ); - let next = backoff.step().expect("should not have max retry"); - - // Sleep for backoff or destroy early - if let Some(sig) = ctx - .listen_with_timeout::(next - Instant::now()) - .await? - { - tracing::debug!("destroying before actor start"); - - return Ok(Loop::Break(Some(sig))); - } - } - - spawn_actor(ctx, &input, &actor_setup).await?; - - match ctx.listen::().await? { - Init::ActorStateUpdate(sig) => match sig.state { - pp::ActorState::Allocated { - client_id: _client_id, - } => return Ok(Loop::Break(None)), - pp::ActorState::FailedToAllocate => return Ok(Loop::Continue), - state => bail!("unexpected actor state: {state:?}"), - }, - Init::Destroy(sig) => { - tracing::debug!("destroying before actor start"); - - return Ok(Loop::Break(Some(sig))); - } - }; - } - .boxed() - }) - .await -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct ClearPortsInput { - server_id: Uuid, -} - -#[activity(ClearPorts)] -async fn clear_ports(ctx: &ActivityCtx, input: &ClearPortsInput) -> GlobalResult<()> { - sql_execute!( - [ctx] - " - DELETE FROM db_ds.server_proxied_ports - WHERE server_id = $1 - ", - input.server_id, - ) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SetFinishedInput { - server_id: Uuid, -} - -#[activity(SetFinished)] -async fn set_finished(ctx: &ActivityCtx, input: &SetFinishedInput) -> GlobalResult<()> { - sql_execute!( - [ctx] - " - UPDATE db_ds.servers - SET finish_ts = $2 - WHERE server_id = $1 - ", - input.server_id, - util::timestamp::now(), - ) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct GetActorIdInput { - server_id: Uuid, -} - -#[activity(GetActorId)] -async fn get_actor_id(ctx: &ActivityCtx, input: &GetActorIdInput) -> GlobalResult { - let (actor_id,) = sql_fetch_one!( - [ctx, (Uuid,)] - " - SELECT pegboard_actor_id - FROM db_ds.servers_pegboard - WHERE server_id = $1 - ", - input.server_id, - ) - .await?; - - Ok(actor_id) -} - -/// Amount of time to wait after all servers have successfully polled to wait to return in order to -/// avoid a race condition. -/// -/// This can likely be decreased to < 100 ms safely. -const TRAEFIK_POLL_COMPLETE_GRACE: Duration = Duration::from_millis(750); - -/// Max time to wait for servers to poll their configs. -const TRAEFIK_POLL_TIMEOUT: Duration = Duration::from_secs(5); - -/// How logn to wait if no GG servers were returned from the list. This is either from: -/// - Cluster without provisioning configured -/// - Edge case where all GG servers were destroyed and waiting for new servers to come up -const TRAFEIK_NO_SERVERS_GRACE: Duration = Duration::from_millis(500); - -#[message("ds_traefik_poll")] -pub struct TraefikPoll { - /// Server ID will be `None` if: - /// - Not using provisioning (i.e. self-hosted cluster) or - /// - Older GG node that's being upgraded - pub server_id: Option, - pub latest_ds_create_ts: i64, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct WaitForTraefikPollInput { - create_ts: i64, - cluster_id: Uuid, - datacenter_id: Uuid, -} - -/// Waits for all of the GG nodes to poll the Traefik config. -/// -/// This is done by waiting for an event to be published for each of the GG server IDs with a -/// timestamp for the latest DS it's seen that's > than this DS's create ts. -#[activity(WaitForTraefikPoll)] -async fn wait_for_traefik_poll( - ctx: &ActivityCtx, - input: &WaitForTraefikPollInput, -) -> GlobalResult<()> { - // TODO: This will only work with 1 node on self-hosted. RG 2 will be out by then which fixes - // this issue. - - // Start sub first since the messages may arrive while fetching the server list - let mut sub = ctx - .subscribe::(&json!({ "datacenter_id": input.datacenter_id })) - .await?; - - // Fetch servers - let servers_res = ctx - .op(cluster::ops::server::list::Input { - filter: cluster::types::Filter { - pool_types: Some(vec![cluster::types::PoolType::Gg]), - cluster_ids: Some(vec![input.cluster_id]), - ..Default::default() - }, - include_destroyed: false, - exclude_draining: true, - exclude_no_vlan: false, - }) - .await?; - - let mut remaining_servers: HashSet = if servers_res.servers.is_empty() { - // HACK: Will wait for a single server poll if we don't have the server list. Wait for a - // static amount of time. - tokio::time::sleep(TRAFEIK_NO_SERVERS_GRACE).await; - return Ok(()); - } else { - 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", - ); - let res = tokio::time::timeout(TRAEFIK_POLL_TIMEOUT, async { - // Wait for servers to fetch their configs - loop { - let msg = sub.next().await?; - - 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); - - 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() { - return GlobalResult::Ok(()); - } - } - } - } - }) - .await; - - match res { - Ok(_) => { - tracing::debug!("received poll from all traefik servers, waiting for grace period"); - tokio::time::sleep(TRAEFIK_POLL_COMPLETE_GRACE).await; - } - Err(_) => { - tracing::warn!(missing_server_ids = ?remaining_servers, "did not receive poll from all gg servers before deadline"); - } - } - - Ok(()) -} - -join_signal!(Init { - ActorStateUpdate(pegboard::workflows::client::ActorStateUpdate), - Destroy, -}); - -join_signal!(Main { - ActorStateUpdate(pegboard::workflows::client::ActorStateUpdate), - Drain, - Upgrade, - Destroy, -}); diff --git a/packages/services/edge/monolith/standalone/workflow-worker/Cargo.toml b/packages/services/edge/monolith/standalone/workflow-worker/Cargo.toml deleted file mode 100644 index 92f8b862c3..0000000000 --- a/packages/services/edge/monolith/standalone/workflow-worker/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "edge-monolith-workflow-worker" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -chirp-workflow.workspace = true -rivet-config.workspace = true -rivet-health-checks.workspace = true -rivet-metrics.workspace = true -rivet-runtime.workspace = true - -ds.workspace = true -pegboard.workspace = true diff --git a/packages/services/edge/monolith/standalone/workflow-worker/src/lib.rs b/packages/services/edge/monolith/standalone/workflow-worker/src/lib.rs deleted file mode 100644 index 4d79e35a7f..0000000000 --- a/packages/services/edge/monolith/standalone/workflow-worker/src/lib.rs +++ /dev/null @@ -1,23 +0,0 @@ -use chirp_workflow::prelude::*; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - run_from_env(config, pools).await?; - - Ok(()) -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let reg = ds::registry()? - .merge(pegboard::registry()?)?; - - let db = db::DatabaseFdbSqliteNats::from_pools(pools.clone())?; - let worker = Worker::new(reg.handle(), db); - - // Start worker - worker.wake_start(config, pools).await?; - bail!("worker exited unexpectedly"); -} diff --git a/packages/services/edge/pegboard/Cargo.toml b/packages/services/edge/pegboard/Cargo.toml deleted file mode 100644 index e97f920046..0000000000 --- a/packages/services/edge/pegboard/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "edge-pegboard" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[features] -default = ["workflows"] -workflows = ["chirp"] -chirp = ["chirp-workflow", "sqlx", "nix", "server-spec"] - -[dependencies] -chirp-workflow = { workspace = true, optional = true } -lazy_static = "1.4" -nix = { version = "0.27", default-features = false, features = ["user", "signal"], optional = true } -rivet-config.workspace = true -rivet-metrics.workspace = true -schemars = { version = "0.8.21", features = ["url", "uuid1"] } -serde = { version = "1.0.198", features = ["derive"] } -serde_json = "1.0.132" -strum = { version = "0.24", features = ["derive"] } -thiserror = "1.0" -util.workspace = true -uuid = "1.11.0" - -pegboard.workspace = true -server-spec = { workspace = true, optional = true } - -[dependencies.sqlx] -optional = true -workspace = true -features = [ "json", "ipnetwork" ] diff --git a/packages/services/edge/pegboard/src/lib.rs b/packages/services/edge/pegboard/src/lib.rs deleted file mode 100644 index 142604d7a1..0000000000 --- a/packages/services/edge/pegboard/src/lib.rs +++ /dev/null @@ -1,16 +0,0 @@ -#[cfg(feature = "chirp")] -use chirp_workflow::prelude::*; - -#[cfg(feature = "workflows")] -pub mod workflows; - -#[cfg(feature = "workflows")] -pub fn registry() -> WorkflowResult { - use workflows::*; - - let mut registry = Registry::new(); - registry.register_workflow::()?; - registry.register_workflow::()?; - - Ok(registry) -} diff --git a/packages/services/edge/pegboard/src/workflows/actor/migrations.rs b/packages/services/edge/pegboard/src/workflows/actor/migrations.rs deleted file mode 100644 index b39a2cad04..0000000000 --- a/packages/services/edge/pegboard/src/workflows/actor/migrations.rs +++ /dev/null @@ -1,26 +0,0 @@ -use chirp_workflow::prelude::*; - -use super::Input; - -pub fn run(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - ctx.activity(MigrateInitInput {}).await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct MigrateInitInput {} - -#[activity(MigrateInit)] -async fn migrate_init(ctx: &ActivityCtx, &MigrateInitInput) -> GlobalResult<()> { - sql_execute!( - [ctx] - " - CREATE TABLE test ( - - ) - ", - ) - .await - .map_err(Into::into) -} diff --git a/packages/services/edge/pegboard/src/workflows/actor/mod.rs b/packages/services/edge/pegboard/src/workflows/actor/mod.rs deleted file mode 100644 index 6a7c1131e0..0000000000 --- a/packages/services/edge/pegboard/src/workflows/actor/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -use chirp_workflow::prelude::*; - -#[derive(Debug, Serialize, Deserialize)] -pub struct Input { - pub actor_id: Uuid, -} - -#[workflow] -pub async fn pegboard_actor(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - Ok(()) -} diff --git a/packages/services/edge/pegboard/src/workflows/client/migrations.rs b/packages/services/edge/pegboard/src/workflows/client/migrations.rs deleted file mode 100644 index b39a2cad04..0000000000 --- a/packages/services/edge/pegboard/src/workflows/client/migrations.rs +++ /dev/null @@ -1,26 +0,0 @@ -use chirp_workflow::prelude::*; - -use super::Input; - -pub fn run(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - ctx.activity(MigrateInitInput {}).await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct MigrateInitInput {} - -#[activity(MigrateInit)] -async fn migrate_init(ctx: &ActivityCtx, &MigrateInitInput) -> GlobalResult<()> { - sql_execute!( - [ctx] - " - CREATE TABLE test ( - - ) - ", - ) - .await - .map_err(Into::into) -} diff --git a/packages/services/edge/pegboard/src/workflows/client/mod.rs b/packages/services/edge/pegboard/src/workflows/client/mod.rs deleted file mode 100644 index ebaf2f2c78..0000000000 --- a/packages/services/edge/pegboard/src/workflows/client/mod.rs +++ /dev/null @@ -1,612 +0,0 @@ -use std::convert::TryInto; - -use chirp_workflow::prelude::*; -use futures_util::FutureExt; -use nix::sys::signal::Signal; -use pegboard::{metrics, protocol, client_config, system_info}; - -mod migrations; - -#[derive(Debug, Serialize, Deserialize)] -pub struct Input { - pub client_id: Uuid, -} - -#[workflow] -pub async fn pegboard_client(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - migrations::run(ctx, input).await?; - - ctx.repeat(|ctx| { - let client_id = input.client_id; - - async move { - match ctx.listen::
().await? { - Main::Forward(sig) => { - match sig { - protocol::ToServer::Init { - last_command_idx, - config, - system, - } => { - let init_data = ctx - .activity(ProcessInitInput { - client_id, - config, - system, - last_command_idx, - }) - .await?; - - // Send init packet - ctx.msg(ToWs { - client_id, - inner: protocol::ToClient::Init { - last_event_idx: init_data.last_event_idx, - }, - }) - .send() - .await?; - - // Send missed commands - if !init_data.missed_commands.is_empty() { - ctx.msg(ToWs { - client_id, - inner: protocol::ToClient::Commands(init_data.missed_commands), - }) - .send() - .await?; - } - } - // We assume events are in order by index - protocol::ToServer::Events(events) => { - // Write to db - ctx.activity(InsertEventsInput { - client_id, - events: events.clone(), - }).await?; - - // NOTE: This should not be parallelized because signals should be sent in order - // Forward to actor workflows - for event in events { - #[allow(irrefutable_let_patterns)] - if let protocol::Event::ActorStateUpdate { actor_id, state } = - event.inner.deserialize()? - { - ctx.signal(ActorStateUpdate { state }) - .to_workflow::() - .tag("actor_id", actor_id) - .send() - .await?; - } - } - } - } - } - Main::Command(command) => { - handle_commands(ctx, client_id, vec![command]).await?; - } - Main::Drain(_) => { - ctx.activity(SetDrainInput { - client_id, - drain: true, - }) - .await?; - } - Main::Undrain(_) => { - ctx.activity(SetDrainInput { - client_id, - drain: false, - }) - .await?; - } - Main::Destroy(_) => return Ok(Loop::Break(())), - } - - Ok(Loop::Continue) - } - .boxed() - }) - .await?; - - let actor_ids = ctx - .activity(FetchAllActorsInput { - client_id: input.client_id, - }) - .await?; - - // Evict all actors. - // Note that even if this client is unresponsive and does not process the signal commands, the - // pegboard-gc service will manually set the actors as closed after 30 seconds. - handle_commands( - ctx, - input.client_id, - actor_ids - .into_iter() - .map(|actor_id| protocol::Command::SignalActor { - actor_id, - signal: Signal::SIGKILL as i32, - persist_storage: false, - ignore_future_state: true, - }) - .collect(), - ) - .await?; - - // Close websocket connection - ctx.msg(CloseWs { - client_id: input.client_id, - }) - .send() - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct ProcessInitInput { - client_id: Uuid, - last_command_idx: i64, - config: client_config::ClientConfig, - system: system_info::SystemInfo, -} - -#[derive(Debug, Serialize, Deserialize)] -struct ProcessInitOutput { - last_event_idx: i64, - missed_commands: Vec, -} - -#[activity(ProcessInit)] -async fn process_init( - ctx: &ActivityCtx, - input: &ProcessInitInput, -) -> GlobalResult { - let ((last_event_idx,), commands) = tokio::try_join!( - sql_fetch_one!( - [ctx, (i64,)] - " - UPDATE db_pegboard.clients - SET config = $2, system_info = $3 - WHERE client_id = $1 - RETURNING last_event_idx - ", - input.client_id, - serde_json::to_value(&input.config)?, - serde_json::to_value(&input.system)?, - ), - sql_fetch_all!( - [ctx, (i64, String)] - " - SELECT index, payload::TEXT - FROM db_pegboard.client_commands - WHERE client_id = $1 AND index > $2 - ORDER BY index ASC - ", - input.client_id, - input.last_command_idx, - ), - )?; - - Ok(ProcessInitOutput { - last_event_idx, - missed_commands: commands - .into_iter() - .map(|(index, payload)| { - Ok(protocol::CommandWrapper { - index, - inner: protocol::Raw::from_string(payload)?, - }) - }) - .collect::>()?, - }) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct InsertEventsInput { - client_id: Uuid, - events: Vec, -} - -#[activity(InsertEvents)] -async fn insert_events(ctx: &ActivityCtx, input: &InsertEventsInput) -> GlobalResult<()> { - let last_event_idx = if let Some(last_event_wrapper) = input.events.last() { - last_event_wrapper.index - } else { - return Ok(()); - }; - - // TODO(RVT-4450): `last_event_idx < $2` and `ON CONFLICT DO NOTHING` is a workaround - let inserted_rows = sql_fetch_all!( - [ctx, (i64,)] - " - WITH - update_last_event_idx AS ( - UPDATE db_pegboard.clients - SET last_event_idx = $2 - WHERE - client_id = $1 AND - last_event_idx < $2 - RETURNING 1 - ), - insert_events AS ( - INSERT INTO db_pegboard.client_events (client_id, index, payload, ack_ts) - SELECT $1, index, payload, $5 - FROM UNNEST($3, $4) AS e(index, payload) - ON CONFLICT DO NOTHING - RETURNING index - ) - SELECT index FROM insert_events - ", - input.client_id, - last_event_idx, - input.events.iter().map(|wrapper| wrapper.index).collect::>(), - input.events.iter().map(|wrapper| &wrapper.inner).collect::>(), - util::timestamp::now(), - ) - .await?; - - for event in &input.events { - // Filter out events that were actually inserted - if inserted_rows.iter().any(|(idx,)| &event.index == idx) { - continue; - } - - metrics::CLIENT_DUPLICATE_EVENT - .with_label_values(&[&input.client_id.to_string(), &event.index.to_string()]) - .inc(); - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct UpdateActorStateInput { - updates: Vec, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct Update { - event: protocol::Raw, - ignore_future_state: Option, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct UpdateActorStateOutput { - // Deprecated - stopping_actor_ids: Option>, - /// A list of actor ids which we should not publish actor state update signals for. - #[serde(default)] - ignore_actor_ids: Vec, -} - -#[activity(UpdateActorState)] -async fn update_actor_state( - ctx: &ActivityCtx, - input: &UpdateActorStateInput, -) -> GlobalResult { - use protocol::ActorState::*; - - let mut ignore_actor_ids = Vec::new(); - - // TODO: Parallelize - for update in &input.updates { - // Update actors table with actor state updates - match update.event.deserialize()? { - protocol::Event::ActorStateUpdate { actor_id, state } => { - let (ignore_future_state,) = match state { - Starting => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET start_ts = $2 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - ) - .await? - } - Running { pid, .. } => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - running_ts = $2, - pid = $3 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - pid as i64, - ) - .await? - } - Stopping => sql_fetch_optional!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - stopping_ts = $2, - ignore_future_state = COALESCE($3, ignore_future_state) - WHERE actor_id = $1 AND stopping_ts IS NULL - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - update.ignore_future_state, - ) - .await? - .unwrap_or((true,)), - Stopped => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET stop_ts = $2 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - ) - .await? - } - Lost => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - lost_ts = $2 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - ) - .await? - } - Exited { exit_code } => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - exit_ts = $2, - exit_code = $3 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - exit_code, - ) - .await? - } - // These updates should never reach this workflow - Allocated { .. } | FailedToAllocate => bail!("invalid state for updating db"), - }; - - if ignore_future_state { - ignore_actor_ids.push(actor_id); - } - } - } - } - - Ok(UpdateActorStateOutput { - stopping_actor_ids: None, - ignore_actor_ids, - }) -} - -pub async fn handle_commands( - ctx: &mut WorkflowCtx, - client_id: Uuid, - commands: Vec, -) -> GlobalResult<()> { - if commands.is_empty() { - return Ok(()); - } - - let raw_commands = commands - .iter() - .map(protocol::Raw::new) - .collect::, _>>()?; - - // Write to db - let index = ctx - .activity(InsertCommandsInput { - client_id, - commands: raw_commands.clone(), - }) - .await?; - - // TODO: Send as a single message - for (i, raw_command) in raw_commands.into_iter().enumerate() { - let wrapped_command = protocol::CommandWrapper { - index: index + i as i64, - inner: raw_command, - }; - - // Forward signal to ws as message - ctx.msg(ToWs { - client_id, - inner: protocol::ToClient::Commands(vec![wrapped_command]), - }) - .send() - .await?; - } - - // TODO: Parallelize - // Update actor state based on commands - for command in commands { - if let protocol::Command::SignalActor { - actor_id, - signal, - ignore_future_state, - .. - } = command - { - if matches!(signal.try_into()?, Signal::SIGTERM | Signal::SIGKILL) { - let res = ctx - .activity(UpdateActorStateInput { - updates: vec![Update { - event: protocol::Raw::new(&protocol::Event::ActorStateUpdate { - actor_id, - state: protocol::ActorState::Stopping, - })?, - ignore_future_state: ignore_future_state.then_some(true), - }], - }) - .await?; - - // Publish signal if stopping_ts was not set before - if res.ignore_actor_ids.is_empty() { - ctx.signal(crate::workflows::client::ActorStateUpdate { - state: protocol::ActorState::Stopping, - }) - .tag("actor_id", actor_id) - .send() - .await?; - } - } - } - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct InsertCommandsInput { - client_id: Uuid, - commands: Vec>, -} - -#[activity(InsertCommands)] -async fn insert_commands(ctx: &ActivityCtx, input: &InsertCommandsInput) -> GlobalResult { - let (index,) = sql_fetch_one!( - [ctx, (i64,)] - " - WITH - last_command_idx(idx) AS ( - UPDATE db_pegboard.clients - SET last_command_idx = last_command_idx + array_length($2, 1) - WHERE client_id = $1 - RETURNING last_command_idx - array_length($2, 1) - ), - insert_commands AS ( - INSERT INTO db_pegboard.client_commands ( - client_id, - index, - payload, - create_ts - ) - SELECT $1, l.idx + p.index, p.payload, $3 - FROM last_command_idx AS l - CROSS JOIN UNNEST($2) WITH ORDINALITY AS p(payload, index) - RETURNING 1 - ) - SELECT idx FROM last_command_idx - ", - input.client_id, - &input.commands, - util::timestamp::now(), - ) - .await?; - - // Postgres is 1-based - Ok(index + 1) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SetDrainInput { - client_id: Uuid, - drain: bool, -} - -#[activity(SetDrain)] -async fn set_drain(ctx: &ActivityCtx, input: &SetDrainInput) -> GlobalResult<()> { - sql_execute!( - [ctx] - " - UPDATE db_pegboard.clients - SET drain_ts = $2 - WHERE client_id = $1 - ", - input.client_id, - input.drain.then(util::timestamp::now), - ) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct FetchAllActorsInput { - client_id: Uuid, -} - -#[activity(FetchAllActors)] -async fn fetch_all_actors( - ctx: &ActivityCtx, - input: &FetchAllActorsInput, -) -> GlobalResult> { - let actor_ids = sql_fetch_all!( - [ctx, (Uuid,)] - " - SELECT actor_id - FROM db_pegboard.actors - WHERE - client_id = $1 AND - stopping_ts IS NULL AND - stop_ts IS NULL AND - exit_ts IS NULL - ", - input.client_id, - ) - .await? - .into_iter() - .map(|(id,)| id) - .collect(); - - Ok(actor_ids) -} - -#[message("pegboard_client_to_ws")] -pub struct ToWs { - pub client_id: Uuid, - pub inner: protocol::ToClient, -} - -#[message("pegboard_client_close_ws")] -pub struct CloseWs { - pub client_id: Uuid, -} - -#[signal("pegboard_actor_state_update")] -pub struct ActorStateUpdate { - pub state: protocol::ActorState, -} - -#[signal("pegboard_client_drain")] -pub struct Drain {} - -#[signal("pegboard_client_undrain")] -pub struct Undrain {} - -#[signal("pegboard_client_destroy")] -pub struct Destroy {} - -join_signal!(Main { - Command(protocol::Command), - // Forwarded from the ws to this workflow - Forward(protocol::ToServer), - Drain, - Undrain, - Destroy, -}); diff --git a/packages/services/edge/pegboard/src/workflows/mod.rs b/packages/services/edge/pegboard/src/workflows/mod.rs deleted file mode 100644 index 90edffbda1..0000000000 --- a/packages/services/edge/pegboard/src/workflows/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod client; -pub mod actor; diff --git a/packages/services/linode/standalone/gc/src/lib.rs b/packages/services/linode/standalone/gc/src/lib.rs deleted file mode 100644 index 27fb5fecf8..0000000000 --- a/packages/services/linode/standalone/gc/src/lib.rs +++ /dev/null @@ -1,169 +0,0 @@ -use std::convert::TryInto; - -use chirp_workflow::prelude::*; -use cluster::types::Provider; -use futures_util::{StreamExt, TryStreamExt}; -use linode::util::{api, client}; -use reqwest::header; -use serde_json::json; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let mut interval = tokio::time::interval(std::time::Duration::from_secs(15)); - loop { - interval.tick().await; - - run_from_env(config.clone(), pools.clone()).await?; - } -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("linode-gc"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "linode-gc", - ) - .await?; - - let secret = ctx.config().server()?.linode()?.api_token.read(); - let dc_rows = sql_fetch_all!( - [ctx, (i64, String,)] - " - SELECT DISTINCT provider, provider_api_token - FROM db_cluster.datacenters - WHERE provider_api_token IS NOT NULL - ", - ) - .await? - .into_iter() - .chain(std::iter::once((Provider::Linode as i64, secret.clone()))); - - let filter = json!({ - "status": "available", - "type": "manual" - }); - let mut headers = header::HeaderMap::new(); - headers.insert( - "X-Filter", - header::HeaderValue::from_str(&serde_json::to_string(&filter)?)?, - ); - - for (provider, api_token) in dc_rows { - let provider = unwrap!(Provider::from_repr(provider.try_into()?)); - - match provider { - Provider::Manual => { - // Noop - } - Provider::Linode => { - run_for_linode_account(ctx.clone(), api_token.clone(), &headers).await? - } - } - } - - Ok(()) -} - -async fn run_for_linode_account( - ctx: StandaloneCtx, - api_token: String, - headers: &header::HeaderMap, -) -> GlobalResult<()> { - // Build HTTP client - let client = client::Client::new_with_headers(api_token, headers.clone()).await?; - - let complete_images = api::list_custom_images(ctx.config(), &client).await?; - - if complete_images.len() == linode::util::api::CUSTOM_IMAGE_LIST_SIZE { - // We don't need to paginate since we'll never have more than - // `number of regions * number of pools * 2` images which is not more than 500 (x2 is for the old + - // new images) - tracing::warn!("page limit reached, new images may not be returned"); - } - - delete_expired_images(ctx.clone(), complete_images.clone()).await?; - - // Get image ids - let image_ids = complete_images - .into_iter() - .map(|x| x.id) - .collect::>(); - - // Set images as complete - let incomplete_images = sql_fetch_all!( - [ctx, (String,)] - " - UPDATE db_linode.server_images - SET complete_ts = $2 - WHERE - image_id = ANY($1) AND - complete_ts IS NULL - RETURNING image_id - ", - image_ids, - util::timestamp::now(), - ) - .await?; - - futures_util::stream::iter(incomplete_images.into_iter()) - .map(|(image_id,)| { - let ctx = ctx.clone(); - - async move { - ctx.signal(linode::workflows::image::CreateComplete { - image_id: image_id.clone(), - }) - .tag("image_id", image_id) - .send() - .await - } - }) - .buffer_unordered(8) - .try_collect::>() - .await?; - - Ok(()) -} - -async fn delete_expired_images( - ctx: StandaloneCtx, - complete_images: Vec, -) -> GlobalResult<()> { - // Prebake images have an expiration because of their server token. We add 2 days of padding here for - // safety - let expiration = chrono::Utc::now() - - chrono::Duration::milliseconds(cluster::util::SERVER_TOKEN_TTL) - + chrono::Duration::days(2); - - let expired_images = complete_images - .iter() - .filter(|img| img.created < expiration); - - let expired_images_count = expired_images.clone().count(); - if expired_images_count != 0 { - tracing::info!(count=?expired_images_count, "deleting expired images"); - } - - futures_util::stream::iter(expired_images.cloned().collect::>()) - .map(|img| { - let ctx = ctx.clone(); - - async move { - ctx.signal(linode::workflows::image::Destroy {}) - .tag("image_id", img.id) - .send() - .await - } - }) - .buffer_unordered(8) - .try_collect::>() - .await?; - - Ok(()) -} diff --git a/packages/services/monolith/standalone/worker/Cargo.toml b/packages/services/monolith/standalone/worker/Cargo.toml deleted file mode 100644 index 12be7403b4..0000000000 --- a/packages/services/monolith/standalone/worker/Cargo.toml +++ /dev/null @@ -1,35 +0,0 @@ -[package] -name = "monolith-worker" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -chirp-client.workspace = true -rivet-connection.workspace = true -rivet-health-checks.workspace = true -rivet-metrics.workspace = true -rivet-operation.workspace = true -rivet-runtime.workspace = true -tokio = { version = "1.40", features = ["full"] } -tracing = "0.1" -tracing-subscriber = { version = "0.3", default-features = false, features = [ - "fmt", - "json", - "ansi", -] } - -cdn-worker.workspace = true -cf-custom-hostname-worker.workspace = true -cloud-worker.workspace = true -ds.workspace = true -external-worker.workspace = true -job-log-worker.workspace = true -job-run.workspace = true -mm-worker.workspace = true -team-invite-worker.workspace = true -team-worker.workspace = true -upload-worker.workspace = true -user-worker.workspace = true -rivet-config.workspace = true diff --git a/packages/services/monolith/standalone/workflow-worker/Cargo.toml b/packages/services/monolith/standalone/workflow-worker/Cargo.toml deleted file mode 100644 index d57df990ad..0000000000 --- a/packages/services/monolith/standalone/workflow-worker/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "monolith-workflow-worker" -version.workspace = true -authors.workspace = true -license.workspace = true -edition.workspace = true - -[dependencies] -chirp-workflow.workspace = true -rivet-health-checks.workspace = true -rivet-metrics.workspace = true -rivet-runtime.workspace = true - -cluster.workspace = true -ds.workspace = true -job-run.workspace = true -linode.workspace = true -pegboard.workspace = true -rivet-config.workspace = true diff --git a/packages/services/monolith/standalone/workflow-worker/src/lib.rs b/packages/services/monolith/standalone/workflow-worker/src/lib.rs deleted file mode 100644 index 0f618903e1..0000000000 --- a/packages/services/monolith/standalone/workflow-worker/src/lib.rs +++ /dev/null @@ -1,26 +0,0 @@ -use chirp_workflow::prelude::*; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - run_from_env(config, pools).await?; - - Ok(()) -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let reg = cluster::registry()? - .merge(linode::registry()?)? - .merge(ds::registry()?)? - .merge(job_run::registry()?)? - .merge(pegboard::registry()?)?; - - let db = db::DatabaseCrdbNats::from_pools(pools.clone())?; - let worker = Worker::new(reg.handle(), db); - - // Start worker - worker.wake_start(config, pools).await?; - bail!("worker exited unexpectedly"); -} diff --git a/packages/services/nomad/standalone/monitor/src/lib.rs b/packages/services/nomad/standalone/monitor/src/lib.rs deleted file mode 100644 index 0f636dc31c..0000000000 --- a/packages/services/nomad/standalone/monitor/src/lib.rs +++ /dev/null @@ -1,123 +0,0 @@ -use chirp_workflow::prelude::*; - -mod monitors; -use monitors::*; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - run_from_env(config, pools).await -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("nomad-monitor"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let redis_job = pools.redis("persistent")?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "nomad-monitor", - ) - .await?; - - // Start nomad event monitor - let redis_index_key = "nomad:monitor_index"; - let configuration = nomad_util::new_build_config(ctx.config())?; - - nomad_util::monitor::Monitor::run( - configuration, - redis_job, - redis_index_key, - &["Allocation", "Evaluation", "Node"], - |event| { - let ctx = ctx.clone(); - async move { - match handle(ctx.clone(), event).await { - Ok(_) => {} - Err(err) => { - tracing::error!(?err, "error handling nomad event"); - } - } - } - }, - ) - .await?; - - Ok(()) -} - -async fn handle(ctx: StandaloneCtx, event: nomad_util::monitor::NomadEvent) -> GlobalResult<()> { - // TODO: Figure out how to abstract the branches - if let Some(payload) = event.decode::("Allocation", "PlanResult")? { - // let client = shared_client.wrap_new("nomad-alloc-plan-monitor"); - let spawn_res = tokio::task::Builder::new() - .name("nomad_alloc_plan_monitor::handle_event") - .spawn(async move { - match alloc_plan::handle(ctx, &payload, event.payload.to_string()).await { - Ok(_) => {} - Err(err) => { - tracing::error!(?err, ?payload, "error handling event"); - } - } - }); - if let Err(err) = spawn_res { - tracing::error!(?err, "failed to spawn handle_event task"); - } - } else if let Some(payload) = - event.decode::("Allocation", "AllocationUpdated")? - { - // let client = shared_client.wrap_new("nomad-alloc-updated-monitor"); - let spawn_res = tokio::task::Builder::new() - .name("nomad_alloc_update_monitor::handle_event") - .spawn(async move { - match alloc_update::handle(ctx, &payload, event.payload.to_string()).await { - Ok(_) => {} - Err(err) => { - tracing::error!(?err, ?payload, "error handling event"); - } - } - }); - if let Err(err) = spawn_res { - tracing::error!(?err, "failed to spawn handle_event task"); - } - } else if let Some(payload) = - event.decode::("Evaluation", "EvaluationUpdated")? - { - // let client = shared_client.wrap_new("nomad-eval-update-monitor"); - let spawn_res = tokio::task::Builder::new() - .name("nomad_eval_update_monitor::handle_event") - .spawn(async move { - match eval_update::handle(ctx, &payload, event.payload.to_string()).await { - Ok(_) => {} - Err(err) => { - tracing::error!(?err, ?payload, "error handling event"); - } - } - }); - if let Err(err) = spawn_res { - tracing::error!(?err, "failed to spawn handle_event task"); - } - } else if let Some(payload) = - event.decode::("Node", "NodeRegistration")? - { - // let client = shared_client.wrap_new("nomad-node-registration-monitor"); - let spawn_res = tokio::task::Builder::new() - .name("nomad_node_registration_monitor::handle") - .spawn(async move { - match node_registration::handle(ctx, &payload).await { - Ok(_) => {} - Err(err) => { - tracing::error!(?err, ?payload, "error handling event"); - } - } - }); - if let Err(err) = spawn_res { - tracing::error!(?err, "failed to spawn handle_event task"); - } - } - - Ok(()) -} diff --git a/packages/services/pegboard/src/lib.rs b/packages/services/pegboard/src/lib.rs deleted file mode 100644 index 9de915810f..0000000000 --- a/packages/services/pegboard/src/lib.rs +++ /dev/null @@ -1,22 +0,0 @@ -#[cfg(feature = "chirp")] -use chirp_workflow::prelude::*; - -pub mod client_config; -pub mod metrics; -#[cfg(feature = "ops")] -pub mod ops; -pub mod protocol; -pub mod system_info; -#[cfg(feature = "workflows")] -pub mod workflows; - -#[cfg(feature = "workflows")] -pub fn registry() -> WorkflowResult { - use workflows::*; - - let mut registry = Registry::new(); - registry.register_workflow::()?; - registry.register_workflow::()?; - - Ok(registry) -} diff --git a/packages/services/pegboard/src/ops/client/usage_get.rs b/packages/services/pegboard/src/ops/client/usage_get.rs deleted file mode 100644 index d827fcb90f..0000000000 --- a/packages/services/pegboard/src/ops/client/usage_get.rs +++ /dev/null @@ -1,76 +0,0 @@ -use std::convert::TryInto; - -use chirp_workflow::prelude::*; - -#[derive(sqlx::FromRow)] -struct ClientRow { - client_id: Uuid, - total_cpu: i64, - total_memory: i64, -} - -#[derive(Debug)] -pub struct Input { - pub client_ids: Vec, -} - -#[derive(Debug)] -pub struct Output { - pub clients: Vec, -} - -#[derive(Debug)] -pub struct Client { - pub client_id: Uuid, - pub usage: Stats, -} - -#[derive(Debug)] -pub struct Stats { - /// Mhz - pub cpu: u32, - /// MiB - pub memory: u32, - /// MiB - pub disk: u32, -} - -#[operation] -pub async fn pegboard_client_usage_get(ctx: &OperationCtx, input: &Input) -> GlobalResult { - let clients = sql_fetch_all!( - [ctx, ClientRow] - " - SELECT - c.client_id, - -- Millicores to MHz - COALESCE(SUM_INT((a.config->'resources'->>'cpu')::INT), 0) * 1999 // 1000 AS total_cpu, - -- Bytes to MiB - COALESCE(SUM_INT((a.config->'resources'->>'memory')::INT // 1024 // 1024), 0) AS total_memory - FROM db_pegboard.clients AS c - LEFT JOIN db_pegboard.actors AS a - ON - c.client_id = a.client_id AND - a.stop_ts IS NULL AND - a.exit_ts IS NULL - WHERE - c.client_id = ANY($1) - GROUP BY c.client_id - ", - &input.client_ids, - ) - .await? - .into_iter() - .map(|client| { - Ok(Client { - client_id: client.client_id, - usage: Stats { - cpu: client.total_cpu.try_into()?, - memory: client.total_memory.try_into()?, - disk: 0, // TODO: - }, - }) - }) - .collect::>()?; - - Ok(Output { clients }) -} diff --git a/packages/services/pegboard/src/workflows/client.rs b/packages/services/pegboard/src/workflows/client.rs deleted file mode 100644 index 5f6eaa8a25..0000000000 --- a/packages/services/pegboard/src/workflows/client.rs +++ /dev/null @@ -1,650 +0,0 @@ -use std::convert::TryInto; - -use chirp_workflow::prelude::*; -use futures_util::FutureExt; -use nix::sys::signal::Signal; - -use crate::{metrics, protocol, workflows::PrewarmImage}; - -#[derive(Debug, Serialize, Deserialize)] -pub struct Input { - pub client_id: Uuid, -} - -#[workflow] -pub async fn pegboard_client(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - // Whatever started this client should be listening for this - ctx.signal(Registered {}) - .tag("client_id", input.client_id) - .send() - .await?; - - ctx.repeat(|ctx| { - let client_id = input.client_id; - - async move { - match ctx.listen::
().await? { - Main::Forward(sig) => { - match sig { - protocol::ToServer::Init { - last_command_idx, - config, - system, - } => { - let init_data = ctx - .activity(ProcessInitInput { - client_id, - config, - system, - last_command_idx, - }) - .await?; - - // Send init packet - ctx.msg(ToWs { - client_id, - inner: protocol::ToClient::Init { - last_event_idx: init_data.last_event_idx, - }, - }) - .send() - .await?; - - // Send missed commands - if !init_data.missed_commands.is_empty() { - ctx.msg(ToWs { - client_id, - inner: protocol::ToClient::Commands(init_data.missed_commands), - }) - .send() - .await?; - } - } - // We assume events are in order by index - protocol::ToServer::Events(events) => { - // Write to db - let (_, update_actor_state_res) = ctx - .join(( - activity(InsertEventsInput { - client_id, - events: events.clone(), - }), - activity(UpdateActorStateInput { - updates: events - .iter() - .map(|x| Update { - event: x.inner.clone(), - ignore_future_state: None, - }) - .collect(), - }), - )) - .await?; - - // NOTE: This should not be parallelized because signals should be sent in order - for event in events { - #[allow(irrefutable_let_patterns)] - if let protocol::Event::ActorStateUpdate { actor_id, state } = - event.inner.deserialize()? - { - // Skip ignored actor ids - if update_actor_state_res - .ignore_actor_ids - .iter() - .any(|id| &actor_id == id) - { - continue; - } - - ctx.signal(ActorStateUpdate { state }) - .tag("actor_id", actor_id) - .send() - .await?; - } - } - } - } - } - Main::Command(command) => { - handle_commands(ctx, client_id, vec![command]).await?; - } - Main::PrewarmImage(sig) => { - ctx.msg(ToWs { - client_id, - inner: protocol::ToClient::PrewarmImage { - image_id: sig.image_id, - image_artifact_url_stub: sig.image_artifact_url_stub, - }, - }) - .send() - .await?; - } - Main::Drain(_) => { - ctx.activity(SetDrainInput { - client_id, - drain: true, - }) - .await?; - } - Main::Undrain(_) => { - ctx.activity(SetDrainInput { - client_id, - drain: false, - }) - .await?; - } - Main::Destroy(_) => return Ok(Loop::Break(())), - } - - Ok(Loop::Continue) - } - .boxed() - }) - .await?; - - let actor_ids = ctx - .activity(FetchAllActorsInput { - client_id: input.client_id, - }) - .await?; - - // Evict all actors. - // Note that even if this client is unresponsive and does not process the signal commands, the - // pegboard-gc service will manually set the actors as closed after 30 seconds. - handle_commands( - ctx, - input.client_id, - actor_ids - .into_iter() - .map(|actor_id| protocol::Command::SignalActor { - actor_id, - signal: Signal::SIGKILL as i32, - persist_storage: false, - ignore_future_state: true, - }) - .collect(), - ) - .await?; - - // Close websocket connection - ctx.msg(CloseWs { - client_id: input.client_id, - }) - .send() - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct ProcessInitInput { - client_id: Uuid, - last_command_idx: i64, - config: crate::client_config::ClientConfig, - system: crate::system_info::SystemInfo, -} - -#[derive(Debug, Serialize, Deserialize)] -struct ProcessInitOutput { - last_event_idx: i64, - missed_commands: Vec, -} - -#[activity(ProcessInit)] -async fn process_init( - ctx: &ActivityCtx, - input: &ProcessInitInput, -) -> GlobalResult { - let ((last_event_idx,), commands) = tokio::try_join!( - sql_fetch_one!( - [ctx, (i64,)] - " - UPDATE db_pegboard.clients - SET config = $2, system_info = $3 - WHERE client_id = $1 - RETURNING last_event_idx - ", - input.client_id, - serde_json::to_value(&input.config)?, - serde_json::to_value(&input.system)?, - ), - sql_fetch_all!( - [ctx, (i64, String)] - " - SELECT index, payload::TEXT - FROM db_pegboard.client_commands - WHERE client_id = $1 AND index > $2 - ORDER BY index ASC - ", - input.client_id, - input.last_command_idx, - ), - )?; - - Ok(ProcessInitOutput { - last_event_idx, - missed_commands: commands - .into_iter() - .map(|(index, payload)| { - Ok(protocol::CommandWrapper { - index, - inner: protocol::Raw::from_string(payload)?, - }) - }) - .collect::>()?, - }) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct InsertEventsInput { - client_id: Uuid, - events: Vec, -} - -#[activity(InsertEvents)] -async fn insert_events(ctx: &ActivityCtx, input: &InsertEventsInput) -> GlobalResult<()> { - let last_event_idx = if let Some(last_event_wrapper) = input.events.last() { - last_event_wrapper.index - } else { - return Ok(()); - }; - - // TODO(RVT-4450): `last_event_idx < $2` and `ON CONFLICT DO NOTHING` is a workaround - let inserted_rows = sql_fetch_all!( - [ctx, (i64,)] - " - WITH - update_last_event_idx AS ( - UPDATE db_pegboard.clients - SET last_event_idx = $2 - WHERE - client_id = $1 AND - last_event_idx < $2 - RETURNING 1 - ), - insert_events AS ( - INSERT INTO db_pegboard.client_events (client_id, index, payload, ack_ts) - SELECT $1, index, payload, $5 - FROM UNNEST($3, $4) AS e(index, payload) - ON CONFLICT DO NOTHING - RETURNING index - ) - SELECT index FROM insert_events - ", - input.client_id, - last_event_idx, - input.events.iter().map(|wrapper| wrapper.index).collect::>(), - input.events.iter().map(|wrapper| &wrapper.inner).collect::>(), - util::timestamp::now(), - ) - .await?; - - for event in &input.events { - // Filter out events that were actually inserted - if inserted_rows.iter().any(|(idx,)| &event.index == idx) { - continue; - } - - metrics::CLIENT_DUPLICATE_EVENT - .with_label_values(&[&input.client_id.to_string(), &event.index.to_string()]) - .inc(); - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct UpdateActorStateInput { - updates: Vec, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct Update { - event: protocol::Raw, - ignore_future_state: Option, -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct UpdateActorStateOutput { - // Deprecated - stopping_actor_ids: Option>, - /// A list of actor ids which we should not publish actor state update signals for. - #[serde(default)] - ignore_actor_ids: Vec, -} - -#[activity(UpdateActorState)] -async fn update_actor_state( - ctx: &ActivityCtx, - input: &UpdateActorStateInput, -) -> GlobalResult { - use protocol::ActorState::*; - - let mut ignore_actor_ids = Vec::new(); - - // TODO: Parallelize - for update in &input.updates { - // Update actors table with actor state updates - match update.event.deserialize()? { - protocol::Event::ActorStateUpdate { actor_id, state } => { - let (ignore_future_state,) = match state { - Starting => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET start_ts = $2 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - ) - .await? - } - Running { pid, .. } => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - running_ts = $2, - pid = $3 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - pid as i64, - ) - .await? - } - Stopping => sql_fetch_optional!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - stopping_ts = $2, - ignore_future_state = COALESCE($3, ignore_future_state) - WHERE actor_id = $1 AND stopping_ts IS NULL - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - update.ignore_future_state, - ) - .await? - .unwrap_or((true,)), - Stopped => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET stop_ts = $2 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - ) - .await? - } - Lost => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - lost_ts = $2 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - ) - .await? - } - Exited { exit_code } => { - sql_fetch_one!( - [ctx, (bool,)] - " - UPDATE db_pegboard.actors - SET - exit_ts = $2, - exit_code = $3 - WHERE actor_id = $1 - RETURNING ignore_future_state - ", - actor_id, - util::timestamp::now(), - exit_code, - ) - .await? - } - // These updates should never reach this workflow - Allocated { .. } | FailedToAllocate => bail!("invalid state for updating db"), - }; - - if ignore_future_state { - ignore_actor_ids.push(actor_id); - } - } - } - } - - Ok(UpdateActorStateOutput { - stopping_actor_ids: None, - ignore_actor_ids, - }) -} - -pub async fn handle_commands( - ctx: &mut WorkflowCtx, - client_id: Uuid, - commands: Vec, -) -> GlobalResult<()> { - if commands.is_empty() { - return Ok(()); - } - - let raw_commands = commands - .iter() - .map(protocol::Raw::new) - .collect::, _>>()?; - - // Write to db - let index = ctx - .activity(InsertCommandsInput { - client_id, - commands: raw_commands.clone(), - }) - .await?; - - // TODO: Send as a single message - for (i, raw_command) in raw_commands.into_iter().enumerate() { - let wrapped_command = protocol::CommandWrapper { - index: index + i as i64, - inner: raw_command, - }; - - // Forward signal to ws as message - ctx.msg(ToWs { - client_id, - inner: protocol::ToClient::Commands(vec![wrapped_command]), - }) - .send() - .await?; - } - - // TODO: Parallelize - // Update actor state based on commands - for command in commands { - if let protocol::Command::SignalActor { - actor_id, - signal, - ignore_future_state, - .. - } = command - { - if matches!(signal.try_into()?, Signal::SIGTERM | Signal::SIGKILL) { - let res = ctx - .activity(UpdateActorStateInput { - updates: vec![Update { - event: protocol::Raw::new(&protocol::Event::ActorStateUpdate { - actor_id, - state: protocol::ActorState::Stopping, - })?, - ignore_future_state: ignore_future_state.then_some(true), - }], - }) - .await?; - - // Publish signal if stopping_ts was not set before - if res.ignore_actor_ids.is_empty() { - ctx.signal(crate::workflows::client::ActorStateUpdate { - state: protocol::ActorState::Stopping, - }) - .tag("actor_id", actor_id) - .send() - .await?; - } - } - } - } - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct InsertCommandsInput { - client_id: Uuid, - commands: Vec>, -} - -#[activity(InsertCommands)] -async fn insert_commands(ctx: &ActivityCtx, input: &InsertCommandsInput) -> GlobalResult { - let (index,) = sql_fetch_one!( - [ctx, (i64,)] - " - WITH - last_command_idx(idx) AS ( - UPDATE db_pegboard.clients - SET last_command_idx = last_command_idx + array_length($2, 1) - WHERE client_id = $1 - RETURNING last_command_idx - array_length($2, 1) - ), - insert_commands AS ( - INSERT INTO db_pegboard.client_commands ( - client_id, - index, - payload, - create_ts - ) - SELECT $1, l.idx + p.index, p.payload, $3 - FROM last_command_idx AS l - CROSS JOIN UNNEST($2) WITH ORDINALITY AS p(payload, index) - RETURNING 1 - ) - SELECT idx FROM last_command_idx - ", - input.client_id, - &input.commands, - util::timestamp::now(), - ) - .await?; - - // Postgres is 1-based - Ok(index + 1) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct SetDrainInput { - client_id: Uuid, - drain: bool, -} - -#[activity(SetDrain)] -async fn set_drain(ctx: &ActivityCtx, input: &SetDrainInput) -> GlobalResult<()> { - sql_execute!( - [ctx] - " - UPDATE db_pegboard.clients - SET drain_ts = $2 - WHERE client_id = $1 - ", - input.client_id, - input.drain.then(util::timestamp::now), - ) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct FetchAllActorsInput { - client_id: Uuid, -} - -#[activity(FetchAllActors)] -async fn fetch_all_actors( - ctx: &ActivityCtx, - input: &FetchAllActorsInput, -) -> GlobalResult> { - let actor_ids = sql_fetch_all!( - [ctx, (Uuid,)] - " - SELECT actor_id - FROM db_pegboard.actors - WHERE - client_id = $1 AND - stopping_ts IS NULL AND - stop_ts IS NULL AND - exit_ts IS NULL - ", - input.client_id, - ) - .await? - .into_iter() - .map(|(id,)| id) - .collect(); - - Ok(actor_ids) -} - -#[signal("pegboard_client_registered")] -pub struct Registered {} - -#[message("pegboard_client_to_ws")] -pub struct ToWs { - pub client_id: Uuid, - pub inner: protocol::ToClient, -} - -#[message("pegboard_client_close_ws")] -pub struct CloseWs { - pub client_id: Uuid, -} - -#[signal("pegboard_actor_state_update")] -pub struct ActorStateUpdate { - pub state: protocol::ActorState, -} - -#[signal("pegboard_client_drain")] -pub struct Drain {} - -#[signal("pegboard_client_undrain")] -pub struct Undrain {} - -#[signal("pegboard_client_destroy")] -pub struct Destroy {} - -join_signal!(Main { - Command(protocol::Command), - // Forwarded from the ws to this workflow - Forward(protocol::ToServer), - PrewarmImage, - Drain, - Undrain, - Destroy, -}); diff --git a/packages/services/pegboard/src/workflows/datacenter.rs b/packages/services/pegboard/src/workflows/datacenter.rs deleted file mode 100644 index a06eaa287a..0000000000 --- a/packages/services/pegboard/src/workflows/datacenter.rs +++ /dev/null @@ -1,284 +0,0 @@ -use chirp_workflow::prelude::*; -use futures_util::FutureExt; - -use crate::{protocol, workflows::PrewarmImage}; - -/// How long after last ping before not considering a client for allocation. -const CLIENT_ELIGIBLE_THRESHOLD_MS: i64 = util::duration::seconds(10); - -#[derive(Debug, Serialize, Deserialize)] -pub struct Input { - pub datacenter_id: Uuid, -} - -#[workflow] -pub async fn pegboard_datacenter(ctx: &mut WorkflowCtx, input: &Input) -> GlobalResult<()> { - ctx.repeat(|ctx| { - let datacenter_id = input.datacenter_id; - - async move { - match ctx.listen::
().await? { - Main::Command(protocol::Command::StartActor { actor_id, config }) => { - let client_id = ctx - .activity(AllocateActorInput { - datacenter_id, - actor_id, - config: *config.clone(), - }) - .await?; - - if let Some(client_id) = client_id { - ctx.signal(crate::workflows::client::ActorStateUpdate { - state: protocol::ActorState::Allocated { client_id }, - }) - .tag("actor_id", actor_id) - .send() - .await?; - - // Forward signal to client - ctx.signal(protocol::Command::StartActor { actor_id, config }) - .tag("client_id", client_id) - .send() - .await?; - } else { - tracing::error!(?datacenter_id, ?actor_id, "failed to allocate actor"); - - ctx.signal(crate::workflows::client::ActorStateUpdate { - state: protocol::ActorState::FailedToAllocate, - }) - .tag("actor_id", actor_id) - .send() - .await?; - } - } - Main::Command(protocol::Command::SignalActor { - actor_id, - signal, - persist_storage, - ignore_future_state, - }) => { - let client_id = ctx.activity(GetClientForActorInput { actor_id }).await?; - - if let Some(client_id) = client_id { - // Forward signal to client - ctx.signal(protocol::Command::SignalActor { - actor_id, - signal, - persist_storage, - ignore_future_state, - }) - .tag("client_id", client_id) - .send() - .await?; - } else { - tracing::warn!( - ?actor_id, - "tried sending signal to actor that doesn't exist" - ); - } - } - Main::PrewarmImage(sig) => { - let client_id = ctx.activity(GetClientFromDcInput { datacenter_id }).await?; - - if let Some(client_id) = client_id { - // Forward signal to client - ctx.signal(sig).tag("client_id", client_id).send().await?; - } else { - tracing::error!(?datacenter_id, image_id=?sig.image_id, "failed to prewarm image"); - } - } - } - - Ok(Loop::<()>::Continue) - } - .boxed() - }) - .await?; - - Ok(()) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct AllocateActorInput { - datacenter_id: Uuid, - actor_id: Uuid, - config: protocol::ActorConfig, -} - -/// Selects a client to allocate the actor to. Attempts to find the most full client that has capacity for -/// this actor. -#[activity(AllocateActor)] -async fn allocate_actor( - ctx: &ActivityCtx, - input: &AllocateActorInput, -) -> GlobalResult> { - let datacenter_id = input.datacenter_id; - let current_time = util::timestamp::now(); - let client_eligible_time = current_time - CLIENT_ELIGIBLE_THRESHOLD_MS; - let actor_id = input.actor_id; - let allocated_cpu = input.config.resources.cpu as i64; - let allocated_memory_mib = (input.config.resources.memory / 1024 / 1024) as i64; - let client_flavor = match input.config.image.kind { - protocol::ImageKind::DockerImage | protocol::ImageKind::OciBundle => { - protocol::ClientFlavor::Container - } - protocol::ImageKind::JavaScript => protocol::ClientFlavor::Isolate, - } as i32; - - tracing::debug!( - ?datacenter_id, - ?current_time, - ?client_eligible_time, - ?actor_id, - ?allocated_cpu, - ?allocated_memory_mib, - ?client_flavor, - "allocating actor" - ); - - // Even though isolates autoscale based on CPU, we allocate machines based on reservation in - // balance proactively. Otherwise, we'd end up with bad scaling with retroactively choosing - // nodes based on CPU load since actors will show the CPU load after a delay. - let client_id = sql_fetch_optional!( - [ctx, (Uuid,)] - " - WITH available_clients AS ( - SELECT - c.client_id, - -- Millicores - ( - COALESCE((c.system_info->'cpu'->'physical_core_count')::INT, 0) * 1000 - - COALESCE((c.config->'reserved_resources'->'cpu')::INT, 0) - ) AS available_cpu, - -- MiB - ( - -- Convert bytes to MiB - COALESCE(((c.system_info->'memory'->'total_memory')::INT), 0) // 1048576 - - COALESCE(((c.config->'reserved_resources'->'memory')::INT), 0) - ) AS available_memory, - -- Millicores - COALESCE(SUM_INT((a.config->'resources'->'cpu')::INT), 0) AS allocated_cpu, - -- MiB - COALESCE(SUM_INT((a.config->'resources'->'memory')::INT // 1048576), 0) AS allocated_memory - FROM db_pegboard.clients AS c - LEFT JOIN db_pegboard.actors AS a - ON - c.client_id = a.client_id AND - -- Actor not stopped - a.stop_ts IS NULL AND - -- Not exited - a.exit_ts IS NULL - WHERE - c.datacenter_id = $1 AND - -- Within ping threshold - c.last_ping_ts > $2 AND - -- Not draining - c.drain_ts IS NULL AND - -- Not deleted - c.delete_ts IS NULL AND - -- Flavor match - c.flavor = $8 - GROUP BY c.client_id - ) - INSERT INTO db_pegboard.actors (actor_id, client_id, config, create_ts) - SELECT $3, client_id, $4, $5 - FROM available_clients - WHERE - -- Containers (0): ensure node has available resources - -- Isolates (1): don't limit resources since they scale on CPU - CASE WHEN $8 = 0 - THEN ( - allocated_cpu + $6 <= available_cpu AND - allocated_memory + $7 <= available_memory - ) - ELSE TRUE - END - ORDER BY - -- Container (0): binpack to the most-populated node to maximize density - -- Isolate (1): allocate to the least-populated node since we autoscale on CPU - CASE WHEN $8 = 0 - THEN allocated_cpu - ELSE -allocated_cpu - END DESC, - CASE WHEN $8 = 0 - THEN allocated_memory - ELSE -allocated_memory - END DESC - LIMIT 1 - RETURNING client_id - ", - datacenter_id, - client_eligible_time, - actor_id, - serde_json::to_value(&input.config)?, - current_time, - allocated_cpu, - allocated_memory_mib, - client_flavor, - ) - .await? - .map(|(client_id,)| client_id); - - Ok(client_id) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct GetClientForActorInput { - actor_id: Uuid, -} - -#[activity(GetClientForActor)] -async fn get_client_for_actor( - ctx: &ActivityCtx, - input: &GetClientForActorInput, -) -> GlobalResult> { - let row = sql_fetch_optional!( - [ctx, (Uuid,)] - " - SELECT client_id - FROM db_pegboard.actors - WHERE actor_id = $1 - ", - input.actor_id, - ) - .await?; - - Ok(row.map(|(client_id,)| client_id)) -} - -#[derive(Debug, Serialize, Deserialize, Hash)] -struct GetClientFromDcInput { - datacenter_id: Uuid, -} - -#[activity(GetClientFromDc)] -async fn get_client_from_dc( - ctx: &ActivityCtx, - input: &GetClientFromDcInput, -) -> GlobalResult> { - let row = sql_fetch_optional!( - [ctx, (Uuid,)] - " - SELECT client_id - FROM db_pegboard.clients - WHERE - datacenter_id = $1 AND - -- Within ping threshold - last_ping_ts > $2 AND - -- Not draining - drain_ts IS NULL AND - -- Not deleted - delete_ts IS NULL - ", - input.datacenter_id, - util::timestamp::now() - CLIENT_ELIGIBLE_THRESHOLD_MS, - ) - .await?; - - Ok(row.map(|(client_id,)| client_id)) -} - -join_signal!(Main { - Command(protocol::Command), - PrewarmImage, -}); diff --git a/packages/services/pegboard/standalone/dc-init/src/lib.rs b/packages/services/pegboard/standalone/dc-init/src/lib.rs deleted file mode 100644 index 27f2e1f426..0000000000 --- a/packages/services/pegboard/standalone/dc-init/src/lib.rs +++ /dev/null @@ -1,54 +0,0 @@ -use chirp_workflow::prelude::*; - -// TODO: This is not idempotent. -#[tracing::instrument(skip_all)] -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-dc-init"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "pegboard-dc-init", - ) - .await?; - - // Read config from env - let cluster_configs = &ctx.config().server()?.rivet.clusters(); - - for cluster_config in cluster_configs.values() { - // Find datacenter ids with pegboard pools - let datacenter_ids = cluster_config - .bootstrap_datacenters - .values() - .map(|x| x.id) - .collect::>(); - - let rows = sql_fetch_all!( - [ctx, (Uuid,)] - " - SELECT dc_id - FROM UNNEST($1) AS dc(dc_id) - WHERE NOT EXISTS( - SELECT 1 - FROM db_workflow.workflows - WHERE - workflow_name = 'pegboard_datacenter' AND - (tags->>'datacenter_id')::UUID = dc_id - ) - ", - datacenter_ids, - ) - .await?; - - // Create missing datacenters - for (datacenter_id,) in rows { - ctx.workflow(pegboard::workflows::datacenter::Input { datacenter_id }) - .tag("datacenter_id", datacenter_id) - .dispatch() - .await?; - } - } - - Ok(()) -} diff --git a/packages/services/pegboard/standalone/gc/src/lib.rs b/packages/services/pegboard/standalone/gc/src/lib.rs deleted file mode 100644 index 126a69dad0..0000000000 --- a/packages/services/pegboard/standalone/gc/src/lib.rs +++ /dev/null @@ -1,192 +0,0 @@ -use chirp_workflow::prelude::*; - -use nix::sys::signal::Signal; -use pegboard::protocol; - -/// How long to wait after last ping before forcibly removing a client from the database and deleting its -/// workflow, evicting all actors. Note that the client may still be running and can reconnect. -const CLIENT_LOST_THRESHOLD_MS: i64 = util::duration::minutes(2); -/// How long to wait after creating and not receiving a starting state before forcibly stopping actor. -const ACTOR_START_THRESHOLD_MS: i64 = util::duration::seconds(30); -/// How long to wait after stopping and not receiving a stop state before manually setting actor as -/// lost. -const ACTOR_STOP_THRESHOLD_MS: i64 = util::duration::seconds(30); -/// How long to wait after stopped and not receiving an exit state before manually setting actor as -/// lost. -const ACTOR_EXIT_THRESHOLD_MS: i64 = util::duration::seconds(5); - -#[derive(sqlx::FromRow)] -struct ActorRow { - actor_id: Uuid, - client_id: Uuid, - failed_start: bool, - failed_stop: bool, - failed_exit: bool, -} - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let mut interval = tokio::time::interval(std::time::Duration::from_secs(15)); - loop { - interval.tick().await; - - let ts = util::timestamp::now(); - run_from_env(config.clone(), pools.clone(), ts).await?; - } -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, - ts: i64, -) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-gc"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "pegboard-gc", - ) - .await?; - - let (dead_client_rows, failed_actor_rows) = tokio::try_join!( - sql_fetch_all!( - [ctx, (Uuid,)] - " - UPDATE db_pegboard.clients - SET delete_ts = $2 - WHERE - last_ping_ts < $1 AND - delete_ts IS NULL - RETURNING client_id - ", - ts - CLIENT_LOST_THRESHOLD_MS, - ts, - ), - sql_fetch_all!( - [ctx, ActorRow] - " - UPDATE db_pegboard.actors - SET - -- Failed to stop (prevents GC from picking this up again) - stop_ts = CASE - WHEN - exit_ts IS NULL - AND lost_ts IS NULL - AND stopping_ts < $1 - $3 - AND stop_ts IS NULL - THEN $1 - ELSE stop_ts - END, - -- Failed to exit (prevents GC from picking this up again) - lost_ts = CASE - WHEN - exit_ts IS NULL AND - lost_ts IS NULL AND - stop_ts < $1 - $4 - THEN $1 - ELSE lost_ts - END - WHERE - -- Select actors that have not exited yet - exit_ts IS NULL AND - lost_ts IS NULL AND - -- Match any event condition - ( - -- Failed to start (never reached running state) - ( - create_ts < $1 - $2 AND - running_ts IS NULL AND - stopping_ts IS NULL AND - stop_ts IS NULL - ) - OR - -- Failed to stop (never reached stopped state after stopping) - ( - stopping_ts < $1 - $3 AND - stop_ts IS NULL - ) - OR - -- Failed to exit (send stop event and never exited) - stop_ts < $1 - $4 - ) - RETURNING - actor_id, - client_id, - -- Failed to start - CASE - WHEN - create_ts < $1 - $2 AND - running_ts IS NULL AND - stopping_ts IS NULL AND stop_ts IS NULL - THEN true - ELSE false - END AS failed_start, - -- Failed to stop - CASE - WHEN - stopping_ts < $1 - $3 AND - stop_ts IS NULL - THEN true - ELSE false - END AS failed_stop, - -- Failed to exit - CASE - WHEN stop_ts < $1 - $4 - THEN true - ELSE false - END AS failed_exit - ", - ts, - ACTOR_START_THRESHOLD_MS, - ACTOR_STOP_THRESHOLD_MS, - ACTOR_EXIT_THRESHOLD_MS - ), - )?; - - for (client_id,) in dead_client_rows { - tracing::warn!(?client_id, "dead client"); - - ctx.signal(pegboard::workflows::client::Destroy {}) - .tag("client_id", client_id) - .send() - .await?; - } - - for row in &failed_actor_rows { - if row.failed_exit { - tracing::error!(actor_id=?row.actor_id, "actor failed to exit"); - - ctx.signal(pegboard::workflows::client::ActorStateUpdate { - state: protocol::ActorState::Lost, - }) - .tag("actor_id", row.actor_id) - .send() - .await?; - } else if row.failed_stop { - tracing::error!(actor_id=?row.actor_id, "actor failed to stop"); - - ctx.signal(pegboard::workflows::client::ActorStateUpdate { - state: protocol::ActorState::Lost, - }) - .tag("actor_id", row.actor_id) - .send() - .await?; - } else if row.failed_start { - tracing::error!(actor_id=?row.actor_id, "actor failed to start"); - - ctx.signal(protocol::Command::SignalActor { - actor_id: row.actor_id, - signal: Signal::SIGKILL as i32, - persist_storage: false, - ignore_future_state: true, - }) - .tag("client_id", row.client_id) - .send() - .await?; - } - } - - Ok(()) -} diff --git a/packages/services/pegboard/standalone/metrics-publish/src/lib.rs b/packages/services/pegboard/standalone/metrics-publish/src/lib.rs deleted file mode 100644 index 7a509a9bb0..0000000000 --- a/packages/services/pegboard/standalone/metrics-publish/src/lib.rs +++ /dev/null @@ -1,68 +0,0 @@ -use chirp_workflow::prelude::*; -use pegboard::protocol::ClientFlavor; - -/// How long to continue including a row in the query after a client has been deleted. This is so we can add -/// `inactive=true` for the prometheus metric. -const INACTIVE_THRESHOLD_MS: i64 = util::duration::hours(1); - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - let mut interval = tokio::time::interval(std::time::Duration::from_secs(15)); - loop { - interval.tick().await; - - run_from_env(config.clone(), pools.clone(), util::timestamp::now()).await?; - } -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, - ts: i64, -) -> GlobalResult<()> { - let client = - chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-metrics-publish"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "pegboard-metrics-publish", - ) - .await?; - - let client_actors = sql_fetch_all!( - [ctx, (Uuid, Uuid, i64, bool, i64)] - " - SELECT - c.datacenter_id, - c.client_id, - c.flavor, - (c.drain_ts IS NOT NULL OR c.delete_ts IS NOT NULL) AS inactive, - COUNT(a.client_id) - FROM db_pegboard.clients AS c - LEFT JOIN db_pegboard.actors AS a - ON a.client_id = c.client_id - AS OF SYSTEM TIME '-1s' - WHERE c.delete_ts IS NULL OR c.delete_ts > $1 - GROUP BY c.client_id - ", - ts - INACTIVE_THRESHOLD_MS, - ) - .await?; - - for (datacenter_id, client_id, flavor, inactive, count) in client_actors { - let flavor = unwrap!(ClientFlavor::from_repr(flavor.try_into()?)); - - pegboard::metrics::CLIENT_ACTORS_ALLOCATED - .with_label_values(&[ - &datacenter_id.to_string(), - &client_id.to_string(), - &flavor.to_string(), - &inactive.to_string(), - ]) - .set(count.try_into()?); - } - - Ok(()) -} diff --git a/packages/services/pegboard/standalone/ws/src/lib.rs b/packages/services/pegboard/standalone/ws/src/lib.rs deleted file mode 100644 index 14cfd33985..0000000000 --- a/packages/services/pegboard/standalone/ws/src/lib.rs +++ /dev/null @@ -1,526 +0,0 @@ -use std::{ - collections::HashMap, - net::SocketAddr, - sync::{ - atomic::{AtomicBool, Ordering}, - Arc, - }, - time::Duration, -}; - -use chirp_workflow::prelude::*; -use futures_util::{stream::SplitSink, SinkExt, StreamExt}; -use serde_json::json; -use tokio::{ - net::{TcpListener, TcpStream}, - sync::{Mutex, RwLock}, -}; -use tokio_tungstenite::{ - tungstenite::protocol::{ - frame::{coding::CloseCode, CloseFrame}, - Message, - }, - WebSocketStream, -}; - -use pegboard::protocol; - -const UPDATE_PING_INTERVAL: Duration = Duration::from_secs(3); - -struct Connection { - protocol_version: u16, - tx: Mutex, Message>>, - update_ping: AtomicBool, -} - -type Connections = HashMap>; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - run_from_env(config.clone(), pools.clone()).await -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, -) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("pegboard-ws"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = StandaloneCtx::new( - chirp_workflow::compat::db_from_pools(&pools).await?, - config, - rivet_connection::Connection::new(client, pools, cache), - "pegboard-ws", - ) - .await?; - - let sql_lock = Arc::new(Mutex::new(())); - let conns: Arc> = Arc::new(RwLock::new(HashMap::new())); - - let host = ctx.config().server()?.rivet.pegboard.host(); - let port = ctx.config().server()?.rivet.pegboard.port(); - let addr = SocketAddr::from((host, port)); - - let listener = TcpListener::bind(addr).await?; - tracing::info!(?port, ?port, "pegboard ws server listening"); - - // None of these should ever exit - // - // If these do exit, then the `handle_connection` task will run indefinitely and never - // send/receive anything to clients. Client workflows will then expire because of their ping, - // their workflow will complete, and clients will be unusable unless they reconnect. - tokio::join!( - socket_thread(&ctx, sql_lock.clone(), conns.clone(), listener), - msg_thread(&ctx, conns.clone()), - update_ping_thread(&ctx, sql_lock, conns.clone()), - ); - - Ok(()) -} - -#[tracing::instrument(skip_all)] -async fn socket_thread( - ctx: &StandaloneCtx, - sql_lock: Arc>, - conns: Arc>, - listener: TcpListener, -) { - loop { - match listener.accept().await { - Ok((stream, addr)) => { - handle_connection(ctx, sql_lock.clone(), conns.clone(), stream, addr).await - } - Err(err) => tracing::error!(?err, "failed to connect websocket"), - } - } -} - -#[tracing::instrument(skip_all)] -async fn handle_connection( - ctx: &StandaloneCtx, - sql_lock: Arc>, - conns: Arc>, - raw_stream: TcpStream, - addr: SocketAddr, -) { - tracing::debug!(?addr, "new connection"); - - let ctx = ctx.clone(); - - tokio::spawn(async move { - let (ws_stream, url_data) = match setup_connection(raw_stream, addr).await { - Ok(x) => x, - Err(err) => { - tracing::error!(?addr, ?err, "setup connection failed"); - return; - } - }; - - if let Err(err) = - handle_connection_inner(&ctx, sql_lock, conns.clone(), ws_stream, url_data).await - { - tracing::error!(?addr, ?err, "handle connection inner failed"); - } - - // Clean up - let conn = conns.write().await.remove(&url_data.client_id); - if let Some(conn) = conn { - let close_frame = CloseFrame { - code: CloseCode::Normal, - reason: "handle_connection_inner event loop closed".into(), - }; - if let Err(err) = conn - .tx - .lock() - .await - .send(Message::Close(Some(close_frame))) - .await - { - tracing::error!(?addr, ?err, "failed closing socket"); - } - } - }); -} - -#[tracing::instrument(skip_all)] -async fn setup_connection( - raw_stream: TcpStream, - addr: SocketAddr, -) -> GlobalResult<(WebSocketStream, UrlData)> { - let mut uri = None; - let ws_stream = tokio_tungstenite::accept_hdr_async( - raw_stream, - |req: &tokio_tungstenite::tungstenite::handshake::server::Request, res| { - // Bootleg way of reading the uri - uri = Some(req.uri().clone()); - - tracing::debug!(?addr, ?uri, "handshake"); - - Ok(res) - }, - ) - .await?; - - // Parse URL - let uri = unwrap!(uri, "socket has no associated request"); - let url_data = parse_url(addr, uri)?; - - Ok((ws_stream, url_data)) -} - -#[tracing::instrument(skip_all)] -async fn handle_connection_inner( - ctx: &StandaloneCtx, - sql_lock: Arc>, - conns: Arc>, - ws_stream: WebSocketStream, - UrlData { - protocol_version, - client_id, - datacenter_id, - flavor, - }: UrlData, -) -> GlobalResult<()> { - let (tx, mut rx) = ws_stream.split(); - - let conn = Arc::new(Connection { - protocol_version, - tx: Mutex::new(tx), - update_ping: AtomicBool::new(false), - }); - - // Store connection - { - let mut conns = conns.write().await; - if let Some(old_conn) = conns.insert(client_id, conn.clone()) { - tracing::warn!( - ?client_id, - "client already connected, closing old connection" - ); - - let close_frame = CloseFrame { - code: CloseCode::Normal, - reason: "client already connected, closing old connection".into(), - }; - old_conn - .tx - .lock() - .await - .send(Message::Close(Some(close_frame))) - .await?; - } - } - - // Only create the client after receiving the init packet to prevent a race condition - if let Some(msg) = rx.next().await { - match msg? { - Message::Binary(buf) => { - let packet = protocol::ToServer::deserialize(protocol_version, &buf)?; - - if let protocol::ToServer::Init { .. } = &packet { - // Insert into db and spawn workflow (if not exists) - upsert_client(ctx, sql_lock, client_id, datacenter_id, flavor).await?; - } else { - bail!("unexpected initial packet: {packet:?}"); - } - - // Forward to client wf - ctx.signal(packet) - .tag("client_id", client_id) - .send() - .await?; - } - Message::Close(_) => { - bail!("socket closed {client_id}"); - } - msg => bail!("unexpected initial message: {msg:?}"), - } - } - - // Receive messages from socket - while let Some(msg) = rx.next().await { - match msg? { - Message::Binary(buf) => { - let packet = protocol::ToServer::deserialize(protocol_version, &buf)?; - - // Forward to client wf - ctx.signal(packet) - .tag("client_id", client_id) - .send() - .await?; - } - Message::Ping(_) => { - conn.update_ping.store(true, Ordering::Relaxed); - } - Message::Close(_) => { - bail!("socket closed {client_id}"); - } - msg => tracing::warn!(?client_id, ?msg, "unexpected message"), - } - } - - bail!("stream closed {client_id}"); - - // Only way I could figure out to help the complier infer type - #[allow(unreachable_code)] - GlobalResult::Ok(()) -} - -#[tracing::instrument(skip_all)] -async fn upsert_client( - ctx: &StandaloneCtx, - sql_lock: Arc>, - client_id: Uuid, - datacenter_id: Uuid, - flavor: protocol::ClientFlavor, -) -> GlobalResult<()> { - let _ = sql_lock.lock().await; - - let (exists, deleted) = sql_fetch_one!( - [ctx, (bool, bool)] - " - WITH - select_exists AS ( - SELECT 1 - FROM db_pegboard.clients - WHERE client_id = $1 - ), - select_deleted AS ( - SELECT 1 - FROM db_pegboard.clients - WHERE - client_id = $1 AND - delete_ts IS NOT NULL - ), - insert_client AS ( - INSERT INTO db_pegboard.clients ( - client_id, datacenter_id, flavor, create_ts, last_ping_ts - ) - VALUES ($1, $2, $3, $4, $4) - ON CONFLICT (client_id) - DO UPDATE - SET delete_ts = NULL - RETURNING 1 - ) - SELECT - EXISTS(SELECT 1 FROM select_exists) AS exists, - EXISTS(SELECT 1 FROM select_deleted) AS deleted - ", - client_id, - datacenter_id, - flavor as i32, - util::timestamp::now(), - ) - .await?; - - if deleted { - tracing::warn!(?client_id, "client was previously deleted"); - } - - if exists == deleted { - tracing::info!(?client_id, ?datacenter_id, ?flavor, "new client"); - - // Spawn a new client workflow - tracing::info!( - ?client_id, - ?datacenter_id, - ?flavor, - "creating client workflow" - ); - ctx.workflow(pegboard::workflows::client::Input { client_id }) - .tag("client_id", client_id) - .dispatch() - .await?; - } - - Ok(()) -} - -#[tracing::instrument(skip_all)] -async fn update_ping_thread( - ctx: &StandaloneCtx, - sql_lock: Arc>, - conns: Arc>, -) { - loop { - match update_ping_thread_inner(ctx, sql_lock.clone(), conns.clone()).await { - Ok(_) => { - tracing::warn!("update ping thread thread exited early"); - } - Err(err) => { - tracing::error!(?err, "update ping thread error"); - } - } - - tokio::time::sleep(std::time::Duration::from_secs(2)).await; - } -} - -/// Updates the ping of all clients requesting a ping update at once. -#[tracing::instrument(skip_all)] -async fn update_ping_thread_inner( - ctx: &StandaloneCtx, - sql_lock: Arc>, - conns: Arc>, -) -> GlobalResult<()> { - loop { - tokio::time::sleep(UPDATE_PING_INTERVAL).await; - - let client_ids = { - let conns = conns.read().await; - - // Select all clients that required a ping update - conns - .iter() - .filter_map(|(client_id, conn)| { - conn.update_ping - .swap(false, Ordering::Relaxed) - .then_some(*client_id) - }) - .collect::>() - }; - - if client_ids.is_empty() { - continue; - } - - let _ = sql_lock.lock().await; - - sql_execute!( - [ctx] - " - UPDATE db_pegboard.clients - SET last_ping_ts = $2 - WHERE client_id = ANY($1) - ", - client_ids, - util::timestamp::now(), - ) - .await?; - } -} - -#[tracing::instrument(skip_all)] -async fn msg_thread(ctx: &StandaloneCtx, conns: Arc>) { - loop { - match msg_thread_inner(ctx, conns.clone()).await { - Ok(_) => { - tracing::warn!("msg thread exited early"); - } - Err(err) => { - tracing::error!(?err, "msg thread error"); - } - } - - tokio::time::sleep(std::time::Duration::from_secs(2)).await; - } -} - -#[tracing::instrument(skip_all)] -async fn msg_thread_inner( - ctx: &StandaloneCtx, - conns: Arc>, -) -> GlobalResult<()> { - // Listen for commands from client workflows - let mut sub = ctx - .subscribe::(&json!({})) - .await?; - let mut close_sub = ctx - .subscribe::(&json!({})) - .await?; - - loop { - tokio::select! { - msg = sub.next() => { - let msg = msg?; - - { - let conns = conns.read().await; - - // Send command to socket - if let Some(conn) = conns.get(&msg.client_id) { - let buf = msg.inner.serialize(conn.protocol_version)?; - conn.tx.lock().await.send(Message::Binary(buf)).await?; - } else { - tracing::debug!( - client_id=?msg.client_id, - "received command for client that isn't connected, ignoring" - ); - } - } - } - msg = close_sub.next() => { - let msg = msg?; - - { - let conns = conns.read().await; - - // Close socket - if let Some(conn) = conns.get(&msg.client_id) { - tracing::info!(client_id = ?msg.client_id, "received close ws event, closing socket"); - - let close_frame = CloseFrame { - code: CloseCode::Normal, - reason: "received close ws event".into(), - }; - conn.tx.lock().await.send(Message::Close(Some(close_frame))).await?; - } else { - tracing::debug!( - client_id=?msg.client_id, - "received close command for client that isn't connected, ignoring" - ); - } - } - } - } - } -} - -#[derive(Clone, Copy)] -struct UrlData { - protocol_version: u16, - client_id: Uuid, - datacenter_id: Uuid, - flavor: protocol::ClientFlavor, -} - -fn parse_url(addr: SocketAddr, uri: hyper::Uri) -> GlobalResult { - let url = url::Url::parse(&format!("ws://{addr}{uri}"))?; - - // Get protocol version from last path segment - let last_segment = unwrap!( - unwrap!(url.path_segments(), "invalid url").last(), - "no path segments" - ); - ensure!(last_segment.starts_with('v'), "invalid protocol version"); - let protocol_version = last_segment[1..].parse::()?; - - // Read client_id and datacenter_id from query parameters - let client_id = unwrap!( - url.query_pairs() - .find_map(|(n, v)| (n == "client_id").then_some(v)), - "missing `client_id` query parameter" - ); - let client_id = util::uuid::parse(client_id.as_ref())?; - - let datacenter_id = unwrap!( - url.query_pairs() - .find_map(|(n, v)| (n == "datacenter_id").then_some(v)), - "missing `datacenter_id` query parameter" - ); - let datacenter_id = util::uuid::parse(datacenter_id.as_ref())?; - - let flavor = unwrap!( - url.query_pairs() - .find_map(|(n, v)| (n == "flavor").then_some(v)), - "missing `flavor` query parameter" - ); - let flavor = flavor.parse()?; - - Ok(UrlData { - protocol_version, - client_id, - datacenter_id, - flavor, - }) -} diff --git a/packages/services/telemetry/standalone/beacon/src/lib.rs b/packages/services/telemetry/standalone/beacon/src/lib.rs deleted file mode 100644 index 2b7468f3b0..0000000000 --- a/packages/services/telemetry/standalone/beacon/src/lib.rs +++ /dev/null @@ -1,261 +0,0 @@ -use indoc::indoc; -use rivet_operation::prelude::*; -use serde::Serialize; -use serde_json::json; -use std::{collections::HashMap, time::Duration}; -use sysinfo::System; - -// This information is intended for use with diagnosing errors in the wild. -// -// Events are sent to PostHog (https://posthog.com/). These events enrich our Sentry errors in -// order to better understand the unique edge cases that might cause an error. -// -// Rivet is a powerful yet complicated system and these metrics help us support the open-source -// community. If you have questions or concerns about this data, please reach out to us on Discord: -// https://rivet.gg/discord - -// This API key is safe to hardcode. It will not change and is intended to be public. -const POSTHOG_API_KEY: &str = "phc_1lUNmul6sAdFzDK1VHXNrikCfD7ivQZSpf2yzrPvr4m"; - -pub async fn start(config: rivet_config::Config, pools: rivet_pools::Pools) -> GlobalResult<()> { - run_from_env(config.clone(), pools.clone(), util::timestamp::now()).await -} - -#[tracing::instrument(skip_all)] -pub async fn run_from_env( - config: rivet_config::Config, - pools: rivet_pools::Pools, - _ts: i64, -) -> GlobalResult<()> { - let client = chirp_client::SharedClient::from_env(pools.clone())?.wrap_new("telemetry-beacon"); - let cache = rivet_cache::CacheInner::from_env(pools.clone())?; - let ctx = OperationContext::new( - "telemetry-beacon".into(), - Duration::from_secs(300), - config.clone(), - rivet_connection::Connection::new(client, pools, cache), - Uuid::new_v4(), - Uuid::new_v4(), - util::timestamp::now(), - util::timestamp::now(), - (), - ); - - // Get the cluster ID - let cluster_id = chirp_workflow::compat::op(&ctx, dynamic_config::ops::get_config::Input {}) - .await? - .cluster_id; - - // Build events - let mut events = Vec::new(); - let distinct_id = format!("cluster:{cluster_id}"); - - // Send beacon - let mut event = async_posthog::Event::new("cluster_beacon", &distinct_id); - event.insert_prop("$groups", json!({ "cluster": cluster_id }))?; - event.insert_prop( - "$set", - json!({ - "cluster_id": cluster_id, - "os": os_report(), - "source_hash": rivet_env::source_hash(), - "config": get_config_data(&ctx)?, - "infrastructure": get_infrastructure_data(&ctx)?, - "pegboard": get_pegboard_data(&ctx).await?, - }), - )?; - events.push(event); - - // Add cluster identification data - let mut event = async_posthog::Event::new("$groupidentify", &distinct_id); - event.insert_prop("$group_type", "cluster")?; - event.insert_prop("$group_key", cluster_id)?; - event.insert_prop( - "$group_set", - json!({ - "name": ctx.config().server()?.rivet.namespace, - }), - )?; - events.push(event); - - tracing::debug!(len = ?events.len(), "built events"); - - // Send events in chunks - let client = async_posthog::client(POSTHOG_API_KEY); - client.capture_batch(events).await?; - - tracing::debug!("all events sent"); - - Ok(()) -} - -/// Returns information about the operating system running the cluster. -/// -/// This helps Rivet diagnose crash reports to easily pinpoint if issues are -/// coming from a specific operating system. -fn os_report() -> serde_json::Value { - // Create a new System object - let system = sysinfo::System::new_with_specifics( - sysinfo::RefreshKind::new() - .with_cpu(sysinfo::CpuRefreshKind::everything()) - .with_memory(sysinfo::MemoryRefreshKind::everything()), - ); - - // Gather OS information - let os_name = std::env::consts::OS; - let os_version = System::os_version() - .unwrap_or_else(|| String::from("Unknown")) - .to_string(); - let architecture = std::env::consts::ARCH; - let hostname = System::host_name().unwrap_or_else(|| String::from("unknown")); - - // Gather memory information - let total_memory = system.total_memory(); - let available_memory = system.available_memory(); - - // Gather CPU information - let cpu_info = system.cpus(); - let cpu_model = cpu_info - .first() - .map(|p| p.brand().to_string()) - .unwrap_or_else(|| String::from("Unknown CPU")); - - // Combine everything into a JSON object - json!({ - "name": os_name, - "version": os_version, - "architecture": architecture, - "hostname": hostname, - "memory": { - "total": total_memory, - "available": available_memory, - }, - "cpu": { - "model": cpu_model, - "cores": cpu_info.len(), - } - }) -} - -/// Returns information about what feature configs are enabled. -/// -/// This helps Rivet diagnose crash reports to understand if specific features -/// are causing crashes. -fn get_config_data(ctx: &OperationContext<()>) -> GlobalResult { - let server_config = ctx.config().server()?; - - Ok(json!({ - "rivet": { - "namespace": server_config.rivet.namespace, - "auth_access_kind": format!("{:?}", server_config.rivet.auth.access_kind), - "dns_enabled": server_config.rivet.dns.is_some(), - "job_run_enabled": server_config.rivet.job_run.is_some(), - "api_origin": server_config.rivet.api_public.public_origin(), - "hub_origin": server_config.rivet.ui.public_origin(), - }, - })) -} - -/// Returns information about what infrastructure is enabled. -/// -/// This helps Rivet diagnose crash reports to understand if parts of the -/// infrastructure are causing issues. -fn get_infrastructure_data(ctx: &OperationContext<()>) -> GlobalResult { - let server_config = ctx.config().server()?; - Ok(json!({ - "nomad_enabled": server_config.nomad.is_some(), - "cloudflare_enabled": server_config.cloudflare.is_some(), - "sendgrid_enabled": server_config.sendgrid.is_some(), - "loops_enabled": server_config.loops.is_some(), - "ip_info_enabled": server_config.ip_info.is_some(), - "hcaptcha_enabled": server_config.hcaptcha.is_some(), - "turnstile_enabled": server_config.turnstile.is_some(), - "stripe_enabled": server_config.stripe.is_some(), - "neon_enabled": server_config.neon.is_some(), - "linode_enabled": server_config.linode.is_some(), - "clickhouse_enabled": server_config.clickhouse.is_some(), - "prometheus_enabled": server_config.prometheus.is_some(), - "s3_endpoint": server_config.s3.endpoint_external, - })) -} - -#[derive(sqlx::FromRow, Serialize)] -struct ResourceAggregateRow { - count: i64, - cpu_core_sum: i64, - cpu_frequency_sum: i64, - memory_sum: i64, - swap_sum: i64, -} - -/// Returns information about the pegboard configuration. -/// -/// This is helpful for diagnosing issues with the self-hosted clusters under -/// load. e.g. if a cluster is running on constraint resources (see os_report), -/// does the cluster configuration affect it? -async fn get_pegboard_data(ctx: &OperationContext<()>) -> GlobalResult { - use pegboard::protocol::ClientFlavor; - - let mut clients = HashMap::new(); - for flavor in [ClientFlavor::Container, ClientFlavor::Isolate] { - let row = sql_fetch_one!( - [ctx, ResourceAggregateRow] - " - SELECT - count(*)::int AS count, - coalesce(sum((system_info->'cpu'->'physical_core_count')::int), 0)::int AS cpu_core_sum, - coalesce(sum((system_info->'cpu'->'frequency')::int), 0)::int AS cpu_frequency_sum, - coalesce(sum((system_info->'memory'->'total_memory')::int), 0)::int AS memory_sum, - coalesce(sum((system_info->'memory'->'total_swap')::int), 0)::int AS swap_sum - FROM db_pegboard.clients AS OF SYSTEM TIME '-5s' - WHERE - delete_ts IS NULL - AND flavor = $1 - ", - flavor as i32, - ) - .await?; - - let cpu_arch_counts = sql_fetch_all!( - [ctx, (String, i64)] - " - SELECT - system_info->'cpu'->>'cpu_arch' AS cpu_arch, - count(*)::int AS count - FROM db_pegboard.clients AS OF SYSTEM TIME '-5s' - WHERE - delete_ts IS NULL - AND flavor = $1 - GROUP BY cpu_arch - ", - flavor as i32, - ) - .await?; - let cpu_archs: HashMap = cpu_arch_counts.into_iter().collect(); - - clients.insert( - flavor.to_string(), - json!({ - "aggregates": row, - "cpu_archs": cpu_archs - }), - ); - } - - let (total_count, running_count) = sql_fetch_one!( - [ctx, (i64, i64)] - " - SELECT count(*)::int, count(CASE WHEN stop_ts IS NULL THEN 1 END)::int - FROM db_pegboard.actors AS OF SYSTEM TIME '-5s' - ", - ) - .await?; - - Ok(json!({ - "clients": clients, - "actors": { - "total": total_count, - "running": running_count, - } - })) -} diff --git a/packages/toolchain/actors-sdk-embed/build.rs b/packages/toolchain/actors-sdk-embed/build.rs index 482c9b5ec0..134abc0ba3 100644 --- a/packages/toolchain/actors-sdk-embed/build.rs +++ b/packages/toolchain/actors-sdk-embed/build.rs @@ -36,10 +36,10 @@ async fn main() -> Result<()> { fs::remove_dir_all(&dist_path).context("fs::remove_dir_all")?; } - // Build manager dependencies (required for building the manager itself) + // Build manager dependencies (required for building the manager itself) let output = tokio::process::Command::new("yarn") .arg("install") - .arg("--immutable") + .arg("--immutable") .current_dir(&manager_path) .output() .await?; @@ -50,7 +50,7 @@ async fn main() -> Result<()> { let output = tokio::process::Command::new("yarn") .arg("run") .arg("build") - .arg("--filter=@rivet-gg/actor-manager") + .arg("--filter=@rivet-gg/actor-manager") .current_dir(&project_root) .output() .await?; @@ -59,7 +59,7 @@ async fn main() -> Result<()> { ensure!(output.status.success(), "yarn build failed"); // Build manager using Rivet build script (not using tsup/turbo because this includes custom - // polyfill functionality) + // polyfill functionality) build_backend_command_raw(CommandOpts { task_path: "src/tasks/build/mod.ts", input: json!({ diff --git a/scripts/docker/generate_configs.ts b/scripts/docker/generate_configs.ts index 1db0e63695..1a7c39b45f 100755 --- a/scripts/docker/generate_configs.ts +++ b/scripts/docker/generate_configs.ts @@ -43,7 +43,7 @@ async function generateRivetGuard() { providersThrottleDuration: "0.025s", http: { endpoint: - "http://rivet-server:8081/traefik-provider/config/game-guard?datacenter=f288913c-735d-4188-bf9b-2fcf6eac7b9c", + "http://rivet-edge-server:8081/traefik-provider/config/game-guard?datacenter=f288913c-735d-4188-bf9b-2fcf6eac7b9c", pollInterval: "0.5s", }, }, diff --git a/sdks/api/fern/definition/core-intercom/common.yml b/sdks/api/fern/definition/core-intercom/common.yml new file mode 100644 index 0000000000..b8c8768ae0 --- /dev/null +++ b/sdks/api/fern/definition/core-intercom/common.yml @@ -0,0 +1,3 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json + +types: {} diff --git a/sdks/api/fern/definition/core-intercom/pegboard/__package__.yml b/sdks/api/fern/definition/core-intercom/pegboard/__package__.yml new file mode 100644 index 0000000000..48ff6a9e0c --- /dev/null +++ b/sdks/api/fern/definition/core-intercom/pegboard/__package__.yml @@ -0,0 +1,11 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json + +service: + auth: true + base-path: /pegboard + endpoints: + markClientRegistered: + path: /client/{client_id}/registered + method: POST + path-parameters: + client_id: uuid diff --git a/sdks/api/fern/definition/edge-intercom/common.yml b/sdks/api/fern/definition/edge-intercom/common.yml new file mode 100644 index 0000000000..b8c8768ae0 --- /dev/null +++ b/sdks/api/fern/definition/edge-intercom/common.yml @@ -0,0 +1,3 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json + +types: {} diff --git a/sdks/api/fern/definition/edge-intercom/pegboard/__package__.yml b/sdks/api/fern/definition/edge-intercom/pegboard/__package__.yml new file mode 100644 index 0000000000..09e78df9ff --- /dev/null +++ b/sdks/api/fern/definition/edge-intercom/pegboard/__package__.yml @@ -0,0 +1,31 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json + +imports: + commons: ../../common.yml + +service: + auth: true + base-path: /pegboard + endpoints: + prewarmImage: + path: /image/{image_id}/prewarm + method: POST + path-parameters: + image_id: uuid + request: PrewarmImageRequest + toggleClientDrain: + path: /client/{client_id}/toggle-drain + method: POST + path-parameters: + client_id: uuid + request: ToggleClientDrainRequest + +types: + PrewarmImageRequest: + properties: + image_artifact_url_stub: string + + ToggleClientDrainRequest: + properties: + draining: boolean + drain_complete_ts: optional diff --git a/sdks/api/full/go/client/client.go b/sdks/api/full/go/client/client.go index 990111c6bb..9633dccdbc 100644 --- a/sdks/api/full/go/client/client.go +++ b/sdks/api/full/go/client/client.go @@ -8,6 +8,8 @@ import ( authclient "sdk/auth/client" cloudclient "sdk/cloud/client" core "sdk/core" + coreintercomclient "sdk/coreintercom/client" + edgeintercomclient "sdk/edgeintercom/client" gamesclient "sdk/games/client" groupclient "sdk/group/client" identityclient "sdk/identity/client" @@ -23,17 +25,19 @@ type Client struct { caller *core.Caller header http.Header - Actor *actorclient.Client - Cloud *cloudclient.Client - Group *groupclient.Client - Identity *identityclient.Client - Provision *provisionclient.Client - Servers *serversclient.Client - Auth *authclient.Client - Games *gamesclient.Client - Job *jobclient.Client - Matchmaker *matchmakerclient.Client - Portal *portalclient.Client + Actor *actorclient.Client + Cloud *cloudclient.Client + CoreIntercom *coreintercomclient.Client + EdgeIntercom *edgeintercomclient.Client + Group *groupclient.Client + Identity *identityclient.Client + Provision *provisionclient.Client + Servers *serversclient.Client + Auth *authclient.Client + Games *gamesclient.Client + Job *jobclient.Client + Matchmaker *matchmakerclient.Client + Portal *portalclient.Client } func NewClient(opts ...core.ClientOption) *Client { @@ -42,19 +46,21 @@ func NewClient(opts ...core.ClientOption) *Client { opt(options) } return &Client{ - baseURL: options.BaseURL, - caller: core.NewCaller(options.HTTPClient), - header: options.ToHeader(), - Actor: actorclient.NewClient(opts...), - Cloud: cloudclient.NewClient(opts...), - Group: groupclient.NewClient(opts...), - Identity: identityclient.NewClient(opts...), - Provision: provisionclient.NewClient(opts...), - Servers: serversclient.NewClient(opts...), - Auth: authclient.NewClient(opts...), - Games: gamesclient.NewClient(opts...), - Job: jobclient.NewClient(opts...), - Matchmaker: matchmakerclient.NewClient(opts...), - Portal: portalclient.NewClient(opts...), + baseURL: options.BaseURL, + caller: core.NewCaller(options.HTTPClient), + header: options.ToHeader(), + Actor: actorclient.NewClient(opts...), + Cloud: cloudclient.NewClient(opts...), + CoreIntercom: coreintercomclient.NewClient(opts...), + EdgeIntercom: edgeintercomclient.NewClient(opts...), + Group: groupclient.NewClient(opts...), + Identity: identityclient.NewClient(opts...), + Provision: provisionclient.NewClient(opts...), + Servers: serversclient.NewClient(opts...), + Auth: authclient.NewClient(opts...), + Games: gamesclient.NewClient(opts...), + Job: jobclient.NewClient(opts...), + Matchmaker: matchmakerclient.NewClient(opts...), + Portal: portalclient.NewClient(opts...), } } diff --git a/sdks/api/full/go/coreintercom/client/client.go b/sdks/api/full/go/coreintercom/client/client.go new file mode 100644 index 0000000000..6f109e5ef6 --- /dev/null +++ b/sdks/api/full/go/coreintercom/client/client.go @@ -0,0 +1,30 @@ +// This file was auto-generated by Fern from our API Definition. + +package client + +import ( + http "net/http" + core "sdk/core" + pegboardclient "sdk/coreintercom/pegboard/client" +) + +type Client struct { + baseURL string + caller *core.Caller + header http.Header + + Pegboard *pegboardclient.Client +} + +func NewClient(opts ...core.ClientOption) *Client { + options := core.NewClientOptions() + for _, opt := range opts { + opt(options) + } + return &Client{ + baseURL: options.BaseURL, + caller: core.NewCaller(options.HTTPClient), + header: options.ToHeader(), + Pegboard: pegboardclient.NewClient(opts...), + } +} diff --git a/sdks/api/full/go/coreintercom/pegboard/client/client.go b/sdks/api/full/go/coreintercom/pegboard/client/client.go new file mode 100644 index 0000000000..bb324810ce --- /dev/null +++ b/sdks/api/full/go/coreintercom/pegboard/client/client.go @@ -0,0 +1,109 @@ +// This file was auto-generated by Fern from our API Definition. + +package client + +import ( + bytes "bytes" + context "context" + json "encoding/json" + errors "errors" + fmt "fmt" + uuid "github.com/google/uuid" + io "io" + http "net/http" + sdk "sdk" + core "sdk/core" +) + +type Client struct { + baseURL string + caller *core.Caller + header http.Header +} + +func NewClient(opts ...core.ClientOption) *Client { + options := core.NewClientOptions() + for _, opt := range opts { + opt(options) + } + return &Client{ + baseURL: options.BaseURL, + caller: core.NewCaller(options.HTTPClient), + header: options.ToHeader(), + } +} + +func (c *Client) MarkClientRegistered(ctx context.Context, clientId uuid.UUID) error { + baseURL := "https://api.rivet.gg" + if c.baseURL != "" { + baseURL = c.baseURL + } + endpointURL := fmt.Sprintf(baseURL+"/"+"pegboard/client/%v/registered", clientId) + + errorDecoder := func(statusCode int, body io.Reader) error { + raw, err := io.ReadAll(body) + if err != nil { + return err + } + apiError := core.NewAPIError(statusCode, errors.New(string(raw))) + decoder := json.NewDecoder(bytes.NewReader(raw)) + switch statusCode { + case 500: + value := new(sdk.InternalError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 429: + value := new(sdk.RateLimitError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 403: + value := new(sdk.ForbiddenError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 408: + value := new(sdk.UnauthorizedError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 404: + value := new(sdk.NotFoundError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 400: + value := new(sdk.BadRequestError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + } + return apiError + } + + if err := c.caller.Call( + ctx, + &core.CallParams{ + URL: endpointURL, + Method: http.MethodPost, + Headers: c.header, + ErrorDecoder: errorDecoder, + }, + ); err != nil { + return err + } + return nil +} diff --git a/sdks/api/full/go/edgeintercom/client/client.go b/sdks/api/full/go/edgeintercom/client/client.go new file mode 100644 index 0000000000..fb380dfd55 --- /dev/null +++ b/sdks/api/full/go/edgeintercom/client/client.go @@ -0,0 +1,30 @@ +// This file was auto-generated by Fern from our API Definition. + +package client + +import ( + http "net/http" + core "sdk/core" + pegboardclient "sdk/edgeintercom/pegboard/client" +) + +type Client struct { + baseURL string + caller *core.Caller + header http.Header + + Pegboard *pegboardclient.Client +} + +func NewClient(opts ...core.ClientOption) *Client { + options := core.NewClientOptions() + for _, opt := range opts { + opt(options) + } + return &Client{ + baseURL: options.BaseURL, + caller: core.NewCaller(options.HTTPClient), + header: options.ToHeader(), + Pegboard: pegboardclient.NewClient(opts...), + } +} diff --git a/sdks/api/full/go/edgeintercom/pegboard/client/client.go b/sdks/api/full/go/edgeintercom/pegboard/client/client.go new file mode 100644 index 0000000000..16f97692b4 --- /dev/null +++ b/sdks/api/full/go/edgeintercom/pegboard/client/client.go @@ -0,0 +1,187 @@ +// This file was auto-generated by Fern from our API Definition. + +package client + +import ( + bytes "bytes" + context "context" + json "encoding/json" + errors "errors" + fmt "fmt" + uuid "github.com/google/uuid" + io "io" + http "net/http" + sdk "sdk" + core "sdk/core" + pegboard "sdk/edgeintercom/pegboard" +) + +type Client struct { + baseURL string + caller *core.Caller + header http.Header +} + +func NewClient(opts ...core.ClientOption) *Client { + options := core.NewClientOptions() + for _, opt := range opts { + opt(options) + } + return &Client{ + baseURL: options.BaseURL, + caller: core.NewCaller(options.HTTPClient), + header: options.ToHeader(), + } +} + +func (c *Client) PrewarmImage(ctx context.Context, imageId uuid.UUID, request *pegboard.PrewarmImageRequest) error { + baseURL := "https://api.rivet.gg" + if c.baseURL != "" { + baseURL = c.baseURL + } + endpointURL := fmt.Sprintf(baseURL+"/"+"pegboard/image/%v/prewarm", imageId) + + errorDecoder := func(statusCode int, body io.Reader) error { + raw, err := io.ReadAll(body) + if err != nil { + return err + } + apiError := core.NewAPIError(statusCode, errors.New(string(raw))) + decoder := json.NewDecoder(bytes.NewReader(raw)) + switch statusCode { + case 500: + value := new(sdk.InternalError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 429: + value := new(sdk.RateLimitError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 403: + value := new(sdk.ForbiddenError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 408: + value := new(sdk.UnauthorizedError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 404: + value := new(sdk.NotFoundError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 400: + value := new(sdk.BadRequestError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + } + return apiError + } + + if err := c.caller.Call( + ctx, + &core.CallParams{ + URL: endpointURL, + Method: http.MethodPost, + Headers: c.header, + Request: request, + ErrorDecoder: errorDecoder, + }, + ); err != nil { + return err + } + return nil +} + +func (c *Client) ToggleClientDrain(ctx context.Context, clientId uuid.UUID, request *pegboard.ToggleClientDrainRequest) error { + baseURL := "https://api.rivet.gg" + if c.baseURL != "" { + baseURL = c.baseURL + } + endpointURL := fmt.Sprintf(baseURL+"/"+"pegboard/client/%v/toggle-drain", clientId) + + errorDecoder := func(statusCode int, body io.Reader) error { + raw, err := io.ReadAll(body) + if err != nil { + return err + } + apiError := core.NewAPIError(statusCode, errors.New(string(raw))) + decoder := json.NewDecoder(bytes.NewReader(raw)) + switch statusCode { + case 500: + value := new(sdk.InternalError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 429: + value := new(sdk.RateLimitError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 403: + value := new(sdk.ForbiddenError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 408: + value := new(sdk.UnauthorizedError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 404: + value := new(sdk.NotFoundError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 400: + value := new(sdk.BadRequestError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + } + return apiError + } + + if err := c.caller.Call( + ctx, + &core.CallParams{ + URL: endpointURL, + Method: http.MethodPost, + Headers: c.header, + Request: request, + ErrorDecoder: errorDecoder, + }, + ); err != nil { + return err + } + return nil +} diff --git a/sdks/api/full/go/edgeintercom/pegboard/pegboard.go b/sdks/api/full/go/edgeintercom/pegboard/pegboard.go new file mode 100644 index 0000000000..2c54df660a --- /dev/null +++ b/sdks/api/full/go/edgeintercom/pegboard/pegboard.go @@ -0,0 +1,69 @@ +// This file was auto-generated by Fern from our API Definition. + +package pegboard + +import ( + json "encoding/json" + fmt "fmt" + sdk "sdk" + core "sdk/core" +) + +type PrewarmImageRequest struct { + ImageArtifactUrlStub string `json:"image_artifact_url_stub"` + + _rawJSON json.RawMessage +} + +func (p *PrewarmImageRequest) UnmarshalJSON(data []byte) error { + type unmarshaler PrewarmImageRequest + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *p = PrewarmImageRequest(value) + p._rawJSON = json.RawMessage(data) + return nil +} + +func (p *PrewarmImageRequest) String() string { + if len(p._rawJSON) > 0 { + if value, err := core.StringifyJSON(p._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(p); err == nil { + return value + } + return fmt.Sprintf("%#v", p) +} + +type ToggleClientDrainRequest struct { + Draining bool `json:"draining"` + DrainCompleteTs *sdk.Timestamp `json:"drain_complete_ts,omitempty"` + + _rawJSON json.RawMessage +} + +func (t *ToggleClientDrainRequest) UnmarshalJSON(data []byte) error { + type unmarshaler ToggleClientDrainRequest + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *t = ToggleClientDrainRequest(value) + t._rawJSON = json.RawMessage(data) + return nil +} + +func (t *ToggleClientDrainRequest) String() string { + if len(t._rawJSON) > 0 { + if value, err := core.StringifyJSON(t._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(t); err == nil { + return value + } + return fmt.Sprintf("%#v", t) +} diff --git a/sdks/api/full/openapi/openapi.yml b/sdks/api/full/openapi/openapi.yml index c6091ae989..7e7ae64c9b 100644 --- a/sdks/api/full/openapi/openapi.yml +++ b/sdks/api/full/openapi/openapi.yml @@ -2063,6 +2063,175 @@ paths: schema: $ref: >- #/components/schemas/CloudGamesNamespacesUpdateGameNamespaceVersionRequest + /pegboard/client/{client_id}/registered: + post: + operationId: coreIntercom_pegboard_markClientRegistered + tags: + - CoreIntercomPegboard + parameters: + - name: client_id + in: path + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + '400': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '403': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '404': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '408': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '429': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '500': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + security: *ref_0 + /pegboard/image/{image_id}/prewarm: + post: + operationId: edgeIntercom_pegboard_prewarmImage + tags: + - EdgeIntercomPegboard + parameters: + - name: image_id + in: path + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + '400': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '403': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '404': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '408': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '429': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '500': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + security: *ref_0 + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EdgeIntercomPegboardPrewarmImageRequest' + /pegboard/client/{client_id}/toggle-drain: + post: + operationId: edgeIntercom_pegboard_toggleClientDrain + tags: + - EdgeIntercomPegboard + parameters: + - name: client_id + in: path + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + '400': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '403': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '404': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '408': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '429': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '500': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + security: *ref_0 + requestBody: + required: true + content: + application/json: + schema: + $ref: >- + #/components/schemas/EdgeIntercomPegboardToggleClientDrainRequest /group/groups: get: description: Returns a list of suggested groups. @@ -9572,6 +9741,22 @@ components: description: |- **Deprecated: use `game_modes` instead** A list of game modes. + EdgeIntercomPegboardPrewarmImageRequest: + type: object + properties: + image_artifact_url_stub: + type: string + required: + - image_artifact_url_stub + EdgeIntercomPegboardToggleClientDrainRequest: + type: object + properties: + draining: + type: boolean + drain_complete_ts: + $ref: '#/components/schemas/Timestamp' + required: + - draining GroupListSuggestedResponse: type: object properties: diff --git a/sdks/api/full/openapi_compat/openapi.yml b/sdks/api/full/openapi_compat/openapi.yml index 5c2f9d98cb..0fdc5ac5b8 100644 --- a/sdks/api/full/openapi_compat/openapi.yml +++ b/sdks/api/full/openapi_compat/openapi.yml @@ -2063,6 +2063,175 @@ paths: schema: $ref: >- #/components/schemas/CloudGamesNamespacesUpdateGameNamespaceVersionRequest + '/pegboard/client/{client_id}/registered': + post: + operationId: coreIntercom_pegboard_markClientRegistered + tags: + - CoreIntercomPegboard + parameters: + - name: client_id + in: path + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + '400': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '403': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '404': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '408': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '429': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '500': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + security: *ref_0 + '/pegboard/image/{image_id}/prewarm': + post: + operationId: edgeIntercom_pegboard_prewarmImage + tags: + - EdgeIntercomPegboard + parameters: + - name: image_id + in: path + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + '400': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '403': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '404': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '408': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '429': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '500': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + security: *ref_0 + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EdgeIntercomPegboardPrewarmImageRequest' + '/pegboard/client/{client_id}/toggle-drain': + post: + operationId: edgeIntercom_pegboard_toggleClientDrain + tags: + - EdgeIntercomPegboard + parameters: + - name: client_id + in: path + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + '400': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '403': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '404': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '408': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '429': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '500': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + security: *ref_0 + requestBody: + required: true + content: + application/json: + schema: + $ref: >- + #/components/schemas/EdgeIntercomPegboardToggleClientDrainRequest /group/groups: get: description: Returns a list of suggested groups. @@ -9572,6 +9741,22 @@ components: description: |- **Deprecated: use `game_modes` instead** A list of game modes. + EdgeIntercomPegboardPrewarmImageRequest: + type: object + properties: + image_artifact_url_stub: + type: string + required: + - image_artifact_url_stub + EdgeIntercomPegboardToggleClientDrainRequest: + type: object + properties: + draining: + type: boolean + drain_complete_ts: + $ref: '#/components/schemas/Timestamp' + required: + - draining GroupListSuggestedResponse: type: object properties: diff --git a/sdks/api/full/rust-cli/.gitignore b/sdks/api/full/rust-cli/.gitignore deleted file mode 100644 index 6aa106405a..0000000000 --- a/sdks/api/full/rust-cli/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/target/ -**/*.rs.bk -Cargo.lock diff --git a/sdks/api/full/rust-cli/.openapi-generator-ignore b/sdks/api/full/rust-cli/.openapi-generator-ignore deleted file mode 100644 index 7484ee590a..0000000000 --- a/sdks/api/full/rust-cli/.openapi-generator-ignore +++ /dev/null @@ -1,23 +0,0 @@ -# OpenAPI Generator Ignore -# Generated by openapi-generator https://github.com/openapitools/openapi-generator - -# Use this file to prevent files from being overwritten by the generator. -# The patterns follow closely to .gitignore or .dockerignore. - -# As an example, the C# client generator defines ApiClient.cs. -# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: -#ApiClient.cs - -# You can match any string of characters against a directory, file or extension with a single asterisk (*): -#foo/*/qux -# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux - -# You can recursively match patterns against a directory, file or extension with a double asterisk (**): -#foo/**/qux -# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux - -# You can also negate patterns with an exclamation (!). -# For example, you can ignore all files in a docs folder with the file extension .md: -#docs/*.md -# Then explicitly reverse the ignore rule for a single file: -#!docs/README.md diff --git a/sdks/api/full/rust-cli/.openapi-generator/FILES b/sdks/api/full/rust-cli/.openapi-generator/FILES deleted file mode 100644 index b09f3bce45..0000000000 --- a/sdks/api/full/rust-cli/.openapi-generator/FILES +++ /dev/null @@ -1,752 +0,0 @@ -.gitignore -.openapi-generator-ignore -.travis.yml -Cargo.toml -README.md -docs/ActorActor.md -docs/ActorApi.md -docs/ActorBuild.md -docs/ActorBuildCompression.md -docs/ActorBuildKind.md -docs/ActorBuildsApi.md -docs/ActorCreateActorNetworkRequest.md -docs/ActorCreateActorPortRequest.md -docs/ActorCreateActorRequest.md -docs/ActorCreateActorResponse.md -docs/ActorCreateActorRuntimeRequest.md -docs/ActorGetActorLogsResponse.md -docs/ActorGetActorResponse.md -docs/ActorGetBuildResponse.md -docs/ActorGuardRouting.md -docs/ActorLifecycle.md -docs/ActorListActorsResponse.md -docs/ActorListBuildsResponse.md -docs/ActorListRegionsResponse.md -docs/ActorLogStream.md -docs/ActorLogsApi.md -docs/ActorNetwork.md -docs/ActorNetworkMode.md -docs/ActorPatchBuildTagsRequest.md -docs/ActorPort.md -docs/ActorPortAuthorization.md -docs/ActorPortProtocol.md -docs/ActorPortQueryAuthorization.md -docs/ActorPortRouting.md -docs/ActorPrepareBuildRequest.md -docs/ActorPrepareBuildResponse.md -docs/ActorRegion.md -docs/ActorRegionsApi.md -docs/ActorResources.md -docs/ActorRuntime.md -docs/ActorUpgradeActorRequest.md -docs/ActorUpgradeAllActorsRequest.md -docs/ActorUpgradeAllActorsResponse.md -docs/AuthCompleteStatus.md -docs/AuthIdentityCompleteEmailVerificationRequest.md -docs/AuthIdentityCompleteEmailVerificationResponse.md -docs/AuthIdentityEmailApi.md -docs/AuthIdentityStartEmailVerificationRequest.md -docs/AuthIdentityStartEmailVerificationResponse.md -docs/AuthRefreshIdentityTokenRequest.md -docs/AuthRefreshIdentityTokenResponse.md -docs/AuthTokensApi.md -docs/CaptchaConfig.md -docs/CaptchaConfigHcaptcha.md -docs/CaptchaConfigTurnstile.md -docs/CloudApi.md -docs/CloudAuthAgent.md -docs/CloudAuthAgentGameCloud.md -docs/CloudAuthAgentIdentity.md -docs/CloudAuthApi.md -docs/CloudBootstrapAccess.md -docs/CloudBootstrapCaptcha.md -docs/CloudBootstrapCaptchaTurnstile.md -docs/CloudBootstrapCluster.md -docs/CloudBootstrapDomains.md -docs/CloudBootstrapLoginMethods.md -docs/CloudBootstrapOrigins.md -docs/CloudBootstrapResponse.md -docs/CloudBuildSummary.md -docs/CloudCdnAuthType.md -docs/CloudCdnNamespaceAuthUser.md -docs/CloudCdnNamespaceConfig.md -docs/CloudCdnNamespaceDomain.md -docs/CloudCdnNamespaceDomainVerificationMethod.md -docs/CloudCdnNamespaceDomainVerificationMethodHttp.md -docs/CloudCdnNamespaceDomainVerificationStatus.md -docs/CloudCdnSiteSummary.md -docs/CloudCustomAvatarSummary.md -docs/CloudDevicesCompleteDeviceLinkRequest.md -docs/CloudDevicesGetDeviceLinkResponse.md -docs/CloudDevicesLinksApi.md -docs/CloudDevicesPrepareDeviceLinkResponse.md -docs/CloudGameFull.md -docs/CloudGameLobbyExpenses.md -docs/CloudGamesApi.md -docs/CloudGamesAvatarsApi.md -docs/CloudGamesBuildCompression.md -docs/CloudGamesBuildKind.md -docs/CloudGamesBuildsApi.md -docs/CloudGamesCdnApi.md -docs/CloudGamesCreateCloudTokenResponse.md -docs/CloudGamesCreateGameBuildRequest.md -docs/CloudGamesCreateGameBuildResponse.md -docs/CloudGamesCreateGameCdnSiteRequest.md -docs/CloudGamesCreateGameCdnSiteResponse.md -docs/CloudGamesCreateGameRequest.md -docs/CloudGamesCreateGameResponse.md -docs/CloudGamesCreateGameVersionRequest.md -docs/CloudGamesCreateGameVersionResponse.md -docs/CloudGamesDeleteMatchmakerLobbyResponse.md -docs/CloudGamesExportLobbyLogsRequest.md -docs/CloudGamesExportLobbyLogsResponse.md -docs/CloudGamesExportMatchmakerLobbyHistoryRequest.md -docs/CloudGamesExportMatchmakerLobbyHistoryResponse.md -docs/CloudGamesGameBannerUploadPrepareRequest.md -docs/CloudGamesGameBannerUploadPrepareResponse.md -docs/CloudGamesGameLogoUploadPrepareRequest.md -docs/CloudGamesGameLogoUploadPrepareResponse.md -docs/CloudGamesGetGameByIdResponse.md -docs/CloudGamesGetGameVersionByIdResponse.md -docs/CloudGamesGetGamesResponse.md -docs/CloudGamesGetLobbyLogsResponse.md -docs/CloudGamesListGameBuildsResponse.md -docs/CloudGamesListGameCdnSitesResponse.md -docs/CloudGamesListGameCustomAvatarsResponse.md -docs/CloudGamesLogStream.md -docs/CloudGamesMatchmakerApi.md -docs/CloudGamesNamespacesAddNamespaceDomainRequest.md -docs/CloudGamesNamespacesAnalyticsApi.md -docs/CloudGamesNamespacesApi.md -docs/CloudGamesNamespacesCreateGameNamespaceRequest.md -docs/CloudGamesNamespacesCreateGameNamespaceResponse.md -docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest.md -docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse.md -docs/CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse.md -docs/CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse.md -docs/CloudGamesNamespacesGetGameNamespaceByIdResponse.md -docs/CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse.md -docs/CloudGamesNamespacesGetNamespaceLobbyResponse.md -docs/CloudGamesNamespacesInspectResponse.md -docs/CloudGamesNamespacesListNamespaceLobbiesResponse.md -docs/CloudGamesNamespacesLogsApi.md -docs/CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest.md -docs/CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest.md -docs/CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest.md -docs/CloudGamesNamespacesUpdateGameNamespaceVersionRequest.md -docs/CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest.md -docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest.md -docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse.md -docs/CloudGamesNamespacesValidateGameNamespaceRequest.md -docs/CloudGamesNamespacesValidateGameNamespaceResponse.md -docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest.md -docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse.md -docs/CloudGamesPrepareCustomAvatarUploadRequest.md -docs/CloudGamesPrepareCustomAvatarUploadResponse.md -docs/CloudGamesReserveVersionNameResponse.md -docs/CloudGamesTokensApi.md -docs/CloudGamesValidateGameRequest.md -docs/CloudGamesValidateGameResponse.md -docs/CloudGamesValidateGameVersionRequest.md -docs/CloudGamesValidateGameVersionResponse.md -docs/CloudGamesVersionsApi.md -docs/CloudGetRayPerfLogsResponse.md -docs/CloudGetRegionTiersResponse.md -docs/CloudGroupBankSource.md -docs/CloudGroupsApi.md -docs/CloudInspectResponse.md -docs/CloudLobbySummaryAnalytics.md -docs/CloudLogsApi.md -docs/CloudLogsLobbyStatus.md -docs/CloudLogsLobbyStatusStopped.md -docs/CloudLogsLobbySummary.md -docs/CloudLogsPerfMark.md -docs/CloudLogsPerfSpan.md -docs/CloudMatchmakerDevelopmentPort.md -docs/CloudMatchmakerNamespaceConfig.md -docs/CloudNamespaceConfig.md -docs/CloudNamespaceFull.md -docs/CloudNamespaceSummary.md -docs/CloudNamespaceVersion.md -docs/CloudRegionSummary.md -docs/CloudRegionTier.md -docs/CloudRegionTierExpenses.md -docs/CloudSvcMetrics.md -docs/CloudSvcPerf.md -docs/CloudTiersApi.md -docs/CloudUniversalRegion.md -docs/CloudUploadsApi.md -docs/CloudValidateGroupRequest.md -docs/CloudValidateGroupResponse.md -docs/CloudVersionCdnConfig.md -docs/CloudVersionCdnCustomHeadersMiddleware.md -docs/CloudVersionCdnHeader.md -docs/CloudVersionCdnMiddleware.md -docs/CloudVersionCdnMiddlewareKind.md -docs/CloudVersionCdnRoute.md -docs/CloudVersionConfig.md -docs/CloudVersionEngineConfig.md -docs/CloudVersionEngineUnrealConfig.md -docs/CloudVersionFull.md -docs/CloudVersionIdentityConfig.md -docs/CloudVersionIdentityCustomAvatar.md -docs/CloudVersionIdentityCustomDisplayName.md -docs/CloudVersionMatchmakerCaptcha.md -docs/CloudVersionMatchmakerCaptchaHcaptcha.md -docs/CloudVersionMatchmakerCaptchaHcaptchaLevel.md -docs/CloudVersionMatchmakerCaptchaTurnstile.md -docs/CloudVersionMatchmakerConfig.md -docs/CloudVersionMatchmakerGameMode.md -docs/CloudVersionMatchmakerGameModeActions.md -docs/CloudVersionMatchmakerGameModeCreateConfig.md -docs/CloudVersionMatchmakerGameModeFindConfig.md -docs/CloudVersionMatchmakerGameModeIdentityRequirement.md -docs/CloudVersionMatchmakerGameModeIdleLobbiesConfig.md -docs/CloudVersionMatchmakerGameModeJoinConfig.md -docs/CloudVersionMatchmakerGameModeRegion.md -docs/CloudVersionMatchmakerGameModeRuntimeDocker.md -docs/CloudVersionMatchmakerGameModeRuntimeDockerPort.md -docs/CloudVersionMatchmakerGameModeVerificationConfig.md -docs/CloudVersionMatchmakerLobbyGroup.md -docs/CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig.md -docs/CloudVersionMatchmakerLobbyGroupRegion.md -docs/CloudVersionMatchmakerLobbyGroupRuntime.md -docs/CloudVersionMatchmakerLobbyGroupRuntimeDocker.md -docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar.md -docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.md -docs/CloudVersionMatchmakerNetworkMode.md -docs/CloudVersionMatchmakerPortProtocol.md -docs/CloudVersionMatchmakerPortRange.md -docs/CloudVersionMatchmakerProxyKind.md -docs/CloudVersionSummary.md -docs/ErrorBody.md -docs/GameHandle.md -docs/GameLeaderboardCategory.md -docs/GamePlatformLink.md -docs/GameProfile.md -docs/GameStat.md -docs/GameStatAggregationMethod.md -docs/GameStatConfig.md -docs/GameStatFormatMethod.md -docs/GameStatSortingMethod.md -docs/GameStatSummary.md -docs/GameSummary.md -docs/GamesEnvironmentsCreateServiceTokenResponse.md -docs/GamesEnvironmentsTokensApi.md -docs/GeoCoord.md -docs/GeoDistance.md -docs/GlobalEventNotification.md -docs/GroupApi.md -docs/GroupBannedIdentity.md -docs/GroupConsumeInviteResponse.md -docs/GroupCreateInviteRequest.md -docs/GroupCreateInviteResponse.md -docs/GroupCreateRequest.md -docs/GroupCreateResponse.md -docs/GroupExternalLinks.md -docs/GroupGetBansResponse.md -docs/GroupGetInviteResponse.md -docs/GroupGetJoinRequestsResponse.md -docs/GroupGetMembersResponse.md -docs/GroupGetProfileResponse.md -docs/GroupGetSummaryResponse.md -docs/GroupHandle.md -docs/GroupInvitesApi.md -docs/GroupJoinRequest.md -docs/GroupJoinRequestsApi.md -docs/GroupListSuggestedResponse.md -docs/GroupMember.md -docs/GroupPrepareAvatarUploadRequest.md -docs/GroupPrepareAvatarUploadResponse.md -docs/GroupProfile.md -docs/GroupPublicity.md -docs/GroupResolveJoinRequestRequest.md -docs/GroupSummary.md -docs/GroupTransferOwnershipRequest.md -docs/GroupUpdateProfileRequest.md -docs/GroupValidateProfileRequest.md -docs/GroupValidateProfileResponse.md -docs/IdentityActivitiesApi.md -docs/IdentityApi.md -docs/IdentityDevState.md -docs/IdentityEmailLinkedAccount.md -docs/IdentityEventsApi.md -docs/IdentityExternalLinks.md -docs/IdentityGameActivity.md -docs/IdentityGameLinkStatus.md -docs/IdentityGetHandlesResponse.md -docs/IdentityGetProfileResponse.md -docs/IdentityGetSummariesResponse.md -docs/IdentityGlobalEvent.md -docs/IdentityGlobalEventIdentityUpdate.md -docs/IdentityGlobalEventKind.md -docs/IdentityGlobalEventNotification.md -docs/IdentityGroup.md -docs/IdentityHandle.md -docs/IdentityLinkedAccount.md -docs/IdentityListActivitiesResponse.md -docs/IdentityPrepareAvatarUploadRequest.md -docs/IdentityPrepareAvatarUploadResponse.md -docs/IdentityProfile.md -docs/IdentitySetGameActivityRequest.md -docs/IdentitySetupRequest.md -docs/IdentitySetupResponse.md -docs/IdentitySignupForBetaRequest.md -docs/IdentityStatus.md -docs/IdentitySummary.md -docs/IdentityUpdateGameActivity.md -docs/IdentityUpdateProfileRequest.md -docs/IdentityUpdateStatusRequest.md -docs/IdentityValidateProfileResponse.md -docs/IdentityWatchEventsResponse.md -docs/JobRunApi.md -docs/MatchmakerCreateLobbyResponse.md -docs/MatchmakerCustomLobbyPublicity.md -docs/MatchmakerFindLobbyResponse.md -docs/MatchmakerGameModeInfo.md -docs/MatchmakerGameModeStatistics.md -docs/MatchmakerGetStatisticsResponse.md -docs/MatchmakerJoinLobby.md -docs/MatchmakerJoinLobbyResponse.md -docs/MatchmakerJoinPlayer.md -docs/MatchmakerJoinPort.md -docs/MatchmakerJoinPortRange.md -docs/MatchmakerJoinRegion.md -docs/MatchmakerListLobbiesResponse.md -docs/MatchmakerListRegionsResponse.md -docs/MatchmakerLobbiesApi.md -docs/MatchmakerLobbiesCreateRequest.md -docs/MatchmakerLobbiesFindRequest.md -docs/MatchmakerLobbiesJoinRequest.md -docs/MatchmakerLobbiesSetClosedRequest.md -docs/MatchmakerLobbyInfo.md -docs/MatchmakerPlayersApi.md -docs/MatchmakerPlayersConnectedRequest.md -docs/MatchmakerRegionInfo.md -docs/MatchmakerRegionStatistics.md -docs/MatchmakerRegionsApi.md -docs/PortalGamesApi.md -docs/PortalGetGameProfileResponse.md -docs/PortalGetSuggestedGamesResponse.md -docs/PortalNotificationRegisterFirebaseService.md -docs/PortalNotificationRegisterService.md -docs/PortalNotificationUnregisterService.md -docs/ProvisionDatacentersApi.md -docs/ProvisionDatacentersGetServersResponse.md -docs/ProvisionDatacentersGetTlsResponse.md -docs/ProvisionPoolType.md -docs/ProvisionServer.md -docs/ProvisionServersApi.md -docs/ProvisionServersGetInfoResponse.md -docs/ServersApi.md -docs/ServersBuild.md -docs/ServersBuildCompression.md -docs/ServersBuildKind.md -docs/ServersBuildsApi.md -docs/ServersCreateBuildRequest.md -docs/ServersCreateBuildResponse.md -docs/ServersCreateServerNetworkRequest.md -docs/ServersCreateServerPortRequest.md -docs/ServersCreateServerRequest.md -docs/ServersCreateServerResponse.md -docs/ServersCreateServerRuntimeRequest.md -docs/ServersDatacenter.md -docs/ServersDatacentersApi.md -docs/ServersGetBuildResponse.md -docs/ServersGetServerLogsResponse.md -docs/ServersGetServerResponse.md -docs/ServersLifecycle.md -docs/ServersListBuildsResponse.md -docs/ServersListDatacentersResponse.md -docs/ServersListServersResponse.md -docs/ServersLogStream.md -docs/ServersLogsApi.md -docs/ServersNetwork.md -docs/ServersNetworkMode.md -docs/ServersPatchBuildTagsRequest.md -docs/ServersPort.md -docs/ServersPortProtocol.md -docs/ServersPortRouting.md -docs/ServersResources.md -docs/ServersRuntime.md -docs/ServersServer.md -docs/UploadPrepareFile.md -docs/UploadPresignedRequest.md -docs/ValidationError.md -docs/WatchResponse.md -git_push.sh -src/apis/actor_api.rs -src/apis/actor_builds_api.rs -src/apis/actor_logs_api.rs -src/apis/actor_regions_api.rs -src/apis/auth_identity_email_api.rs -src/apis/auth_tokens_api.rs -src/apis/cloud_api.rs -src/apis/cloud_auth_api.rs -src/apis/cloud_devices_links_api.rs -src/apis/cloud_games_api.rs -src/apis/cloud_games_avatars_api.rs -src/apis/cloud_games_builds_api.rs -src/apis/cloud_games_cdn_api.rs -src/apis/cloud_games_matchmaker_api.rs -src/apis/cloud_games_namespaces_analytics_api.rs -src/apis/cloud_games_namespaces_api.rs -src/apis/cloud_games_namespaces_logs_api.rs -src/apis/cloud_games_tokens_api.rs -src/apis/cloud_games_versions_api.rs -src/apis/cloud_groups_api.rs -src/apis/cloud_logs_api.rs -src/apis/cloud_tiers_api.rs -src/apis/cloud_uploads_api.rs -src/apis/configuration.rs -src/apis/games_environments_tokens_api.rs -src/apis/group_api.rs -src/apis/group_invites_api.rs -src/apis/group_join_requests_api.rs -src/apis/identity_activities_api.rs -src/apis/identity_api.rs -src/apis/identity_events_api.rs -src/apis/job_run_api.rs -src/apis/matchmaker_lobbies_api.rs -src/apis/matchmaker_players_api.rs -src/apis/matchmaker_regions_api.rs -src/apis/mod.rs -src/apis/portal_games_api.rs -src/apis/provision_datacenters_api.rs -src/apis/provision_servers_api.rs -src/apis/servers_api.rs -src/apis/servers_builds_api.rs -src/apis/servers_datacenters_api.rs -src/apis/servers_logs_api.rs -src/lib.rs -src/models/actor_actor.rs -src/models/actor_build.rs -src/models/actor_build_compression.rs -src/models/actor_build_kind.rs -src/models/actor_create_actor_network_request.rs -src/models/actor_create_actor_port_request.rs -src/models/actor_create_actor_request.rs -src/models/actor_create_actor_response.rs -src/models/actor_create_actor_runtime_request.rs -src/models/actor_get_actor_logs_response.rs -src/models/actor_get_actor_response.rs -src/models/actor_get_build_response.rs -src/models/actor_guard_routing.rs -src/models/actor_lifecycle.rs -src/models/actor_list_actors_response.rs -src/models/actor_list_builds_response.rs -src/models/actor_list_regions_response.rs -src/models/actor_log_stream.rs -src/models/actor_network.rs -src/models/actor_network_mode.rs -src/models/actor_patch_build_tags_request.rs -src/models/actor_port.rs -src/models/actor_port_authorization.rs -src/models/actor_port_protocol.rs -src/models/actor_port_query_authorization.rs -src/models/actor_port_routing.rs -src/models/actor_prepare_build_request.rs -src/models/actor_prepare_build_response.rs -src/models/actor_region.rs -src/models/actor_resources.rs -src/models/actor_runtime.rs -src/models/actor_upgrade_actor_request.rs -src/models/actor_upgrade_all_actors_request.rs -src/models/actor_upgrade_all_actors_response.rs -src/models/auth_complete_status.rs -src/models/auth_identity_complete_email_verification_request.rs -src/models/auth_identity_complete_email_verification_response.rs -src/models/auth_identity_start_email_verification_request.rs -src/models/auth_identity_start_email_verification_response.rs -src/models/auth_refresh_identity_token_request.rs -src/models/auth_refresh_identity_token_response.rs -src/models/captcha_config.rs -src/models/captcha_config_hcaptcha.rs -src/models/captcha_config_turnstile.rs -src/models/cloud_auth_agent.rs -src/models/cloud_auth_agent_game_cloud.rs -src/models/cloud_auth_agent_identity.rs -src/models/cloud_bootstrap_access.rs -src/models/cloud_bootstrap_captcha.rs -src/models/cloud_bootstrap_captcha_turnstile.rs -src/models/cloud_bootstrap_cluster.rs -src/models/cloud_bootstrap_domains.rs -src/models/cloud_bootstrap_login_methods.rs -src/models/cloud_bootstrap_origins.rs -src/models/cloud_bootstrap_response.rs -src/models/cloud_build_summary.rs -src/models/cloud_cdn_auth_type.rs -src/models/cloud_cdn_namespace_auth_user.rs -src/models/cloud_cdn_namespace_config.rs -src/models/cloud_cdn_namespace_domain.rs -src/models/cloud_cdn_namespace_domain_verification_method.rs -src/models/cloud_cdn_namespace_domain_verification_method_http.rs -src/models/cloud_cdn_namespace_domain_verification_status.rs -src/models/cloud_cdn_site_summary.rs -src/models/cloud_custom_avatar_summary.rs -src/models/cloud_devices_complete_device_link_request.rs -src/models/cloud_devices_get_device_link_response.rs -src/models/cloud_devices_prepare_device_link_response.rs -src/models/cloud_game_full.rs -src/models/cloud_game_lobby_expenses.rs -src/models/cloud_games_build_compression.rs -src/models/cloud_games_build_kind.rs -src/models/cloud_games_create_cloud_token_response.rs -src/models/cloud_games_create_game_build_request.rs -src/models/cloud_games_create_game_build_response.rs -src/models/cloud_games_create_game_cdn_site_request.rs -src/models/cloud_games_create_game_cdn_site_response.rs -src/models/cloud_games_create_game_request.rs -src/models/cloud_games_create_game_response.rs -src/models/cloud_games_create_game_version_request.rs -src/models/cloud_games_create_game_version_response.rs -src/models/cloud_games_delete_matchmaker_lobby_response.rs -src/models/cloud_games_export_lobby_logs_request.rs -src/models/cloud_games_export_lobby_logs_response.rs -src/models/cloud_games_export_matchmaker_lobby_history_request.rs -src/models/cloud_games_export_matchmaker_lobby_history_response.rs -src/models/cloud_games_game_banner_upload_prepare_request.rs -src/models/cloud_games_game_banner_upload_prepare_response.rs -src/models/cloud_games_game_logo_upload_prepare_request.rs -src/models/cloud_games_game_logo_upload_prepare_response.rs -src/models/cloud_games_get_game_by_id_response.rs -src/models/cloud_games_get_game_version_by_id_response.rs -src/models/cloud_games_get_games_response.rs -src/models/cloud_games_get_lobby_logs_response.rs -src/models/cloud_games_list_game_builds_response.rs -src/models/cloud_games_list_game_cdn_sites_response.rs -src/models/cloud_games_list_game_custom_avatars_response.rs -src/models/cloud_games_log_stream.rs -src/models/cloud_games_namespaces_add_namespace_domain_request.rs -src/models/cloud_games_namespaces_create_game_namespace_request.rs -src/models/cloud_games_namespaces_create_game_namespace_response.rs -src/models/cloud_games_namespaces_create_game_namespace_token_development_request.rs -src/models/cloud_games_namespaces_create_game_namespace_token_development_response.rs -src/models/cloud_games_namespaces_create_game_namespace_token_public_response.rs -src/models/cloud_games_namespaces_get_analytics_matchmaker_live_response.rs -src/models/cloud_games_namespaces_get_game_namespace_by_id_response.rs -src/models/cloud_games_namespaces_get_game_namespace_version_history_response.rs -src/models/cloud_games_namespaces_get_namespace_lobby_response.rs -src/models/cloud_games_namespaces_inspect_response.rs -src/models/cloud_games_namespaces_list_namespace_lobbies_response.rs -src/models/cloud_games_namespaces_set_namespace_cdn_auth_type_request.rs -src/models/cloud_games_namespaces_toggle_namespace_domain_public_auth_request.rs -src/models/cloud_games_namespaces_update_game_namespace_matchmaker_config_request.rs -src/models/cloud_games_namespaces_update_game_namespace_version_request.rs -src/models/cloud_games_namespaces_update_namespace_cdn_auth_user_request.rs -src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_request.rs -src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_response.rs -src/models/cloud_games_namespaces_validate_game_namespace_request.rs -src/models/cloud_games_namespaces_validate_game_namespace_response.rs -src/models/cloud_games_namespaces_validate_game_namespace_token_development_request.rs -src/models/cloud_games_namespaces_validate_game_namespace_token_development_response.rs -src/models/cloud_games_prepare_custom_avatar_upload_request.rs -src/models/cloud_games_prepare_custom_avatar_upload_response.rs -src/models/cloud_games_reserve_version_name_response.rs -src/models/cloud_games_validate_game_request.rs -src/models/cloud_games_validate_game_response.rs -src/models/cloud_games_validate_game_version_request.rs -src/models/cloud_games_validate_game_version_response.rs -src/models/cloud_get_ray_perf_logs_response.rs -src/models/cloud_get_region_tiers_response.rs -src/models/cloud_group_bank_source.rs -src/models/cloud_inspect_response.rs -src/models/cloud_lobby_summary_analytics.rs -src/models/cloud_logs_lobby_status.rs -src/models/cloud_logs_lobby_status_stopped.rs -src/models/cloud_logs_lobby_summary.rs -src/models/cloud_logs_perf_mark.rs -src/models/cloud_logs_perf_span.rs -src/models/cloud_matchmaker_development_port.rs -src/models/cloud_matchmaker_namespace_config.rs -src/models/cloud_namespace_config.rs -src/models/cloud_namespace_full.rs -src/models/cloud_namespace_summary.rs -src/models/cloud_namespace_version.rs -src/models/cloud_region_summary.rs -src/models/cloud_region_tier.rs -src/models/cloud_region_tier_expenses.rs -src/models/cloud_svc_metrics.rs -src/models/cloud_svc_perf.rs -src/models/cloud_universal_region.rs -src/models/cloud_validate_group_request.rs -src/models/cloud_validate_group_response.rs -src/models/cloud_version_cdn_config.rs -src/models/cloud_version_cdn_custom_headers_middleware.rs -src/models/cloud_version_cdn_header.rs -src/models/cloud_version_cdn_middleware.rs -src/models/cloud_version_cdn_middleware_kind.rs -src/models/cloud_version_cdn_route.rs -src/models/cloud_version_config.rs -src/models/cloud_version_engine_config.rs -src/models/cloud_version_engine_unreal_config.rs -src/models/cloud_version_full.rs -src/models/cloud_version_identity_config.rs -src/models/cloud_version_identity_custom_avatar.rs -src/models/cloud_version_identity_custom_display_name.rs -src/models/cloud_version_matchmaker_captcha.rs -src/models/cloud_version_matchmaker_captcha_hcaptcha.rs -src/models/cloud_version_matchmaker_captcha_hcaptcha_level.rs -src/models/cloud_version_matchmaker_captcha_turnstile.rs -src/models/cloud_version_matchmaker_config.rs -src/models/cloud_version_matchmaker_game_mode.rs -src/models/cloud_version_matchmaker_game_mode_actions.rs -src/models/cloud_version_matchmaker_game_mode_create_config.rs -src/models/cloud_version_matchmaker_game_mode_find_config.rs -src/models/cloud_version_matchmaker_game_mode_identity_requirement.rs -src/models/cloud_version_matchmaker_game_mode_idle_lobbies_config.rs -src/models/cloud_version_matchmaker_game_mode_join_config.rs -src/models/cloud_version_matchmaker_game_mode_region.rs -src/models/cloud_version_matchmaker_game_mode_runtime_docker.rs -src/models/cloud_version_matchmaker_game_mode_runtime_docker_port.rs -src/models/cloud_version_matchmaker_game_mode_verification_config.rs -src/models/cloud_version_matchmaker_lobby_group.rs -src/models/cloud_version_matchmaker_lobby_group_idle_lobbies_config.rs -src/models/cloud_version_matchmaker_lobby_group_region.rs -src/models/cloud_version_matchmaker_lobby_group_runtime.rs -src/models/cloud_version_matchmaker_lobby_group_runtime_docker.rs -src/models/cloud_version_matchmaker_lobby_group_runtime_docker_env_var.rs -src/models/cloud_version_matchmaker_lobby_group_runtime_docker_port.rs -src/models/cloud_version_matchmaker_network_mode.rs -src/models/cloud_version_matchmaker_port_protocol.rs -src/models/cloud_version_matchmaker_port_range.rs -src/models/cloud_version_matchmaker_proxy_kind.rs -src/models/cloud_version_summary.rs -src/models/error_body.rs -src/models/game_handle.rs -src/models/game_leaderboard_category.rs -src/models/game_platform_link.rs -src/models/game_profile.rs -src/models/game_stat.rs -src/models/game_stat_aggregation_method.rs -src/models/game_stat_config.rs -src/models/game_stat_format_method.rs -src/models/game_stat_sorting_method.rs -src/models/game_stat_summary.rs -src/models/game_summary.rs -src/models/games_environments_create_service_token_response.rs -src/models/geo_coord.rs -src/models/geo_distance.rs -src/models/global_event_notification.rs -src/models/group_banned_identity.rs -src/models/group_consume_invite_response.rs -src/models/group_create_invite_request.rs -src/models/group_create_invite_response.rs -src/models/group_create_request.rs -src/models/group_create_response.rs -src/models/group_external_links.rs -src/models/group_get_bans_response.rs -src/models/group_get_invite_response.rs -src/models/group_get_join_requests_response.rs -src/models/group_get_members_response.rs -src/models/group_get_profile_response.rs -src/models/group_get_summary_response.rs -src/models/group_handle.rs -src/models/group_join_request.rs -src/models/group_list_suggested_response.rs -src/models/group_member.rs -src/models/group_prepare_avatar_upload_request.rs -src/models/group_prepare_avatar_upload_response.rs -src/models/group_profile.rs -src/models/group_publicity.rs -src/models/group_resolve_join_request_request.rs -src/models/group_summary.rs -src/models/group_transfer_ownership_request.rs -src/models/group_update_profile_request.rs -src/models/group_validate_profile_request.rs -src/models/group_validate_profile_response.rs -src/models/identity_dev_state.rs -src/models/identity_email_linked_account.rs -src/models/identity_external_links.rs -src/models/identity_game_activity.rs -src/models/identity_game_link_status.rs -src/models/identity_get_handles_response.rs -src/models/identity_get_profile_response.rs -src/models/identity_get_summaries_response.rs -src/models/identity_global_event.rs -src/models/identity_global_event_identity_update.rs -src/models/identity_global_event_kind.rs -src/models/identity_global_event_notification.rs -src/models/identity_group.rs -src/models/identity_handle.rs -src/models/identity_linked_account.rs -src/models/identity_list_activities_response.rs -src/models/identity_prepare_avatar_upload_request.rs -src/models/identity_prepare_avatar_upload_response.rs -src/models/identity_profile.rs -src/models/identity_set_game_activity_request.rs -src/models/identity_setup_request.rs -src/models/identity_setup_response.rs -src/models/identity_signup_for_beta_request.rs -src/models/identity_status.rs -src/models/identity_summary.rs -src/models/identity_update_game_activity.rs -src/models/identity_update_profile_request.rs -src/models/identity_update_status_request.rs -src/models/identity_validate_profile_response.rs -src/models/identity_watch_events_response.rs -src/models/matchmaker_create_lobby_response.rs -src/models/matchmaker_custom_lobby_publicity.rs -src/models/matchmaker_find_lobby_response.rs -src/models/matchmaker_game_mode_info.rs -src/models/matchmaker_game_mode_statistics.rs -src/models/matchmaker_get_statistics_response.rs -src/models/matchmaker_join_lobby.rs -src/models/matchmaker_join_lobby_response.rs -src/models/matchmaker_join_player.rs -src/models/matchmaker_join_port.rs -src/models/matchmaker_join_port_range.rs -src/models/matchmaker_join_region.rs -src/models/matchmaker_list_lobbies_response.rs -src/models/matchmaker_list_regions_response.rs -src/models/matchmaker_lobbies_create_request.rs -src/models/matchmaker_lobbies_find_request.rs -src/models/matchmaker_lobbies_join_request.rs -src/models/matchmaker_lobbies_set_closed_request.rs -src/models/matchmaker_lobby_info.rs -src/models/matchmaker_players_connected_request.rs -src/models/matchmaker_region_info.rs -src/models/matchmaker_region_statistics.rs -src/models/mod.rs -src/models/portal_get_game_profile_response.rs -src/models/portal_get_suggested_games_response.rs -src/models/portal_notification_register_firebase_service.rs -src/models/portal_notification_register_service.rs -src/models/portal_notification_unregister_service.rs -src/models/provision_datacenters_get_servers_response.rs -src/models/provision_datacenters_get_tls_response.rs -src/models/provision_pool_type.rs -src/models/provision_server.rs -src/models/provision_servers_get_info_response.rs -src/models/servers_build.rs -src/models/servers_build_compression.rs -src/models/servers_build_kind.rs -src/models/servers_create_build_request.rs -src/models/servers_create_build_response.rs -src/models/servers_create_server_network_request.rs -src/models/servers_create_server_port_request.rs -src/models/servers_create_server_request.rs -src/models/servers_create_server_response.rs -src/models/servers_create_server_runtime_request.rs -src/models/servers_datacenter.rs -src/models/servers_get_build_response.rs -src/models/servers_get_server_logs_response.rs -src/models/servers_get_server_response.rs -src/models/servers_lifecycle.rs -src/models/servers_list_builds_response.rs -src/models/servers_list_datacenters_response.rs -src/models/servers_list_servers_response.rs -src/models/servers_log_stream.rs -src/models/servers_network.rs -src/models/servers_network_mode.rs -src/models/servers_patch_build_tags_request.rs -src/models/servers_port.rs -src/models/servers_port_protocol.rs -src/models/servers_port_routing.rs -src/models/servers_resources.rs -src/models/servers_runtime.rs -src/models/servers_server.rs -src/models/upload_prepare_file.rs -src/models/upload_presigned_request.rs -src/models/validation_error.rs -src/models/watch_response.rs diff --git a/sdks/api/full/rust-cli/.openapi-generator/VERSION b/sdks/api/full/rust-cli/.openapi-generator/VERSION deleted file mode 100644 index c0be8a7992..0000000000 --- a/sdks/api/full/rust-cli/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -6.4.0 \ No newline at end of file diff --git a/sdks/api/full/rust-cli/.travis.yml b/sdks/api/full/rust-cli/.travis.yml deleted file mode 100644 index 22761ba7ee..0000000000 --- a/sdks/api/full/rust-cli/.travis.yml +++ /dev/null @@ -1 +0,0 @@ -language: rust diff --git a/sdks/api/full/rust-cli/Cargo.toml b/sdks/api/full/rust-cli/Cargo.toml deleted file mode 100644 index d4956e3c12..0000000000 --- a/sdks/api/full/rust-cli/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "rivet-api-cli" -version = "0.0.1" -authors = ["OpenAPI Generator team and contributors"] -description = "No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)" -# Override this license by providing a License Object in the OpenAPI. -license = "Unlicense" -edition = "2018" - -[dependencies] -serde = "^1.0" -serde_derive = "^1.0" -serde_with = "^2.0" -serde_json = "^1.0" -url = "^2.2" -uuid = { version = "^1.0", features = ["serde"] } -[dependencies.reqwest] -version = "^0.11" -features = ["json", "multipart"] diff --git a/sdks/api/full/rust-cli/README.md b/sdks/api/full/rust-cli/README.md deleted file mode 100644 index 7bd6b316b6..0000000000 --- a/sdks/api/full/rust-cli/README.md +++ /dev/null @@ -1,508 +0,0 @@ -# Rust API client for rivet-api - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - - -## Overview - -This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client. - -- API version: 0.0.1 -- Package version: 0.0.1 -- Build package: `org.openapitools.codegen.languages.RustClientCodegen` - -## Installation - -Put the package under your project folder in a directory named `rivet-api` and add the following to `Cargo.toml` under `[dependencies]`: - -``` -rivet-api = { path = "./rivet-api" } -``` - -## Documentation for API Endpoints - -All URIs are relative to *https://api.rivet.gg* - -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*ActorApi* | [**actor_create**](docs/ActorApi.md#actor_create) | **POST** /actors | -*ActorApi* | [**actor_destroy**](docs/ActorApi.md#actor_destroy) | **DELETE** /actors/{actor} | -*ActorApi* | [**actor_get**](docs/ActorApi.md#actor_get) | **GET** /actors/{actor} | -*ActorApi* | [**actor_list**](docs/ActorApi.md#actor_list) | **GET** /actors | -*ActorApi* | [**actor_upgrade**](docs/ActorApi.md#actor_upgrade) | **POST** /actors/{actor}/upgrade | -*ActorApi* | [**actor_upgrade_all**](docs/ActorApi.md#actor_upgrade_all) | **POST** /actors/upgrade | -*ActorBuildsApi* | [**actor_builds_complete**](docs/ActorBuildsApi.md#actor_builds_complete) | **POST** /builds/{build}/complete | -*ActorBuildsApi* | [**actor_builds_get**](docs/ActorBuildsApi.md#actor_builds_get) | **GET** /builds/{build} | -*ActorBuildsApi* | [**actor_builds_list**](docs/ActorBuildsApi.md#actor_builds_list) | **GET** /builds | -*ActorBuildsApi* | [**actor_builds_patch_tags**](docs/ActorBuildsApi.md#actor_builds_patch_tags) | **PATCH** /builds/{build}/tags | -*ActorBuildsApi* | [**actor_builds_prepare**](docs/ActorBuildsApi.md#actor_builds_prepare) | **POST** /builds/prepare | -*ActorLogsApi* | [**actor_logs_get**](docs/ActorLogsApi.md#actor_logs_get) | **GET** /actors/{actor}/logs | -*ActorRegionsApi* | [**actor_regions_list**](docs/ActorRegionsApi.md#actor_regions_list) | **GET** /regions | -*AuthIdentityEmailApi* | [**auth_identity_email_complete_email_verification**](docs/AuthIdentityEmailApi.md#auth_identity_email_complete_email_verification) | **POST** /auth/identity/email/complete-verification | -*AuthIdentityEmailApi* | [**auth_identity_email_start_email_verification**](docs/AuthIdentityEmailApi.md#auth_identity_email_start_email_verification) | **POST** /auth/identity/email/start-verification | -*AuthTokensApi* | [**auth_tokens_refresh_identity_token**](docs/AuthTokensApi.md#auth_tokens_refresh_identity_token) | **POST** /auth/tokens/identity | -*CloudApi* | [**cloud_bootstrap**](docs/CloudApi.md#cloud_bootstrap) | **GET** /cloud/bootstrap | -*CloudAuthApi* | [**cloud_auth_inspect**](docs/CloudAuthApi.md#cloud_auth_inspect) | **GET** /cloud/auth/inspect | -*CloudDevicesLinksApi* | [**cloud_devices_links_complete**](docs/CloudDevicesLinksApi.md#cloud_devices_links_complete) | **POST** /cloud/devices/links/complete | -*CloudDevicesLinksApi* | [**cloud_devices_links_get**](docs/CloudDevicesLinksApi.md#cloud_devices_links_get) | **GET** /cloud/devices/links | -*CloudDevicesLinksApi* | [**cloud_devices_links_prepare**](docs/CloudDevicesLinksApi.md#cloud_devices_links_prepare) | **POST** /cloud/devices/links | -*CloudGamesApi* | [**cloud_games_create_game**](docs/CloudGamesApi.md#cloud_games_create_game) | **POST** /cloud/games | -*CloudGamesApi* | [**cloud_games_game_banner_upload_complete**](docs/CloudGamesApi.md#cloud_games_game_banner_upload_complete) | **POST** /cloud/games/{game_id}/banner-upload/{upload_id}/complete | -*CloudGamesApi* | [**cloud_games_game_banner_upload_prepare**](docs/CloudGamesApi.md#cloud_games_game_banner_upload_prepare) | **POST** /cloud/games/{game_id}/banner-upload/prepare | -*CloudGamesApi* | [**cloud_games_game_logo_upload_complete**](docs/CloudGamesApi.md#cloud_games_game_logo_upload_complete) | **POST** /cloud/games/{game_id}/logo-upload/{upload_id}/complete | -*CloudGamesApi* | [**cloud_games_game_logo_upload_prepare**](docs/CloudGamesApi.md#cloud_games_game_logo_upload_prepare) | **POST** /cloud/games/{game_id}/logo-upload/prepare | -*CloudGamesApi* | [**cloud_games_get_game_by_id**](docs/CloudGamesApi.md#cloud_games_get_game_by_id) | **GET** /cloud/games/{game_id} | -*CloudGamesApi* | [**cloud_games_get_games**](docs/CloudGamesApi.md#cloud_games_get_games) | **GET** /cloud/games | -*CloudGamesApi* | [**cloud_games_validate_game**](docs/CloudGamesApi.md#cloud_games_validate_game) | **POST** /cloud/games/validate | -*CloudGamesAvatarsApi* | [**cloud_games_avatars_complete_custom_avatar_upload**](docs/CloudGamesAvatarsApi.md#cloud_games_avatars_complete_custom_avatar_upload) | **POST** /cloud/games/{game_id}/avatar-upload/{upload_id}/complete | -*CloudGamesAvatarsApi* | [**cloud_games_avatars_list_game_custom_avatars**](docs/CloudGamesAvatarsApi.md#cloud_games_avatars_list_game_custom_avatars) | **GET** /cloud/games/{game_id}/avatars | -*CloudGamesAvatarsApi* | [**cloud_games_avatars_prepare_custom_avatar_upload**](docs/CloudGamesAvatarsApi.md#cloud_games_avatars_prepare_custom_avatar_upload) | **POST** /cloud/games/{game_id}/prepare | -*CloudGamesBuildsApi* | [**cloud_games_builds_create_game_build**](docs/CloudGamesBuildsApi.md#cloud_games_builds_create_game_build) | **POST** /cloud/games/{game_id}/builds | -*CloudGamesBuildsApi* | [**cloud_games_builds_list_game_builds**](docs/CloudGamesBuildsApi.md#cloud_games_builds_list_game_builds) | **GET** /cloud/games/{game_id}/builds | -*CloudGamesCdnApi* | [**cloud_games_cdn_create_game_cdn_site**](docs/CloudGamesCdnApi.md#cloud_games_cdn_create_game_cdn_site) | **POST** /cloud/games/{game_id}/cdn/sites | -*CloudGamesCdnApi* | [**cloud_games_cdn_list_game_cdn_sites**](docs/CloudGamesCdnApi.md#cloud_games_cdn_list_game_cdn_sites) | **GET** /cloud/games/{game_id}/cdn/sites | -*CloudGamesMatchmakerApi* | [**cloud_games_matchmaker_delete_matchmaker_lobby**](docs/CloudGamesMatchmakerApi.md#cloud_games_matchmaker_delete_matchmaker_lobby) | **DELETE** /cloud/games/{game_id}/matchmaker/lobbies/{lobby_id} | -*CloudGamesMatchmakerApi* | [**cloud_games_matchmaker_export_lobby_logs**](docs/CloudGamesMatchmakerApi.md#cloud_games_matchmaker_export_lobby_logs) | **POST** /cloud/games/{game_id}/matchmaker/lobbies/{lobby_id}/logs/export | -*CloudGamesMatchmakerApi* | [**cloud_games_matchmaker_export_matchmaker_lobby_history**](docs/CloudGamesMatchmakerApi.md#cloud_games_matchmaker_export_matchmaker_lobby_history) | **POST** /cloud/games/{game_id}/matchmaker/lobbies/export-history | -*CloudGamesMatchmakerApi* | [**cloud_games_matchmaker_get_lobby_logs**](docs/CloudGamesMatchmakerApi.md#cloud_games_matchmaker_get_lobby_logs) | **GET** /cloud/games/{game_id}/matchmaker/lobbies/{lobby_id}/logs | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_add_namespace_domain**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_add_namespace_domain) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/domains | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_create_game_namespace**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_create_game_namespace) | **POST** /cloud/games/{game_id}/namespaces | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_create_game_namespace_token_development**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_create_game_namespace_token_development) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/tokens/development | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_create_game_namespace_token_public**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_create_game_namespace_token_public) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/tokens/public | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_get_game_namespace_by_id**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_get_game_namespace_by_id) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id} | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_get_game_namespace_version_history_list**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_get_game_namespace_version_history_list) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/version-history | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_remove_namespace_cdn_auth_user**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_remove_namespace_cdn_auth_user) | **DELETE** /cloud/games/{game_id}/namespaces/{namespace_id}/auth-user/{user} | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_remove_namespace_domain**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_remove_namespace_domain) | **DELETE** /cloud/games/{game_id}/namespaces/{namespace_id}/domains/{domain} | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_set_namespace_cdn_auth_type**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_set_namespace_cdn_auth_type) | **PUT** /cloud/games/{game_id}/namespaces/{namespace_id}/cdn-auth | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_toggle_namespace_domain_public_auth**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_toggle_namespace_domain_public_auth) | **PUT** /cloud/games/{game_id}/namespaces/{namespace_id}/domain-public-auth | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_update_game_namespace_matchmaker_config**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_update_game_namespace_matchmaker_config) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/mm-config | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_update_game_namespace_version**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_update_game_namespace_version) | **PUT** /cloud/games/{game_id}/namespaces/{namespace_id}/version | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_update_namespace_cdn_auth_user**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_update_namespace_cdn_auth_user) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/auth-user | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_validate_game_namespace**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_validate_game_namespace) | **POST** /cloud/games/{game_id}/namespaces/validate | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_validate_game_namespace_matchmaker_config**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_validate_game_namespace_matchmaker_config) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/mm-config/validate | -*CloudGamesNamespacesApi* | [**cloud_games_namespaces_validate_game_namespace_token_development**](docs/CloudGamesNamespacesApi.md#cloud_games_namespaces_validate_game_namespace_token_development) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/tokens/development/validate | -*CloudGamesNamespacesAnalyticsApi* | [**cloud_games_namespaces_analytics_get_analytics_matchmaker_live**](docs/CloudGamesNamespacesAnalyticsApi.md#cloud_games_namespaces_analytics_get_analytics_matchmaker_live) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/analytics/matchmaker/live | -*CloudGamesNamespacesLogsApi* | [**cloud_games_namespaces_logs_get_namespace_lobby**](docs/CloudGamesNamespacesLogsApi.md#cloud_games_namespaces_logs_get_namespace_lobby) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/logs/lobbies/{lobby_id} | -*CloudGamesNamespacesLogsApi* | [**cloud_games_namespaces_logs_list_namespace_lobbies**](docs/CloudGamesNamespacesLogsApi.md#cloud_games_namespaces_logs_list_namespace_lobbies) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/logs/lobbies | -*CloudGamesTokensApi* | [**cloud_games_tokens_create_cloud_token**](docs/CloudGamesTokensApi.md#cloud_games_tokens_create_cloud_token) | **POST** /cloud/games/{game_id}/tokens/cloud | -*CloudGamesVersionsApi* | [**cloud_games_versions_create_game_version**](docs/CloudGamesVersionsApi.md#cloud_games_versions_create_game_version) | **POST** /cloud/games/{game_id}/versions | -*CloudGamesVersionsApi* | [**cloud_games_versions_get_game_version_by_id**](docs/CloudGamesVersionsApi.md#cloud_games_versions_get_game_version_by_id) | **GET** /cloud/games/{game_id}/versions/{version_id} | -*CloudGamesVersionsApi* | [**cloud_games_versions_reserve_version_name**](docs/CloudGamesVersionsApi.md#cloud_games_versions_reserve_version_name) | **POST** /cloud/games/{game_id}/versions/reserve-name | -*CloudGamesVersionsApi* | [**cloud_games_versions_validate_game_version**](docs/CloudGamesVersionsApi.md#cloud_games_versions_validate_game_version) | **POST** /cloud/games/{game_id}/versions/validate | -*CloudGroupsApi* | [**cloud_groups_validate**](docs/CloudGroupsApi.md#cloud_groups_validate) | **POST** /cloud/groups/validate | -*CloudLogsApi* | [**cloud_logs_get_ray_perf_logs**](docs/CloudLogsApi.md#cloud_logs_get_ray_perf_logs) | **GET** /cloud/rays/{ray_id}/perf | -*CloudTiersApi* | [**cloud_tiers_get_region_tiers**](docs/CloudTiersApi.md#cloud_tiers_get_region_tiers) | **GET** /cloud/region-tiers | -*CloudUploadsApi* | [**cloud_uploads_complete_upload**](docs/CloudUploadsApi.md#cloud_uploads_complete_upload) | **POST** /cloud/uploads/{upload_id}/complete | -*GamesEnvironmentsTokensApi* | [**games_environments_tokens_create_service_token**](docs/GamesEnvironmentsTokensApi.md#games_environments_tokens_create_service_token) | **POST** /games/{game_id}/environments/{environment_id}/tokens/service | -*GroupApi* | [**group_ban_identity**](docs/GroupApi.md#group_ban_identity) | **POST** /group/groups/{group_id}/bans/{identity_id} | -*GroupApi* | [**group_complete_avatar_upload**](docs/GroupApi.md#group_complete_avatar_upload) | **POST** /group/groups/{group_id}/avatar-upload/{upload_id}/complete | -*GroupApi* | [**group_create**](docs/GroupApi.md#group_create) | **POST** /group/groups | -*GroupApi* | [**group_get_bans**](docs/GroupApi.md#group_get_bans) | **GET** /group/groups/{group_id}/bans | -*GroupApi* | [**group_get_join_requests**](docs/GroupApi.md#group_get_join_requests) | **GET** /group/groups/{group_id}/join-requests | -*GroupApi* | [**group_get_members**](docs/GroupApi.md#group_get_members) | **GET** /group/groups/{group_id}/members | -*GroupApi* | [**group_get_profile**](docs/GroupApi.md#group_get_profile) | **GET** /group/groups/{group_id}/profile | -*GroupApi* | [**group_get_summary**](docs/GroupApi.md#group_get_summary) | **GET** /group/groups/{group_id}/summary | -*GroupApi* | [**group_kick_member**](docs/GroupApi.md#group_kick_member) | **POST** /group/groups/{group_id}/kick/{identity_id} | -*GroupApi* | [**group_leave**](docs/GroupApi.md#group_leave) | **POST** /group/groups/{group_id}/leave | -*GroupApi* | [**group_list_suggested**](docs/GroupApi.md#group_list_suggested) | **GET** /group/groups | -*GroupApi* | [**group_prepare_avatar_upload**](docs/GroupApi.md#group_prepare_avatar_upload) | **POST** /group/groups/avatar-upload/prepare | -*GroupApi* | [**group_transfer_ownership**](docs/GroupApi.md#group_transfer_ownership) | **POST** /group/groups/{group_id}/transfer-owner | -*GroupApi* | [**group_unban_identity**](docs/GroupApi.md#group_unban_identity) | **DELETE** /group/groups/{group_id}/bans/{identity_id} | -*GroupApi* | [**group_update_profile**](docs/GroupApi.md#group_update_profile) | **POST** /group/groups/{group_id}/profile | -*GroupApi* | [**group_validate_profile**](docs/GroupApi.md#group_validate_profile) | **POST** /group/groups/profile/validate | -*GroupInvitesApi* | [**group_invites_consume_invite**](docs/GroupInvitesApi.md#group_invites_consume_invite) | **POST** /group/invites/{group_invite_code}/consume | -*GroupInvitesApi* | [**group_invites_create_invite**](docs/GroupInvitesApi.md#group_invites_create_invite) | **POST** /group/groups/{group_id}/invites | -*GroupInvitesApi* | [**group_invites_get_invite**](docs/GroupInvitesApi.md#group_invites_get_invite) | **GET** /group/invites/{group_invite_code} | -*GroupJoinRequestsApi* | [**group_join_requests_create_join_request**](docs/GroupJoinRequestsApi.md#group_join_requests_create_join_request) | **POST** /group/groups/{group_id}/join-request | -*GroupJoinRequestsApi* | [**group_join_requests_resolve_join_request**](docs/GroupJoinRequestsApi.md#group_join_requests_resolve_join_request) | **POST** /group/groups/{group_id}/join-request/{identity_id} | -*IdentityApi* | [**identity_complete_avatar_upload**](docs/IdentityApi.md#identity_complete_avatar_upload) | **POST** /identity/identities/avatar-upload/{upload_id}/complete | -*IdentityApi* | [**identity_get_handles**](docs/IdentityApi.md#identity_get_handles) | **GET** /identity/identities/batch/handle | -*IdentityApi* | [**identity_get_profile**](docs/IdentityApi.md#identity_get_profile) | **GET** /identity/identities/{identity_id}/profile | -*IdentityApi* | [**identity_get_self_profile**](docs/IdentityApi.md#identity_get_self_profile) | **GET** /identity/identities/self/profile | -*IdentityApi* | [**identity_get_summaries**](docs/IdentityApi.md#identity_get_summaries) | **GET** /identity/identities/batch/summary | -*IdentityApi* | [**identity_mark_deletion**](docs/IdentityApi.md#identity_mark_deletion) | **POST** /identity/identities/self/delete-request | -*IdentityApi* | [**identity_prepare_avatar_upload**](docs/IdentityApi.md#identity_prepare_avatar_upload) | **POST** /identity/identities/avatar-upload/prepare | -*IdentityApi* | [**identity_remove_game_activity**](docs/IdentityApi.md#identity_remove_game_activity) | **DELETE** /identity/identities/self/activity | -*IdentityApi* | [**identity_set_game_activity**](docs/IdentityApi.md#identity_set_game_activity) | **POST** /identity/identities/self/activity | -*IdentityApi* | [**identity_setup**](docs/IdentityApi.md#identity_setup) | **POST** /identity/identities | -*IdentityApi* | [**identity_signup_for_beta**](docs/IdentityApi.md#identity_signup_for_beta) | **POST** /identity/identities/self/beta-signup | -*IdentityApi* | [**identity_unmark_deletion**](docs/IdentityApi.md#identity_unmark_deletion) | **DELETE** /identity/identities/self/delete-request | -*IdentityApi* | [**identity_update_profile**](docs/IdentityApi.md#identity_update_profile) | **POST** /identity/identities/self/profile | -*IdentityApi* | [**identity_update_status**](docs/IdentityApi.md#identity_update_status) | **POST** /identity/identities/identities/self/status | -*IdentityApi* | [**identity_validate_profile**](docs/IdentityApi.md#identity_validate_profile) | **POST** /identity/identities/self/profile/validate | -*IdentityActivitiesApi* | [**identity_activities_list**](docs/IdentityActivitiesApi.md#identity_activities_list) | **GET** /identity/activities | -*IdentityEventsApi* | [**identity_events_watch**](docs/IdentityEventsApi.md#identity_events_watch) | **GET** /identity/events/live | -*JobRunApi* | [**job_run_cleanup**](docs/JobRunApi.md#job_run_cleanup) | **POST** /job/runs/cleanup | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_create**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_create) | **POST** /matchmaker/lobbies/create | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_find**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_find) | **POST** /matchmaker/lobbies/find | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_get_state**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_get_state) | **GET** /matchmaker/lobbies/{lobby_id}/state | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_join**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_join) | **POST** /matchmaker/lobbies/join | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_list**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_list) | **GET** /matchmaker/lobbies/list | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_ready**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_ready) | **POST** /matchmaker/lobbies/ready | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_set_closed**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_set_closed) | **PUT** /matchmaker/lobbies/closed | -*MatchmakerLobbiesApi* | [**matchmaker_lobbies_set_state**](docs/MatchmakerLobbiesApi.md#matchmaker_lobbies_set_state) | **PUT** /matchmaker/lobbies/state | -*MatchmakerPlayersApi* | [**matchmaker_players_connected**](docs/MatchmakerPlayersApi.md#matchmaker_players_connected) | **POST** /matchmaker/players/connected | -*MatchmakerPlayersApi* | [**matchmaker_players_disconnected**](docs/MatchmakerPlayersApi.md#matchmaker_players_disconnected) | **POST** /matchmaker/players/disconnected | -*MatchmakerPlayersApi* | [**matchmaker_players_get_statistics**](docs/MatchmakerPlayersApi.md#matchmaker_players_get_statistics) | **GET** /matchmaker/players/statistics | -*MatchmakerRegionsApi* | [**matchmaker_regions_list**](docs/MatchmakerRegionsApi.md#matchmaker_regions_list) | **GET** /matchmaker/regions | -*PortalGamesApi* | [**portal_games_get_game_profile**](docs/PortalGamesApi.md#portal_games_get_game_profile) | **GET** /portal/games/{game_name_id}/profile | -*ProvisionDatacentersApi* | [**provision_datacenters_get_servers**](docs/ProvisionDatacentersApi.md#provision_datacenters_get_servers) | **GET** /datacenters/{datacenter_id}/servers | -*ProvisionDatacentersApi* | [**provision_datacenters_get_tls**](docs/ProvisionDatacentersApi.md#provision_datacenters_get_tls) | **GET** /datacenters/{datacenter_id}/tls | -*ProvisionServersApi* | [**provision_servers_get_info**](docs/ProvisionServersApi.md#provision_servers_get_info) | **GET** /servers/{ip} | -*ServersApi* | [**servers_create**](docs/ServersApi.md#servers_create) | **POST** /games/{game_id}/environments/{environment_id}/servers | -*ServersApi* | [**servers_destroy**](docs/ServersApi.md#servers_destroy) | **DELETE** /games/{game_id}/environments/{environment_id}/servers/{server_id} | -*ServersApi* | [**servers_get**](docs/ServersApi.md#servers_get) | **GET** /games/{game_id}/environments/{environment_id}/servers/{server_id} | -*ServersApi* | [**servers_list**](docs/ServersApi.md#servers_list) | **GET** /games/{game_id}/environments/{environment_id}/servers | -*ServersBuildsApi* | [**servers_builds_complete**](docs/ServersBuildsApi.md#servers_builds_complete) | **POST** /games/{game_id}/environments/{environment_id}/builds/{build_id}/complete | -*ServersBuildsApi* | [**servers_builds_get**](docs/ServersBuildsApi.md#servers_builds_get) | **GET** /games/{game_id}/environments/{environment_id}/builds/{build_id} | -*ServersBuildsApi* | [**servers_builds_list**](docs/ServersBuildsApi.md#servers_builds_list) | **GET** /games/{game_id}/environments/{environment_id}/builds | -*ServersBuildsApi* | [**servers_builds_patch_tags**](docs/ServersBuildsApi.md#servers_builds_patch_tags) | **PATCH** /games/{game_id}/environments/{environment_id}/builds/{build_id}/tags | -*ServersBuildsApi* | [**servers_builds_prepare**](docs/ServersBuildsApi.md#servers_builds_prepare) | **POST** /games/{game_id}/environments/{environment_id}/builds/prepare | -*ServersDatacentersApi* | [**servers_datacenters_list**](docs/ServersDatacentersApi.md#servers_datacenters_list) | **GET** /games/{game_id}/environments/{environment_id}/datacenters | -*ServersLogsApi* | [**servers_logs_get**](docs/ServersLogsApi.md#servers_logs_get) | **GET** /games/{game_id}/environments/{environment_id}/servers/{server_id}/logs | - - -## Documentation For Models - - - [ActorActor](docs/ActorActor.md) - - [ActorBuild](docs/ActorBuild.md) - - [ActorBuildCompression](docs/ActorBuildCompression.md) - - [ActorBuildKind](docs/ActorBuildKind.md) - - [ActorCreateActorNetworkRequest](docs/ActorCreateActorNetworkRequest.md) - - [ActorCreateActorPortRequest](docs/ActorCreateActorPortRequest.md) - - [ActorCreateActorRequest](docs/ActorCreateActorRequest.md) - - [ActorCreateActorResponse](docs/ActorCreateActorResponse.md) - - [ActorCreateActorRuntimeRequest](docs/ActorCreateActorRuntimeRequest.md) - - [ActorGetActorLogsResponse](docs/ActorGetActorLogsResponse.md) - - [ActorGetActorResponse](docs/ActorGetActorResponse.md) - - [ActorGetBuildResponse](docs/ActorGetBuildResponse.md) - - [ActorGuardRouting](docs/ActorGuardRouting.md) - - [ActorLifecycle](docs/ActorLifecycle.md) - - [ActorListActorsResponse](docs/ActorListActorsResponse.md) - - [ActorListBuildsResponse](docs/ActorListBuildsResponse.md) - - [ActorListRegionsResponse](docs/ActorListRegionsResponse.md) - - [ActorLogStream](docs/ActorLogStream.md) - - [ActorNetwork](docs/ActorNetwork.md) - - [ActorNetworkMode](docs/ActorNetworkMode.md) - - [ActorPatchBuildTagsRequest](docs/ActorPatchBuildTagsRequest.md) - - [ActorPort](docs/ActorPort.md) - - [ActorPortAuthorization](docs/ActorPortAuthorization.md) - - [ActorPortProtocol](docs/ActorPortProtocol.md) - - [ActorPortQueryAuthorization](docs/ActorPortQueryAuthorization.md) - - [ActorPortRouting](docs/ActorPortRouting.md) - - [ActorPrepareBuildRequest](docs/ActorPrepareBuildRequest.md) - - [ActorPrepareBuildResponse](docs/ActorPrepareBuildResponse.md) - - [ActorRegion](docs/ActorRegion.md) - - [ActorResources](docs/ActorResources.md) - - [ActorRuntime](docs/ActorRuntime.md) - - [ActorUpgradeActorRequest](docs/ActorUpgradeActorRequest.md) - - [ActorUpgradeAllActorsRequest](docs/ActorUpgradeAllActorsRequest.md) - - [ActorUpgradeAllActorsResponse](docs/ActorUpgradeAllActorsResponse.md) - - [AuthCompleteStatus](docs/AuthCompleteStatus.md) - - [AuthIdentityCompleteEmailVerificationRequest](docs/AuthIdentityCompleteEmailVerificationRequest.md) - - [AuthIdentityCompleteEmailVerificationResponse](docs/AuthIdentityCompleteEmailVerificationResponse.md) - - [AuthIdentityStartEmailVerificationRequest](docs/AuthIdentityStartEmailVerificationRequest.md) - - [AuthIdentityStartEmailVerificationResponse](docs/AuthIdentityStartEmailVerificationResponse.md) - - [AuthRefreshIdentityTokenRequest](docs/AuthRefreshIdentityTokenRequest.md) - - [AuthRefreshIdentityTokenResponse](docs/AuthRefreshIdentityTokenResponse.md) - - [CaptchaConfig](docs/CaptchaConfig.md) - - [CaptchaConfigHcaptcha](docs/CaptchaConfigHcaptcha.md) - - [CaptchaConfigTurnstile](docs/CaptchaConfigTurnstile.md) - - [CloudAuthAgent](docs/CloudAuthAgent.md) - - [CloudAuthAgentGameCloud](docs/CloudAuthAgentGameCloud.md) - - [CloudAuthAgentIdentity](docs/CloudAuthAgentIdentity.md) - - [CloudBootstrapAccess](docs/CloudBootstrapAccess.md) - - [CloudBootstrapCaptcha](docs/CloudBootstrapCaptcha.md) - - [CloudBootstrapCaptchaTurnstile](docs/CloudBootstrapCaptchaTurnstile.md) - - [CloudBootstrapCluster](docs/CloudBootstrapCluster.md) - - [CloudBootstrapDomains](docs/CloudBootstrapDomains.md) - - [CloudBootstrapLoginMethods](docs/CloudBootstrapLoginMethods.md) - - [CloudBootstrapOrigins](docs/CloudBootstrapOrigins.md) - - [CloudBootstrapResponse](docs/CloudBootstrapResponse.md) - - [CloudBuildSummary](docs/CloudBuildSummary.md) - - [CloudCdnAuthType](docs/CloudCdnAuthType.md) - - [CloudCdnNamespaceAuthUser](docs/CloudCdnNamespaceAuthUser.md) - - [CloudCdnNamespaceConfig](docs/CloudCdnNamespaceConfig.md) - - [CloudCdnNamespaceDomain](docs/CloudCdnNamespaceDomain.md) - - [CloudCdnNamespaceDomainVerificationMethod](docs/CloudCdnNamespaceDomainVerificationMethod.md) - - [CloudCdnNamespaceDomainVerificationMethodHttp](docs/CloudCdnNamespaceDomainVerificationMethodHttp.md) - - [CloudCdnNamespaceDomainVerificationStatus](docs/CloudCdnNamespaceDomainVerificationStatus.md) - - [CloudCdnSiteSummary](docs/CloudCdnSiteSummary.md) - - [CloudCustomAvatarSummary](docs/CloudCustomAvatarSummary.md) - - [CloudDevicesCompleteDeviceLinkRequest](docs/CloudDevicesCompleteDeviceLinkRequest.md) - - [CloudDevicesGetDeviceLinkResponse](docs/CloudDevicesGetDeviceLinkResponse.md) - - [CloudDevicesPrepareDeviceLinkResponse](docs/CloudDevicesPrepareDeviceLinkResponse.md) - - [CloudGameFull](docs/CloudGameFull.md) - - [CloudGameLobbyExpenses](docs/CloudGameLobbyExpenses.md) - - [CloudGamesBuildCompression](docs/CloudGamesBuildCompression.md) - - [CloudGamesBuildKind](docs/CloudGamesBuildKind.md) - - [CloudGamesCreateCloudTokenResponse](docs/CloudGamesCreateCloudTokenResponse.md) - - [CloudGamesCreateGameBuildRequest](docs/CloudGamesCreateGameBuildRequest.md) - - [CloudGamesCreateGameBuildResponse](docs/CloudGamesCreateGameBuildResponse.md) - - [CloudGamesCreateGameCdnSiteRequest](docs/CloudGamesCreateGameCdnSiteRequest.md) - - [CloudGamesCreateGameCdnSiteResponse](docs/CloudGamesCreateGameCdnSiteResponse.md) - - [CloudGamesCreateGameRequest](docs/CloudGamesCreateGameRequest.md) - - [CloudGamesCreateGameResponse](docs/CloudGamesCreateGameResponse.md) - - [CloudGamesCreateGameVersionRequest](docs/CloudGamesCreateGameVersionRequest.md) - - [CloudGamesCreateGameVersionResponse](docs/CloudGamesCreateGameVersionResponse.md) - - [CloudGamesDeleteMatchmakerLobbyResponse](docs/CloudGamesDeleteMatchmakerLobbyResponse.md) - - [CloudGamesExportLobbyLogsRequest](docs/CloudGamesExportLobbyLogsRequest.md) - - [CloudGamesExportLobbyLogsResponse](docs/CloudGamesExportLobbyLogsResponse.md) - - [CloudGamesExportMatchmakerLobbyHistoryRequest](docs/CloudGamesExportMatchmakerLobbyHistoryRequest.md) - - [CloudGamesExportMatchmakerLobbyHistoryResponse](docs/CloudGamesExportMatchmakerLobbyHistoryResponse.md) - - [CloudGamesGameBannerUploadPrepareRequest](docs/CloudGamesGameBannerUploadPrepareRequest.md) - - [CloudGamesGameBannerUploadPrepareResponse](docs/CloudGamesGameBannerUploadPrepareResponse.md) - - [CloudGamesGameLogoUploadPrepareRequest](docs/CloudGamesGameLogoUploadPrepareRequest.md) - - [CloudGamesGameLogoUploadPrepareResponse](docs/CloudGamesGameLogoUploadPrepareResponse.md) - - [CloudGamesGetGameByIdResponse](docs/CloudGamesGetGameByIdResponse.md) - - [CloudGamesGetGameVersionByIdResponse](docs/CloudGamesGetGameVersionByIdResponse.md) - - [CloudGamesGetGamesResponse](docs/CloudGamesGetGamesResponse.md) - - [CloudGamesGetLobbyLogsResponse](docs/CloudGamesGetLobbyLogsResponse.md) - - [CloudGamesListGameBuildsResponse](docs/CloudGamesListGameBuildsResponse.md) - - [CloudGamesListGameCdnSitesResponse](docs/CloudGamesListGameCdnSitesResponse.md) - - [CloudGamesListGameCustomAvatarsResponse](docs/CloudGamesListGameCustomAvatarsResponse.md) - - [CloudGamesLogStream](docs/CloudGamesLogStream.md) - - [CloudGamesNamespacesAddNamespaceDomainRequest](docs/CloudGamesNamespacesAddNamespaceDomainRequest.md) - - [CloudGamesNamespacesCreateGameNamespaceRequest](docs/CloudGamesNamespacesCreateGameNamespaceRequest.md) - - [CloudGamesNamespacesCreateGameNamespaceResponse](docs/CloudGamesNamespacesCreateGameNamespaceResponse.md) - - [CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest](docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest.md) - - [CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse](docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse.md) - - [CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse](docs/CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse.md) - - [CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse](docs/CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse.md) - - [CloudGamesNamespacesGetGameNamespaceByIdResponse](docs/CloudGamesNamespacesGetGameNamespaceByIdResponse.md) - - [CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse](docs/CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse.md) - - [CloudGamesNamespacesGetNamespaceLobbyResponse](docs/CloudGamesNamespacesGetNamespaceLobbyResponse.md) - - [CloudGamesNamespacesInspectResponse](docs/CloudGamesNamespacesInspectResponse.md) - - [CloudGamesNamespacesListNamespaceLobbiesResponse](docs/CloudGamesNamespacesListNamespaceLobbiesResponse.md) - - [CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest](docs/CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest.md) - - [CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest](docs/CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest.md) - - [CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest](docs/CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest.md) - - [CloudGamesNamespacesUpdateGameNamespaceVersionRequest](docs/CloudGamesNamespacesUpdateGameNamespaceVersionRequest.md) - - [CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest](docs/CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest.md) - - [CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest](docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest.md) - - [CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse](docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse.md) - - [CloudGamesNamespacesValidateGameNamespaceRequest](docs/CloudGamesNamespacesValidateGameNamespaceRequest.md) - - [CloudGamesNamespacesValidateGameNamespaceResponse](docs/CloudGamesNamespacesValidateGameNamespaceResponse.md) - - [CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest](docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest.md) - - [CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse](docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse.md) - - [CloudGamesPrepareCustomAvatarUploadRequest](docs/CloudGamesPrepareCustomAvatarUploadRequest.md) - - [CloudGamesPrepareCustomAvatarUploadResponse](docs/CloudGamesPrepareCustomAvatarUploadResponse.md) - - [CloudGamesReserveVersionNameResponse](docs/CloudGamesReserveVersionNameResponse.md) - - [CloudGamesValidateGameRequest](docs/CloudGamesValidateGameRequest.md) - - [CloudGamesValidateGameResponse](docs/CloudGamesValidateGameResponse.md) - - [CloudGamesValidateGameVersionRequest](docs/CloudGamesValidateGameVersionRequest.md) - - [CloudGamesValidateGameVersionResponse](docs/CloudGamesValidateGameVersionResponse.md) - - [CloudGetRayPerfLogsResponse](docs/CloudGetRayPerfLogsResponse.md) - - [CloudGetRegionTiersResponse](docs/CloudGetRegionTiersResponse.md) - - [CloudGroupBankSource](docs/CloudGroupBankSource.md) - - [CloudInspectResponse](docs/CloudInspectResponse.md) - - [CloudLobbySummaryAnalytics](docs/CloudLobbySummaryAnalytics.md) - - [CloudLogsLobbyStatus](docs/CloudLogsLobbyStatus.md) - - [CloudLogsLobbyStatusStopped](docs/CloudLogsLobbyStatusStopped.md) - - [CloudLogsLobbySummary](docs/CloudLogsLobbySummary.md) - - [CloudLogsPerfMark](docs/CloudLogsPerfMark.md) - - [CloudLogsPerfSpan](docs/CloudLogsPerfSpan.md) - - [CloudMatchmakerDevelopmentPort](docs/CloudMatchmakerDevelopmentPort.md) - - [CloudMatchmakerNamespaceConfig](docs/CloudMatchmakerNamespaceConfig.md) - - [CloudNamespaceConfig](docs/CloudNamespaceConfig.md) - - [CloudNamespaceFull](docs/CloudNamespaceFull.md) - - [CloudNamespaceSummary](docs/CloudNamespaceSummary.md) - - [CloudNamespaceVersion](docs/CloudNamespaceVersion.md) - - [CloudRegionSummary](docs/CloudRegionSummary.md) - - [CloudRegionTier](docs/CloudRegionTier.md) - - [CloudRegionTierExpenses](docs/CloudRegionTierExpenses.md) - - [CloudSvcMetrics](docs/CloudSvcMetrics.md) - - [CloudSvcPerf](docs/CloudSvcPerf.md) - - [CloudUniversalRegion](docs/CloudUniversalRegion.md) - - [CloudValidateGroupRequest](docs/CloudValidateGroupRequest.md) - - [CloudValidateGroupResponse](docs/CloudValidateGroupResponse.md) - - [CloudVersionCdnConfig](docs/CloudVersionCdnConfig.md) - - [CloudVersionCdnCustomHeadersMiddleware](docs/CloudVersionCdnCustomHeadersMiddleware.md) - - [CloudVersionCdnHeader](docs/CloudVersionCdnHeader.md) - - [CloudVersionCdnMiddleware](docs/CloudVersionCdnMiddleware.md) - - [CloudVersionCdnMiddlewareKind](docs/CloudVersionCdnMiddlewareKind.md) - - [CloudVersionCdnRoute](docs/CloudVersionCdnRoute.md) - - [CloudVersionConfig](docs/CloudVersionConfig.md) - - [CloudVersionEngineConfig](docs/CloudVersionEngineConfig.md) - - [CloudVersionEngineUnrealConfig](docs/CloudVersionEngineUnrealConfig.md) - - [CloudVersionFull](docs/CloudVersionFull.md) - - [CloudVersionIdentityConfig](docs/CloudVersionIdentityConfig.md) - - [CloudVersionIdentityCustomAvatar](docs/CloudVersionIdentityCustomAvatar.md) - - [CloudVersionIdentityCustomDisplayName](docs/CloudVersionIdentityCustomDisplayName.md) - - [CloudVersionMatchmakerCaptcha](docs/CloudVersionMatchmakerCaptcha.md) - - [CloudVersionMatchmakerCaptchaHcaptcha](docs/CloudVersionMatchmakerCaptchaHcaptcha.md) - - [CloudVersionMatchmakerCaptchaHcaptchaLevel](docs/CloudVersionMatchmakerCaptchaHcaptchaLevel.md) - - [CloudVersionMatchmakerCaptchaTurnstile](docs/CloudVersionMatchmakerCaptchaTurnstile.md) - - [CloudVersionMatchmakerConfig](docs/CloudVersionMatchmakerConfig.md) - - [CloudVersionMatchmakerGameMode](docs/CloudVersionMatchmakerGameMode.md) - - [CloudVersionMatchmakerGameModeActions](docs/CloudVersionMatchmakerGameModeActions.md) - - [CloudVersionMatchmakerGameModeCreateConfig](docs/CloudVersionMatchmakerGameModeCreateConfig.md) - - [CloudVersionMatchmakerGameModeFindConfig](docs/CloudVersionMatchmakerGameModeFindConfig.md) - - [CloudVersionMatchmakerGameModeIdentityRequirement](docs/CloudVersionMatchmakerGameModeIdentityRequirement.md) - - [CloudVersionMatchmakerGameModeIdleLobbiesConfig](docs/CloudVersionMatchmakerGameModeIdleLobbiesConfig.md) - - [CloudVersionMatchmakerGameModeJoinConfig](docs/CloudVersionMatchmakerGameModeJoinConfig.md) - - [CloudVersionMatchmakerGameModeRegion](docs/CloudVersionMatchmakerGameModeRegion.md) - - [CloudVersionMatchmakerGameModeRuntimeDocker](docs/CloudVersionMatchmakerGameModeRuntimeDocker.md) - - [CloudVersionMatchmakerGameModeRuntimeDockerPort](docs/CloudVersionMatchmakerGameModeRuntimeDockerPort.md) - - [CloudVersionMatchmakerGameModeVerificationConfig](docs/CloudVersionMatchmakerGameModeVerificationConfig.md) - - [CloudVersionMatchmakerLobbyGroup](docs/CloudVersionMatchmakerLobbyGroup.md) - - [CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig](docs/CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig.md) - - [CloudVersionMatchmakerLobbyGroupRegion](docs/CloudVersionMatchmakerLobbyGroupRegion.md) - - [CloudVersionMatchmakerLobbyGroupRuntime](docs/CloudVersionMatchmakerLobbyGroupRuntime.md) - - [CloudVersionMatchmakerLobbyGroupRuntimeDocker](docs/CloudVersionMatchmakerLobbyGroupRuntimeDocker.md) - - [CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar](docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar.md) - - [CloudVersionMatchmakerLobbyGroupRuntimeDockerPort](docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.md) - - [CloudVersionMatchmakerNetworkMode](docs/CloudVersionMatchmakerNetworkMode.md) - - [CloudVersionMatchmakerPortProtocol](docs/CloudVersionMatchmakerPortProtocol.md) - - [CloudVersionMatchmakerPortRange](docs/CloudVersionMatchmakerPortRange.md) - - [CloudVersionMatchmakerProxyKind](docs/CloudVersionMatchmakerProxyKind.md) - - [CloudVersionSummary](docs/CloudVersionSummary.md) - - [ErrorBody](docs/ErrorBody.md) - - [GameHandle](docs/GameHandle.md) - - [GameLeaderboardCategory](docs/GameLeaderboardCategory.md) - - [GamePlatformLink](docs/GamePlatformLink.md) - - [GameProfile](docs/GameProfile.md) - - [GameStat](docs/GameStat.md) - - [GameStatAggregationMethod](docs/GameStatAggregationMethod.md) - - [GameStatConfig](docs/GameStatConfig.md) - - [GameStatFormatMethod](docs/GameStatFormatMethod.md) - - [GameStatSortingMethod](docs/GameStatSortingMethod.md) - - [GameStatSummary](docs/GameStatSummary.md) - - [GameSummary](docs/GameSummary.md) - - [GamesEnvironmentsCreateServiceTokenResponse](docs/GamesEnvironmentsCreateServiceTokenResponse.md) - - [GeoCoord](docs/GeoCoord.md) - - [GeoDistance](docs/GeoDistance.md) - - [GlobalEventNotification](docs/GlobalEventNotification.md) - - [GroupBannedIdentity](docs/GroupBannedIdentity.md) - - [GroupConsumeInviteResponse](docs/GroupConsumeInviteResponse.md) - - [GroupCreateInviteRequest](docs/GroupCreateInviteRequest.md) - - [GroupCreateInviteResponse](docs/GroupCreateInviteResponse.md) - - [GroupCreateRequest](docs/GroupCreateRequest.md) - - [GroupCreateResponse](docs/GroupCreateResponse.md) - - [GroupExternalLinks](docs/GroupExternalLinks.md) - - [GroupGetBansResponse](docs/GroupGetBansResponse.md) - - [GroupGetInviteResponse](docs/GroupGetInviteResponse.md) - - [GroupGetJoinRequestsResponse](docs/GroupGetJoinRequestsResponse.md) - - [GroupGetMembersResponse](docs/GroupGetMembersResponse.md) - - [GroupGetProfileResponse](docs/GroupGetProfileResponse.md) - - [GroupGetSummaryResponse](docs/GroupGetSummaryResponse.md) - - [GroupHandle](docs/GroupHandle.md) - - [GroupJoinRequest](docs/GroupJoinRequest.md) - - [GroupListSuggestedResponse](docs/GroupListSuggestedResponse.md) - - [GroupMember](docs/GroupMember.md) - - [GroupPrepareAvatarUploadRequest](docs/GroupPrepareAvatarUploadRequest.md) - - [GroupPrepareAvatarUploadResponse](docs/GroupPrepareAvatarUploadResponse.md) - - [GroupProfile](docs/GroupProfile.md) - - [GroupPublicity](docs/GroupPublicity.md) - - [GroupResolveJoinRequestRequest](docs/GroupResolveJoinRequestRequest.md) - - [GroupSummary](docs/GroupSummary.md) - - [GroupTransferOwnershipRequest](docs/GroupTransferOwnershipRequest.md) - - [GroupUpdateProfileRequest](docs/GroupUpdateProfileRequest.md) - - [GroupValidateProfileRequest](docs/GroupValidateProfileRequest.md) - - [GroupValidateProfileResponse](docs/GroupValidateProfileResponse.md) - - [IdentityDevState](docs/IdentityDevState.md) - - [IdentityEmailLinkedAccount](docs/IdentityEmailLinkedAccount.md) - - [IdentityExternalLinks](docs/IdentityExternalLinks.md) - - [IdentityGameActivity](docs/IdentityGameActivity.md) - - [IdentityGameLinkStatus](docs/IdentityGameLinkStatus.md) - - [IdentityGetHandlesResponse](docs/IdentityGetHandlesResponse.md) - - [IdentityGetProfileResponse](docs/IdentityGetProfileResponse.md) - - [IdentityGetSummariesResponse](docs/IdentityGetSummariesResponse.md) - - [IdentityGlobalEvent](docs/IdentityGlobalEvent.md) - - [IdentityGlobalEventIdentityUpdate](docs/IdentityGlobalEventIdentityUpdate.md) - - [IdentityGlobalEventKind](docs/IdentityGlobalEventKind.md) - - [IdentityGlobalEventNotification](docs/IdentityGlobalEventNotification.md) - - [IdentityGroup](docs/IdentityGroup.md) - - [IdentityHandle](docs/IdentityHandle.md) - - [IdentityLinkedAccount](docs/IdentityLinkedAccount.md) - - [IdentityListActivitiesResponse](docs/IdentityListActivitiesResponse.md) - - [IdentityPrepareAvatarUploadRequest](docs/IdentityPrepareAvatarUploadRequest.md) - - [IdentityPrepareAvatarUploadResponse](docs/IdentityPrepareAvatarUploadResponse.md) - - [IdentityProfile](docs/IdentityProfile.md) - - [IdentitySetGameActivityRequest](docs/IdentitySetGameActivityRequest.md) - - [IdentitySetupRequest](docs/IdentitySetupRequest.md) - - [IdentitySetupResponse](docs/IdentitySetupResponse.md) - - [IdentitySignupForBetaRequest](docs/IdentitySignupForBetaRequest.md) - - [IdentityStatus](docs/IdentityStatus.md) - - [IdentitySummary](docs/IdentitySummary.md) - - [IdentityUpdateGameActivity](docs/IdentityUpdateGameActivity.md) - - [IdentityUpdateProfileRequest](docs/IdentityUpdateProfileRequest.md) - - [IdentityUpdateStatusRequest](docs/IdentityUpdateStatusRequest.md) - - [IdentityValidateProfileResponse](docs/IdentityValidateProfileResponse.md) - - [IdentityWatchEventsResponse](docs/IdentityWatchEventsResponse.md) - - [MatchmakerCreateLobbyResponse](docs/MatchmakerCreateLobbyResponse.md) - - [MatchmakerCustomLobbyPublicity](docs/MatchmakerCustomLobbyPublicity.md) - - [MatchmakerFindLobbyResponse](docs/MatchmakerFindLobbyResponse.md) - - [MatchmakerGameModeInfo](docs/MatchmakerGameModeInfo.md) - - [MatchmakerGameModeStatistics](docs/MatchmakerGameModeStatistics.md) - - [MatchmakerGetStatisticsResponse](docs/MatchmakerGetStatisticsResponse.md) - - [MatchmakerJoinLobby](docs/MatchmakerJoinLobby.md) - - [MatchmakerJoinLobbyResponse](docs/MatchmakerJoinLobbyResponse.md) - - [MatchmakerJoinPlayer](docs/MatchmakerJoinPlayer.md) - - [MatchmakerJoinPort](docs/MatchmakerJoinPort.md) - - [MatchmakerJoinPortRange](docs/MatchmakerJoinPortRange.md) - - [MatchmakerJoinRegion](docs/MatchmakerJoinRegion.md) - - [MatchmakerListLobbiesResponse](docs/MatchmakerListLobbiesResponse.md) - - [MatchmakerListRegionsResponse](docs/MatchmakerListRegionsResponse.md) - - [MatchmakerLobbiesCreateRequest](docs/MatchmakerLobbiesCreateRequest.md) - - [MatchmakerLobbiesFindRequest](docs/MatchmakerLobbiesFindRequest.md) - - [MatchmakerLobbiesJoinRequest](docs/MatchmakerLobbiesJoinRequest.md) - - [MatchmakerLobbiesSetClosedRequest](docs/MatchmakerLobbiesSetClosedRequest.md) - - [MatchmakerLobbyInfo](docs/MatchmakerLobbyInfo.md) - - [MatchmakerPlayersConnectedRequest](docs/MatchmakerPlayersConnectedRequest.md) - - [MatchmakerRegionInfo](docs/MatchmakerRegionInfo.md) - - [MatchmakerRegionStatistics](docs/MatchmakerRegionStatistics.md) - - [PortalGetGameProfileResponse](docs/PortalGetGameProfileResponse.md) - - [PortalGetSuggestedGamesResponse](docs/PortalGetSuggestedGamesResponse.md) - - [PortalNotificationRegisterFirebaseService](docs/PortalNotificationRegisterFirebaseService.md) - - [PortalNotificationRegisterService](docs/PortalNotificationRegisterService.md) - - [PortalNotificationUnregisterService](docs/PortalNotificationUnregisterService.md) - - [ProvisionDatacentersGetServersResponse](docs/ProvisionDatacentersGetServersResponse.md) - - [ProvisionDatacentersGetTlsResponse](docs/ProvisionDatacentersGetTlsResponse.md) - - [ProvisionPoolType](docs/ProvisionPoolType.md) - - [ProvisionServer](docs/ProvisionServer.md) - - [ProvisionServersGetInfoResponse](docs/ProvisionServersGetInfoResponse.md) - - [ServersBuild](docs/ServersBuild.md) - - [ServersBuildCompression](docs/ServersBuildCompression.md) - - [ServersBuildKind](docs/ServersBuildKind.md) - - [ServersCreateBuildRequest](docs/ServersCreateBuildRequest.md) - - [ServersCreateBuildResponse](docs/ServersCreateBuildResponse.md) - - [ServersCreateServerNetworkRequest](docs/ServersCreateServerNetworkRequest.md) - - [ServersCreateServerPortRequest](docs/ServersCreateServerPortRequest.md) - - [ServersCreateServerRequest](docs/ServersCreateServerRequest.md) - - [ServersCreateServerResponse](docs/ServersCreateServerResponse.md) - - [ServersCreateServerRuntimeRequest](docs/ServersCreateServerRuntimeRequest.md) - - [ServersDatacenter](docs/ServersDatacenter.md) - - [ServersGetBuildResponse](docs/ServersGetBuildResponse.md) - - [ServersGetServerLogsResponse](docs/ServersGetServerLogsResponse.md) - - [ServersGetServerResponse](docs/ServersGetServerResponse.md) - - [ServersLifecycle](docs/ServersLifecycle.md) - - [ServersListBuildsResponse](docs/ServersListBuildsResponse.md) - - [ServersListDatacentersResponse](docs/ServersListDatacentersResponse.md) - - [ServersListServersResponse](docs/ServersListServersResponse.md) - - [ServersLogStream](docs/ServersLogStream.md) - - [ServersNetwork](docs/ServersNetwork.md) - - [ServersNetworkMode](docs/ServersNetworkMode.md) - - [ServersPatchBuildTagsRequest](docs/ServersPatchBuildTagsRequest.md) - - [ServersPort](docs/ServersPort.md) - - [ServersPortProtocol](docs/ServersPortProtocol.md) - - [ServersPortRouting](docs/ServersPortRouting.md) - - [ServersResources](docs/ServersResources.md) - - [ServersRuntime](docs/ServersRuntime.md) - - [ServersServer](docs/ServersServer.md) - - [UploadPrepareFile](docs/UploadPrepareFile.md) - - [UploadPresignedRequest](docs/UploadPresignedRequest.md) - - [ValidationError](docs/ValidationError.md) - - [WatchResponse](docs/WatchResponse.md) - - -To get access to the crate's generated documentation, use: - -``` -cargo doc --open -``` - -## Author - - - diff --git a/sdks/api/full/rust-cli/docs/ActorActor.md b/sdks/api/full/rust-cli/docs/ActorActor.md deleted file mode 100644 index afb5fb0584..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorActor.md +++ /dev/null @@ -1,20 +0,0 @@ -# ActorActor - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**created_at** | **String** | RFC3339 timestamp | -**destroyed_at** | Option<**String**> | RFC3339 timestamp | [optional] -**id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**lifecycle** | [**crate::models::ActorLifecycle**](ActorLifecycle.md) | | -**network** | [**crate::models::ActorNetwork**](ActorNetwork.md) | | -**region** | **String** | | -**resources** | [**crate::models::ActorResources**](ActorResources.md) | | -**runtime** | [**crate::models::ActorRuntime**](ActorRuntime.md) | | -**started_at** | Option<**String**> | RFC3339 timestamp | [optional] -**tags** | Option<[**serde_json::Value**](.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-cli/docs/ActorApi.md b/sdks/api/full/rust-cli/docs/ActorApi.md deleted file mode 100644 index c54fe6d3ff..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorApi.md +++ /dev/null @@ -1,210 +0,0 @@ -# \ActorApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**actor_create**](ActorApi.md#actor_create) | **POST** /actors | -[**actor_destroy**](ActorApi.md#actor_destroy) | **DELETE** /actors/{actor} | -[**actor_get**](ActorApi.md#actor_get) | **GET** /actors/{actor} | -[**actor_list**](ActorApi.md#actor_list) | **GET** /actors | -[**actor_upgrade**](ActorApi.md#actor_upgrade) | **POST** /actors/{actor}/upgrade | -[**actor_upgrade_all**](ActorApi.md#actor_upgrade_all) | **POST** /actors/upgrade | - - - -## actor_create - -> crate::models::ActorCreateActorResponse actor_create(actor_create_actor_request, project, environment) - - -Create a new dynamic actor. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**actor_create_actor_request** | [**ActorCreateActorRequest**](ActorCreateActorRequest.md) | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**crate::models::ActorCreateActorResponse**](ActorCreateActorResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_destroy - -> serde_json::Value actor_destroy(actor, project, environment, override_kill_timeout) - - -Destroy a dynamic actor. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**actor** | **uuid::Uuid** | The id of the actor to destroy | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | -**override_kill_timeout** | Option<**i64**> | The duration to wait for in milliseconds before killing the actor. This should be used to override the default kill timeout if a faster time is needed, say for ignoring a graceful shutdown. | | - -### Return type - -[**serde_json::Value**](serde_json::Value.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_get - -> crate::models::ActorGetActorResponse actor_get(actor, project, environment) - - -Gets a dynamic actor. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**actor** | **uuid::Uuid** | The id of the actor to destroy | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**crate::models::ActorGetActorResponse**](ActorGetActorResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_list - -> crate::models::ActorListActorsResponse actor_list(project, environment, tags_json, include_destroyed, cursor) - - -Lists all actors associated with the token used. Can be filtered by tags in the query string. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | -**tags_json** | Option<**String**> | | | -**include_destroyed** | Option<**bool**> | | | -**cursor** | Option<**uuid::Uuid**> | | | - -### Return type - -[**crate::models::ActorListActorsResponse**](ActorListActorsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_upgrade - -> serde_json::Value actor_upgrade(actor, actor_upgrade_actor_request, project, environment) - - -Upgrades a dynamic actor. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**actor** | **uuid::Uuid** | The id of the actor to upgrade | [required] | -**actor_upgrade_actor_request** | [**ActorUpgradeActorRequest**](ActorUpgradeActorRequest.md) | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**serde_json::Value**](serde_json::Value.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_upgrade_all - -> crate::models::ActorUpgradeAllActorsResponse actor_upgrade_all(actor_upgrade_all_actors_request, project, environment) - - -Upgrades a dynamic actor. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**actor_upgrade_all_actors_request** | [**ActorUpgradeAllActorsRequest**](ActorUpgradeAllActorsRequest.md) | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**crate::models::ActorUpgradeAllActorsResponse**](ActorUpgradeAllActorsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ActorBuild.md b/sdks/api/full/rust-cli/docs/ActorBuild.md deleted file mode 100644 index 2b953553bc..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorBuild.md +++ /dev/null @@ -1,15 +0,0 @@ -# ActorBuild - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | Unsigned 64 bit integer. | -**created_at** | **String** | RFC3339 timestamp | -**id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**name** | **String** | | -**tags** | **::std::collections::HashMap** | Tags of this build | - -[[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-cli/docs/ActorBuildCompression.md b/sdks/api/full/rust-cli/docs/ActorBuildCompression.md deleted file mode 100644 index 2903bf515f..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorBuildCompression.md +++ /dev/null @@ -1,10 +0,0 @@ -# ActorBuildCompression - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ActorBuildKind.md b/sdks/api/full/rust-cli/docs/ActorBuildKind.md deleted file mode 100644 index da74c36245..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorBuildKind.md +++ /dev/null @@ -1,10 +0,0 @@ -# ActorBuildKind - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ActorBuildsApi.md b/sdks/api/full/rust-cli/docs/ActorBuildsApi.md deleted file mode 100644 index c189e9ab36..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorBuildsApi.md +++ /dev/null @@ -1,172 +0,0 @@ -# \ActorBuildsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**actor_builds_complete**](ActorBuildsApi.md#actor_builds_complete) | **POST** /builds/{build}/complete | -[**actor_builds_get**](ActorBuildsApi.md#actor_builds_get) | **GET** /builds/{build} | -[**actor_builds_list**](ActorBuildsApi.md#actor_builds_list) | **GET** /builds | -[**actor_builds_patch_tags**](ActorBuildsApi.md#actor_builds_patch_tags) | **PATCH** /builds/{build}/tags | -[**actor_builds_prepare**](ActorBuildsApi.md#actor_builds_prepare) | **POST** /builds/prepare | - - - -## actor_builds_complete - -> actor_builds_complete(build, project, environment) - - -Marks an upload as complete. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**build** | **uuid::Uuid** | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_builds_get - -> crate::models::ActorGetBuildResponse actor_builds_get(build, project, environment) - - -Get a build. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**build** | **uuid::Uuid** | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**crate::models::ActorGetBuildResponse**](ActorGetBuildResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_builds_list - -> crate::models::ActorListBuildsResponse actor_builds_list(project, environment, tags_json) - - -Lists all builds of the project associated with the token used. Can be filtered by tags in the query string. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | -**tags_json** | Option<**String**> | | | - -### Return type - -[**crate::models::ActorListBuildsResponse**](ActorListBuildsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_builds_patch_tags - -> serde_json::Value actor_builds_patch_tags(build, actor_patch_build_tags_request, project, environment) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**build** | **uuid::Uuid** | | [required] | -**actor_patch_build_tags_request** | [**ActorPatchBuildTagsRequest**](ActorPatchBuildTagsRequest.md) | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**serde_json::Value**](serde_json::Value.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## actor_builds_prepare - -> crate::models::ActorPrepareBuildResponse actor_builds_prepare(actor_prepare_build_request, project, environment) - - -Creates a new project build for the given project. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**actor_prepare_build_request** | [**ActorPrepareBuildRequest**](ActorPrepareBuildRequest.md) | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**crate::models::ActorPrepareBuildResponse**](ActorPrepareBuildResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ActorCreateActorNetworkRequest.md b/sdks/api/full/rust-cli/docs/ActorCreateActorNetworkRequest.md deleted file mode 100644 index 2f1fedc1cc..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorCreateActorNetworkRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorCreateActorNetworkRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**mode** | Option<[**crate::models::ActorNetworkMode**](ActorNetworkMode.md)> | | [optional] -**ports** | Option<[**::std::collections::HashMap**](ActorCreateActorPortRequest.md)> | | [optional] - -[[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-cli/docs/ActorCreateActorPortRequest.md b/sdks/api/full/rust-cli/docs/ActorCreateActorPortRequest.md deleted file mode 100644 index 5a0576981e..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorCreateActorPortRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# ActorCreateActorPortRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**internal_port** | Option<**i32**> | | [optional] -**protocol** | [**crate::models::ActorPortProtocol**](ActorPortProtocol.md) | | -**routing** | Option<[**crate::models::ActorPortRouting**](ActorPortRouting.md)> | | [optional] - -[[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-cli/docs/ActorCreateActorRequest.md b/sdks/api/full/rust-cli/docs/ActorCreateActorRequest.md deleted file mode 100644 index 0a7d45733e..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorCreateActorRequest.md +++ /dev/null @@ -1,18 +0,0 @@ -# ActorCreateActorRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**build_tags** | Option<[**serde_json::Value**](.md)> | | [optional] -**lifecycle** | Option<[**crate::models::ActorLifecycle**](ActorLifecycle.md)> | | [optional] -**network** | Option<[**crate::models::ActorCreateActorNetworkRequest**](ActorCreateActorNetworkRequest.md)> | | [optional] -**region** | Option<**String**> | | [optional] -**resources** | Option<[**crate::models::ActorResources**](ActorResources.md)> | | [optional] -**runtime** | Option<[**crate::models::ActorCreateActorRuntimeRequest**](ActorCreateActorRuntimeRequest.md)> | | [optional] -**tags** | Option<[**serde_json::Value**](.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-cli/docs/ActorCreateActorResponse.md b/sdks/api/full/rust-cli/docs/ActorCreateActorResponse.md deleted file mode 100644 index 03556ae3a0..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorCreateActorResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorCreateActorResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**actor** | [**crate::models::ActorActor**](ActorActor.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-cli/docs/ActorCreateActorRuntimeRequest.md b/sdks/api/full/rust-cli/docs/ActorCreateActorRuntimeRequest.md deleted file mode 100644 index 84b8b38997..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorCreateActorRuntimeRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorCreateActorRuntimeRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**environment** | Option<**::std::collections::HashMap**> | | [optional] - -[[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-cli/docs/ActorGetActorLogsResponse.md b/sdks/api/full/rust-cli/docs/ActorGetActorLogsResponse.md deleted file mode 100644 index 661ab3c4df..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorGetActorLogsResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# ActorGetActorLogsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lines** | **Vec** | Sorted old to new. | -**timestamps** | **Vec** | Sorted old to new. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/ActorGetActorResponse.md b/sdks/api/full/rust-cli/docs/ActorGetActorResponse.md deleted file mode 100644 index f13b8fd6b4..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorGetActorResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorGetActorResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**actor** | [**crate::models::ActorActor**](ActorActor.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-cli/docs/ActorGetBuildResponse.md b/sdks/api/full/rust-cli/docs/ActorGetBuildResponse.md deleted file mode 100644 index 8c5a50a151..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorGetBuildResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorGetBuildResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build** | [**crate::models::ActorBuild**](ActorBuild.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-cli/docs/ActorGuardRouting.md b/sdks/api/full/rust-cli/docs/ActorGuardRouting.md deleted file mode 100644 index cbac90e5f8..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorGuardRouting.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorGuardRouting - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**authorization** | Option<[**crate::models::ActorPortAuthorization**](ActorPortAuthorization.md)> | | [optional] - -[[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-cli/docs/ActorLifecycle.md b/sdks/api/full/rust-cli/docs/ActorLifecycle.md deleted file mode 100644 index 7564972c54..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorLifecycle.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorLifecycle - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**durable** | Option<**bool**> | 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. | [optional] -**kill_timeout** | Option<**i64**> | 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. | [optional] - -[[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-cli/docs/ActorListActorsResponse.md b/sdks/api/full/rust-cli/docs/ActorListActorsResponse.md deleted file mode 100644 index fd4b2983b0..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorListActorsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorListActorsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**actors** | [**Vec**](ActorActor.md) | A list of actors for the project associated with the token. | - -[[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-cli/docs/ActorListBuildsResponse.md b/sdks/api/full/rust-cli/docs/ActorListBuildsResponse.md deleted file mode 100644 index 3ce3baa590..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorListBuildsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorListBuildsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**builds** | [**Vec**](ActorBuild.md) | A list of builds for the project associated with the token. | - -[[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-cli/docs/ActorListRegionsResponse.md b/sdks/api/full/rust-cli/docs/ActorListRegionsResponse.md deleted file mode 100644 index 93089ddae3..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorListRegionsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorListRegionsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**regions** | [**Vec**](ActorRegion.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-cli/docs/ActorLogStream.md b/sdks/api/full/rust-cli/docs/ActorLogStream.md deleted file mode 100644 index db06a741ca..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorLogStream.md +++ /dev/null @@ -1,10 +0,0 @@ -# ActorLogStream - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ActorLogsApi.md b/sdks/api/full/rust-cli/docs/ActorLogsApi.md deleted file mode 100644 index 6e73bc65c7..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorLogsApi.md +++ /dev/null @@ -1,43 +0,0 @@ -# \ActorLogsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**actor_logs_get**](ActorLogsApi.md#actor_logs_get) | **GET** /actors/{actor}/logs | - - - -## actor_logs_get - -> crate::models::ActorGetActorLogsResponse actor_logs_get(actor, stream, project, environment, watch_index) - - -Returns the logs for a given actor. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**actor** | **uuid::Uuid** | | [required] | -**stream** | [**ActorLogStream**](.md) | | [required] | -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::ActorGetActorLogsResponse**](ActorGetActorLogsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ActorNetwork.md b/sdks/api/full/rust-cli/docs/ActorNetwork.md deleted file mode 100644 index adfb693379..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorNetwork.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorNetwork - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**mode** | [**crate::models::ActorNetworkMode**](ActorNetworkMode.md) | | -**ports** | [**::std::collections::HashMap**](ActorPort.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-cli/docs/ActorNetworkMode.md b/sdks/api/full/rust-cli/docs/ActorNetworkMode.md deleted file mode 100644 index 844c412c3b..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorNetworkMode.md +++ /dev/null @@ -1,10 +0,0 @@ -# ActorNetworkMode - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ActorPatchBuildTagsRequest.md b/sdks/api/full/rust-cli/docs/ActorPatchBuildTagsRequest.md deleted file mode 100644 index bce9677c6f..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPatchBuildTagsRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorPatchBuildTagsRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**exclusive_tags** | Option<**Vec**> | Removes the given tag keys from all other builds. | [optional] -**tags** | Option<[**serde_json::Value**](.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-cli/docs/ActorPort.md b/sdks/api/full/rust-cli/docs/ActorPort.md deleted file mode 100644 index f157a2e8aa..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPort.md +++ /dev/null @@ -1,15 +0,0 @@ -# ActorPort - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**internal_port** | Option<**i32**> | | [optional] -**protocol** | [**crate::models::ActorPortProtocol**](ActorPortProtocol.md) | | -**public_hostname** | Option<**String**> | | [optional] -**public_port** | Option<**i32**> | | [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-cli/docs/ActorPortAuthorization.md b/sdks/api/full/rust-cli/docs/ActorPortAuthorization.md deleted file mode 100644 index 4ba4fa9e78..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPortAuthorization.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorPortAuthorization - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**bearer** | Option<**String**> | | [optional] -**query** | Option<[**crate::models::ActorPortQueryAuthorization**](ActorPortQueryAuthorization.md)> | | [optional] - -[[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-cli/docs/ActorPortProtocol.md b/sdks/api/full/rust-cli/docs/ActorPortProtocol.md deleted file mode 100644 index 7e96d39c9b..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPortProtocol.md +++ /dev/null @@ -1,10 +0,0 @@ -# ActorPortProtocol - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ActorPortQueryAuthorization.md b/sdks/api/full/rust-cli/docs/ActorPortQueryAuthorization.md deleted file mode 100644 index a0d2f11c8a..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPortQueryAuthorization.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorPortQueryAuthorization - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**key** | **String** | | -**value** | **String** | | - -[[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-cli/docs/ActorPortRouting.md b/sdks/api/full/rust-cli/docs/ActorPortRouting.md deleted file mode 100644 index 72921d39ac..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPortRouting.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorPortRouting - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**guard** | Option<[**crate::models::ActorGuardRouting**](ActorGuardRouting.md)> | | [optional] -**host** | Option<[**serde_json::Value**](.md)> | | [optional] - -[[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-cli/docs/ActorPrepareBuildRequest.md b/sdks/api/full/rust-cli/docs/ActorPrepareBuildRequest.md deleted file mode 100644 index 17428f1077..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPrepareBuildRequest.md +++ /dev/null @@ -1,15 +0,0 @@ -# ActorPrepareBuildRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**compression** | Option<[**crate::models::ActorBuildCompression**](ActorBuildCompression.md)> | | [optional] -**image_file** | [**crate::models::UploadPrepareFile**](UploadPrepareFile.md) | | -**image_tag** | Option<**String**> | A tag given to the project build. | [optional] -**kind** | Option<[**crate::models::ActorBuildKind**](ActorBuildKind.md)> | | [optional] -**name** | **String** | | - -[[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-cli/docs/ActorPrepareBuildResponse.md b/sdks/api/full/rust-cli/docs/ActorPrepareBuildResponse.md deleted file mode 100644 index a9a76163d6..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorPrepareBuildResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorPrepareBuildResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build** | [**uuid::Uuid**](uuid::Uuid.md) | | -**presigned_requests** | [**Vec**](UploadPresignedRequest.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-cli/docs/ActorRegion.md b/sdks/api/full/rust-cli/docs/ActorRegion.md deleted file mode 100644 index 64bd99d824..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorRegion.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorRegion - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **String** | | -**name** | **String** | | - -[[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-cli/docs/ActorRegionsApi.md b/sdks/api/full/rust-cli/docs/ActorRegionsApi.md deleted file mode 100644 index 87ffaefcbd..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorRegionsApi.md +++ /dev/null @@ -1,38 +0,0 @@ -# \ActorRegionsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**actor_regions_list**](ActorRegionsApi.md#actor_regions_list) | **GET** /regions | - - - -## actor_regions_list - -> crate::models::ActorListRegionsResponse actor_regions_list(project, environment) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**project** | Option<**String**> | | | -**environment** | Option<**String**> | | | - -### Return type - -[**crate::models::ActorListRegionsResponse**](ActorListRegionsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ActorResources.md b/sdks/api/full/rust-cli/docs/ActorResources.md deleted file mode 100644 index 5fe5a114de..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorResources.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorResources - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cpu** | **i32** | The number of CPU cores in millicores, or 1/1000 of a core. For example, 1/8 of a core would be 125 millicores, and 1 core would be 1000 millicores. | -**memory** | **i32** | The amount of memory in megabytes | - -[[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-cli/docs/ActorRuntime.md b/sdks/api/full/rust-cli/docs/ActorRuntime.md deleted file mode 100644 index 00d4503b97..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorRuntime.md +++ /dev/null @@ -1,13 +0,0 @@ -# ActorRuntime - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**arguments** | Option<**Vec**> | | [optional] -**build** | [**uuid::Uuid**](uuid::Uuid.md) | | -**environment** | Option<**::std::collections::HashMap**> | | [optional] - -[[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-cli/docs/ActorUpgradeActorRequest.md b/sdks/api/full/rust-cli/docs/ActorUpgradeActorRequest.md deleted file mode 100644 index 447a6d260f..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorUpgradeActorRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# ActorUpgradeActorRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**build_tags** | Option<[**serde_json::Value**](.md)> | | [optional] - -[[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-cli/docs/ActorUpgradeAllActorsRequest.md b/sdks/api/full/rust-cli/docs/ActorUpgradeAllActorsRequest.md deleted file mode 100644 index d623c0e764..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorUpgradeAllActorsRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# ActorUpgradeAllActorsRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**build_tags** | Option<[**serde_json::Value**](.md)> | | [optional] -**tags** | Option<[**serde_json::Value**](.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-cli/docs/ActorUpgradeAllActorsResponse.md b/sdks/api/full/rust-cli/docs/ActorUpgradeAllActorsResponse.md deleted file mode 100644 index eebdd3e19d..0000000000 --- a/sdks/api/full/rust-cli/docs/ActorUpgradeAllActorsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ActorUpgradeAllActorsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**count** | **i64** | | - -[[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-cli/docs/AuthCompleteStatus.md b/sdks/api/full/rust-cli/docs/AuthCompleteStatus.md deleted file mode 100644 index 41dc437806..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthCompleteStatus.md +++ /dev/null @@ -1,10 +0,0 @@ -# AuthCompleteStatus - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/AuthIdentityCompleteEmailVerificationRequest.md b/sdks/api/full/rust-cli/docs/AuthIdentityCompleteEmailVerificationRequest.md deleted file mode 100644 index 7472a7777b..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthIdentityCompleteEmailVerificationRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# AuthIdentityCompleteEmailVerificationRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**code** | **String** | The code sent to the requestee's email. | -**verification_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/AuthIdentityCompleteEmailVerificationResponse.md b/sdks/api/full/rust-cli/docs/AuthIdentityCompleteEmailVerificationResponse.md deleted file mode 100644 index 98575843a2..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthIdentityCompleteEmailVerificationResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# AuthIdentityCompleteEmailVerificationResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**status** | [**crate::models::AuthCompleteStatus**](AuthCompleteStatus.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-cli/docs/AuthIdentityEmailApi.md b/sdks/api/full/rust-cli/docs/AuthIdentityEmailApi.md deleted file mode 100644 index d885bb88b5..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthIdentityEmailApi.md +++ /dev/null @@ -1,70 +0,0 @@ -# \AuthIdentityEmailApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**auth_identity_email_complete_email_verification**](AuthIdentityEmailApi.md#auth_identity_email_complete_email_verification) | **POST** /auth/identity/email/complete-verification | -[**auth_identity_email_start_email_verification**](AuthIdentityEmailApi.md#auth_identity_email_start_email_verification) | **POST** /auth/identity/email/start-verification | - - - -## auth_identity_email_complete_email_verification - -> crate::models::AuthIdentityCompleteEmailVerificationResponse auth_identity_email_complete_email_verification(auth_identity_complete_email_verification_request) - - -Completes the email verification process. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**auth_identity_complete_email_verification_request** | [**AuthIdentityCompleteEmailVerificationRequest**](AuthIdentityCompleteEmailVerificationRequest.md) | | [required] | - -### Return type - -[**crate::models::AuthIdentityCompleteEmailVerificationResponse**](AuthIdentityCompleteEmailVerificationResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## auth_identity_email_start_email_verification - -> crate::models::AuthIdentityStartEmailVerificationResponse auth_identity_email_start_email_verification(auth_identity_start_email_verification_request) - - -Starts the verification process for linking an email to your identity. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**auth_identity_start_email_verification_request** | [**AuthIdentityStartEmailVerificationRequest**](AuthIdentityStartEmailVerificationRequest.md) | | [required] | - -### Return type - -[**crate::models::AuthIdentityStartEmailVerificationResponse**](AuthIdentityStartEmailVerificationResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/AuthIdentityStartEmailVerificationRequest.md b/sdks/api/full/rust-cli/docs/AuthIdentityStartEmailVerificationRequest.md deleted file mode 100644 index cbc1c02e2b..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthIdentityStartEmailVerificationRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# AuthIdentityStartEmailVerificationRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**captcha** | Option<[**crate::models::CaptchaConfig**](CaptchaConfig.md)> | | [optional] -**email** | **String** | | -**game_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] - -[[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-cli/docs/AuthIdentityStartEmailVerificationResponse.md b/sdks/api/full/rust-cli/docs/AuthIdentityStartEmailVerificationResponse.md deleted file mode 100644 index bd663723f3..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthIdentityStartEmailVerificationResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# AuthIdentityStartEmailVerificationResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**verification_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/AuthRefreshIdentityTokenRequest.md b/sdks/api/full/rust-cli/docs/AuthRefreshIdentityTokenRequest.md deleted file mode 100644 index 229dcb4dba..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthRefreshIdentityTokenRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# AuthRefreshIdentityTokenRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**logout** | Option<**bool**> | When `true`, the current identity for the provided cookie will be logged out and a new identity will be returned. | [optional] - -[[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-cli/docs/AuthRefreshIdentityTokenResponse.md b/sdks/api/full/rust-cli/docs/AuthRefreshIdentityTokenResponse.md deleted file mode 100644 index 4d14382963..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthRefreshIdentityTokenResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# AuthRefreshIdentityTokenResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**exp** | **String** | Token expiration time (in milliseconds). | -**identity_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**token** | **String** | A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. | - -[[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-cli/docs/AuthTokensApi.md b/sdks/api/full/rust-cli/docs/AuthTokensApi.md deleted file mode 100644 index e34f69d096..0000000000 --- a/sdks/api/full/rust-cli/docs/AuthTokensApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \AuthTokensApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**auth_tokens_refresh_identity_token**](AuthTokensApi.md#auth_tokens_refresh_identity_token) | **POST** /auth/tokens/identity | - - - -## auth_tokens_refresh_identity_token - -> crate::models::AuthRefreshIdentityTokenResponse auth_tokens_refresh_identity_token(auth_refresh_identity_token_request) - - -Refreshes the current identity's token and sets authentication headers. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**auth_refresh_identity_token_request** | [**AuthRefreshIdentityTokenRequest**](AuthRefreshIdentityTokenRequest.md) | | [required] | - -### Return type - -[**crate::models::AuthRefreshIdentityTokenResponse**](AuthRefreshIdentityTokenResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CaptchaConfig.md b/sdks/api/full/rust-cli/docs/CaptchaConfig.md deleted file mode 100644 index ccbccbd355..0000000000 --- a/sdks/api/full/rust-cli/docs/CaptchaConfig.md +++ /dev/null @@ -1,12 +0,0 @@ -# CaptchaConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**hcaptcha** | Option<[**crate::models::CaptchaConfigHcaptcha**](CaptchaConfigHcaptcha.md)> | | [optional] -**turnstile** | Option<[**crate::models::CaptchaConfigTurnstile**](CaptchaConfigTurnstile.md)> | | [optional] - -[[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-cli/docs/CaptchaConfigHcaptcha.md b/sdks/api/full/rust-cli/docs/CaptchaConfigHcaptcha.md deleted file mode 100644 index 42d89248b4..0000000000 --- a/sdks/api/full/rust-cli/docs/CaptchaConfigHcaptcha.md +++ /dev/null @@ -1,11 +0,0 @@ -# CaptchaConfigHcaptcha - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**client_response** | **String** | | - -[[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-cli/docs/CaptchaConfigTurnstile.md b/sdks/api/full/rust-cli/docs/CaptchaConfigTurnstile.md deleted file mode 100644 index 7816b9984f..0000000000 --- a/sdks/api/full/rust-cli/docs/CaptchaConfigTurnstile.md +++ /dev/null @@ -1,11 +0,0 @@ -# CaptchaConfigTurnstile - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**client_response** | **String** | | - -[[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-cli/docs/CloudApi.md b/sdks/api/full/rust-cli/docs/CloudApi.md deleted file mode 100644 index f1e0b4c721..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudApi.md +++ /dev/null @@ -1,36 +0,0 @@ -# \CloudApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_bootstrap**](CloudApi.md#cloud_bootstrap) | **GET** /cloud/bootstrap | - - - -## cloud_bootstrap - -> crate::models::CloudBootstrapResponse cloud_bootstrap() - - -Returns the basic information required to use the cloud APIs. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::CloudBootstrapResponse**](CloudBootstrapResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudAuthAgent.md b/sdks/api/full/rust-cli/docs/CloudAuthAgent.md deleted file mode 100644 index 16329abf69..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudAuthAgent.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudAuthAgent - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_cloud** | Option<[**crate::models::CloudAuthAgentGameCloud**](CloudAuthAgentGameCloud.md)> | | [optional] -**identity** | Option<[**crate::models::CloudAuthAgentIdentity**](CloudAuthAgentIdentity.md)> | | [optional] - -[[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-cli/docs/CloudAuthAgentGameCloud.md b/sdks/api/full/rust-cli/docs/CloudAuthAgentGameCloud.md deleted file mode 100644 index 7a9eac911c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudAuthAgentGameCloud.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudAuthAgentGameCloud - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudAuthAgentIdentity.md b/sdks/api/full/rust-cli/docs/CloudAuthAgentIdentity.md deleted file mode 100644 index 42a4ce7f2b..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudAuthAgentIdentity.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudAuthAgentIdentity - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudAuthApi.md b/sdks/api/full/rust-cli/docs/CloudAuthApi.md deleted file mode 100644 index 89a4921113..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudAuthApi.md +++ /dev/null @@ -1,36 +0,0 @@ -# \CloudAuthApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_auth_inspect**](CloudAuthApi.md#cloud_auth_inspect) | **GET** /cloud/auth/inspect | - - - -## cloud_auth_inspect - -> crate::models::CloudInspectResponse cloud_auth_inspect() - - -Returns information about the current authenticated agent. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::CloudInspectResponse**](CloudInspectResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudBootstrapAccess.md b/sdks/api/full/rust-cli/docs/CloudBootstrapAccess.md deleted file mode 100644 index b1f50e3d24..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapAccess.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudBootstrapAccess - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudBootstrapCaptcha.md b/sdks/api/full/rust-cli/docs/CloudBootstrapCaptcha.md deleted file mode 100644 index 71166d11f3..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapCaptcha.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudBootstrapCaptcha - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**turnstile** | Option<[**crate::models::CloudBootstrapCaptchaTurnstile**](CloudBootstrapCaptchaTurnstile.md)> | | [optional] - -[[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-cli/docs/CloudBootstrapCaptchaTurnstile.md b/sdks/api/full/rust-cli/docs/CloudBootstrapCaptchaTurnstile.md deleted file mode 100644 index bd61ed2479..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapCaptchaTurnstile.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudBootstrapCaptchaTurnstile - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**site_key** | **String** | | - -[[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-cli/docs/CloudBootstrapCluster.md b/sdks/api/full/rust-cli/docs/CloudBootstrapCluster.md deleted file mode 100644 index 6efadb3c9c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapCluster.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudBootstrapCluster - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudBootstrapDomains.md b/sdks/api/full/rust-cli/docs/CloudBootstrapDomains.md deleted file mode 100644 index 890bbeb337..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapDomains.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudBootstrapDomains - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cdn** | Option<**String**> | | [optional] -**job** | Option<**String**> | | [optional] -**opengb** | Option<**String**> | | [optional] - -[[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-cli/docs/CloudBootstrapLoginMethods.md b/sdks/api/full/rust-cli/docs/CloudBootstrapLoginMethods.md deleted file mode 100644 index 873d1b3a16..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapLoginMethods.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudBootstrapLoginMethods - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**email** | **bool** | | - -[[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-cli/docs/CloudBootstrapOrigins.md b/sdks/api/full/rust-cli/docs/CloudBootstrapOrigins.md deleted file mode 100644 index b6260e3ca3..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapOrigins.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudBootstrapOrigins - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**hub** | **String** | | - -[[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-cli/docs/CloudBootstrapResponse.md b/sdks/api/full/rust-cli/docs/CloudBootstrapResponse.md deleted file mode 100644 index 1e52cfd02e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBootstrapResponse.md +++ /dev/null @@ -1,17 +0,0 @@ -# CloudBootstrapResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**access** | [**crate::models::CloudBootstrapAccess**](CloudBootstrapAccess.md) | | -**captcha** | [**crate::models::CloudBootstrapCaptcha**](CloudBootstrapCaptcha.md) | | -**cluster** | [**crate::models::CloudBootstrapCluster**](CloudBootstrapCluster.md) | | -**deploy_hash** | **String** | | -**domains** | [**crate::models::CloudBootstrapDomains**](CloudBootstrapDomains.md) | | -**login_methods** | [**crate::models::CloudBootstrapLoginMethods**](CloudBootstrapLoginMethods.md) | | -**origins** | [**crate::models::CloudBootstrapOrigins**](CloudBootstrapOrigins.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-cli/docs/CloudBuildSummary.md b/sdks/api/full/rust-cli/docs/CloudBuildSummary.md deleted file mode 100644 index f3b76d934d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudBuildSummary.md +++ /dev/null @@ -1,17 +0,0 @@ -# CloudBuildSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**complete** | **bool** | Whether or not this build has completely been uploaded. | -**content_length** | **i64** | Unsigned 64 bit integer. | -**create_ts** | **String** | RFC3339 timestamp | -**display_name** | **String** | Represent a resource's readable display name. | -**tags** | **::std::collections::HashMap** | Tags of this build | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudCdnAuthType.md b/sdks/api/full/rust-cli/docs/CloudCdnAuthType.md deleted file mode 100644 index 8bb0f647b7..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnAuthType.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudCdnAuthType - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudCdnNamespaceAuthUser.md b/sdks/api/full/rust-cli/docs/CloudCdnNamespaceAuthUser.md deleted file mode 100644 index 4f26f3d1ca..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnNamespaceAuthUser.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudCdnNamespaceAuthUser - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**user** | **String** | A user name. | - -[[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-cli/docs/CloudCdnNamespaceConfig.md b/sdks/api/full/rust-cli/docs/CloudCdnNamespaceConfig.md deleted file mode 100644 index f6cd670dcf..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnNamespaceConfig.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudCdnNamespaceConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**auth_type** | [**crate::models::CloudCdnAuthType**](CloudCdnAuthType.md) | | -**auth_user_list** | [**Vec**](CloudCdnNamespaceAuthUser.md) | A list of CDN authenticated users for a given namespace. | -**domains** | [**Vec**](CloudCdnNamespaceDomain.md) | A list of CDN domains for a given namespace. | -**enable_domain_public_auth** | **bool** | Whether or not to allow users to connect to the given namespace via domain name. | - -[[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-cli/docs/CloudCdnNamespaceDomain.md b/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomain.md deleted file mode 100644 index af93fcc7d6..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomain.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudCdnNamespaceDomain - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**create_ts** | **String** | RFC3339 timestamp | -**domain** | **String** | A valid domain name (no protocol). | -**verification_errors** | **Vec** | | -**verification_method** | [**crate::models::CloudCdnNamespaceDomainVerificationMethod**](CloudCdnNamespaceDomainVerificationMethod.md) | | -**verification_status** | [**crate::models::CloudCdnNamespaceDomainVerificationStatus**](CloudCdnNamespaceDomainVerificationStatus.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-cli/docs/CloudCdnNamespaceDomainVerificationMethod.md b/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomainVerificationMethod.md deleted file mode 100644 index 028afecc8a..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomainVerificationMethod.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudCdnNamespaceDomainVerificationMethod - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**http** | Option<[**crate::models::CloudCdnNamespaceDomainVerificationMethodHttp**](CloudCdnNamespaceDomainVerificationMethodHttp.md)> | | [optional] -**invalid** | Option<[**serde_json::Value**](.md)> | | [optional] - -[[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-cli/docs/CloudCdnNamespaceDomainVerificationMethodHttp.md b/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomainVerificationMethodHttp.md deleted file mode 100644 index 5b765d9d41..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomainVerificationMethodHttp.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudCdnNamespaceDomainVerificationMethodHttp - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cname_record** | **String** | | - -[[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-cli/docs/CloudCdnNamespaceDomainVerificationStatus.md b/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomainVerificationStatus.md deleted file mode 100644 index ec1c576cc9..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnNamespaceDomainVerificationStatus.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudCdnNamespaceDomainVerificationStatus - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudCdnSiteSummary.md b/sdks/api/full/rust-cli/docs/CloudCdnSiteSummary.md deleted file mode 100644 index 8292f21f3f..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCdnSiteSummary.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudCdnSiteSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**complete** | **bool** | Whether or not this site has completely been uploaded. | -**content_length** | **i64** | Unsigned 64 bit integer. | -**create_ts** | **String** | RFC3339 timestamp | -**display_name** | **String** | Represent a resource's readable display name. | -**site_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudCustomAvatarSummary.md b/sdks/api/full/rust-cli/docs/CloudCustomAvatarSummary.md deleted file mode 100644 index ce06bd3020..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudCustomAvatarSummary.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudCustomAvatarSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**complete** | **bool** | Whether or not this custom avatar has completely been uploaded. | -**content_length** | **i64** | Unsigned 64 bit integer. | -**create_ts** | **String** | RFC3339 timestamp | -**display_name** | **String** | Represent a resource's readable display name. | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**url** | Option<**String**> | The URL of this custom avatar image. Only present if upload is complete. | [optional] - -[[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-cli/docs/CloudDevicesCompleteDeviceLinkRequest.md b/sdks/api/full/rust-cli/docs/CloudDevicesCompleteDeviceLinkRequest.md deleted file mode 100644 index 0586ccf87f..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudDevicesCompleteDeviceLinkRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudDevicesCompleteDeviceLinkRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**device_link_token** | **String** | Documentation at https://jwt.io/ | -**game_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudDevicesGetDeviceLinkResponse.md b/sdks/api/full/rust-cli/docs/CloudDevicesGetDeviceLinkResponse.md deleted file mode 100644 index ca9e4819a1..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudDevicesGetDeviceLinkResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudDevicesGetDeviceLinkResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cloud_token** | Option<**String**> | | [optional] -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/CloudDevicesLinksApi.md b/sdks/api/full/rust-cli/docs/CloudDevicesLinksApi.md deleted file mode 100644 index af898a3706..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudDevicesLinksApi.md +++ /dev/null @@ -1,93 +0,0 @@ -# \CloudDevicesLinksApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_devices_links_complete**](CloudDevicesLinksApi.md#cloud_devices_links_complete) | **POST** /cloud/devices/links/complete | -[**cloud_devices_links_get**](CloudDevicesLinksApi.md#cloud_devices_links_get) | **GET** /cloud/devices/links | -[**cloud_devices_links_prepare**](CloudDevicesLinksApi.md#cloud_devices_links_prepare) | **POST** /cloud/devices/links | - - - -## cloud_devices_links_complete - -> cloud_devices_links_complete(cloud_devices_complete_device_link_request) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cloud_devices_complete_device_link_request** | [**CloudDevicesCompleteDeviceLinkRequest**](CloudDevicesCompleteDeviceLinkRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_devices_links_get - -> crate::models::CloudDevicesGetDeviceLinkResponse cloud_devices_links_get(device_link_token, watch_index) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**device_link_token** | **String** | | [required] | -**watch_index** | Option<**String**> | | | - -### Return type - -[**crate::models::CloudDevicesGetDeviceLinkResponse**](CloudDevicesGetDeviceLinkResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_devices_links_prepare - -> crate::models::CloudDevicesPrepareDeviceLinkResponse cloud_devices_links_prepare() - - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::CloudDevicesPrepareDeviceLinkResponse**](CloudDevicesPrepareDeviceLinkResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudDevicesPrepareDeviceLinkResponse.md b/sdks/api/full/rust-cli/docs/CloudDevicesPrepareDeviceLinkResponse.md deleted file mode 100644 index 2f088238d0..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudDevicesPrepareDeviceLinkResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudDevicesPrepareDeviceLinkResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**device_link_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**device_link_token** | **String** | | -**device_link_url** | **String** | | - -[[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-cli/docs/CloudGameFull.md b/sdks/api/full/rust-cli/docs/CloudGameFull.md deleted file mode 100644 index dd4d876bc8..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGameFull.md +++ /dev/null @@ -1,21 +0,0 @@ -# CloudGameFull - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**available_regions** | [**Vec**](CloudRegionSummary.md) | A list of region summaries. | -**banner_url** | Option<**String**> | The URL of this game's banner image. | [optional] -**create_ts** | **String** | RFC3339 timestamp | -**developer_group_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**display_name** | **String** | Represent a resource's readable display name. | -**game_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**logo_url** | Option<**String**> | The URL of this game's logo image. | [optional] -**name_id** | **String** | 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. | -**namespaces** | [**Vec**](CloudNamespaceSummary.md) | A list of namespace summaries. | -**total_player_count** | **i32** | Unsigned 32 bit integer. | -**versions** | [**Vec**](CloudVersionSummary.md) | A list of version summaries. | - -[[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-cli/docs/CloudGameLobbyExpenses.md b/sdks/api/full/rust-cli/docs/CloudGameLobbyExpenses.md deleted file mode 100644 index 4bd3ab7576..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGameLobbyExpenses.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGameLobbyExpenses - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**expenses** | [**Vec**](CloudRegionTierExpenses.md) | A list of multiple region tier expenses. | -**game** | [**crate::models::GameHandle**](GameHandle.md) | | -**namespaces** | [**Vec**](CloudNamespaceSummary.md) | A list of namespace summaries. | - -[[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-cli/docs/CloudGamesApi.md b/sdks/api/full/rust-cli/docs/CloudGamesApi.md deleted file mode 100644 index 479675ff95..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesApi.md +++ /dev/null @@ -1,261 +0,0 @@ -# \CloudGamesApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_create_game**](CloudGamesApi.md#cloud_games_create_game) | **POST** /cloud/games | -[**cloud_games_game_banner_upload_complete**](CloudGamesApi.md#cloud_games_game_banner_upload_complete) | **POST** /cloud/games/{game_id}/banner-upload/{upload_id}/complete | -[**cloud_games_game_banner_upload_prepare**](CloudGamesApi.md#cloud_games_game_banner_upload_prepare) | **POST** /cloud/games/{game_id}/banner-upload/prepare | -[**cloud_games_game_logo_upload_complete**](CloudGamesApi.md#cloud_games_game_logo_upload_complete) | **POST** /cloud/games/{game_id}/logo-upload/{upload_id}/complete | -[**cloud_games_game_logo_upload_prepare**](CloudGamesApi.md#cloud_games_game_logo_upload_prepare) | **POST** /cloud/games/{game_id}/logo-upload/prepare | -[**cloud_games_get_game_by_id**](CloudGamesApi.md#cloud_games_get_game_by_id) | **GET** /cloud/games/{game_id} | -[**cloud_games_get_games**](CloudGamesApi.md#cloud_games_get_games) | **GET** /cloud/games | -[**cloud_games_validate_game**](CloudGamesApi.md#cloud_games_validate_game) | **POST** /cloud/games/validate | - - - -## cloud_games_create_game - -> crate::models::CloudGamesCreateGameResponse cloud_games_create_game(cloud_games_create_game_request) - - -Creates a new game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cloud_games_create_game_request** | [**CloudGamesCreateGameRequest**](CloudGamesCreateGameRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesCreateGameResponse**](CloudGamesCreateGameResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_game_banner_upload_complete - -> cloud_games_game_banner_upload_complete(game_id, upload_id) - - -Completes an game banner image upload. Must be called after the file upload process completes. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**upload_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_game_banner_upload_prepare - -> crate::models::CloudGamesGameBannerUploadPrepareResponse cloud_games_game_banner_upload_prepare(game_id, cloud_games_game_banner_upload_prepare_request) - - -Prepares a game banner image upload. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_game_banner_upload_prepare_request** | [**CloudGamesGameBannerUploadPrepareRequest**](CloudGamesGameBannerUploadPrepareRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesGameBannerUploadPrepareResponse**](CloudGamesGameBannerUploadPrepareResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_game_logo_upload_complete - -> cloud_games_game_logo_upload_complete(game_id, upload_id) - - -Completes a game logo image upload. Must be called after the file upload process completes. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**upload_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_game_logo_upload_prepare - -> crate::models::CloudGamesGameLogoUploadPrepareResponse cloud_games_game_logo_upload_prepare(game_id, cloud_games_game_logo_upload_prepare_request) - - -Prepares a game logo image upload. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_game_logo_upload_prepare_request** | [**CloudGamesGameLogoUploadPrepareRequest**](CloudGamesGameLogoUploadPrepareRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesGameLogoUploadPrepareResponse**](CloudGamesGameLogoUploadPrepareResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_get_game_by_id - -> crate::models::CloudGamesGetGameByIdResponse cloud_games_get_game_by_id(game_id, watch_index) - - -Returns a game by its game id. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::CloudGamesGetGameByIdResponse**](CloudGamesGetGameByIdResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_get_games - -> crate::models::CloudGamesGetGamesResponse cloud_games_get_games(watch_index) - - -Returns a list of games in which the current identity is a group member of its development team. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::CloudGamesGetGamesResponse**](CloudGamesGetGamesResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_validate_game - -> crate::models::CloudGamesValidateGameResponse cloud_games_validate_game(cloud_games_validate_game_request) - - -Validates information used to create a new game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cloud_games_validate_game_request** | [**CloudGamesValidateGameRequest**](CloudGamesValidateGameRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesValidateGameResponse**](CloudGamesValidateGameResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesAvatarsApi.md b/sdks/api/full/rust-cli/docs/CloudGamesAvatarsApi.md deleted file mode 100644 index 1d24f668dc..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesAvatarsApi.md +++ /dev/null @@ -1,103 +0,0 @@ -# \CloudGamesAvatarsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_avatars_complete_custom_avatar_upload**](CloudGamesAvatarsApi.md#cloud_games_avatars_complete_custom_avatar_upload) | **POST** /cloud/games/{game_id}/avatar-upload/{upload_id}/complete | -[**cloud_games_avatars_list_game_custom_avatars**](CloudGamesAvatarsApi.md#cloud_games_avatars_list_game_custom_avatars) | **GET** /cloud/games/{game_id}/avatars | -[**cloud_games_avatars_prepare_custom_avatar_upload**](CloudGamesAvatarsApi.md#cloud_games_avatars_prepare_custom_avatar_upload) | **POST** /cloud/games/{game_id}/prepare | - - - -## cloud_games_avatars_complete_custom_avatar_upload - -> cloud_games_avatars_complete_custom_avatar_upload(game_id, upload_id) - - -Completes a custom avatar image upload. Must be called after the file upload process completes. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**upload_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_avatars_list_game_custom_avatars - -> crate::models::CloudGamesListGameCustomAvatarsResponse cloud_games_avatars_list_game_custom_avatars(game_id) - - -Lists custom avatars for the given game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesListGameCustomAvatarsResponse**](CloudGamesListGameCustomAvatarsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_avatars_prepare_custom_avatar_upload - -> crate::models::CloudGamesPrepareCustomAvatarUploadResponse cloud_games_avatars_prepare_custom_avatar_upload(game_id, cloud_games_prepare_custom_avatar_upload_request) - - -Prepares a custom avatar image upload. Complete upload with `rivet.api.cloud#CompleteCustomAvatarUpload`. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_prepare_custom_avatar_upload_request** | [**CloudGamesPrepareCustomAvatarUploadRequest**](CloudGamesPrepareCustomAvatarUploadRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesPrepareCustomAvatarUploadResponse**](CloudGamesPrepareCustomAvatarUploadResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesBuildCompression.md b/sdks/api/full/rust-cli/docs/CloudGamesBuildCompression.md deleted file mode 100644 index fb25e9a05e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesBuildCompression.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudGamesBuildCompression - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudGamesBuildKind.md b/sdks/api/full/rust-cli/docs/CloudGamesBuildKind.md deleted file mode 100644 index 0bbba38deb..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesBuildKind.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudGamesBuildKind - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudGamesBuildsApi.md b/sdks/api/full/rust-cli/docs/CloudGamesBuildsApi.md deleted file mode 100644 index 85885a62ab..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesBuildsApi.md +++ /dev/null @@ -1,71 +0,0 @@ -# \CloudGamesBuildsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_builds_create_game_build**](CloudGamesBuildsApi.md#cloud_games_builds_create_game_build) | **POST** /cloud/games/{game_id}/builds | -[**cloud_games_builds_list_game_builds**](CloudGamesBuildsApi.md#cloud_games_builds_list_game_builds) | **GET** /cloud/games/{game_id}/builds | - - - -## cloud_games_builds_create_game_build - -> crate::models::CloudGamesCreateGameBuildResponse cloud_games_builds_create_game_build(game_id, cloud_games_create_game_build_request) - - -Creates a new game build for the given game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_create_game_build_request** | [**CloudGamesCreateGameBuildRequest**](CloudGamesCreateGameBuildRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesCreateGameBuildResponse**](CloudGamesCreateGameBuildResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_builds_list_game_builds - -> crate::models::CloudGamesListGameBuildsResponse cloud_games_builds_list_game_builds(game_id) - - -Lists game builds for the given game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesListGameBuildsResponse**](CloudGamesListGameBuildsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesCdnApi.md b/sdks/api/full/rust-cli/docs/CloudGamesCdnApi.md deleted file mode 100644 index 2896c54689..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCdnApi.md +++ /dev/null @@ -1,71 +0,0 @@ -# \CloudGamesCdnApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_cdn_create_game_cdn_site**](CloudGamesCdnApi.md#cloud_games_cdn_create_game_cdn_site) | **POST** /cloud/games/{game_id}/cdn/sites | -[**cloud_games_cdn_list_game_cdn_sites**](CloudGamesCdnApi.md#cloud_games_cdn_list_game_cdn_sites) | **GET** /cloud/games/{game_id}/cdn/sites | - - - -## cloud_games_cdn_create_game_cdn_site - -> crate::models::CloudGamesCreateGameCdnSiteResponse cloud_games_cdn_create_game_cdn_site(game_id, cloud_games_create_game_cdn_site_request) - - -Creates a new CDN site for the given game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_create_game_cdn_site_request** | [**CloudGamesCreateGameCdnSiteRequest**](CloudGamesCreateGameCdnSiteRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesCreateGameCdnSiteResponse**](CloudGamesCreateGameCdnSiteResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_cdn_list_game_cdn_sites - -> crate::models::CloudGamesListGameCdnSitesResponse cloud_games_cdn_list_game_cdn_sites(game_id) - - -Lists CDN sites for a game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesListGameCdnSitesResponse**](CloudGamesListGameCdnSitesResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesCreateCloudTokenResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateCloudTokenResponse.md deleted file mode 100644 index 0dd9b03275..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateCloudTokenResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesCreateCloudTokenResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**token** | **String** | A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. | - -[[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-cli/docs/CloudGamesCreateGameBuildRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameBuildRequest.md deleted file mode 100644 index 3861ff9f5d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameBuildRequest.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudGamesCreateGameBuildRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**compression** | Option<[**crate::models::CloudGamesBuildCompression**](CloudGamesBuildCompression.md)> | | [optional] -**display_name** | **String** | Represent a resource's readable display name. | -**image_file** | [**crate::models::UploadPrepareFile**](UploadPrepareFile.md) | | -**image_tag** | **String** | A tag given to the game build. | -**kind** | Option<[**crate::models::CloudGamesBuildKind**](CloudGamesBuildKind.md)> | | [optional] -**multipart_upload** | Option<**bool**> | | [optional] - -[[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-cli/docs/CloudGamesCreateGameBuildResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameBuildResponse.md deleted file mode 100644 index fb3c4a586a..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameBuildResponse.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudGamesCreateGameBuildResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**image_presigned_request** | Option<[**crate::models::UploadPresignedRequest**](UploadPresignedRequest.md)> | | [optional] -**image_presigned_requests** | Option<[**Vec**](UploadPresignedRequest.md)> | | [optional] -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesCreateGameCdnSiteRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameCdnSiteRequest.md deleted file mode 100644 index 80690765c7..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameCdnSiteRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesCreateGameCdnSiteRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | -**files** | [**Vec**](UploadPrepareFile.md) | A list of files preparing to upload. | - -[[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-cli/docs/CloudGamesCreateGameCdnSiteResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameCdnSiteResponse.md deleted file mode 100644 index b15588cb5e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameCdnSiteResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesCreateGameCdnSiteResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**presigned_requests** | [**Vec**](UploadPresignedRequest.md) | | -**site_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesCreateGameRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameRequest.md deleted file mode 100644 index 7fda60818d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesCreateGameRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**developer_group_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**display_name** | **String** | Represent a resource's readable display name. | -**name_id** | Option<**String**> | 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. | [optional] - -[[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-cli/docs/CloudGamesCreateGameResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameResponse.md deleted file mode 100644 index 9485a96f4d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesCreateGameResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesCreateGameVersionRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameVersionRequest.md deleted file mode 100644 index e383f235a1..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameVersionRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesCreateGameVersionRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**config** | [**crate::models::CloudVersionConfig**](CloudVersionConfig.md) | | -**display_name** | **String** | Represent a resource's readable display name. | - -[[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-cli/docs/CloudGamesCreateGameVersionResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesCreateGameVersionResponse.md deleted file mode 100644 index bb7b9a270f..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesCreateGameVersionResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesCreateGameVersionResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesDeleteMatchmakerLobbyResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesDeleteMatchmakerLobbyResponse.md deleted file mode 100644 index 0fb423ca74..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesDeleteMatchmakerLobbyResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesDeleteMatchmakerLobbyResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**did_remove** | **bool** | Whether or not the lobby was successfully stopped. | - -[[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-cli/docs/CloudGamesExportLobbyLogsRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesExportLobbyLogsRequest.md deleted file mode 100644 index d8f0d85816..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesExportLobbyLogsRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesExportLobbyLogsRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**stream** | [**crate::models::CloudGamesLogStream**](CloudGamesLogStream.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-cli/docs/CloudGamesExportLobbyLogsResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesExportLobbyLogsResponse.md deleted file mode 100644 index dbae3b5a70..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesExportLobbyLogsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesExportLobbyLogsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**url** | **String** | The URL to a CSV file for the given lobby history. | - -[[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-cli/docs/CloudGamesExportMatchmakerLobbyHistoryRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesExportMatchmakerLobbyHistoryRequest.md deleted file mode 100644 index 5014fa483c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesExportMatchmakerLobbyHistoryRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesExportMatchmakerLobbyHistoryRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**query_end** | **i64** | Unsigned 64 bit integer. | -**query_start** | **i64** | Unsigned 64 bit integer. | - -[[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-cli/docs/CloudGamesExportMatchmakerLobbyHistoryResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesExportMatchmakerLobbyHistoryResponse.md deleted file mode 100644 index c1784b66a8..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesExportMatchmakerLobbyHistoryResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesExportMatchmakerLobbyHistoryResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**url** | **String** | The URL to a CSV file for the given lobby history. | - -[[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-cli/docs/CloudGamesGameBannerUploadPrepareRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesGameBannerUploadPrepareRequest.md deleted file mode 100644 index 9266135dd5..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGameBannerUploadPrepareRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesGameBannerUploadPrepareRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | Unsigned 64 bit integer. | -**mime** | Option<**String**> | The MIME type of the game banner. | [optional] -**path** | **String** | The path/filename of the game banner. | - -[[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-cli/docs/CloudGamesGameBannerUploadPrepareResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesGameBannerUploadPrepareResponse.md deleted file mode 100644 index d716b1bb0c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGameBannerUploadPrepareResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesGameBannerUploadPrepareResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**presigned_request** | [**crate::models::UploadPresignedRequest**](UploadPresignedRequest.md) | | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesGameLogoUploadPrepareRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesGameLogoUploadPrepareRequest.md deleted file mode 100644 index 459e05574e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGameLogoUploadPrepareRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesGameLogoUploadPrepareRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | Unsigned 64 bit integer. | -**mime** | Option<**String**> | The MIME type of the game logo. | [optional] -**path** | **String** | The path/filename of the game logo. | - -[[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-cli/docs/CloudGamesGameLogoUploadPrepareResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesGameLogoUploadPrepareResponse.md deleted file mode 100644 index 592a33332c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGameLogoUploadPrepareResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesGameLogoUploadPrepareResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**presigned_request** | [**crate::models::UploadPresignedRequest**](UploadPresignedRequest.md) | | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesGetGameByIdResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesGetGameByIdResponse.md deleted file mode 100644 index f6ec8834cb..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGetGameByIdResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesGetGameByIdResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game** | [**crate::models::CloudGameFull**](CloudGameFull.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/CloudGamesGetGameVersionByIdResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesGetGameVersionByIdResponse.md deleted file mode 100644 index 269714c904..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGetGameVersionByIdResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesGetGameVersionByIdResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version** | [**crate::models::CloudVersionFull**](CloudVersionFull.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-cli/docs/CloudGamesGetGamesResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesGetGamesResponse.md deleted file mode 100644 index 45faa83f49..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGetGamesResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesGetGamesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**games** | [**Vec**](GameSummary.md) | A list of game summaries. | -**groups** | [**Vec**](GroupSummary.md) | A list of group summaries. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/CloudGamesGetLobbyLogsResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesGetLobbyLogsResponse.md deleted file mode 100644 index c8e1e250ec..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesGetLobbyLogsResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesGetLobbyLogsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lines** | **Vec** | Sorted old to new. | -**timestamps** | **Vec** | Sorted old to new. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/CloudGamesListGameBuildsResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesListGameBuildsResponse.md deleted file mode 100644 index 14bf4e7708..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesListGameBuildsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesListGameBuildsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**builds** | [**Vec**](CloudBuildSummary.md) | A list of build summaries. | - -[[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-cli/docs/CloudGamesListGameCdnSitesResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesListGameCdnSitesResponse.md deleted file mode 100644 index 5394c325b3..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesListGameCdnSitesResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesListGameCdnSitesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**sites** | [**Vec**](CloudCdnSiteSummary.md) | A list of CDN site summaries. | - -[[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-cli/docs/CloudGamesListGameCustomAvatarsResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesListGameCustomAvatarsResponse.md deleted file mode 100644 index b2ade0eacf..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesListGameCustomAvatarsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesListGameCustomAvatarsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**custom_avatars** | [**Vec**](CloudCustomAvatarSummary.md) | A list of custom avatar summaries. | - -[[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-cli/docs/CloudGamesLogStream.md b/sdks/api/full/rust-cli/docs/CloudGamesLogStream.md deleted file mode 100644 index 12bb8d0bfb..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesLogStream.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudGamesLogStream - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudGamesMatchmakerApi.md b/sdks/api/full/rust-cli/docs/CloudGamesMatchmakerApi.md deleted file mode 100644 index 570be45bce..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesMatchmakerApi.md +++ /dev/null @@ -1,139 +0,0 @@ -# \CloudGamesMatchmakerApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_matchmaker_delete_matchmaker_lobby**](CloudGamesMatchmakerApi.md#cloud_games_matchmaker_delete_matchmaker_lobby) | **DELETE** /cloud/games/{game_id}/matchmaker/lobbies/{lobby_id} | -[**cloud_games_matchmaker_export_lobby_logs**](CloudGamesMatchmakerApi.md#cloud_games_matchmaker_export_lobby_logs) | **POST** /cloud/games/{game_id}/matchmaker/lobbies/{lobby_id}/logs/export | -[**cloud_games_matchmaker_export_matchmaker_lobby_history**](CloudGamesMatchmakerApi.md#cloud_games_matchmaker_export_matchmaker_lobby_history) | **POST** /cloud/games/{game_id}/matchmaker/lobbies/export-history | -[**cloud_games_matchmaker_get_lobby_logs**](CloudGamesMatchmakerApi.md#cloud_games_matchmaker_get_lobby_logs) | **GET** /cloud/games/{game_id}/matchmaker/lobbies/{lobby_id}/logs | - - - -## cloud_games_matchmaker_delete_matchmaker_lobby - -> crate::models::CloudGamesDeleteMatchmakerLobbyResponse cloud_games_matchmaker_delete_matchmaker_lobby(game_id, lobby_id) - - -Deletes a matchmaker lobby, stopping it immediately. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**lobby_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesDeleteMatchmakerLobbyResponse**](CloudGamesDeleteMatchmakerLobbyResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_matchmaker_export_lobby_logs - -> crate::models::CloudGamesExportLobbyLogsResponse cloud_games_matchmaker_export_lobby_logs(game_id, lobby_id, cloud_games_export_lobby_logs_request) - - -Generates a download URL for logs. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**lobby_id** | **uuid::Uuid** | | [required] | -**cloud_games_export_lobby_logs_request** | [**CloudGamesExportLobbyLogsRequest**](CloudGamesExportLobbyLogsRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesExportLobbyLogsResponse**](CloudGamesExportLobbyLogsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_matchmaker_export_matchmaker_lobby_history - -> crate::models::CloudGamesExportMatchmakerLobbyHistoryResponse cloud_games_matchmaker_export_matchmaker_lobby_history(game_id, cloud_games_export_matchmaker_lobby_history_request) - - -Exports lobby history over a given query time span. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_export_matchmaker_lobby_history_request** | [**CloudGamesExportMatchmakerLobbyHistoryRequest**](CloudGamesExportMatchmakerLobbyHistoryRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesExportMatchmakerLobbyHistoryResponse**](CloudGamesExportMatchmakerLobbyHistoryResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_matchmaker_get_lobby_logs - -> crate::models::CloudGamesGetLobbyLogsResponse cloud_games_matchmaker_get_lobby_logs(game_id, lobby_id, stream, watch_index) - - -Returns the logs for a given lobby. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**lobby_id** | **uuid::Uuid** | | [required] | -**stream** | [**CloudGamesLogStream**](.md) | | [required] | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::CloudGamesGetLobbyLogsResponse**](CloudGamesGetLobbyLogsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesAddNamespaceDomainRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesAddNamespaceDomainRequest.md deleted file mode 100644 index 9ca30a3a9b..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesAddNamespaceDomainRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesAddNamespaceDomainRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**domain** | **String** | A valid domain name (no protocol). | - -[[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-cli/docs/CloudGamesNamespacesAnalyticsApi.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesAnalyticsApi.md deleted file mode 100644 index ca26b7b810..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesAnalyticsApi.md +++ /dev/null @@ -1,40 +0,0 @@ -# \CloudGamesNamespacesAnalyticsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_namespaces_analytics_get_analytics_matchmaker_live**](CloudGamesNamespacesAnalyticsApi.md#cloud_games_namespaces_analytics_get_analytics_matchmaker_live) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/analytics/matchmaker/live | - - - -## cloud_games_namespaces_analytics_get_analytics_matchmaker_live - -> crate::models::CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse cloud_games_namespaces_analytics_get_analytics_matchmaker_live(game_id, namespace_id) - - -Returns live information about all active lobbies for a given namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse**](CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesApi.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesApi.md deleted file mode 100644 index 19b6bfabbc..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesApi.md +++ /dev/null @@ -1,533 +0,0 @@ -# \CloudGamesNamespacesApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_namespaces_add_namespace_domain**](CloudGamesNamespacesApi.md#cloud_games_namespaces_add_namespace_domain) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/domains | -[**cloud_games_namespaces_create_game_namespace**](CloudGamesNamespacesApi.md#cloud_games_namespaces_create_game_namespace) | **POST** /cloud/games/{game_id}/namespaces | -[**cloud_games_namespaces_create_game_namespace_token_development**](CloudGamesNamespacesApi.md#cloud_games_namespaces_create_game_namespace_token_development) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/tokens/development | -[**cloud_games_namespaces_create_game_namespace_token_public**](CloudGamesNamespacesApi.md#cloud_games_namespaces_create_game_namespace_token_public) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/tokens/public | -[**cloud_games_namespaces_get_game_namespace_by_id**](CloudGamesNamespacesApi.md#cloud_games_namespaces_get_game_namespace_by_id) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id} | -[**cloud_games_namespaces_get_game_namespace_version_history_list**](CloudGamesNamespacesApi.md#cloud_games_namespaces_get_game_namespace_version_history_list) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/version-history | -[**cloud_games_namespaces_remove_namespace_cdn_auth_user**](CloudGamesNamespacesApi.md#cloud_games_namespaces_remove_namespace_cdn_auth_user) | **DELETE** /cloud/games/{game_id}/namespaces/{namespace_id}/auth-user/{user} | -[**cloud_games_namespaces_remove_namespace_domain**](CloudGamesNamespacesApi.md#cloud_games_namespaces_remove_namespace_domain) | **DELETE** /cloud/games/{game_id}/namespaces/{namespace_id}/domains/{domain} | -[**cloud_games_namespaces_set_namespace_cdn_auth_type**](CloudGamesNamespacesApi.md#cloud_games_namespaces_set_namespace_cdn_auth_type) | **PUT** /cloud/games/{game_id}/namespaces/{namespace_id}/cdn-auth | -[**cloud_games_namespaces_toggle_namespace_domain_public_auth**](CloudGamesNamespacesApi.md#cloud_games_namespaces_toggle_namespace_domain_public_auth) | **PUT** /cloud/games/{game_id}/namespaces/{namespace_id}/domain-public-auth | -[**cloud_games_namespaces_update_game_namespace_matchmaker_config**](CloudGamesNamespacesApi.md#cloud_games_namespaces_update_game_namespace_matchmaker_config) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/mm-config | -[**cloud_games_namespaces_update_game_namespace_version**](CloudGamesNamespacesApi.md#cloud_games_namespaces_update_game_namespace_version) | **PUT** /cloud/games/{game_id}/namespaces/{namespace_id}/version | -[**cloud_games_namespaces_update_namespace_cdn_auth_user**](CloudGamesNamespacesApi.md#cloud_games_namespaces_update_namespace_cdn_auth_user) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/auth-user | -[**cloud_games_namespaces_validate_game_namespace**](CloudGamesNamespacesApi.md#cloud_games_namespaces_validate_game_namespace) | **POST** /cloud/games/{game_id}/namespaces/validate | -[**cloud_games_namespaces_validate_game_namespace_matchmaker_config**](CloudGamesNamespacesApi.md#cloud_games_namespaces_validate_game_namespace_matchmaker_config) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/mm-config/validate | -[**cloud_games_namespaces_validate_game_namespace_token_development**](CloudGamesNamespacesApi.md#cloud_games_namespaces_validate_game_namespace_token_development) | **POST** /cloud/games/{game_id}/namespaces/{namespace_id}/tokens/development/validate | - - - -## cloud_games_namespaces_add_namespace_domain - -> cloud_games_namespaces_add_namespace_domain(game_id, namespace_id, cloud_games_namespaces_add_namespace_domain_request) - - -Adds a domain to the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_add_namespace_domain_request** | [**CloudGamesNamespacesAddNamespaceDomainRequest**](CloudGamesNamespacesAddNamespaceDomainRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_create_game_namespace - -> crate::models::CloudGamesNamespacesCreateGameNamespaceResponse cloud_games_namespaces_create_game_namespace(game_id, cloud_games_namespaces_create_game_namespace_request) - - -Creates a new namespace for the given game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_create_game_namespace_request** | [**CloudGamesNamespacesCreateGameNamespaceRequest**](CloudGamesNamespacesCreateGameNamespaceRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesCreateGameNamespaceResponse**](CloudGamesNamespacesCreateGameNamespaceResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_create_game_namespace_token_development - -> crate::models::CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse cloud_games_namespaces_create_game_namespace_token_development(game_id, namespace_id, cloud_games_namespaces_create_game_namespace_token_development_request) - - -Creates a development token for the given namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_create_game_namespace_token_development_request** | [**CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest**](CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse**](CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_create_game_namespace_token_public - -> crate::models::CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse cloud_games_namespaces_create_game_namespace_token_public(game_id, namespace_id) - - -Creates a public token for the given namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse**](CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_get_game_namespace_by_id - -> crate::models::CloudGamesNamespacesGetGameNamespaceByIdResponse cloud_games_namespaces_get_game_namespace_by_id(game_id, namespace_id) - - -Gets a game namespace by namespace ID. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesGetGameNamespaceByIdResponse**](CloudGamesNamespacesGetGameNamespaceByIdResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_get_game_namespace_version_history_list - -> crate::models::CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse cloud_games_namespaces_get_game_namespace_version_history_list(game_id, namespace_id, anchor, limit) - - -Gets the version history for a given namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **String** | A universally unique identifier. | [required] | -**namespace_id** | **String** | A universally unique identifier. | [required] | -**anchor** | Option<**String**> | How many items to offset the search by. | | -**limit** | Option<**i32**> | Amount of items to return. Must be between 1 and 32 inclusive. | | - -### Return type - -[**crate::models::CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse**](CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_remove_namespace_cdn_auth_user - -> cloud_games_namespaces_remove_namespace_cdn_auth_user(game_id, namespace_id, user) - - -Removes an authenticated user from the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**user** | **String** | A user name. | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_remove_namespace_domain - -> cloud_games_namespaces_remove_namespace_domain(game_id, namespace_id, domain) - - -Removes a domain from the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**domain** | **String** | A valid domain name (no protocol). | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_set_namespace_cdn_auth_type - -> cloud_games_namespaces_set_namespace_cdn_auth_type(game_id, namespace_id, cloud_games_namespaces_set_namespace_cdn_auth_type_request) - - -Updates the CDN authentication type of the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_set_namespace_cdn_auth_type_request** | [**CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest**](CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_toggle_namespace_domain_public_auth - -> cloud_games_namespaces_toggle_namespace_domain_public_auth(game_id, namespace_id, cloud_games_namespaces_toggle_namespace_domain_public_auth_request) - - -Toggles whether or not to allow authentication based on domain for the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_toggle_namespace_domain_public_auth_request** | [**CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest**](CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_update_game_namespace_matchmaker_config - -> cloud_games_namespaces_update_game_namespace_matchmaker_config(game_id, namespace_id, cloud_games_namespaces_update_game_namespace_matchmaker_config_request) - - -Updates matchmaker config for the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_update_game_namespace_matchmaker_config_request** | [**CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest**](CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_update_game_namespace_version - -> cloud_games_namespaces_update_game_namespace_version(game_id, namespace_id, cloud_games_namespaces_update_game_namespace_version_request) - - -Updates the version of a game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_update_game_namespace_version_request** | [**CloudGamesNamespacesUpdateGameNamespaceVersionRequest**](CloudGamesNamespacesUpdateGameNamespaceVersionRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_update_namespace_cdn_auth_user - -> cloud_games_namespaces_update_namespace_cdn_auth_user(game_id, namespace_id, cloud_games_namespaces_update_namespace_cdn_auth_user_request) - - -Adds an authenticated user to the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_update_namespace_cdn_auth_user_request** | [**CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest**](CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_validate_game_namespace - -> crate::models::CloudGamesNamespacesValidateGameNamespaceResponse cloud_games_namespaces_validate_game_namespace(game_id, cloud_games_namespaces_validate_game_namespace_request) - - -Validates information used to create a new game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_validate_game_namespace_request** | [**CloudGamesNamespacesValidateGameNamespaceRequest**](CloudGamesNamespacesValidateGameNamespaceRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesValidateGameNamespaceResponse**](CloudGamesNamespacesValidateGameNamespaceResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_validate_game_namespace_matchmaker_config - -> crate::models::CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse cloud_games_namespaces_validate_game_namespace_matchmaker_config(game_id, namespace_id, cloud_games_namespaces_validate_game_namespace_matchmaker_config_request) - - -Validates information used to update a game namespace's matchmaker config. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_validate_game_namespace_matchmaker_config_request** | [**CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest**](CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse**](CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_validate_game_namespace_token_development - -> crate::models::CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse cloud_games_namespaces_validate_game_namespace_token_development(game_id, namespace_id, cloud_games_namespaces_validate_game_namespace_token_development_request) - - -Validates information used to create a new game namespace development token. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**cloud_games_namespaces_validate_game_namespace_token_development_request** | [**CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest**](CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse**](CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceRequest.md deleted file mode 100644 index 34de4d1d82..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesNamespacesCreateGameNamespaceRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | -**name_id** | **String** | 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. | -**version_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesNamespacesCreateGameNamespaceResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceResponse.md deleted file mode 100644 index 709a01e382..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesCreateGameNamespaceResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**namespace_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest.md deleted file mode 100644 index 453c36094d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**hostname** | **String** | The hostname used for the token. | -**lobby_ports** | Option<[**Vec**](CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.md)> | **Deprecated** A list of docker ports. | [optional] -**ports** | Option<[**::std::collections::HashMap**](CloudMatchmakerDevelopmentPort.md)> | | [optional] - -[[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-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse.md deleted file mode 100644 index 6c9c6e9a53..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**token** | **String** | A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. | - -[[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-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse.md deleted file mode 100644 index 5680ec0c22..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**token** | **String** | A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. | - -[[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-cli/docs/CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse.md deleted file mode 100644 index e77d64a1ac..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobbies** | [**Vec**](CloudLobbySummaryAnalytics.md) | A list of analytics lobby summaries. | - -[[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-cli/docs/CloudGamesNamespacesGetGameNamespaceByIdResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetGameNamespaceByIdResponse.md deleted file mode 100644 index b0329d3f29..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetGameNamespaceByIdResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesGetGameNamespaceByIdResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**namespace** | [**crate::models::CloudNamespaceFull**](CloudNamespaceFull.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-cli/docs/CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse.md deleted file mode 100644 index f657a945fc..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**versions** | [**Vec**](CloudNamespaceVersion.md) | A list of previously deployed namespace versions. | - -[[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-cli/docs/CloudGamesNamespacesGetNamespaceLobbyResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetNamespaceLobbyResponse.md deleted file mode 100644 index febb39955c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesGetNamespaceLobbyResponse.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudGamesNamespacesGetNamespaceLobbyResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby** | [**crate::models::CloudLogsLobbySummary**](CloudLogsLobbySummary.md) | | -**metrics** | Option<[**crate::models::CloudSvcMetrics**](CloudSvcMetrics.md)> | | [optional] -**perf_lists** | [**Vec**](CloudSvcPerf.md) | **Deprecated** A list of service performance summaries. | -**stderr_presigned_urls** | **Vec** | **Deprecated** A list of URLs. | -**stdout_presigned_urls** | **Vec** | **Deprecated** A list of URLs. | - -[[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-cli/docs/CloudGamesNamespacesInspectResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesInspectResponse.md deleted file mode 100644 index 3055d064b8..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesInspectResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesInspectResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**agent** | [**crate::models::CloudAuthAgent**](CloudAuthAgent.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-cli/docs/CloudGamesNamespacesListNamespaceLobbiesResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesListNamespaceLobbiesResponse.md deleted file mode 100644 index 5a1989f945..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesListNamespaceLobbiesResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesListNamespaceLobbiesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobbies** | [**Vec**](CloudLogsLobbySummary.md) | A list of lobby log summaries. | - -[[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-cli/docs/CloudGamesNamespacesLogsApi.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesLogsApi.md deleted file mode 100644 index 3e0465dbbf..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesLogsApi.md +++ /dev/null @@ -1,74 +0,0 @@ -# \CloudGamesNamespacesLogsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_namespaces_logs_get_namespace_lobby**](CloudGamesNamespacesLogsApi.md#cloud_games_namespaces_logs_get_namespace_lobby) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/logs/lobbies/{lobby_id} | -[**cloud_games_namespaces_logs_list_namespace_lobbies**](CloudGamesNamespacesLogsApi.md#cloud_games_namespaces_logs_list_namespace_lobbies) | **GET** /cloud/games/{game_id}/namespaces/{namespace_id}/logs/lobbies | - - - -## cloud_games_namespaces_logs_get_namespace_lobby - -> crate::models::CloudGamesNamespacesGetNamespaceLobbyResponse cloud_games_namespaces_logs_get_namespace_lobby(game_id, namespace_id, lobby_id) - - -Returns a lobby from the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**lobby_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesNamespacesGetNamespaceLobbyResponse**](CloudGamesNamespacesGetNamespaceLobbyResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_namespaces_logs_list_namespace_lobbies - -> crate::models::CloudGamesNamespacesListNamespaceLobbiesResponse cloud_games_namespaces_logs_list_namespace_lobbies(game_id, namespace_id, before_create_ts) - - -Returns a list of lobbies for the given game namespace. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | -**before_create_ts** | Option<**String**> | Returns lobbies created before this timestamp. | | - -### Return type - -[**crate::models::CloudGamesNamespacesListNamespaceLobbiesResponse**](CloudGamesNamespacesListNamespaceLobbiesResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest.md deleted file mode 100644 index 68ab14d765..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**auth_type** | [**crate::models::CloudCdnAuthType**](CloudCdnAuthType.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-cli/docs/CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest.md deleted file mode 100644 index fe55a0a283..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**enabled** | **bool** | Whether or not to enable authentication based on domain. | - -[[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-cli/docs/CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest.md deleted file mode 100644 index 26bd429a84..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby_count_max** | **i32** | Unsigned 32 bit integer. | -**max_players** | **i32** | Unsigned 32 bit integer. | - -[[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-cli/docs/CloudGamesNamespacesUpdateGameNamespaceVersionRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesUpdateGameNamespaceVersionRequest.md deleted file mode 100644 index adfa21fe89..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesUpdateGameNamespaceVersionRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesUpdateGameNamespaceVersionRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest.md deleted file mode 100644 index cb6cadf3b1..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**password** | **String** | A bcrypt encrypted password. An error is returned if the given string is not properly encrypted. | -**user** | **String** | A user name. | - -[[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-cli/docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest.md deleted file mode 100644 index 7cf3c48945..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby_count_max** | **i32** | Unsigned 32 bit integer. | -**max_players** | **i32** | Unsigned 32 bit integer. | - -[[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-cli/docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse.md deleted file mode 100644 index 9dcf2b2a60..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.md) | A list of validation errors. | - -[[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-cli/docs/CloudGamesNamespacesValidateGameNamespaceRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceRequest.md deleted file mode 100644 index 802162610e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesNamespacesValidateGameNamespaceRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | -**name_id** | **String** | 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. | - -[[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-cli/docs/CloudGamesNamespacesValidateGameNamespaceResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceResponse.md deleted file mode 100644 index ccfbe8e127..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesValidateGameNamespaceResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.md) | A list of validation errors. | - -[[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-cli/docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest.md deleted file mode 100644 index b49091c3df..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**hostname** | **String** | | -**lobby_ports** | [**Vec**](CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.md) | A list of docker ports. | - -[[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-cli/docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse.md deleted file mode 100644 index a5e8ca41a8..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.md) | A list of validation errors. | - -[[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-cli/docs/CloudGamesPrepareCustomAvatarUploadRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesPrepareCustomAvatarUploadRequest.md deleted file mode 100644 index 262c98806d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesPrepareCustomAvatarUploadRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudGamesPrepareCustomAvatarUploadRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | Unsigned 64 bit integer. | -**mime** | Option<**String**> | The MIME type of the custom avatar. | [optional] -**path** | **String** | The path/filename of the custom avatar. | - -[[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-cli/docs/CloudGamesPrepareCustomAvatarUploadResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesPrepareCustomAvatarUploadResponse.md deleted file mode 100644 index 2b8d095d5e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesPrepareCustomAvatarUploadResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesPrepareCustomAvatarUploadResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**presigned_request** | [**crate::models::UploadPresignedRequest**](UploadPresignedRequest.md) | | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudGamesReserveVersionNameResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesReserveVersionNameResponse.md deleted file mode 100644 index 616b45e50f..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesReserveVersionNameResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesReserveVersionNameResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version_display_name** | **String** | Represent a resource's readable display name. | - -[[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-cli/docs/CloudGamesTokensApi.md b/sdks/api/full/rust-cli/docs/CloudGamesTokensApi.md deleted file mode 100644 index c0ee6276fc..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesTokensApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \CloudGamesTokensApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_tokens_create_cloud_token**](CloudGamesTokensApi.md#cloud_games_tokens_create_cloud_token) | **POST** /cloud/games/{game_id}/tokens/cloud | - - - -## cloud_games_tokens_create_cloud_token - -> crate::models::CloudGamesCreateCloudTokenResponse cloud_games_tokens_create_cloud_token(game_id) - - -Creates a new game cloud token. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesCreateCloudTokenResponse**](CloudGamesCreateCloudTokenResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGamesValidateGameRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesValidateGameRequest.md deleted file mode 100644 index 06585ddd22..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesValidateGameRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesValidateGameRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | -**name_id** | Option<**String**> | 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. | [optional] - -[[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-cli/docs/CloudGamesValidateGameResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesValidateGameResponse.md deleted file mode 100644 index 1f43aabfbd..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesValidateGameResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesValidateGameResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.md) | A list of validation errors. | - -[[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-cli/docs/CloudGamesValidateGameVersionRequest.md b/sdks/api/full/rust-cli/docs/CloudGamesValidateGameVersionRequest.md deleted file mode 100644 index 2e44708c12..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesValidateGameVersionRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGamesValidateGameVersionRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**config** | [**crate::models::CloudVersionConfig**](CloudVersionConfig.md) | | -**display_name** | **String** | Represent a resource's readable display name. | - -[[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-cli/docs/CloudGamesValidateGameVersionResponse.md b/sdks/api/full/rust-cli/docs/CloudGamesValidateGameVersionResponse.md deleted file mode 100644 index 5b20b91c96..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesValidateGameVersionResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGamesValidateGameVersionResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.md) | A list of validation errors. | - -[[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-cli/docs/CloudGamesVersionsApi.md b/sdks/api/full/rust-cli/docs/CloudGamesVersionsApi.md deleted file mode 100644 index d7b6e2e8f4..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGamesVersionsApi.md +++ /dev/null @@ -1,135 +0,0 @@ -# \CloudGamesVersionsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_games_versions_create_game_version**](CloudGamesVersionsApi.md#cloud_games_versions_create_game_version) | **POST** /cloud/games/{game_id}/versions | -[**cloud_games_versions_get_game_version_by_id**](CloudGamesVersionsApi.md#cloud_games_versions_get_game_version_by_id) | **GET** /cloud/games/{game_id}/versions/{version_id} | -[**cloud_games_versions_reserve_version_name**](CloudGamesVersionsApi.md#cloud_games_versions_reserve_version_name) | **POST** /cloud/games/{game_id}/versions/reserve-name | -[**cloud_games_versions_validate_game_version**](CloudGamesVersionsApi.md#cloud_games_versions_validate_game_version) | **POST** /cloud/games/{game_id}/versions/validate | - - - -## cloud_games_versions_create_game_version - -> crate::models::CloudGamesCreateGameVersionResponse cloud_games_versions_create_game_version(game_id, cloud_games_create_game_version_request) - - -Creates a new game version. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_create_game_version_request** | [**CloudGamesCreateGameVersionRequest**](CloudGamesCreateGameVersionRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesCreateGameVersionResponse**](CloudGamesCreateGameVersionResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_versions_get_game_version_by_id - -> crate::models::CloudGamesGetGameVersionByIdResponse cloud_games_versions_get_game_version_by_id(game_id, version_id) - - -Returns a game version by its version ID. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**version_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesGetGameVersionByIdResponse**](CloudGamesGetGameVersionByIdResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_versions_reserve_version_name - -> crate::models::CloudGamesReserveVersionNameResponse cloud_games_versions_reserve_version_name(game_id) - - -Reserves a display name for the next version. Used to generate a monotomically increasing build number without causing a race condition with multiple versions getting created at the same time. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGamesReserveVersionNameResponse**](CloudGamesReserveVersionNameResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## cloud_games_versions_validate_game_version - -> crate::models::CloudGamesValidateGameVersionResponse cloud_games_versions_validate_game_version(game_id, cloud_games_validate_game_version_request) - - -Validates information used to create a new game version. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**cloud_games_validate_game_version_request** | [**CloudGamesValidateGameVersionRequest**](CloudGamesValidateGameVersionRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudGamesValidateGameVersionResponse**](CloudGamesValidateGameVersionResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudGetRayPerfLogsResponse.md b/sdks/api/full/rust-cli/docs/CloudGetRayPerfLogsResponse.md deleted file mode 100644 index c24e07d13c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGetRayPerfLogsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGetRayPerfLogsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**perf_lists** | [**Vec**](CloudSvcPerf.md) | A list of service performance summaries. | - -[[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-cli/docs/CloudGetRegionTiersResponse.md b/sdks/api/full/rust-cli/docs/CloudGetRegionTiersResponse.md deleted file mode 100644 index 752bc83ec7..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGetRegionTiersResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudGetRegionTiersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**tiers** | [**Vec**](CloudRegionTier.md) | A list of region server tiers. | - -[[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-cli/docs/CloudGroupBankSource.md b/sdks/api/full/rust-cli/docs/CloudGroupBankSource.md deleted file mode 100644 index 8b187194d6..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGroupBankSource.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudGroupBankSource - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**account_number** | **String** | The bank account number of this group's bank source. | -**routing_number** | **String** | The bank routing number of this group's bank source. | - -[[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-cli/docs/CloudGroupsApi.md b/sdks/api/full/rust-cli/docs/CloudGroupsApi.md deleted file mode 100644 index 7e0a72633d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudGroupsApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \CloudGroupsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_groups_validate**](CloudGroupsApi.md#cloud_groups_validate) | **POST** /cloud/groups/validate | - - - -## cloud_groups_validate - -> crate::models::CloudValidateGroupResponse cloud_groups_validate(cloud_validate_group_request) - - -Validates information used to create a new group. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cloud_validate_group_request** | [**CloudValidateGroupRequest**](CloudValidateGroupRequest.md) | | [required] | - -### Return type - -[**crate::models::CloudValidateGroupResponse**](CloudValidateGroupResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudInspectResponse.md b/sdks/api/full/rust-cli/docs/CloudInspectResponse.md deleted file mode 100644 index ad849137dd..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudInspectResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudInspectResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**agent** | [**crate::models::CloudAuthAgent**](CloudAuthAgent.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-cli/docs/CloudLobbySummaryAnalytics.md b/sdks/api/full/rust-cli/docs/CloudLobbySummaryAnalytics.md deleted file mode 100644 index 168dfed374..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudLobbySummaryAnalytics.md +++ /dev/null @@ -1,24 +0,0 @@ -# CloudLobbySummaryAnalytics - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**create_ts** | **String** | RFC3339 timestamp | -**is_closed** | **bool** | Whether or not this lobby is in a closed state. | -**is_idle** | **bool** | Whether or not this lobby is idle. | -**is_outdated** | **bool** | Whether or not this lobby is outdated. | -**is_ready** | **bool** | Whether or not this lobby is ready. | -**lobby_group_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**lobby_group_name_id** | **String** | 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_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**max_players_direct** | **i32** | Unsigned 32 bit integer. | -**max_players_normal** | **i32** | Unsigned 32 bit integer. | -**max_players_party** | **i32** | Unsigned 32 bit integer. | -**region_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**registered_player_count** | **i32** | Unsigned 32 bit integer. | -**total_player_count** | **i32** | Unsigned 32 bit integer. | - -[[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-cli/docs/CloudLogsApi.md b/sdks/api/full/rust-cli/docs/CloudLogsApi.md deleted file mode 100644 index c13e97fb15..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudLogsApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \CloudLogsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_logs_get_ray_perf_logs**](CloudLogsApi.md#cloud_logs_get_ray_perf_logs) | **GET** /cloud/rays/{ray_id}/perf | - - - -## cloud_logs_get_ray_perf_logs - -> crate::models::CloudGetRayPerfLogsResponse cloud_logs_get_ray_perf_logs(ray_id) - - -Returns performance information about a Rivet Ray. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**ray_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::CloudGetRayPerfLogsResponse**](CloudGetRayPerfLogsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudLogsLobbyStatus.md b/sdks/api/full/rust-cli/docs/CloudLogsLobbyStatus.md deleted file mode 100644 index 42d9a4ddb5..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudLogsLobbyStatus.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudLogsLobbyStatus - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**running** | [**serde_json::Value**](.md) | | -**stopped** | Option<[**crate::models::CloudLogsLobbyStatusStopped**](CloudLogsLobbyStatusStopped.md)> | | [optional] - -[[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-cli/docs/CloudLogsLobbyStatusStopped.md b/sdks/api/full/rust-cli/docs/CloudLogsLobbyStatusStopped.md deleted file mode 100644 index 7a39226e29..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudLogsLobbyStatusStopped.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudLogsLobbyStatusStopped - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**exit_code** | **i32** | The exit code returned by the lobby's main process when stopped. | -**failed** | **bool** | Whether or not the lobby failed or stopped successfully. | -**stop_ts** | **String** | RFC3339 timestamp | - -[[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-cli/docs/CloudLogsLobbySummary.md b/sdks/api/full/rust-cli/docs/CloudLogsLobbySummary.md deleted file mode 100644 index b228893602..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudLogsLobbySummary.md +++ /dev/null @@ -1,18 +0,0 @@ -# CloudLogsLobbySummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**create_ts** | **String** | RFC3339 timestamp | -**lobby_group_name_id** | **String** | 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_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**namespace_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**ready_ts** | Option<**String**> | RFC3339 timestamp | [optional] -**region_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**start_ts** | Option<**String**> | RFC3339 timestamp | [optional] -**status** | [**crate::models::CloudLogsLobbyStatus**](CloudLogsLobbyStatus.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-cli/docs/CloudLogsPerfMark.md b/sdks/api/full/rust-cli/docs/CloudLogsPerfMark.md deleted file mode 100644 index d2f018666d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudLogsPerfMark.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudLogsPerfMark - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**label** | **String** | The label given to this performance mark. | -**ray_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**req_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**ts** | **String** | RFC3339 timestamp | - -[[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-cli/docs/CloudLogsPerfSpan.md b/sdks/api/full/rust-cli/docs/CloudLogsPerfSpan.md deleted file mode 100644 index 2772228a19..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudLogsPerfSpan.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudLogsPerfSpan - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**finish_ts** | Option<**String**> | RFC3339 timestamp | [optional] -**label** | **String** | The label given to this performance span. | -**req_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**start_ts** | **String** | RFC3339 timestamp | - -[[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-cli/docs/CloudMatchmakerDevelopmentPort.md b/sdks/api/full/rust-cli/docs/CloudMatchmakerDevelopmentPort.md deleted file mode 100644 index 43d2ed62cc..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudMatchmakerDevelopmentPort.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudMatchmakerDevelopmentPort - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**port** | Option<**i32**> | | [optional] -**port_range** | Option<[**crate::models::CloudVersionMatchmakerPortRange**](CloudVersionMatchmakerPortRange.md)> | | [optional] -**protocol** | [**crate::models::CloudVersionMatchmakerPortProtocol**](CloudVersionMatchmakerPortProtocol.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-cli/docs/CloudMatchmakerNamespaceConfig.md b/sdks/api/full/rust-cli/docs/CloudMatchmakerNamespaceConfig.md deleted file mode 100644 index 86371f89f8..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudMatchmakerNamespaceConfig.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudMatchmakerNamespaceConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby_count_max** | **i32** | Unsigned 32 bit integer. | -**max_players_per_client** | **i32** | Unsigned 32 bit integer. | -**max_players_per_client_hosting** | **i32** | Unsigned 32 bit integer. | -**max_players_per_client_proxy** | **i32** | Unsigned 32 bit integer. | -**max_players_per_client_tor** | **i32** | Unsigned 32 bit integer. | -**max_players_per_client_vpn** | **i32** | Unsigned 32 bit integer. | - -[[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-cli/docs/CloudNamespaceConfig.md b/sdks/api/full/rust-cli/docs/CloudNamespaceConfig.md deleted file mode 100644 index 2f94651627..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudNamespaceConfig.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudNamespaceConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cdn** | [**crate::models::CloudCdnNamespaceConfig**](CloudCdnNamespaceConfig.md) | | -**identity** | [**serde_json::Value**](.md) | Identity configuration for a given namespace. | -**kv** | [**serde_json::Value**](.md) | KV configuration for a given namespace. | -**matchmaker** | [**crate::models::CloudMatchmakerNamespaceConfig**](CloudMatchmakerNamespaceConfig.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-cli/docs/CloudNamespaceFull.md b/sdks/api/full/rust-cli/docs/CloudNamespaceFull.md deleted file mode 100644 index 8a62def44a..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudNamespaceFull.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudNamespaceFull - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**config** | [**crate::models::CloudNamespaceConfig**](CloudNamespaceConfig.md) | | -**create_ts** | **String** | RFC3339 timestamp | -**display_name** | **String** | Represent a resource's readable display name. | -**name_id** | **String** | 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. | -**namespace_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**version_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudNamespaceSummary.md b/sdks/api/full/rust-cli/docs/CloudNamespaceSummary.md deleted file mode 100644 index 58bf40d498..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudNamespaceSummary.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudNamespaceSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**create_ts** | **String** | RFC3339 timestamp | -**display_name** | **String** | Represent a resource's readable display name. | -**name_id** | **String** | 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. | -**namespace_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**version_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudNamespaceVersion.md b/sdks/api/full/rust-cli/docs/CloudNamespaceVersion.md deleted file mode 100644 index 2b9e1bfa00..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudNamespaceVersion.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudNamespaceVersion - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**deploy_ts** | **String** | RFC3339 timestamp | -**namespace_id** | **String** | A universally unique identifier. | -**version_id** | **String** | A universally unique identifier. | - -[[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-cli/docs/CloudRegionSummary.md b/sdks/api/full/rust-cli/docs/CloudRegionSummary.md deleted file mode 100644 index 56a181b231..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudRegionSummary.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudRegionSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**provider** | **String** | The server provider of this region. | -**provider_display_name** | **String** | Represent a resource's readable display name. | -**region_display_name** | **String** | Represent a resource's readable display name. | -**region_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**region_name_id** | **String** | 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. | -**universal_region** | [**crate::models::CloudUniversalRegion**](CloudUniversalRegion.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-cli/docs/CloudRegionTier.md b/sdks/api/full/rust-cli/docs/CloudRegionTier.md deleted file mode 100644 index 74094ab9c0..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudRegionTier.md +++ /dev/null @@ -1,18 +0,0 @@ -# CloudRegionTier - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**bandwidth** | **i32** | Internet bandwidth (MB). | -**cpu** | **i32** | CPU frequency (MHz). | -**disk** | **i32** | Allocated disk space (MB). | -**memory** | **i32** | Allocated memory (MB). | -**price_per_second** | **i32** | **Deprecated** Price billed for every second this server is running (in quadrillionth USD, 1,000,000,000,000 = $1.00). | -**rivet_cores_denominator** | **i32** | Together with the numerator, denotes the portion of the CPU a given server uses. | -**rivet_cores_numerator** | **i32** | Together with the denominator, denotes the portion of the CPU a given server uses. | -**tier_name_id** | **String** | 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. | - -[[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-cli/docs/CloudRegionTierExpenses.md b/sdks/api/full/rust-cli/docs/CloudRegionTierExpenses.md deleted file mode 100644 index 1d6b18c479..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudRegionTierExpenses.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudRegionTierExpenses - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**expenses** | **f64** | Amount of expenses for this region tier (in hundred-thousandths USD, 100,000 = $1.00). | -**lobby_group_name_id** | **String** | 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. | -**namespace_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**region_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**tier_name_id** | **String** | 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** | **f64** | How long a region tier has been active (in milliseconds). | - -[[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-cli/docs/CloudSvcMetrics.md b/sdks/api/full/rust-cli/docs/CloudSvcMetrics.md deleted file mode 100644 index 0c27d94dde..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudSvcMetrics.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudSvcMetrics - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**allocated_memory** | Option<**f64**> | Total allocated memory (MB). | [optional] -**cpu** | **Vec** | CPU metrics. | -**job** | **String** | The job name. | -**memory** | **Vec** | Memory metrics. | - -[[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-cli/docs/CloudSvcPerf.md b/sdks/api/full/rust-cli/docs/CloudSvcPerf.md deleted file mode 100644 index a207bd3d02..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudSvcPerf.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudSvcPerf - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**duration** | **i64** | Unsigned 64 bit integer. | -**marks** | [**Vec**](CloudLogsPerfMark.md) | A list of performance marks. | -**req_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**spans** | [**Vec**](CloudLogsPerfSpan.md) | A list of performance spans. | -**svc_name** | **String** | The name of the service. | -**ts** | **String** | RFC3339 timestamp | - -[[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-cli/docs/CloudTiersApi.md b/sdks/api/full/rust-cli/docs/CloudTiersApi.md deleted file mode 100644 index 40fa5a582d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudTiersApi.md +++ /dev/null @@ -1,36 +0,0 @@ -# \CloudTiersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_tiers_get_region_tiers**](CloudTiersApi.md#cloud_tiers_get_region_tiers) | **GET** /cloud/region-tiers | - - - -## cloud_tiers_get_region_tiers - -> crate::models::CloudGetRegionTiersResponse cloud_tiers_get_region_tiers() - - -Returns all available region tiers. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::CloudGetRegionTiersResponse**](CloudGetRegionTiersResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudUniversalRegion.md b/sdks/api/full/rust-cli/docs/CloudUniversalRegion.md deleted file mode 100644 index f3a1ad9699..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudUniversalRegion.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudUniversalRegion - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudUploadsApi.md b/sdks/api/full/rust-cli/docs/CloudUploadsApi.md deleted file mode 100644 index 02bf637fa6..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudUploadsApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \CloudUploadsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**cloud_uploads_complete_upload**](CloudUploadsApi.md#cloud_uploads_complete_upload) | **POST** /cloud/uploads/{upload_id}/complete | - - - -## cloud_uploads_complete_upload - -> cloud_uploads_complete_upload(upload_id) - - -Marks an upload as complete. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**upload_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/CloudValidateGroupRequest.md b/sdks/api/full/rust-cli/docs/CloudValidateGroupRequest.md deleted file mode 100644 index bfc2b1d39a..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudValidateGroupRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudValidateGroupRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | - -[[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-cli/docs/CloudValidateGroupResponse.md b/sdks/api/full/rust-cli/docs/CloudValidateGroupResponse.md deleted file mode 100644 index bdca42212d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudValidateGroupResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudValidateGroupResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.md) | A list of validation errors. | - -[[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-cli/docs/CloudVersionCdnConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionCdnConfig.md deleted file mode 100644 index 107fc21da5..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionCdnConfig.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudVersionCdnConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build_command** | Option<**String**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**build_env** | Option<**::std::collections::HashMap**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**build_output** | Option<**String**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**routes** | Option<[**Vec**](CloudVersionCdnRoute.md)> | Multiple CDN version routes. | [optional] -**site_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] - -[[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-cli/docs/CloudVersionCdnCustomHeadersMiddleware.md b/sdks/api/full/rust-cli/docs/CloudVersionCdnCustomHeadersMiddleware.md deleted file mode 100644 index 2399a52a65..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionCdnCustomHeadersMiddleware.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudVersionCdnCustomHeadersMiddleware - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**headers** | [**Vec**](CloudVersionCdnHeader.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-cli/docs/CloudVersionCdnHeader.md b/sdks/api/full/rust-cli/docs/CloudVersionCdnHeader.md deleted file mode 100644 index 74a472ddea..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionCdnHeader.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionCdnHeader - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **String** | | -**value** | **String** | | - -[[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-cli/docs/CloudVersionCdnMiddleware.md b/sdks/api/full/rust-cli/docs/CloudVersionCdnMiddleware.md deleted file mode 100644 index 6e7a08ce52..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionCdnMiddleware.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudVersionCdnMiddleware - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**kind** | [**crate::models::CloudVersionCdnMiddlewareKind**](CloudVersionCdnMiddlewareKind.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-cli/docs/CloudVersionCdnMiddlewareKind.md b/sdks/api/full/rust-cli/docs/CloudVersionCdnMiddlewareKind.md deleted file mode 100644 index b738715474..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionCdnMiddlewareKind.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudVersionCdnMiddlewareKind - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**custom_headers** | Option<[**crate::models::CloudVersionCdnCustomHeadersMiddleware**](CloudVersionCdnCustomHeadersMiddleware.md)> | | [optional] - -[[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-cli/docs/CloudVersionCdnRoute.md b/sdks/api/full/rust-cli/docs/CloudVersionCdnRoute.md deleted file mode 100644 index c0fca13481..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionCdnRoute.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudVersionCdnRoute - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**glob** | **String** | | -**middlewares** | [**Vec**](CloudVersionCdnMiddleware.md) | Multiple CDN version middleware. | -**priority** | **i32** | Unsigned 32 bit integer. | - -[[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-cli/docs/CloudVersionConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionConfig.md deleted file mode 100644 index bd39db3f48..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionConfig.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudVersionConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cdn** | Option<[**crate::models::CloudVersionCdnConfig**](CloudVersionCdnConfig.md)> | | [optional] -**engine** | Option<[**crate::models::CloudVersionEngineConfig**](CloudVersionEngineConfig.md)> | | [optional] -**identity** | Option<[**crate::models::CloudVersionIdentityConfig**](CloudVersionIdentityConfig.md)> | | [optional] -**kv** | Option<[**serde_json::Value**](.md)> | KV configuration for a given version. | [optional] -**matchmaker** | Option<[**crate::models::CloudVersionMatchmakerConfig**](CloudVersionMatchmakerConfig.md)> | | [optional] -**scripts** | Option<**::std::collections::HashMap**> | | [optional] - -[[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-cli/docs/CloudVersionEngineConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionEngineConfig.md deleted file mode 100644 index 825d8f1a72..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionEngineConfig.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudVersionEngineConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**custom** | Option<[**serde_json::Value**](.md)> | | [optional] -**godot** | Option<[**serde_json::Value**](.md)> | | [optional] -**html5** | Option<[**serde_json::Value**](.md)> | | [optional] -**unity** | Option<[**serde_json::Value**](.md)> | | [optional] -**unreal** | Option<[**crate::models::CloudVersionEngineUnrealConfig**](CloudVersionEngineUnrealConfig.md)> | | [optional] - -[[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-cli/docs/CloudVersionEngineUnrealConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionEngineUnrealConfig.md deleted file mode 100644 index 5529bf0f33..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionEngineUnrealConfig.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudVersionEngineUnrealConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_module** | **String** | Name of the Unreal module that holds the game code. This is usually the value of `$.Modules[0].Name` in the file `MyProject.unproject`. _Configures Rivet CLI behavior. Has no effect on server behavior._ | - -[[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-cli/docs/CloudVersionFull.md b/sdks/api/full/rust-cli/docs/CloudVersionFull.md deleted file mode 100644 index 2368ab6f29..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionFull.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudVersionFull - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**config** | [**crate::models::CloudVersionConfig**](CloudVersionConfig.md) | | -**create_ts** | **String** | RFC3339 timestamp | -**display_name** | **String** | Represent a resource's readable display name. | -**version_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudVersionIdentityConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionIdentityConfig.md deleted file mode 100644 index 82503eb83a..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionIdentityConfig.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudVersionIdentityConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**avatars** | Option<[**Vec**](uuid::Uuid.md)> | **Deprecated** | [optional] -**custom_avatars** | Option<[**Vec**](CloudVersionIdentityCustomAvatar.md)> | **Deprecated** | [optional] -**custom_display_names** | Option<[**Vec**](CloudVersionIdentityCustomDisplayName.md)> | **Deprecated** | [optional] -**display_names** | Option<**Vec**> | **Deprecated** | [optional] - -[[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-cli/docs/CloudVersionIdentityCustomAvatar.md b/sdks/api/full/rust-cli/docs/CloudVersionIdentityCustomAvatar.md deleted file mode 100644 index 1bc8667875..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionIdentityCustomAvatar.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudVersionIdentityCustomAvatar - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/CloudVersionIdentityCustomDisplayName.md b/sdks/api/full/rust-cli/docs/CloudVersionIdentityCustomDisplayName.md deleted file mode 100644 index e31747bb8f..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionIdentityCustomDisplayName.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudVersionIdentityCustomDisplayName - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | - -[[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-cli/docs/CloudVersionMatchmakerCaptcha.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptcha.md deleted file mode 100644 index f0dec143ff..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptcha.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudVersionMatchmakerCaptcha - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**hcaptcha** | Option<[**crate::models::CloudVersionMatchmakerCaptchaHcaptcha**](CloudVersionMatchmakerCaptchaHcaptcha.md)> | | [optional] -**requests_before_reverify** | **i32** | Denotes how many requests a connection can make before it is required to reverify a captcha. | -**turnstile** | Option<[**crate::models::CloudVersionMatchmakerCaptchaTurnstile**](CloudVersionMatchmakerCaptchaTurnstile.md)> | | [optional] -**verification_ttl** | **i64** | Denotes how long a connection can continue to reconnect without having to reverify a captcha (in milliseconds). | - -[[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-cli/docs/CloudVersionMatchmakerCaptchaHcaptcha.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptchaHcaptcha.md deleted file mode 100644 index 0f3bea23ab..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptchaHcaptcha.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudVersionMatchmakerCaptchaHcaptcha - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**level** | Option<[**crate::models::CloudVersionMatchmakerCaptchaHcaptchaLevel**](CloudVersionMatchmakerCaptchaHcaptchaLevel.md)> | | [optional] -**secret_key** | Option<**String**> | Secret key for your hCaptcha application. Must be set. | [optional] -**site_key** | Option<**String**> | Site key for your hCaptcha application. Must be set. | [optional] - -[[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-cli/docs/CloudVersionMatchmakerCaptchaHcaptchaLevel.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptchaHcaptchaLevel.md deleted file mode 100644 index e1b1c3dfae..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptchaHcaptchaLevel.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudVersionMatchmakerCaptchaHcaptchaLevel - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudVersionMatchmakerCaptchaTurnstile.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptchaTurnstile.md deleted file mode 100644 index d90a0e1128..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerCaptchaTurnstile.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionMatchmakerCaptchaTurnstile - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**secret_key** | **String** | | -**site_key** | **String** | | - -[[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-cli/docs/CloudVersionMatchmakerConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerConfig.md deleted file mode 100644 index 2fff0e2aa4..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerConfig.md +++ /dev/null @@ -1,21 +0,0 @@ -# CloudVersionMatchmakerConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**captcha** | Option<[**crate::models::CloudVersionMatchmakerCaptcha**](CloudVersionMatchmakerCaptcha.md)> | | [optional] -**dev_hostname** | Option<**String**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**docker** | Option<[**crate::models::CloudVersionMatchmakerGameModeRuntimeDocker**](CloudVersionMatchmakerGameModeRuntimeDocker.md)> | | [optional] -**game_modes** | Option<[**::std::collections::HashMap**](CloudVersionMatchmakerGameMode.md)> | A list of game modes. | [optional] -**idle_lobbies** | Option<[**crate::models::CloudVersionMatchmakerGameModeIdleLobbiesConfig**](CloudVersionMatchmakerGameModeIdleLobbiesConfig.md)> | | [optional] -**lobby_groups** | Option<[**Vec**](CloudVersionMatchmakerLobbyGroup.md)> | **Deprecated: use `game_modes` instead** A list of game modes. | [optional] -**max_players** | Option<**i32**> | | [optional] -**max_players_direct** | Option<**i32**> | | [optional] -**max_players_party** | Option<**i32**> | | [optional] -**regions** | Option<[**::std::collections::HashMap**](CloudVersionMatchmakerGameModeRegion.md)> | | [optional] -**tier** | Option<**String**> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameMode.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameMode.md deleted file mode 100644 index 9db73b3bbf..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameMode.md +++ /dev/null @@ -1,21 +0,0 @@ -# CloudVersionMatchmakerGameMode - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**actions** | Option<[**crate::models::CloudVersionMatchmakerGameModeActions**](CloudVersionMatchmakerGameModeActions.md)> | | [optional] -**allow_dynamic_max_players** | Option<**bool**> | | [optional] -**docker** | Option<[**crate::models::CloudVersionMatchmakerGameModeRuntimeDocker**](CloudVersionMatchmakerGameModeRuntimeDocker.md)> | | [optional] -**idle_lobbies** | Option<[**crate::models::CloudVersionMatchmakerGameModeIdleLobbiesConfig**](CloudVersionMatchmakerGameModeIdleLobbiesConfig.md)> | | [optional] -**listable** | Option<**bool**> | | [optional] -**max_players** | Option<**i32**> | | [optional] -**max_players_direct** | Option<**i32**> | | [optional] -**max_players_party** | Option<**i32**> | | [optional] -**regions** | Option<[**::std::collections::HashMap**](CloudVersionMatchmakerGameModeRegion.md)> | | [optional] -**taggable** | Option<**bool**> | | [optional] -**tier** | Option<**String**> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeActions.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeActions.md deleted file mode 100644 index 365dcae2c3..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeActions.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudVersionMatchmakerGameModeActions - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**create** | Option<[**crate::models::CloudVersionMatchmakerGameModeCreateConfig**](CloudVersionMatchmakerGameModeCreateConfig.md)> | | [optional] -**find** | Option<[**crate::models::CloudVersionMatchmakerGameModeFindConfig**](CloudVersionMatchmakerGameModeFindConfig.md)> | | [optional] -**join** | Option<[**crate::models::CloudVersionMatchmakerGameModeJoinConfig**](CloudVersionMatchmakerGameModeJoinConfig.md)> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeCreateConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeCreateConfig.md deleted file mode 100644 index cda73e7379..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeCreateConfig.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudVersionMatchmakerGameModeCreateConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**enable_private** | Option<**bool**> | Defaults to true when unset. | [optional] -**enable_public** | Option<**bool**> | Defaults to false when unset. | [optional] -**enabled** | **bool** | Sets whether or not the /create endpoint is enabled. | -**identity_requirement** | Option<[**crate::models::CloudVersionMatchmakerGameModeIdentityRequirement**](CloudVersionMatchmakerGameModeIdentityRequirement.md)> | | [optional] -**max_lobbies_per_identity** | Option<**i32**> | **Deprecated** | [optional] -**verification** | Option<[**crate::models::CloudVersionMatchmakerGameModeVerificationConfig**](CloudVersionMatchmakerGameModeVerificationConfig.md)> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeFindConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeFindConfig.md deleted file mode 100644 index 48cdb9ea93..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeFindConfig.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudVersionMatchmakerGameModeFindConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**enabled** | **bool** | Sets whether or not the /find endpoint is enabled. | -**identity_requirement** | Option<[**crate::models::CloudVersionMatchmakerGameModeIdentityRequirement**](CloudVersionMatchmakerGameModeIdentityRequirement.md)> | | [optional] -**verification** | Option<[**crate::models::CloudVersionMatchmakerGameModeVerificationConfig**](CloudVersionMatchmakerGameModeVerificationConfig.md)> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeIdentityRequirement.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeIdentityRequirement.md deleted file mode 100644 index f8d550d34d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeIdentityRequirement.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudVersionMatchmakerGameModeIdentityRequirement - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudVersionMatchmakerGameModeIdleLobbiesConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeIdleLobbiesConfig.md deleted file mode 100644 index 28230f8594..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeIdleLobbiesConfig.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionMatchmakerGameModeIdleLobbiesConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**max** | **i32** | | -**min** | **i32** | | - -[[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-cli/docs/CloudVersionMatchmakerGameModeJoinConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeJoinConfig.md deleted file mode 100644 index 33e9fcc1ed..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeJoinConfig.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudVersionMatchmakerGameModeJoinConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**enabled** | **bool** | Sets whether or not the /join endpoint is enabled. | -**identity_requirement** | Option<[**crate::models::CloudVersionMatchmakerGameModeIdentityRequirement**](CloudVersionMatchmakerGameModeIdentityRequirement.md)> | | [optional] -**verification** | Option<[**crate::models::CloudVersionMatchmakerGameModeVerificationConfig**](CloudVersionMatchmakerGameModeVerificationConfig.md)> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeRegion.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeRegion.md deleted file mode 100644 index aed04c5b7e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeRegion.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionMatchmakerGameModeRegion - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**idle_lobbies** | Option<[**crate::models::CloudVersionMatchmakerGameModeIdleLobbiesConfig**](CloudVersionMatchmakerGameModeIdleLobbiesConfig.md)> | | [optional] -**tier** | Option<**String**> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeRuntimeDocker.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeRuntimeDocker.md deleted file mode 100644 index 9687c39f1e..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeRuntimeDocker.md +++ /dev/null @@ -1,18 +0,0 @@ -# CloudVersionMatchmakerGameModeRuntimeDocker - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**args** | Option<**Vec**> | | [optional] -**build_args** | Option<**::std::collections::HashMap**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**dockerfile** | Option<**String**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**env** | Option<**::std::collections::HashMap**> | | [optional] -**image** | Option<**String**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**image_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**network_mode** | Option<[**crate::models::CloudVersionMatchmakerNetworkMode**](CloudVersionMatchmakerNetworkMode.md)> | | [optional] -**ports** | Option<[**::std::collections::HashMap**](CloudVersionMatchmakerGameModeRuntimeDockerPort.md)> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeRuntimeDockerPort.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeRuntimeDockerPort.md deleted file mode 100644 index 31cfd0f65a..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeRuntimeDockerPort.md +++ /dev/null @@ -1,17 +0,0 @@ -# CloudVersionMatchmakerGameModeRuntimeDockerPort - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**dev_port** | Option<**i32**> | _Configures Rivet CLI behavior. Has no effect on server behavior._ | [optional] -**dev_port_range** | Option<[**crate::models::CloudVersionMatchmakerPortRange**](CloudVersionMatchmakerPortRange.md)> | | [optional] -**dev_protocol** | Option<[**crate::models::CloudVersionMatchmakerPortProtocol**](CloudVersionMatchmakerPortProtocol.md)> | | [optional] -**port** | Option<**i32**> | The port number to connect to. ### Related - cloud.version.matchmaker.PortProtocol - cloud.version.matchmaker.ProxyKind | [optional] -**port_range** | Option<[**crate::models::CloudVersionMatchmakerPortRange**](CloudVersionMatchmakerPortRange.md)> | | [optional] -**protocol** | Option<[**crate::models::CloudVersionMatchmakerPortProtocol**](CloudVersionMatchmakerPortProtocol.md)> | | [optional] -**proxy** | Option<[**crate::models::CloudVersionMatchmakerProxyKind**](CloudVersionMatchmakerProxyKind.md)> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerGameModeVerificationConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeVerificationConfig.md deleted file mode 100644 index f2788127bb..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerGameModeVerificationConfig.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionMatchmakerGameModeVerificationConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**headers** | **::std::collections::HashMap** | | -**url** | **String** | | - -[[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-cli/docs/CloudVersionMatchmakerLobbyGroup.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroup.md deleted file mode 100644 index 1b71e1b88c..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroup.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudVersionMatchmakerLobbyGroup - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**max_players_direct** | **i32** | Unsigned 32 bit integer. | -**max_players_normal** | **i32** | Unsigned 32 bit integer. | -**max_players_party** | **i32** | Unsigned 32 bit integer. | -**name_id** | **String** | **Deprecated: use GameMode instead** 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. | -**regions** | [**Vec**](CloudVersionMatchmakerLobbyGroupRegion.md) | A list of game mode regions. | -**runtime** | [**crate::models::CloudVersionMatchmakerLobbyGroupRuntime**](CloudVersionMatchmakerLobbyGroupRuntime.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-cli/docs/CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig.md deleted file mode 100644 index 68e5f4dfdc..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**max_idle_lobbies** | **i32** | Unsigned 32 bit integer. | -**min_idle_lobbies** | **i32** | Unsigned 32 bit integer. | - -[[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-cli/docs/CloudVersionMatchmakerLobbyGroupRegion.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRegion.md deleted file mode 100644 index 408a7b8c2d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRegion.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudVersionMatchmakerLobbyGroupRegion - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**idle_lobbies** | Option<[**crate::models::CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig**](CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig.md)> | | [optional] -**region_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**tier_name_id** | **String** | 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. | - -[[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-cli/docs/CloudVersionMatchmakerLobbyGroupRuntime.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntime.md deleted file mode 100644 index 69cfe540ab..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntime.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudVersionMatchmakerLobbyGroupRuntime - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**docker** | Option<[**crate::models::CloudVersionMatchmakerLobbyGroupRuntimeDocker**](CloudVersionMatchmakerLobbyGroupRuntimeDocker.md)> | | [optional] - -[[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-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDocker.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDocker.md deleted file mode 100644 index bd7df0a727..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDocker.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudVersionMatchmakerLobbyGroupRuntimeDocker - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**args** | **Vec** | | -**build_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**env_vars** | [**Vec**](CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar.md) | | -**network_mode** | Option<[**crate::models::CloudVersionMatchmakerNetworkMode**](CloudVersionMatchmakerNetworkMode.md)> | | [optional] -**ports** | [**Vec**](CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.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-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar.md deleted file mode 100644 index 92231f0158..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**key** | **String** | | -**value** | **String** | | - -[[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-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.md deleted file mode 100644 index 58d36fb8b8..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerLobbyGroupRuntimeDockerPort.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudVersionMatchmakerLobbyGroupRuntimeDockerPort - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**label** | **String** | The label of this docker port. | -**port_range** | Option<[**crate::models::CloudVersionMatchmakerPortRange**](CloudVersionMatchmakerPortRange.md)> | | [optional] -**proxy_protocol** | [**crate::models::CloudVersionMatchmakerPortProtocol**](CloudVersionMatchmakerPortProtocol.md) | | -**target_port** | Option<**i32**> | The port number to connect to. | [optional] - -[[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-cli/docs/CloudVersionMatchmakerNetworkMode.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerNetworkMode.md deleted file mode 100644 index aa0cc8101d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerNetworkMode.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudVersionMatchmakerNetworkMode - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudVersionMatchmakerPortProtocol.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerPortProtocol.md deleted file mode 100644 index 614b3a7a9d..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerPortProtocol.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudVersionMatchmakerPortProtocol - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudVersionMatchmakerPortRange.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerPortRange.md deleted file mode 100644 index 07eb013c29..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerPortRange.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudVersionMatchmakerPortRange - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**max** | **i32** | Unsigned 32 bit integer. | -**min** | **i32** | Unsigned 32 bit integer. | - -[[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-cli/docs/CloudVersionMatchmakerProxyKind.md b/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerProxyKind.md deleted file mode 100644 index 787bb32866..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionMatchmakerProxyKind.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudVersionMatchmakerProxyKind - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/CloudVersionSummary.md b/sdks/api/full/rust-cli/docs/CloudVersionSummary.md deleted file mode 100644 index 820cd4b7cb..0000000000 --- a/sdks/api/full/rust-cli/docs/CloudVersionSummary.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudVersionSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**create_ts** | **String** | RFC3339 timestamp | -**display_name** | **String** | Represent a resource's readable display name. | -**version_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/ErrorBody.md b/sdks/api/full/rust-cli/docs/ErrorBody.md deleted file mode 100644 index 53e4659415..0000000000 --- a/sdks/api/full/rust-cli/docs/ErrorBody.md +++ /dev/null @@ -1,15 +0,0 @@ -# ErrorBody - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**code** | **String** | | -**documentation** | Option<**String**> | | [optional] -**message** | **String** | | -**metadata** | Option<[**serde_json::Value**](.md)> | Unstructured metadata relating to an error. Must be manually parsed. | [optional] -**ray_id** | **String** | | - -[[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-cli/docs/GameHandle.md b/sdks/api/full/rust-cli/docs/GameHandle.md deleted file mode 100644 index 21d5ab9809..0000000000 --- a/sdks/api/full/rust-cli/docs/GameHandle.md +++ /dev/null @@ -1,15 +0,0 @@ -# GameHandle - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**banner_url** | Option<**String**> | The URL of this game's banner image. | [optional] -**display_name** | **String** | Represent a resource's readable display name. | -**game_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**logo_url** | Option<**String**> | The URL of this game's logo image. | [optional] -**name_id** | **String** | 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. | - -[[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-cli/docs/GameLeaderboardCategory.md b/sdks/api/full/rust-cli/docs/GameLeaderboardCategory.md deleted file mode 100644 index 4f22c421f3..0000000000 --- a/sdks/api/full/rust-cli/docs/GameLeaderboardCategory.md +++ /dev/null @@ -1,11 +0,0 @@ -# GameLeaderboardCategory - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | - -[[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-cli/docs/GamePlatformLink.md b/sdks/api/full/rust-cli/docs/GamePlatformLink.md deleted file mode 100644 index bc212bc949..0000000000 --- a/sdks/api/full/rust-cli/docs/GamePlatformLink.md +++ /dev/null @@ -1,12 +0,0 @@ -# GamePlatformLink - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | -**url** | **String** | The URL to the given game's method of distribution on this platform. | - -[[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-cli/docs/GameProfile.md b/sdks/api/full/rust-cli/docs/GameProfile.md deleted file mode 100644 index 217c50c68b..0000000000 --- a/sdks/api/full/rust-cli/docs/GameProfile.md +++ /dev/null @@ -1,23 +0,0 @@ -# GameProfile - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**banner_url** | Option<**String**> | The URL of this game's banner image. | [optional] -**description** | **String** | A description of the given game. | -**developer** | [**crate::models::GroupSummary**](GroupSummary.md) | | -**display_name** | **String** | Represent a resource's readable display name. | -**game_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**group_leaderboard_categories** | [**Vec**](GameLeaderboardCategory.md) | A list of game leaderboard categories. | -**identity_leaderboard_categories** | [**Vec**](GameLeaderboardCategory.md) | A list of game leaderboard categories. | -**logo_url** | Option<**String**> | The URL of this game's logo image. | [optional] -**name_id** | **String** | 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. | -**platforms** | [**Vec**](GamePlatformLink.md) | A list of platform links. | -**recommended_groups** | [**Vec**](GroupSummary.md) | A list of group summaries. | -**tags** | **Vec** | A list of game tags. | -**url** | **String** | The URL to this game's website. | - -[[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-cli/docs/GameStat.md b/sdks/api/full/rust-cli/docs/GameStat.md deleted file mode 100644 index 710911a4b4..0000000000 --- a/sdks/api/full/rust-cli/docs/GameStat.md +++ /dev/null @@ -1,12 +0,0 @@ -# GameStat - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**config** | [**crate::models::GameStatConfig**](GameStatConfig.md) | | -**overall_value** | **f64** | A single overall value of the given statistic. | - -[[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-cli/docs/GameStatAggregationMethod.md b/sdks/api/full/rust-cli/docs/GameStatAggregationMethod.md deleted file mode 100644 index 66efb32f0a..0000000000 --- a/sdks/api/full/rust-cli/docs/GameStatAggregationMethod.md +++ /dev/null @@ -1,10 +0,0 @@ -# GameStatAggregationMethod - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/GameStatConfig.md b/sdks/api/full/rust-cli/docs/GameStatConfig.md deleted file mode 100644 index f11e6ea9ee..0000000000 --- a/sdks/api/full/rust-cli/docs/GameStatConfig.md +++ /dev/null @@ -1,21 +0,0 @@ -# GameStatConfig - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**aggregation** | [**crate::models::GameStatAggregationMethod**](GameStatAggregationMethod.md) | | -**display_name** | **String** | Represent a resource's readable display name. | -**format** | [**crate::models::GameStatFormatMethod**](GameStatFormatMethod.md) | | -**icon_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**postfix_plural** | Option<**String**> | A string appended to the end of a game statistic's value that is not exactly 1. Example: 45 **dollars**. | [optional] -**postfix_singular** | Option<**String**> | A string appended to the end of a singular game statistic's value. Example: 1 **dollar**. | [optional] -**prefix_plural** | Option<**String**> | A string prepended to the beginning of a game statistic's value that is not exactly 1. Example: **values** 45. | [optional] -**prefix_singular** | Option<**String**> | A string appended to the beginning of a singular game statistic's value. Example: **value** 1. | [optional] -**priority** | **i32** | | -**record_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**sorting** | [**crate::models::GameStatSortingMethod**](GameStatSortingMethod.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-cli/docs/GameStatFormatMethod.md b/sdks/api/full/rust-cli/docs/GameStatFormatMethod.md deleted file mode 100644 index 12123c4c3f..0000000000 --- a/sdks/api/full/rust-cli/docs/GameStatFormatMethod.md +++ /dev/null @@ -1,10 +0,0 @@ -# GameStatFormatMethod - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/GameStatSortingMethod.md b/sdks/api/full/rust-cli/docs/GameStatSortingMethod.md deleted file mode 100644 index 053a4b3d0a..0000000000 --- a/sdks/api/full/rust-cli/docs/GameStatSortingMethod.md +++ /dev/null @@ -1,10 +0,0 @@ -# GameStatSortingMethod - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/GameStatSummary.md b/sdks/api/full/rust-cli/docs/GameStatSummary.md deleted file mode 100644 index 1d5ae18547..0000000000 --- a/sdks/api/full/rust-cli/docs/GameStatSummary.md +++ /dev/null @@ -1,12 +0,0 @@ -# GameStatSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game** | [**crate::models::GameHandle**](GameHandle.md) | | -**stats** | [**Vec**](GameStat.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-cli/docs/GameSummary.md b/sdks/api/full/rust-cli/docs/GameSummary.md deleted file mode 100644 index 5d421cb8f5..0000000000 --- a/sdks/api/full/rust-cli/docs/GameSummary.md +++ /dev/null @@ -1,18 +0,0 @@ -# GameSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**banner_url** | Option<**String**> | The URL of this game's banner image. | [optional] -**developer** | [**crate::models::GroupHandle**](GroupHandle.md) | | -**display_name** | **String** | Represent a resource's readable display name. | -**game_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**logo_url** | Option<**String**> | The URL of this game's logo image. | [optional] -**name_id** | **String** | 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. | -**total_player_count** | **i32** | Unsigned 32 bit integer. | -**url** | **String** | | - -[[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-cli/docs/GamesEnvironmentsCreateServiceTokenResponse.md b/sdks/api/full/rust-cli/docs/GamesEnvironmentsCreateServiceTokenResponse.md deleted file mode 100644 index ee3490d4cc..0000000000 --- a/sdks/api/full/rust-cli/docs/GamesEnvironmentsCreateServiceTokenResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GamesEnvironmentsCreateServiceTokenResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**token** | **String** | A JSON Web Token. | - -[[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-cli/docs/GamesEnvironmentsTokensApi.md b/sdks/api/full/rust-cli/docs/GamesEnvironmentsTokensApi.md deleted file mode 100644 index cead2b98d8..0000000000 --- a/sdks/api/full/rust-cli/docs/GamesEnvironmentsTokensApi.md +++ /dev/null @@ -1,40 +0,0 @@ -# \GamesEnvironmentsTokensApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**games_environments_tokens_create_service_token**](GamesEnvironmentsTokensApi.md#games_environments_tokens_create_service_token) | **POST** /games/{game_id}/environments/{environment_id}/tokens/service | - - - -## games_environments_tokens_create_service_token - -> crate::models::GamesEnvironmentsCreateServiceTokenResponse games_environments_tokens_create_service_token(game_id, environment_id) - - -Creates a new environment service token. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::GamesEnvironmentsCreateServiceTokenResponse**](GamesEnvironmentsCreateServiceTokenResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/GeoCoord.md b/sdks/api/full/rust-cli/docs/GeoCoord.md deleted file mode 100644 index 4ca238d544..0000000000 --- a/sdks/api/full/rust-cli/docs/GeoCoord.md +++ /dev/null @@ -1,12 +0,0 @@ -# GeoCoord - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**latitude** | **f64** | | -**longitude** | **f64** | | - -[[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-cli/docs/GeoDistance.md b/sdks/api/full/rust-cli/docs/GeoDistance.md deleted file mode 100644 index b06e5575f0..0000000000 --- a/sdks/api/full/rust-cli/docs/GeoDistance.md +++ /dev/null @@ -1,12 +0,0 @@ -# GeoDistance - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**kilometers** | **f64** | | -**miles** | **f64** | | - -[[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-cli/docs/GlobalEventNotification.md b/sdks/api/full/rust-cli/docs/GlobalEventNotification.md deleted file mode 100644 index 7d1e57fd29..0000000000 --- a/sdks/api/full/rust-cli/docs/GlobalEventNotification.md +++ /dev/null @@ -1,14 +0,0 @@ -# GlobalEventNotification - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**description** | **String** | | -**thumbnail_url** | **String** | | -**title** | **String** | | -**url** | **String** | | - -[[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-cli/docs/GroupApi.md b/sdks/api/full/rust-cli/docs/GroupApi.md deleted file mode 100644 index a57a559347..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupApi.md +++ /dev/null @@ -1,516 +0,0 @@ -# \GroupApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**group_ban_identity**](GroupApi.md#group_ban_identity) | **POST** /group/groups/{group_id}/bans/{identity_id} | -[**group_complete_avatar_upload**](GroupApi.md#group_complete_avatar_upload) | **POST** /group/groups/{group_id}/avatar-upload/{upload_id}/complete | -[**group_create**](GroupApi.md#group_create) | **POST** /group/groups | -[**group_get_bans**](GroupApi.md#group_get_bans) | **GET** /group/groups/{group_id}/bans | -[**group_get_join_requests**](GroupApi.md#group_get_join_requests) | **GET** /group/groups/{group_id}/join-requests | -[**group_get_members**](GroupApi.md#group_get_members) | **GET** /group/groups/{group_id}/members | -[**group_get_profile**](GroupApi.md#group_get_profile) | **GET** /group/groups/{group_id}/profile | -[**group_get_summary**](GroupApi.md#group_get_summary) | **GET** /group/groups/{group_id}/summary | -[**group_kick_member**](GroupApi.md#group_kick_member) | **POST** /group/groups/{group_id}/kick/{identity_id} | -[**group_leave**](GroupApi.md#group_leave) | **POST** /group/groups/{group_id}/leave | -[**group_list_suggested**](GroupApi.md#group_list_suggested) | **GET** /group/groups | -[**group_prepare_avatar_upload**](GroupApi.md#group_prepare_avatar_upload) | **POST** /group/groups/avatar-upload/prepare | -[**group_transfer_ownership**](GroupApi.md#group_transfer_ownership) | **POST** /group/groups/{group_id}/transfer-owner | -[**group_unban_identity**](GroupApi.md#group_unban_identity) | **DELETE** /group/groups/{group_id}/bans/{identity_id} | -[**group_update_profile**](GroupApi.md#group_update_profile) | **POST** /group/groups/{group_id}/profile | -[**group_validate_profile**](GroupApi.md#group_validate_profile) | **POST** /group/groups/profile/validate | - - - -## group_ban_identity - -> group_ban_identity(group_id, identity_id) - - -Bans an identity from a group. Must be the owner of the group to perform this action. The banned identity will no longer be able to create a join request or use a group invite. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**identity_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_complete_avatar_upload - -> group_complete_avatar_upload(group_id, upload_id) - - -Completes an avatar image upload. Must be called after the file upload process completes. Call `rivet.api.group#PrepareAvatarUpload` first. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**upload_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_create - -> crate::models::GroupCreateResponse group_create(group_create_request) - - -Creates a new group. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_create_request** | [**GroupCreateRequest**](GroupCreateRequest.md) | | [required] | - -### Return type - -[**crate::models::GroupCreateResponse**](GroupCreateResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_get_bans - -> crate::models::GroupGetBansResponse group_get_bans(group_id, anchor, count, watch_index) - - -Returns a group's bans. Must have valid permissions to view. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**anchor** | Option<**String**> | The pagination anchor. Set to the returned anchor of this endpoint to receive the next set of items. | | -**count** | Option<**f64**> | Amount of bans to return. | | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::GroupGetBansResponse**](GroupGetBansResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_get_join_requests - -> crate::models::GroupGetJoinRequestsResponse group_get_join_requests(group_id, anchor, count, watch_index) - - -Returns a group's join requests. Must have valid permissions to view. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**anchor** | Option<**String**> | The pagination anchor. Set to the returned anchor of this endpoint to receive the next set of items. | | -**count** | Option<**f64**> | Amount of join requests to return. | | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::GroupGetJoinRequestsResponse**](GroupGetJoinRequestsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_get_members - -> crate::models::GroupGetMembersResponse group_get_members(group_id, anchor, count, watch_index) - - -Returns a group's members. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**anchor** | Option<**String**> | The pagination anchor. Set to the returned anchor of this endpoint to receive the next set of items. | | -**count** | Option<**f64**> | Amount of members to return. | | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::GroupGetMembersResponse**](GroupGetMembersResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_get_profile - -> crate::models::GroupGetProfileResponse group_get_profile(group_id, watch_index) - - -Returns a group profile. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::GroupGetProfileResponse**](GroupGetProfileResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_get_summary - -> crate::models::GroupGetSummaryResponse group_get_summary(group_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::GroupGetSummaryResponse**](GroupGetSummaryResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_kick_member - -> group_kick_member(group_id, identity_id) - - -Kicks an identity from a group. Must be the owner of the group to perform this action. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**identity_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_leave - -> group_leave(group_id) - - -Leaves a group. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_list_suggested - -> crate::models::GroupListSuggestedResponse group_list_suggested(watch_index) - - -Returns a list of suggested groups. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::GroupListSuggestedResponse**](GroupListSuggestedResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_prepare_avatar_upload - -> crate::models::GroupPrepareAvatarUploadResponse group_prepare_avatar_upload(group_prepare_avatar_upload_request) - - -Prepares an avatar image upload. Complete upload with `rivet.api.group#CompleteAvatarUpload`. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_prepare_avatar_upload_request** | [**GroupPrepareAvatarUploadRequest**](GroupPrepareAvatarUploadRequest.md) | | [required] | - -### Return type - -[**crate::models::GroupPrepareAvatarUploadResponse**](GroupPrepareAvatarUploadResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_transfer_ownership - -> group_transfer_ownership(group_id, group_transfer_ownership_request) - - -Transfers ownership of a group to another identity. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**group_transfer_ownership_request** | [**GroupTransferOwnershipRequest**](GroupTransferOwnershipRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_unban_identity - -> group_unban_identity(group_id, identity_id) - - -Unbans an identity from a group. Must be the owner of the group to perform this action. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**identity_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_update_profile - -> group_update_profile(group_id, group_update_profile_request) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**group_update_profile_request** | [**GroupUpdateProfileRequest**](GroupUpdateProfileRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_validate_profile - -> crate::models::GroupValidateProfileResponse group_validate_profile(group_validate_profile_request) - - -Validate contents of group profile. Use to provide immediate feedback on profile changes before committing them. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_validate_profile_request** | [**GroupValidateProfileRequest**](GroupValidateProfileRequest.md) | | [required] | - -### Return type - -[**crate::models::GroupValidateProfileResponse**](GroupValidateProfileResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/GroupBannedIdentity.md b/sdks/api/full/rust-cli/docs/GroupBannedIdentity.md deleted file mode 100644 index cd6aadff02..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupBannedIdentity.md +++ /dev/null @@ -1,12 +0,0 @@ -# GroupBannedIdentity - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**ban_ts** | **String** | RFC3339 timestamp | -**identity** | [**crate::models::IdentityHandle**](IdentityHandle.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-cli/docs/GroupConsumeInviteResponse.md b/sdks/api/full/rust-cli/docs/GroupConsumeInviteResponse.md deleted file mode 100644 index 17109cf1b0..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupConsumeInviteResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupConsumeInviteResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**group_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] - -[[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-cli/docs/GroupCreateInviteRequest.md b/sdks/api/full/rust-cli/docs/GroupCreateInviteRequest.md deleted file mode 100644 index 8ea7d8610a..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupCreateInviteRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# GroupCreateInviteRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**ttl** | Option<**f64**> | How long until the group invite expires (in milliseconds). | [optional] -**use_count** | Option<**f64**> | How many times the group invite can be used. | [optional] - -[[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-cli/docs/GroupCreateInviteResponse.md b/sdks/api/full/rust-cli/docs/GroupCreateInviteResponse.md deleted file mode 100644 index f8bb082672..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupCreateInviteResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupCreateInviteResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**code** | **String** | The code that will be passed to `rivet.api.group#ConsumeInvite` to join a group. | - -[[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-cli/docs/GroupCreateRequest.md b/sdks/api/full/rust-cli/docs/GroupCreateRequest.md deleted file mode 100644 index 112b0a960a..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupCreateRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupCreateRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | - -[[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-cli/docs/GroupCreateResponse.md b/sdks/api/full/rust-cli/docs/GroupCreateResponse.md deleted file mode 100644 index 30b7d3283a..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupCreateResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupCreateResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**group_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/GroupExternalLinks.md b/sdks/api/full/rust-cli/docs/GroupExternalLinks.md deleted file mode 100644 index b216f55b21..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupExternalLinks.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupExternalLinks - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**profile** | **String** | A link to this group's profile page. | - -[[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-cli/docs/GroupGetBansResponse.md b/sdks/api/full/rust-cli/docs/GroupGetBansResponse.md deleted file mode 100644 index e393d233d4..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupGetBansResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# GroupGetBansResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | The pagination anchor. | [optional] -**banned_identities** | [**Vec**](GroupBannedIdentity.md) | A list of banned group members. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/GroupGetInviteResponse.md b/sdks/api/full/rust-cli/docs/GroupGetInviteResponse.md deleted file mode 100644 index 23509fdffe..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupGetInviteResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupGetInviteResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**group** | [**crate::models::GroupHandle**](GroupHandle.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-cli/docs/GroupGetJoinRequestsResponse.md b/sdks/api/full/rust-cli/docs/GroupGetJoinRequestsResponse.md deleted file mode 100644 index c170d6a749..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupGetJoinRequestsResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# GroupGetJoinRequestsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | The pagination anchor. | [optional] -**join_requests** | [**Vec**](GroupJoinRequest.md) | A list of group join requests. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/GroupGetMembersResponse.md b/sdks/api/full/rust-cli/docs/GroupGetMembersResponse.md deleted file mode 100644 index 9362b70400..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupGetMembersResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# GroupGetMembersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | The pagination anchor. | [optional] -**members** | [**Vec**](GroupMember.md) | A list of group members. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/GroupGetProfileResponse.md b/sdks/api/full/rust-cli/docs/GroupGetProfileResponse.md deleted file mode 100644 index dee7662d77..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupGetProfileResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# GroupGetProfileResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**group** | [**crate::models::GroupProfile**](GroupProfile.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/GroupGetSummaryResponse.md b/sdks/api/full/rust-cli/docs/GroupGetSummaryResponse.md deleted file mode 100644 index 1db50d7b5e..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupGetSummaryResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupGetSummaryResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**group** | [**crate::models::GroupSummary**](GroupSummary.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-cli/docs/GroupHandle.md b/sdks/api/full/rust-cli/docs/GroupHandle.md deleted file mode 100644 index 9eb1e35c46..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupHandle.md +++ /dev/null @@ -1,15 +0,0 @@ -# GroupHandle - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**avatar_url** | Option<**String**> | The URL of this group's avatar image | [optional] -**display_name** | **String** | Represent a resource's readable display name. | -**external** | [**crate::models::GroupExternalLinks**](GroupExternalLinks.md) | | -**group_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**is_developer** | Option<**bool**> | Whether or not this group is a developer group. | [optional] - -[[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-cli/docs/GroupInvitesApi.md b/sdks/api/full/rust-cli/docs/GroupInvitesApi.md deleted file mode 100644 index 303fc595db..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupInvitesApi.md +++ /dev/null @@ -1,102 +0,0 @@ -# \GroupInvitesApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**group_invites_consume_invite**](GroupInvitesApi.md#group_invites_consume_invite) | **POST** /group/invites/{group_invite_code}/consume | -[**group_invites_create_invite**](GroupInvitesApi.md#group_invites_create_invite) | **POST** /group/groups/{group_id}/invites | -[**group_invites_get_invite**](GroupInvitesApi.md#group_invites_get_invite) | **GET** /group/invites/{group_invite_code} | - - - -## group_invites_consume_invite - -> crate::models::GroupConsumeInviteResponse group_invites_consume_invite(group_invite_code) - - -Consumes a group invite to join a group. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_invite_code** | **String** | Provided by `rivet.api.group#CreateInviteResponse$code`. | [required] | - -### Return type - -[**crate::models::GroupConsumeInviteResponse**](GroupConsumeInviteResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_invites_create_invite - -> crate::models::GroupCreateInviteResponse group_invites_create_invite(group_id, group_create_invite_request) - - -Creates a group invite. Can be shared with other identities to let them join this group. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**group_create_invite_request** | [**GroupCreateInviteRequest**](GroupCreateInviteRequest.md) | | [required] | - -### Return type - -[**crate::models::GroupCreateInviteResponse**](GroupCreateInviteResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_invites_get_invite - -> crate::models::GroupGetInviteResponse group_invites_get_invite(group_invite_code) - - -Inspects a group invite returning information about the team that created it. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_invite_code** | **String** | Provided by `rivet.api.group#CreateInviteResponse$code`. | [required] | - -### Return type - -[**crate::models::GroupGetInviteResponse**](GroupGetInviteResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/GroupJoinRequest.md b/sdks/api/full/rust-cli/docs/GroupJoinRequest.md deleted file mode 100644 index 9a0307703f..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupJoinRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# GroupJoinRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity** | [**crate::models::IdentityHandle**](IdentityHandle.md) | | -**ts** | **String** | RFC3339 timestamp | - -[[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-cli/docs/GroupJoinRequestsApi.md b/sdks/api/full/rust-cli/docs/GroupJoinRequestsApi.md deleted file mode 100644 index 4018b07198..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupJoinRequestsApi.md +++ /dev/null @@ -1,72 +0,0 @@ -# \GroupJoinRequestsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**group_join_requests_create_join_request**](GroupJoinRequestsApi.md#group_join_requests_create_join_request) | **POST** /group/groups/{group_id}/join-request | -[**group_join_requests_resolve_join_request**](GroupJoinRequestsApi.md#group_join_requests_resolve_join_request) | **POST** /group/groups/{group_id}/join-request/{identity_id} | - - - -## group_join_requests_create_join_request - -> group_join_requests_create_join_request(group_id) - - -Requests to join a group. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## group_join_requests_resolve_join_request - -> group_join_requests_resolve_join_request(group_id, identity_id, group_resolve_join_request_request) - - -Resolves a join request for a given group. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**group_id** | **uuid::Uuid** | | [required] | -**identity_id** | **uuid::Uuid** | | [required] | -**group_resolve_join_request_request** | [**GroupResolveJoinRequestRequest**](GroupResolveJoinRequestRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/GroupListSuggestedResponse.md b/sdks/api/full/rust-cli/docs/GroupListSuggestedResponse.md deleted file mode 100644 index ffaed0a93f..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupListSuggestedResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# GroupListSuggestedResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**groups** | [**Vec**](GroupSummary.md) | A list of group summaries. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/GroupMember.md b/sdks/api/full/rust-cli/docs/GroupMember.md deleted file mode 100644 index 7e5979f62a..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupMember.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupMember - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity** | [**crate::models::IdentityHandle**](IdentityHandle.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-cli/docs/GroupPrepareAvatarUploadRequest.md b/sdks/api/full/rust-cli/docs/GroupPrepareAvatarUploadRequest.md deleted file mode 100644 index c73eaf1f99..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupPrepareAvatarUploadRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# GroupPrepareAvatarUploadRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | Unsigned 64 bit integer. | -**mime** | Option<**String**> | The MIME type of the group avatar. | [optional] -**path** | **String** | The path/filename of the group avatar. | - -[[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-cli/docs/GroupPrepareAvatarUploadResponse.md b/sdks/api/full/rust-cli/docs/GroupPrepareAvatarUploadResponse.md deleted file mode 100644 index 011da580f7..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupPrepareAvatarUploadResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# GroupPrepareAvatarUploadResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**presigned_request** | [**crate::models::UploadPresignedRequest**](UploadPresignedRequest.md) | | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/GroupProfile.md b/sdks/api/full/rust-cli/docs/GroupProfile.md deleted file mode 100644 index ea58979585..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupProfile.md +++ /dev/null @@ -1,23 +0,0 @@ -# GroupProfile - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**avatar_url** | Option<**String**> | The URL of this group's avatar image. | [optional] -**bio** | **String** | Detailed information about a profile. | -**display_name** | **String** | Represent a resource's readable display name. | -**external** | [**crate::models::GroupExternalLinks**](GroupExternalLinks.md) | | -**group_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**is_current_identity_member** | Option<**bool**> | Whether or not the current identity is a member of this group. | [optional] -**is_current_identity_requesting_join** | Option<**bool**> | Whether or not the current identity is currently requesting to join this group. | [optional] -**is_developer** | Option<**bool**> | Whether or not this group is a developer. | [optional] -**join_requests** | [**Vec**](GroupJoinRequest.md) | A list of group join requests. | -**member_count** | Option<**i32**> | Unsigned 32 bit integer. | [optional] -**members** | [**Vec**](GroupMember.md) | A list of group members. | -**owner_identity_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**publicity** | [**crate::models::GroupPublicity**](GroupPublicity.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-cli/docs/GroupPublicity.md b/sdks/api/full/rust-cli/docs/GroupPublicity.md deleted file mode 100644 index aad14f39fb..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupPublicity.md +++ /dev/null @@ -1,10 +0,0 @@ -# GroupPublicity - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/GroupResolveJoinRequestRequest.md b/sdks/api/full/rust-cli/docs/GroupResolveJoinRequestRequest.md deleted file mode 100644 index 2d887e1068..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupResolveJoinRequestRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupResolveJoinRequestRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**resolution** | Option<**bool**> | | [optional] - -[[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-cli/docs/GroupSummary.md b/sdks/api/full/rust-cli/docs/GroupSummary.md deleted file mode 100644 index 9905aaf838..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupSummary.md +++ /dev/null @@ -1,20 +0,0 @@ -# GroupSummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**avatar_url** | Option<**String**> | The URL of this group's avatar image. | [optional] -**bio** | **String** | Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$ | -**display_name** | **String** | Represent a resource's readable display name. | -**external** | [**crate::models::GroupExternalLinks**](GroupExternalLinks.md) | | -**group_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**is_current_identity_member** | **bool** | Whether or not the current identity is a member of this group. | -**is_developer** | **bool** | **Deprecated** Whether or not this group is a developer. | -**member_count** | **i32** | | -**owner_identity_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**publicity** | [**crate::models::GroupPublicity**](GroupPublicity.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-cli/docs/GroupTransferOwnershipRequest.md b/sdks/api/full/rust-cli/docs/GroupTransferOwnershipRequest.md deleted file mode 100644 index 586497f9cb..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupTransferOwnershipRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupTransferOwnershipRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**new_owner_identity_id** | **String** | Identity to transfer the group to. Must be a member of the group. | - -[[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-cli/docs/GroupUpdateProfileRequest.md b/sdks/api/full/rust-cli/docs/GroupUpdateProfileRequest.md deleted file mode 100644 index f70bbe190a..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupUpdateProfileRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# GroupUpdateProfileRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**bio** | Option<**String**> | Detailed information about a profile. | [optional] -**display_name** | Option<**String**> | Represent a resource's readable display name. | [optional] -**publicity** | Option<[**crate::models::GroupPublicity**](GroupPublicity.md)> | | [optional] - -[[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-cli/docs/GroupValidateProfileRequest.md b/sdks/api/full/rust-cli/docs/GroupValidateProfileRequest.md deleted file mode 100644 index ee83335004..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupValidateProfileRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# GroupValidateProfileRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**bio** | Option<**String**> | Represent a resource's readable display name. | [optional] -**display_name** | Option<**String**> | Represent a resource's readable display name. | [optional] -**publicity** | Option<[**crate::models::GroupPublicity**](GroupPublicity.md)> | | [optional] - -[[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-cli/docs/GroupValidateProfileResponse.md b/sdks/api/full/rust-cli/docs/GroupValidateProfileResponse.md deleted file mode 100644 index 72dbfd87e3..0000000000 --- a/sdks/api/full/rust-cli/docs/GroupValidateProfileResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GroupValidateProfileResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.md) | A list of validation errors. | - -[[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-cli/docs/IdentityActivitiesApi.md b/sdks/api/full/rust-cli/docs/IdentityActivitiesApi.md deleted file mode 100644 index 878f5d88fe..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityActivitiesApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \IdentityActivitiesApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**identity_activities_list**](IdentityActivitiesApi.md#identity_activities_list) | **GET** /identity/activities | - - - -## identity_activities_list - -> crate::models::IdentityListActivitiesResponse identity_activities_list(watch_index) - - -Returns an overview of all players currently online or in game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**watch_index** | Option<**String**> | | | - -### Return type - -[**crate::models::IdentityListActivitiesResponse**](IdentityListActivitiesResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/IdentityApi.md b/sdks/api/full/rust-cli/docs/IdentityApi.md deleted file mode 100644 index 218946d9c6..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityApi.md +++ /dev/null @@ -1,461 +0,0 @@ -# \IdentityApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**identity_complete_avatar_upload**](IdentityApi.md#identity_complete_avatar_upload) | **POST** /identity/identities/avatar-upload/{upload_id}/complete | -[**identity_get_handles**](IdentityApi.md#identity_get_handles) | **GET** /identity/identities/batch/handle | -[**identity_get_profile**](IdentityApi.md#identity_get_profile) | **GET** /identity/identities/{identity_id}/profile | -[**identity_get_self_profile**](IdentityApi.md#identity_get_self_profile) | **GET** /identity/identities/self/profile | -[**identity_get_summaries**](IdentityApi.md#identity_get_summaries) | **GET** /identity/identities/batch/summary | -[**identity_mark_deletion**](IdentityApi.md#identity_mark_deletion) | **POST** /identity/identities/self/delete-request | -[**identity_prepare_avatar_upload**](IdentityApi.md#identity_prepare_avatar_upload) | **POST** /identity/identities/avatar-upload/prepare | -[**identity_remove_game_activity**](IdentityApi.md#identity_remove_game_activity) | **DELETE** /identity/identities/self/activity | -[**identity_set_game_activity**](IdentityApi.md#identity_set_game_activity) | **POST** /identity/identities/self/activity | -[**identity_setup**](IdentityApi.md#identity_setup) | **POST** /identity/identities | -[**identity_signup_for_beta**](IdentityApi.md#identity_signup_for_beta) | **POST** /identity/identities/self/beta-signup | -[**identity_unmark_deletion**](IdentityApi.md#identity_unmark_deletion) | **DELETE** /identity/identities/self/delete-request | -[**identity_update_profile**](IdentityApi.md#identity_update_profile) | **POST** /identity/identities/self/profile | -[**identity_update_status**](IdentityApi.md#identity_update_status) | **POST** /identity/identities/identities/self/status | -[**identity_validate_profile**](IdentityApi.md#identity_validate_profile) | **POST** /identity/identities/self/profile/validate | - - - -## identity_complete_avatar_upload - -> identity_complete_avatar_upload(upload_id) - - -Completes an avatar image upload. Must be called after the file upload process completes. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**upload_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_get_handles - -> crate::models::IdentityGetHandlesResponse identity_get_handles(identity_ids) - - -Fetches a list of identity handles. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_ids** | **String** | | [required] | - -### Return type - -[**crate::models::IdentityGetHandlesResponse**](IdentityGetHandlesResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_get_profile - -> crate::models::IdentityGetProfileResponse identity_get_profile(identity_id, watch_index) - - -Fetches an identity profile. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_id** | **uuid::Uuid** | | [required] | -**watch_index** | Option<**String**> | | | - -### Return type - -[**crate::models::IdentityGetProfileResponse**](IdentityGetProfileResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_get_self_profile - -> crate::models::IdentityGetProfileResponse identity_get_self_profile(watch_index) - - -Fetches the current identity's profile. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**watch_index** | Option<**String**> | | | - -### Return type - -[**crate::models::IdentityGetProfileResponse**](IdentityGetProfileResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_get_summaries - -> crate::models::IdentityGetSummariesResponse identity_get_summaries(identity_ids) - - -Fetches a list of identity summaries. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_ids** | **String** | | [required] | - -### Return type - -[**crate::models::IdentityGetSummariesResponse**](IdentityGetSummariesResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_mark_deletion - -> identity_mark_deletion() - - -### Parameters - -This endpoint does not need any parameter. - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_prepare_avatar_upload - -> crate::models::IdentityPrepareAvatarUploadResponse identity_prepare_avatar_upload(identity_prepare_avatar_upload_request) - - -Prepares an avatar image upload. Complete upload with `CompleteIdentityAvatarUpload`. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_prepare_avatar_upload_request** | [**IdentityPrepareAvatarUploadRequest**](IdentityPrepareAvatarUploadRequest.md) | | [required] | - -### Return type - -[**crate::models::IdentityPrepareAvatarUploadResponse**](IdentityPrepareAvatarUploadResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_remove_game_activity - -> identity_remove_game_activity() - - -Removes the current identity's game activity. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_set_game_activity - -> identity_set_game_activity(identity_set_game_activity_request) - - -Sets the current identity's game activity. This activity will automatically be removed when the identity goes offline. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_set_game_activity_request** | [**IdentitySetGameActivityRequest**](IdentitySetGameActivityRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_setup - -> crate::models::IdentitySetupResponse identity_setup(identity_setup_request) - - -Gets or creates an identity. Passing an existing identity token in the body refreshes the token. Temporary Accounts Until the identity is linked with the Rivet Hub (see `PrepareGameLink`), this identity will be temporary but still behave like all other identities. This is intended to allow users to play the game without signing up while still having the benefits of having an account. When they are ready to save their account, they should be instructed to link their account (see `PrepareGameLink`). Storing Token `identity_token` should be stored in some form of persistent storage. The token should be read from storage and passed to `Setup` every time the client starts. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_setup_request** | [**IdentitySetupRequest**](IdentitySetupRequest.md) | | [required] | - -### Return type - -[**crate::models::IdentitySetupResponse**](IdentitySetupResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_signup_for_beta - -> identity_signup_for_beta(identity_signup_for_beta_request) - - -Completes an avatar image upload. Must be called after the file upload process completes. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_signup_for_beta_request** | [**IdentitySignupForBetaRequest**](IdentitySignupForBetaRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_unmark_deletion - -> identity_unmark_deletion() - - -### Parameters - -This endpoint does not need any parameter. - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_update_profile - -> identity_update_profile(identity_update_profile_request) - - -Updates profile of the current identity. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_update_profile_request** | [**IdentityUpdateProfileRequest**](IdentityUpdateProfileRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_update_status - -> identity_update_status(identity_update_status_request) - - -Updates the current identity's status. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_update_status_request** | [**IdentityUpdateStatusRequest**](IdentityUpdateStatusRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## identity_validate_profile - -> identity_validate_profile(identity_update_profile_request) - - -Validate contents of identity profile. Use to provide immediate feedback on profile changes before committing them. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_update_profile_request** | [**IdentityUpdateProfileRequest**](IdentityUpdateProfileRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/IdentityDevState.md b/sdks/api/full/rust-cli/docs/IdentityDevState.md deleted file mode 100644 index 5934401972..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityDevState.md +++ /dev/null @@ -1,10 +0,0 @@ -# IdentityDevState - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/IdentityEmailLinkedAccount.md b/sdks/api/full/rust-cli/docs/IdentityEmailLinkedAccount.md deleted file mode 100644 index f09166f264..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityEmailLinkedAccount.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityEmailLinkedAccount - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**email** | **String** | A valid email address | - -[[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-cli/docs/IdentityEventsApi.md b/sdks/api/full/rust-cli/docs/IdentityEventsApi.md deleted file mode 100644 index 3d3d2bf6d3..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityEventsApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \IdentityEventsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**identity_events_watch**](IdentityEventsApi.md#identity_events_watch) | **GET** /identity/events/live | - - - -## identity_events_watch - -> crate::models::IdentityWatchEventsResponse identity_events_watch(watch_index) - - -Returns all events relative to the current identity. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**watch_index** | Option<**String**> | | | - -### Return type - -[**crate::models::IdentityWatchEventsResponse**](IdentityWatchEventsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/IdentityExternalLinks.md b/sdks/api/full/rust-cli/docs/IdentityExternalLinks.md deleted file mode 100644 index 6f8d724d9f..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityExternalLinks.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityExternalLinks - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**profile** | **String** | A link to this identity's profile page. | -**settings** | Option<**String**> | A link to the Rivet settings page. | [optional] - -[[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-cli/docs/IdentityGameActivity.md b/sdks/api/full/rust-cli/docs/IdentityGameActivity.md deleted file mode 100644 index 99d20ad0fe..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGameActivity.md +++ /dev/null @@ -1,14 +0,0 @@ -# IdentityGameActivity - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game** | [**crate::models::GameHandle**](GameHandle.md) | | -**message** | **String** | A short activity message about the current game activity. | -**mutual_metadata** | Option<[**serde_json::Value**](.md)> | JSON data seen only by the given identity and their mutual followers. | [optional] -**public_metadata** | Option<[**serde_json::Value**](.md)> | JSON data seen by anyone. | [optional] - -[[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-cli/docs/IdentityGameLinkStatus.md b/sdks/api/full/rust-cli/docs/IdentityGameLinkStatus.md deleted file mode 100644 index 9455112195..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGameLinkStatus.md +++ /dev/null @@ -1,10 +0,0 @@ -# IdentityGameLinkStatus - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/IdentityGetHandlesResponse.md b/sdks/api/full/rust-cli/docs/IdentityGetHandlesResponse.md deleted file mode 100644 index 6c22309932..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGetHandlesResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityGetHandlesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identities** | [**Vec**](IdentityHandle.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/IdentityGetProfileResponse.md b/sdks/api/full/rust-cli/docs/IdentityGetProfileResponse.md deleted file mode 100644 index 59181472d1..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGetProfileResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityGetProfileResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity** | [**crate::models::IdentityProfile**](IdentityProfile.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/IdentityGetSummariesResponse.md b/sdks/api/full/rust-cli/docs/IdentityGetSummariesResponse.md deleted file mode 100644 index 3605a09100..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGetSummariesResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityGetSummariesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identities** | [**Vec**](IdentitySummary.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/IdentityGlobalEvent.md b/sdks/api/full/rust-cli/docs/IdentityGlobalEvent.md deleted file mode 100644 index 8c0ea2d415..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGlobalEvent.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityGlobalEvent - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**kind** | [**crate::models::IdentityGlobalEventKind**](IdentityGlobalEventKind.md) | | -**notification** | Option<[**crate::models::IdentityGlobalEventNotification**](IdentityGlobalEventNotification.md)> | | [optional] -**ts** | **String** | RFC3339 timestamp | - -[[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-cli/docs/IdentityGlobalEventIdentityUpdate.md b/sdks/api/full/rust-cli/docs/IdentityGlobalEventIdentityUpdate.md deleted file mode 100644 index 2d9cd07bd8..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGlobalEventIdentityUpdate.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityGlobalEventIdentityUpdate - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity** | [**crate::models::IdentityProfile**](IdentityProfile.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-cli/docs/IdentityGlobalEventKind.md b/sdks/api/full/rust-cli/docs/IdentityGlobalEventKind.md deleted file mode 100644 index 0acac0e5d1..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGlobalEventKind.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityGlobalEventKind - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity_update** | Option<[**crate::models::IdentityGlobalEventIdentityUpdate**](IdentityGlobalEventIdentityUpdate.md)> | | [optional] - -[[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-cli/docs/IdentityGlobalEventNotification.md b/sdks/api/full/rust-cli/docs/IdentityGlobalEventNotification.md deleted file mode 100644 index 8c20ce1e5a..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGlobalEventNotification.md +++ /dev/null @@ -1,14 +0,0 @@ -# IdentityGlobalEventNotification - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**description** | **String** | | -**thumbnail_url** | **String** | URL to an image thumbnail that should be shown for this notification. | -**title** | **String** | | -**url** | **String** | Rivet Hub URL that holds the relevant context for this notification. | - -[[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-cli/docs/IdentityGroup.md b/sdks/api/full/rust-cli/docs/IdentityGroup.md deleted file mode 100644 index e961478d70..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityGroup.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityGroup - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**group** | [**crate::models::GroupHandle**](GroupHandle.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-cli/docs/IdentityHandle.md b/sdks/api/full/rust-cli/docs/IdentityHandle.md deleted file mode 100644 index dbddadf8b5..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityHandle.md +++ /dev/null @@ -1,16 +0,0 @@ -# IdentityHandle - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**account_number** | **i32** | | -**avatar_url** | **String** | The URL of this identity's avatar image. | -**display_name** | **String** | Represent a resource's readable display name. | -**external** | [**crate::models::IdentityExternalLinks**](IdentityExternalLinks.md) | | -**identity_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**is_registered** | **bool** | Whether or not this identity is registered with a linked account. | - -[[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-cli/docs/IdentityLinkedAccount.md b/sdks/api/full/rust-cli/docs/IdentityLinkedAccount.md deleted file mode 100644 index 1c62f5b20a..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityLinkedAccount.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityLinkedAccount - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**default_user** | Option<**bool**> | | [optional] -**email** | Option<[**crate::models::IdentityEmailLinkedAccount**](IdentityEmailLinkedAccount.md)> | | [optional] - -[[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-cli/docs/IdentityListActivitiesResponse.md b/sdks/api/full/rust-cli/docs/IdentityListActivitiesResponse.md deleted file mode 100644 index b6a876ea3c..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityListActivitiesResponse.md +++ /dev/null @@ -1,15 +0,0 @@ -# IdentityListActivitiesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**games** | [**Vec**](GameSummary.md) | | -**identities** | [**Vec**](IdentityHandle.md) | | -**suggested_groups** | [**Vec**](GroupSummary.md) | | -**suggested_players** | [**Vec**](IdentityHandle.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/IdentityPrepareAvatarUploadRequest.md b/sdks/api/full/rust-cli/docs/IdentityPrepareAvatarUploadRequest.md deleted file mode 100644 index c8cb865892..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityPrepareAvatarUploadRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityPrepareAvatarUploadRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | | -**mime** | **String** | See https://www.iana.org/assignments/media-types/media-types.xhtml | -**path** | **String** | | - -[[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-cli/docs/IdentityPrepareAvatarUploadResponse.md b/sdks/api/full/rust-cli/docs/IdentityPrepareAvatarUploadResponse.md deleted file mode 100644 index b2dcb72fe4..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityPrepareAvatarUploadResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityPrepareAvatarUploadResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**presigned_request** | [**crate::models::UploadPresignedRequest**](UploadPresignedRequest.md) | | -**upload_id** | [**uuid::Uuid**](uuid::Uuid.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-cli/docs/IdentityProfile.md b/sdks/api/full/rust-cli/docs/IdentityProfile.md deleted file mode 100644 index 615f085968..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityProfile.md +++ /dev/null @@ -1,30 +0,0 @@ -# IdentityProfile - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**account_number** | **i32** | | -**avatar_url** | **String** | The URL of this identity's avatar image. | -**awaiting_deletion** | Option<**bool**> | Whether or not this identity is awaiting account deletion. Only visible to when the requestee is this identity. | [optional] -**bio** | **String** | Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$ | -**dev_state** | Option<[**crate::models::IdentityDevState**](IdentityDevState.md)> | | [optional] -**display_name** | **String** | Represent a resource's readable display name. | -**external** | [**crate::models::IdentityExternalLinks**](IdentityExternalLinks.md) | | -**follower_count** | **i64** | | -**following** | **bool** | Whether or not the requestee's identity is following this identity. | -**following_count** | **i64** | | -**games** | [**Vec**](GameStatSummary.md) | | -**groups** | [**Vec**](IdentityGroup.md) | | -**identity_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**is_admin** | **bool** | Whether or not this identity is an admin. | -**is_following_me** | **bool** | Whether or not this identity is both following and is followed by the requestee's identity. | -**is_game_linked** | Option<**bool**> | Whether or not this game user has been linked through the Rivet dashboard. | [optional] -**is_mutual_following** | **bool** | | -**is_registered** | **bool** | Whether or not this identity is registered with a linked account. | -**join_ts** | **String** | RFC3339 timestamp | -**linked_accounts** | [**Vec**](IdentityLinkedAccount.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-cli/docs/IdentitySetGameActivityRequest.md b/sdks/api/full/rust-cli/docs/IdentitySetGameActivityRequest.md deleted file mode 100644 index a8a044536c..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentitySetGameActivityRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentitySetGameActivityRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_activity** | [**crate::models::IdentityUpdateGameActivity**](IdentityUpdateGameActivity.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-cli/docs/IdentitySetupRequest.md b/sdks/api/full/rust-cli/docs/IdentitySetupRequest.md deleted file mode 100644 index 1ae990da1a..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentitySetupRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentitySetupRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**existing_identity_token** | Option<**String**> | Documentation at https://jwt.io/ | [optional] - -[[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-cli/docs/IdentitySetupResponse.md b/sdks/api/full/rust-cli/docs/IdentitySetupResponse.md deleted file mode 100644 index 18f209b27b..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentitySetupResponse.md +++ /dev/null @@ -1,14 +0,0 @@ -# IdentitySetupResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**identity** | [**crate::models::IdentityProfile**](IdentityProfile.md) | | -**identity_token** | **String** | Documentation at https://jwt.io/ | -**identity_token_expire_ts** | **String** | RFC3339 timestamp | - -[[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-cli/docs/IdentitySignupForBetaRequest.md b/sdks/api/full/rust-cli/docs/IdentitySignupForBetaRequest.md deleted file mode 100644 index 44fac0430d..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentitySignupForBetaRequest.md +++ /dev/null @@ -1,15 +0,0 @@ -# IdentitySignupForBetaRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**company_name** | Option<**String**> | | [optional] -**company_size** | **String** | | -**goals** | **String** | | -**name** | **String** | | -**preferred_tools** | **String** | | - -[[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-cli/docs/IdentityStatus.md b/sdks/api/full/rust-cli/docs/IdentityStatus.md deleted file mode 100644 index d7399858e7..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityStatus.md +++ /dev/null @@ -1,10 +0,0 @@ -# IdentityStatus - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/IdentitySummary.md b/sdks/api/full/rust-cli/docs/IdentitySummary.md deleted file mode 100644 index 2ccbb1ff8e..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentitySummary.md +++ /dev/null @@ -1,19 +0,0 @@ -# IdentitySummary - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**account_number** | **i32** | | -**avatar_url** | **String** | The URL of this identity's avatar image. | -**display_name** | **String** | Represent a resource's readable display name. | -**external** | [**crate::models::IdentityExternalLinks**](IdentityExternalLinks.md) | | -**following** | **bool** | Whether or not the requestee's identity is following this identity. | -**identity_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**is_following_me** | **bool** | Whether or not this identity is both following and is followed by the requestee's identity. | -**is_mutual_following** | **bool** | | -**is_registered** | **bool** | Whether or not this identity is registered with a linked account. | - -[[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-cli/docs/IdentityUpdateGameActivity.md b/sdks/api/full/rust-cli/docs/IdentityUpdateGameActivity.md deleted file mode 100644 index c8bfcf1e56..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityUpdateGameActivity.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityUpdateGameActivity - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**message** | Option<**String**> | A short message about the current game activity. | [optional] -**mutual_metadata** | Option<[**serde_json::Value**](.md)> | JSON data seen only by the given identity and their mutual followers. | [optional] -**public_metadata** | Option<[**serde_json::Value**](.md)> | JSON data seen by anyone. | [optional] - -[[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-cli/docs/IdentityUpdateProfileRequest.md b/sdks/api/full/rust-cli/docs/IdentityUpdateProfileRequest.md deleted file mode 100644 index bf63d3e257..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityUpdateProfileRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityUpdateProfileRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**account_number** | Option<**i32**> | | [optional] -**bio** | Option<**String**> | Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$ | [optional] -**display_name** | Option<**String**> | Represent a resource's readable display name. | [optional] - -[[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-cli/docs/IdentityUpdateStatusRequest.md b/sdks/api/full/rust-cli/docs/IdentityUpdateStatusRequest.md deleted file mode 100644 index 9a3cdb1a0c..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityUpdateStatusRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityUpdateStatusRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**status** | [**crate::models::IdentityStatus**](IdentityStatus.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-cli/docs/IdentityValidateProfileResponse.md b/sdks/api/full/rust-cli/docs/IdentityValidateProfileResponse.md deleted file mode 100644 index 3d0319b1d6..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityValidateProfileResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityValidateProfileResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**Vec**](ValidationError.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-cli/docs/IdentityWatchEventsResponse.md b/sdks/api/full/rust-cli/docs/IdentityWatchEventsResponse.md deleted file mode 100644 index cb14e7a958..0000000000 --- a/sdks/api/full/rust-cli/docs/IdentityWatchEventsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityWatchEventsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**events** | [**Vec**](IdentityGlobalEvent.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/JobRunApi.md b/sdks/api/full/rust-cli/docs/JobRunApi.md deleted file mode 100644 index 0184803488..0000000000 --- a/sdks/api/full/rust-cli/docs/JobRunApi.md +++ /dev/null @@ -1,34 +0,0 @@ -# \JobRunApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**job_run_cleanup**](JobRunApi.md#job_run_cleanup) | **POST** /job/runs/cleanup | - - - -## job_run_cleanup - -> job_run_cleanup() - - -### Parameters - -This endpoint does not need any parameter. - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/MatchmakerCreateLobbyResponse.md b/sdks/api/full/rust-cli/docs/MatchmakerCreateLobbyResponse.md deleted file mode 100644 index d00ff19503..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerCreateLobbyResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# MatchmakerCreateLobbyResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby** | [**crate::models::MatchmakerJoinLobby**](MatchmakerJoinLobby.md) | | -**player** | [**crate::models::MatchmakerJoinPlayer**](MatchmakerJoinPlayer.md) | | -**ports** | [**::std::collections::HashMap**](MatchmakerJoinPort.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-cli/docs/MatchmakerCustomLobbyPublicity.md b/sdks/api/full/rust-cli/docs/MatchmakerCustomLobbyPublicity.md deleted file mode 100644 index 9ef8998a74..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerCustomLobbyPublicity.md +++ /dev/null @@ -1,10 +0,0 @@ -# MatchmakerCustomLobbyPublicity - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/MatchmakerFindLobbyResponse.md b/sdks/api/full/rust-cli/docs/MatchmakerFindLobbyResponse.md deleted file mode 100644 index de44dba1a0..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerFindLobbyResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# MatchmakerFindLobbyResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby** | [**crate::models::MatchmakerJoinLobby**](MatchmakerJoinLobby.md) | | -**player** | [**crate::models::MatchmakerJoinPlayer**](MatchmakerJoinPlayer.md) | | -**ports** | [**::std::collections::HashMap**](MatchmakerJoinPort.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-cli/docs/MatchmakerGameModeInfo.md b/sdks/api/full/rust-cli/docs/MatchmakerGameModeInfo.md deleted file mode 100644 index 2fd265125b..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerGameModeInfo.md +++ /dev/null @@ -1,11 +0,0 @@ -# MatchmakerGameModeInfo - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_mode_id** | **String** | 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. | - -[[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-cli/docs/MatchmakerGameModeStatistics.md b/sdks/api/full/rust-cli/docs/MatchmakerGameModeStatistics.md deleted file mode 100644 index 50ac1752c3..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerGameModeStatistics.md +++ /dev/null @@ -1,12 +0,0 @@ -# MatchmakerGameModeStatistics - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**player_count** | **i64** | | -**regions** | [**::std::collections::HashMap**](MatchmakerRegionStatistics.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-cli/docs/MatchmakerGetStatisticsResponse.md b/sdks/api/full/rust-cli/docs/MatchmakerGetStatisticsResponse.md deleted file mode 100644 index ecc9cd7b94..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerGetStatisticsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# MatchmakerGetStatisticsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_modes** | [**::std::collections::HashMap**](MatchmakerGameModeStatistics.md) | | -**player_count** | **i64** | | - -[[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-cli/docs/MatchmakerJoinLobby.md b/sdks/api/full/rust-cli/docs/MatchmakerJoinLobby.md deleted file mode 100644 index ed37af2873..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerJoinLobby.md +++ /dev/null @@ -1,14 +0,0 @@ -# MatchmakerJoinLobby - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**player** | [**crate::models::MatchmakerJoinPlayer**](MatchmakerJoinPlayer.md) | | -**ports** | [**::std::collections::HashMap**](MatchmakerJoinPort.md) | **Deprecated** | -**region** | [**crate::models::MatchmakerJoinRegion**](MatchmakerJoinRegion.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-cli/docs/MatchmakerJoinLobbyResponse.md b/sdks/api/full/rust-cli/docs/MatchmakerJoinLobbyResponse.md deleted file mode 100644 index c6b79ab84a..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerJoinLobbyResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# MatchmakerJoinLobbyResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lobby** | [**crate::models::MatchmakerJoinLobby**](MatchmakerJoinLobby.md) | | -**player** | [**crate::models::MatchmakerJoinPlayer**](MatchmakerJoinPlayer.md) | | -**ports** | [**::std::collections::HashMap**](MatchmakerJoinPort.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-cli/docs/MatchmakerJoinPlayer.md b/sdks/api/full/rust-cli/docs/MatchmakerJoinPlayer.md deleted file mode 100644 index ec77d5f315..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerJoinPlayer.md +++ /dev/null @@ -1,11 +0,0 @@ -# MatchmakerJoinPlayer - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**token** | **String** | Documentation at https://jwt.io/ | - -[[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-cli/docs/MatchmakerJoinPort.md b/sdks/api/full/rust-cli/docs/MatchmakerJoinPort.md deleted file mode 100644 index d32c534f6b..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerJoinPort.md +++ /dev/null @@ -1,15 +0,0 @@ -# MatchmakerJoinPort - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**host** | Option<**String**> | The host for the given port. Will be null if using a port range. | [optional] -**hostname** | **String** | | -**is_tls** | **bool** | Whether or not this lobby port uses TLS. You cannot mix a non-TLS and TLS ports. | -**port** | Option<**i32**> | The port number for this lobby. Will be null if using a port range. | [optional] -**port_range** | Option<[**crate::models::MatchmakerJoinPortRange**](MatchmakerJoinPortRange.md)> | | [optional] - -[[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-cli/docs/MatchmakerJoinPortRange.md b/sdks/api/full/rust-cli/docs/MatchmakerJoinPortRange.md deleted file mode 100644 index 28f302c2c1..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerJoinPortRange.md +++ /dev/null @@ -1,12 +0,0 @@ -# MatchmakerJoinPortRange - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**max** | **i32** | Maximum port that can be connected to. Inclusive range. | -**min** | **i32** | Minimum port that can be connected to. Inclusive range. | - -[[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-cli/docs/MatchmakerJoinRegion.md b/sdks/api/full/rust-cli/docs/MatchmakerJoinRegion.md deleted file mode 100644 index 0ba22c74ff..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerJoinRegion.md +++ /dev/null @@ -1,12 +0,0 @@ -# MatchmakerJoinRegion - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**display_name** | **String** | Represent a resource's readable display name. | -**region_id** | **String** | 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. | - -[[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-cli/docs/MatchmakerListLobbiesResponse.md b/sdks/api/full/rust-cli/docs/MatchmakerListLobbiesResponse.md deleted file mode 100644 index 2c037b2b1a..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerListLobbiesResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# MatchmakerListLobbiesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_modes** | [**Vec**](MatchmakerGameModeInfo.md) | | -**lobbies** | [**Vec**](MatchmakerLobbyInfo.md) | | -**regions** | [**Vec**](MatchmakerRegionInfo.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-cli/docs/MatchmakerListRegionsResponse.md b/sdks/api/full/rust-cli/docs/MatchmakerListRegionsResponse.md deleted file mode 100644 index 2ee5e5be0c..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerListRegionsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# MatchmakerListRegionsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**regions** | [**Vec**](MatchmakerRegionInfo.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-cli/docs/MatchmakerLobbiesApi.md b/sdks/api/full/rust-cli/docs/MatchmakerLobbiesApi.md deleted file mode 100644 index cbecd8d12f..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerLobbiesApi.md +++ /dev/null @@ -1,254 +0,0 @@ -# \MatchmakerLobbiesApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**matchmaker_lobbies_create**](MatchmakerLobbiesApi.md#matchmaker_lobbies_create) | **POST** /matchmaker/lobbies/create | -[**matchmaker_lobbies_find**](MatchmakerLobbiesApi.md#matchmaker_lobbies_find) | **POST** /matchmaker/lobbies/find | -[**matchmaker_lobbies_get_state**](MatchmakerLobbiesApi.md#matchmaker_lobbies_get_state) | **GET** /matchmaker/lobbies/{lobby_id}/state | -[**matchmaker_lobbies_join**](MatchmakerLobbiesApi.md#matchmaker_lobbies_join) | **POST** /matchmaker/lobbies/join | -[**matchmaker_lobbies_list**](MatchmakerLobbiesApi.md#matchmaker_lobbies_list) | **GET** /matchmaker/lobbies/list | -[**matchmaker_lobbies_ready**](MatchmakerLobbiesApi.md#matchmaker_lobbies_ready) | **POST** /matchmaker/lobbies/ready | -[**matchmaker_lobbies_set_closed**](MatchmakerLobbiesApi.md#matchmaker_lobbies_set_closed) | **PUT** /matchmaker/lobbies/closed | -[**matchmaker_lobbies_set_state**](MatchmakerLobbiesApi.md#matchmaker_lobbies_set_state) | **PUT** /matchmaker/lobbies/state | - - - -## matchmaker_lobbies_create - -> crate::models::MatchmakerCreateLobbyResponse matchmaker_lobbies_create(matchmaker_lobbies_create_request) - - -Creates a custom lobby. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**matchmaker_lobbies_create_request** | [**MatchmakerLobbiesCreateRequest**](MatchmakerLobbiesCreateRequest.md) | | [required] | - -### Return type - -[**crate::models::MatchmakerCreateLobbyResponse**](MatchmakerCreateLobbyResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_lobbies_find - -> crate::models::MatchmakerFindLobbyResponse matchmaker_lobbies_find(matchmaker_lobbies_find_request, origin) - - -Finds a lobby based on the given criteria. If a lobby is not found and `prevent_auto_create_lobby` is `false`, a new lobby will be created. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**matchmaker_lobbies_find_request** | [**MatchmakerLobbiesFindRequest**](MatchmakerLobbiesFindRequest.md) | | [required] | -**origin** | Option<**String**> | | | - -### Return type - -[**crate::models::MatchmakerFindLobbyResponse**](MatchmakerFindLobbyResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_lobbies_get_state - -> serde_json::Value matchmaker_lobbies_get_state(lobby_id) - - -Get the state of any lobby. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**lobby_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**serde_json::Value**](serde_json::Value.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_lobbies_join - -> crate::models::MatchmakerJoinLobbyResponse matchmaker_lobbies_join(matchmaker_lobbies_join_request) - - -Joins a specific lobby. This request will use the direct player count configured for the lobby group. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**matchmaker_lobbies_join_request** | [**MatchmakerLobbiesJoinRequest**](MatchmakerLobbiesJoinRequest.md) | | [required] | - -### Return type - -[**crate::models::MatchmakerJoinLobbyResponse**](MatchmakerJoinLobbyResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_lobbies_list - -> crate::models::MatchmakerListLobbiesResponse matchmaker_lobbies_list(include_state) - - -Lists all open lobbies. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**include_state** | Option<**bool**> | | | - -### Return type - -[**crate::models::MatchmakerListLobbiesResponse**](MatchmakerListLobbiesResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_lobbies_ready - -> matchmaker_lobbies_ready() - - -Marks the current lobby as ready to accept connections. Players will not be able to connect to this lobby until the lobby is flagged as ready. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_lobbies_set_closed - -> matchmaker_lobbies_set_closed(matchmaker_lobbies_set_closed_request) - - -If `is_closed` is `true`, the matchmaker will no longer route players to the lobby. Players can still join using the /join endpoint (this can be disabled by the developer by rejecting all new connections after setting the lobby to closed). Does not shutdown the lobby. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**matchmaker_lobbies_set_closed_request** | [**MatchmakerLobbiesSetClosedRequest**](MatchmakerLobbiesSetClosedRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_lobbies_set_state - -> matchmaker_lobbies_set_state(body) - - -Sets the state JSON of the current lobby. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**body** | Option<**serde_json::Value**> | | | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/MatchmakerLobbiesCreateRequest.md b/sdks/api/full/rust-cli/docs/MatchmakerLobbiesCreateRequest.md deleted file mode 100644 index d31bd7ab63..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerLobbiesCreateRequest.md +++ /dev/null @@ -1,18 +0,0 @@ -# MatchmakerLobbiesCreateRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**captcha** | Option<[**crate::models::CaptchaConfig**](CaptchaConfig.md)> | | [optional] -**game_mode** | **String** | | -**lobby_config** | Option<[**serde_json::Value**](.md)> | | [optional] -**max_players** | Option<**i32**> | | [optional] -**publicity** | Option<[**crate::models::MatchmakerCustomLobbyPublicity**](MatchmakerCustomLobbyPublicity.md)> | | [optional] -**region** | Option<**String**> | | [optional] -**tags** | Option<**::std::collections::HashMap**> | | [optional] -**verification_data** | Option<[**serde_json::Value**](.md)> | | [optional] - -[[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-cli/docs/MatchmakerLobbiesFindRequest.md b/sdks/api/full/rust-cli/docs/MatchmakerLobbiesFindRequest.md deleted file mode 100644 index a0cdc87c19..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerLobbiesFindRequest.md +++ /dev/null @@ -1,17 +0,0 @@ -# MatchmakerLobbiesFindRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**captcha** | Option<[**crate::models::CaptchaConfig**](CaptchaConfig.md)> | | [optional] -**game_modes** | **Vec** | | -**max_players** | Option<**i32**> | | [optional] -**prevent_auto_create_lobby** | Option<**bool**> | | [optional] -**regions** | Option<**Vec**> | | [optional] -**tags** | Option<**::std::collections::HashMap**> | | [optional] -**verification_data** | Option<[**serde_json::Value**](.md)> | | [optional] - -[[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-cli/docs/MatchmakerLobbiesJoinRequest.md b/sdks/api/full/rust-cli/docs/MatchmakerLobbiesJoinRequest.md deleted file mode 100644 index afffc6e3b2..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerLobbiesJoinRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# MatchmakerLobbiesJoinRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**captcha** | Option<[**crate::models::CaptchaConfig**](CaptchaConfig.md)> | | [optional] -**lobby_id** | **String** | | -**verification_data** | Option<[**serde_json::Value**](.md)> | | [optional] - -[[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-cli/docs/MatchmakerLobbiesSetClosedRequest.md b/sdks/api/full/rust-cli/docs/MatchmakerLobbiesSetClosedRequest.md deleted file mode 100644 index 687632d9b8..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerLobbiesSetClosedRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# MatchmakerLobbiesSetClosedRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**is_closed** | **bool** | | - -[[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-cli/docs/MatchmakerLobbyInfo.md b/sdks/api/full/rust-cli/docs/MatchmakerLobbyInfo.md deleted file mode 100644 index 02f40bef1a..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerLobbyInfo.md +++ /dev/null @@ -1,18 +0,0 @@ -# MatchmakerLobbyInfo - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_mode_id** | **String** | | -**lobby_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**max_players_direct** | **i32** | | -**max_players_normal** | **i32** | | -**max_players_party** | **i32** | | -**region_id** | **String** | | -**state** | Option<[**serde_json::Value**](.md)> | | [optional] -**total_player_count** | **i32** | | - -[[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-cli/docs/MatchmakerPlayersApi.md b/sdks/api/full/rust-cli/docs/MatchmakerPlayersApi.md deleted file mode 100644 index 6e2549b32b..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerPlayersApi.md +++ /dev/null @@ -1,98 +0,0 @@ -# \MatchmakerPlayersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**matchmaker_players_connected**](MatchmakerPlayersApi.md#matchmaker_players_connected) | **POST** /matchmaker/players/connected | -[**matchmaker_players_disconnected**](MatchmakerPlayersApi.md#matchmaker_players_disconnected) | **POST** /matchmaker/players/disconnected | -[**matchmaker_players_get_statistics**](MatchmakerPlayersApi.md#matchmaker_players_get_statistics) | **GET** /matchmaker/players/statistics | - - - -## matchmaker_players_connected - -> matchmaker_players_connected(matchmaker_players_connected_request) - - -Validates the player token is valid and has not already been consumed then marks the player as connected. # Player Tokens and Reserved Slots Player tokens reserve a spot in the lobby until they expire. This allows for precise matchmaking up to exactly the lobby's player limit, which is important for games with small lobbies and a high influx of players. By calling this endpoint with the player token, the player's spot is marked as connected and will not expire. If this endpoint is never called, the player's token will expire and this spot will be filled by another player. # Anti-Botting Player tokens are only issued by caling `lobbies.join`, calling `lobbies.find`, or from the `GlobalEventMatchmakerLobbyJoin` event. These endpoints have anti-botting measures (i.e. enforcing max player limits, captchas, and detecting bots), so valid player tokens provide some confidence that the player is not a bot. Therefore, it's important to make sure the token is valid by waiting for this endpoint to return OK before allowing the connected socket to do anything else. If this endpoint returns an error, the socket should be disconnected immediately. # How to Transmit the Player Token The client is responsible for acquiring the player token by caling `lobbies.join`, calling `lobbies.find`, or from the `GlobalEventMatchmakerLobbyJoin` event. Beyond that, it's up to the developer how the player token is transmitted to the lobby. If using WebSockets, the player token can be transmitted as a query parameter. Otherwise, the player token will likely be automatically sent by the client once the socket opens. As mentioned above, nothing else should happen until the player token is validated. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**matchmaker_players_connected_request** | [**MatchmakerPlayersConnectedRequest**](MatchmakerPlayersConnectedRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_players_disconnected - -> matchmaker_players_disconnected(matchmaker_players_connected_request) - - -Marks a player as disconnected. # Ghost Players If players are not marked as disconnected, lobbies will result with \"ghost players\" that the matchmaker thinks exist but are no longer connected to the lobby. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**matchmaker_players_connected_request** | [**MatchmakerPlayersConnectedRequest**](MatchmakerPlayersConnectedRequest.md) | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## matchmaker_players_get_statistics - -> crate::models::MatchmakerGetStatisticsResponse matchmaker_players_get_statistics() - - -Gives matchmaker statistics about the players in game. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::MatchmakerGetStatisticsResponse**](MatchmakerGetStatisticsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/MatchmakerPlayersConnectedRequest.md b/sdks/api/full/rust-cli/docs/MatchmakerPlayersConnectedRequest.md deleted file mode 100644 index b4b004fe35..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerPlayersConnectedRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# MatchmakerPlayersConnectedRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**player_token** | **String** | | - -[[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-cli/docs/MatchmakerRegionInfo.md b/sdks/api/full/rust-cli/docs/MatchmakerRegionInfo.md deleted file mode 100644 index 10a2ff6747..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerRegionInfo.md +++ /dev/null @@ -1,15 +0,0 @@ -# MatchmakerRegionInfo - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**datacenter_coord** | [**crate::models::GeoCoord**](GeoCoord.md) | | -**datacenter_distance_from_client** | [**crate::models::GeoDistance**](GeoDistance.md) | | -**provider_display_name** | **String** | Represent a resource's readable display name. | -**region_display_name** | **String** | Represent a resource's readable display name. | -**region_id** | **String** | 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. | - -[[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-cli/docs/MatchmakerRegionStatistics.md b/sdks/api/full/rust-cli/docs/MatchmakerRegionStatistics.md deleted file mode 100644 index ab5cdba9f8..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerRegionStatistics.md +++ /dev/null @@ -1,11 +0,0 @@ -# MatchmakerRegionStatistics - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**player_count** | **i64** | | - -[[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-cli/docs/MatchmakerRegionsApi.md b/sdks/api/full/rust-cli/docs/MatchmakerRegionsApi.md deleted file mode 100644 index 8855453e63..0000000000 --- a/sdks/api/full/rust-cli/docs/MatchmakerRegionsApi.md +++ /dev/null @@ -1,36 +0,0 @@ -# \MatchmakerRegionsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**matchmaker_regions_list**](MatchmakerRegionsApi.md#matchmaker_regions_list) | **GET** /matchmaker/regions | - - - -## matchmaker_regions_list - -> crate::models::MatchmakerListRegionsResponse matchmaker_regions_list() - - -Returns a list of regions available to this namespace. Regions are sorted by most optimal to least optimal. The player's IP address is used to calculate the regions' optimality. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::MatchmakerListRegionsResponse**](MatchmakerListRegionsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/PortalGamesApi.md b/sdks/api/full/rust-cli/docs/PortalGamesApi.md deleted file mode 100644 index 9cac3ddd4a..0000000000 --- a/sdks/api/full/rust-cli/docs/PortalGamesApi.md +++ /dev/null @@ -1,40 +0,0 @@ -# \PortalGamesApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**portal_games_get_game_profile**](PortalGamesApi.md#portal_games_get_game_profile) | **GET** /portal/games/{game_name_id}/profile | - - - -## portal_games_get_game_profile - -> crate::models::PortalGetGameProfileResponse portal_games_get_game_profile(game_name_id, watch_index) - - -Returns a game profile. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_name_id** | **String** | 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] | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::PortalGetGameProfileResponse**](PortalGetGameProfileResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/PortalGetGameProfileResponse.md b/sdks/api/full/rust-cli/docs/PortalGetGameProfileResponse.md deleted file mode 100644 index ed1c299add..0000000000 --- a/sdks/api/full/rust-cli/docs/PortalGetGameProfileResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# PortalGetGameProfileResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game** | [**crate::models::GameProfile**](GameProfile.md) | | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/PortalGetSuggestedGamesResponse.md b/sdks/api/full/rust-cli/docs/PortalGetSuggestedGamesResponse.md deleted file mode 100644 index e446d3b664..0000000000 --- a/sdks/api/full/rust-cli/docs/PortalGetSuggestedGamesResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# PortalGetSuggestedGamesResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**games** | [**Vec**](GameSummary.md) | A list of game summaries. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/PortalNotificationRegisterFirebaseService.md b/sdks/api/full/rust-cli/docs/PortalNotificationRegisterFirebaseService.md deleted file mode 100644 index 6761e395f9..0000000000 --- a/sdks/api/full/rust-cli/docs/PortalNotificationRegisterFirebaseService.md +++ /dev/null @@ -1,11 +0,0 @@ -# PortalNotificationRegisterFirebaseService - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**access_key** | **String** | | - -[[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-cli/docs/PortalNotificationRegisterService.md b/sdks/api/full/rust-cli/docs/PortalNotificationRegisterService.md deleted file mode 100644 index 00aade930f..0000000000 --- a/sdks/api/full/rust-cli/docs/PortalNotificationRegisterService.md +++ /dev/null @@ -1,11 +0,0 @@ -# PortalNotificationRegisterService - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**firebase** | Option<[**crate::models::PortalNotificationRegisterFirebaseService**](PortalNotificationRegisterFirebaseService.md)> | | [optional] - -[[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-cli/docs/PortalNotificationUnregisterService.md b/sdks/api/full/rust-cli/docs/PortalNotificationUnregisterService.md deleted file mode 100644 index e6748b66d5..0000000000 --- a/sdks/api/full/rust-cli/docs/PortalNotificationUnregisterService.md +++ /dev/null @@ -1,10 +0,0 @@ -# PortalNotificationUnregisterService - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ProvisionDatacentersApi.md b/sdks/api/full/rust-cli/docs/ProvisionDatacentersApi.md deleted file mode 100644 index f2655df3b7..0000000000 --- a/sdks/api/full/rust-cli/docs/ProvisionDatacentersApi.md +++ /dev/null @@ -1,66 +0,0 @@ -# \ProvisionDatacentersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**provision_datacenters_get_servers**](ProvisionDatacentersApi.md#provision_datacenters_get_servers) | **GET** /datacenters/{datacenter_id}/servers | -[**provision_datacenters_get_tls**](ProvisionDatacentersApi.md#provision_datacenters_get_tls) | **GET** /datacenters/{datacenter_id}/tls | - - - -## provision_datacenters_get_servers - -> crate::models::ProvisionDatacentersGetServersResponse provision_datacenters_get_servers(datacenter_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**datacenter_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::ProvisionDatacentersGetServersResponse**](ProvisionDatacentersGetServersResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## provision_datacenters_get_tls - -> crate::models::ProvisionDatacentersGetTlsResponse provision_datacenters_get_tls(datacenter_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**datacenter_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::ProvisionDatacentersGetTlsResponse**](ProvisionDatacentersGetTlsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ProvisionDatacentersGetServersResponse.md b/sdks/api/full/rust-cli/docs/ProvisionDatacentersGetServersResponse.md deleted file mode 100644 index 521fd0ca6d..0000000000 --- a/sdks/api/full/rust-cli/docs/ProvisionDatacentersGetServersResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ProvisionDatacentersGetServersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**servers** | [**Vec**](ProvisionServer.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-cli/docs/ProvisionDatacentersGetTlsResponse.md b/sdks/api/full/rust-cli/docs/ProvisionDatacentersGetTlsResponse.md deleted file mode 100644 index 8c3f97c386..0000000000 --- a/sdks/api/full/rust-cli/docs/ProvisionDatacentersGetTlsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ProvisionDatacentersGetTlsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**job_cert_pem** | **String** | | -**job_private_key_pem** | **String** | | - -[[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-cli/docs/ProvisionPoolType.md b/sdks/api/full/rust-cli/docs/ProvisionPoolType.md deleted file mode 100644 index 8f7fcd14e5..0000000000 --- a/sdks/api/full/rust-cli/docs/ProvisionPoolType.md +++ /dev/null @@ -1,10 +0,0 @@ -# ProvisionPoolType - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ProvisionServer.md b/sdks/api/full/rust-cli/docs/ProvisionServer.md deleted file mode 100644 index f06681bee7..0000000000 --- a/sdks/api/full/rust-cli/docs/ProvisionServer.md +++ /dev/null @@ -1,15 +0,0 @@ -# ProvisionServer - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**datacenter_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**pool_type** | [**crate::models::ProvisionPoolType**](ProvisionPoolType.md) | | -**public_ip** | Option<**String**> | | [optional] -**server_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**vlan_ip** | Option<**String**> | | [optional] - -[[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-cli/docs/ProvisionServersApi.md b/sdks/api/full/rust-cli/docs/ProvisionServersApi.md deleted file mode 100644 index e67db2f3bb..0000000000 --- a/sdks/api/full/rust-cli/docs/ProvisionServersApi.md +++ /dev/null @@ -1,37 +0,0 @@ -# \ProvisionServersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**provision_servers_get_info**](ProvisionServersApi.md#provision_servers_get_info) | **GET** /servers/{ip} | - - - -## provision_servers_get_info - -> crate::models::ProvisionServersGetInfoResponse provision_servers_get_info(ip) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**ip** | **String** | | [required] | - -### Return type - -[**crate::models::ProvisionServersGetInfoResponse**](ProvisionServersGetInfoResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ProvisionServersGetInfoResponse.md b/sdks/api/full/rust-cli/docs/ProvisionServersGetInfoResponse.md deleted file mode 100644 index fd92faf01d..0000000000 --- a/sdks/api/full/rust-cli/docs/ProvisionServersGetInfoResponse.md +++ /dev/null @@ -1,16 +0,0 @@ -# ProvisionServersGetInfoResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cluster_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**datacenter_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**name** | **String** | | -**public_ip** | **String** | | -**server_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**vlan_ip** | **String** | | - -[[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-cli/docs/ServersApi.md b/sdks/api/full/rust-cli/docs/ServersApi.md deleted file mode 100644 index b4bba6ce56..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersApi.md +++ /dev/null @@ -1,143 +0,0 @@ -# \ServersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**servers_create**](ServersApi.md#servers_create) | **POST** /games/{game_id}/environments/{environment_id}/servers | -[**servers_destroy**](ServersApi.md#servers_destroy) | **DELETE** /games/{game_id}/environments/{environment_id}/servers/{server_id} | -[**servers_get**](ServersApi.md#servers_get) | **GET** /games/{game_id}/environments/{environment_id}/servers/{server_id} | -[**servers_list**](ServersApi.md#servers_list) | **GET** /games/{game_id}/environments/{environment_id}/servers | - - - -## servers_create - -> crate::models::ServersCreateServerResponse servers_create(game_id, environment_id, servers_create_server_request) - - -Create a new dynamic server. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**servers_create_server_request** | [**ServersCreateServerRequest**](ServersCreateServerRequest.md) | | [required] | - -### Return type - -[**crate::models::ServersCreateServerResponse**](ServersCreateServerResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## servers_destroy - -> serde_json::Value servers_destroy(game_id, environment_id, server_id, override_kill_timeout) - - -Destroy a dynamic server. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**server_id** | **uuid::Uuid** | The id of the server to destroy | [required] | -**override_kill_timeout** | Option<**i64**> | The duration to wait for in milliseconds before killing the server. This should be used to override the default kill timeout if a faster time is needed, say for ignoring a graceful shutdown. | | - -### Return type - -[**serde_json::Value**](serde_json::Value.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## servers_get - -> crate::models::ServersGetServerResponse servers_get(game_id, environment_id, server_id) - - -Gets a dynamic server. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**server_id** | **uuid::Uuid** | The id of the server to destroy | [required] | - -### Return type - -[**crate::models::ServersGetServerResponse**](ServersGetServerResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## servers_list - -> crate::models::ServersListServersResponse servers_list(game_id, environment_id, tags_json, include_destroyed, cursor) - - -Lists all servers associated with the token used. Can be filtered by tags in the query string. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**tags_json** | Option<**String**> | | | -**include_destroyed** | Option<**bool**> | | | -**cursor** | Option<**uuid::Uuid**> | | | - -### Return type - -[**crate::models::ServersListServersResponse**](ServersListServersResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ServersBuild.md b/sdks/api/full/rust-cli/docs/ServersBuild.md deleted file mode 100644 index 3b59873414..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersBuild.md +++ /dev/null @@ -1,15 +0,0 @@ -# ServersBuild - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | Unsigned 64 bit integer. | -**created_at** | **String** | RFC3339 timestamp | -**id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**name** | **String** | | -**tags** | **::std::collections::HashMap** | Tags of this build | - -[[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-cli/docs/ServersBuildCompression.md b/sdks/api/full/rust-cli/docs/ServersBuildCompression.md deleted file mode 100644 index 3e1b76a053..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersBuildCompression.md +++ /dev/null @@ -1,10 +0,0 @@ -# ServersBuildCompression - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ServersBuildKind.md b/sdks/api/full/rust-cli/docs/ServersBuildKind.md deleted file mode 100644 index 6fc399d0e0..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersBuildKind.md +++ /dev/null @@ -1,10 +0,0 @@ -# ServersBuildKind - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ServersBuildsApi.md b/sdks/api/full/rust-cli/docs/ServersBuildsApi.md deleted file mode 100644 index e098d03a16..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersBuildsApi.md +++ /dev/null @@ -1,173 +0,0 @@ -# \ServersBuildsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**servers_builds_complete**](ServersBuildsApi.md#servers_builds_complete) | **POST** /games/{game_id}/environments/{environment_id}/builds/{build_id}/complete | -[**servers_builds_get**](ServersBuildsApi.md#servers_builds_get) | **GET** /games/{game_id}/environments/{environment_id}/builds/{build_id} | -[**servers_builds_list**](ServersBuildsApi.md#servers_builds_list) | **GET** /games/{game_id}/environments/{environment_id}/builds | -[**servers_builds_patch_tags**](ServersBuildsApi.md#servers_builds_patch_tags) | **PATCH** /games/{game_id}/environments/{environment_id}/builds/{build_id}/tags | -[**servers_builds_prepare**](ServersBuildsApi.md#servers_builds_prepare) | **POST** /games/{game_id}/environments/{environment_id}/builds/prepare | - - - -## servers_builds_complete - -> servers_builds_complete(game_id, environment_id, build_id) - - -Marks an upload as complete. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**build_id** | **uuid::Uuid** | | [required] | - -### Return type - - (empty response body) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## servers_builds_get - -> crate::models::ServersGetBuildResponse servers_builds_get(game_id, environment_id, build_id, tags_json) - - -Lists all builds of the game associated with the token used. Can be filtered by tags in the query string. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**build_id** | **uuid::Uuid** | | [required] | -**tags_json** | Option<**String**> | | | - -### Return type - -[**crate::models::ServersGetBuildResponse**](ServersGetBuildResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## servers_builds_list - -> crate::models::ServersListBuildsResponse servers_builds_list(game_id, environment_id, tags_json) - - -Lists all builds of the game associated with the token used. Can be filtered by tags in the query string. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**tags_json** | Option<**String**> | | | - -### Return type - -[**crate::models::ServersListBuildsResponse**](ServersListBuildsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## servers_builds_patch_tags - -> serde_json::Value servers_builds_patch_tags(game_id, environment_id, build_id, servers_patch_build_tags_request) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**build_id** | **uuid::Uuid** | | [required] | -**servers_patch_build_tags_request** | [**ServersPatchBuildTagsRequest**](ServersPatchBuildTagsRequest.md) | | [required] | - -### Return type - -[**serde_json::Value**](serde_json::Value.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - - -## servers_builds_prepare - -> crate::models::ServersCreateBuildResponse servers_builds_prepare(game_id, environment_id, servers_create_build_request) - - -Creates a new game build for the given game. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**servers_create_build_request** | [**ServersCreateBuildRequest**](ServersCreateBuildRequest.md) | | [required] | - -### Return type - -[**crate::models::ServersCreateBuildResponse**](ServersCreateBuildResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ServersCreateBuildRequest.md b/sdks/api/full/rust-cli/docs/ServersCreateBuildRequest.md deleted file mode 100644 index b0c55b0bc0..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersCreateBuildRequest.md +++ /dev/null @@ -1,17 +0,0 @@ -# ServersCreateBuildRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**compression** | Option<[**crate::models::ServersBuildCompression**](ServersBuildCompression.md)> | | [optional] -**image_file** | [**crate::models::UploadPrepareFile**](UploadPrepareFile.md) | | -**image_tag** | **String** | A tag given to the game build. | -**kind** | Option<[**crate::models::ServersBuildKind**](ServersBuildKind.md)> | | [optional] -**multipart_upload** | Option<**bool**> | | [optional] -**name** | **String** | | -**prewarm_datacenters** | Option<[**Vec**](uuid::Uuid.md)> | | [optional] - -[[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-cli/docs/ServersCreateBuildResponse.md b/sdks/api/full/rust-cli/docs/ServersCreateBuildResponse.md deleted file mode 100644 index dde77ec612..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersCreateBuildResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# ServersCreateBuildResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build** | [**uuid::Uuid**](uuid::Uuid.md) | | -**image_presigned_request** | Option<[**crate::models::UploadPresignedRequest**](UploadPresignedRequest.md)> | | [optional] -**image_presigned_requests** | Option<[**Vec**](UploadPresignedRequest.md)> | | [optional] - -[[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-cli/docs/ServersCreateServerNetworkRequest.md b/sdks/api/full/rust-cli/docs/ServersCreateServerNetworkRequest.md deleted file mode 100644 index 633ac595fa..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersCreateServerNetworkRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# ServersCreateServerNetworkRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**mode** | Option<[**crate::models::ServersNetworkMode**](ServersNetworkMode.md)> | | [optional] -**ports** | [**::std::collections::HashMap**](ServersCreateServerPortRequest.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-cli/docs/ServersCreateServerPortRequest.md b/sdks/api/full/rust-cli/docs/ServersCreateServerPortRequest.md deleted file mode 100644 index 97c550c60d..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersCreateServerPortRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# ServersCreateServerPortRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**internal_port** | Option<**i32**> | | [optional] -**protocol** | [**crate::models::ServersPortProtocol**](ServersPortProtocol.md) | | -**routing** | Option<[**crate::models::ServersPortRouting**](ServersPortRouting.md)> | | [optional] - -[[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-cli/docs/ServersCreateServerRequest.md b/sdks/api/full/rust-cli/docs/ServersCreateServerRequest.md deleted file mode 100644 index b4fa0646ae..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersCreateServerRequest.md +++ /dev/null @@ -1,16 +0,0 @@ -# ServersCreateServerRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**datacenter** | [**uuid::Uuid**](uuid::Uuid.md) | | -**lifecycle** | Option<[**crate::models::ServersLifecycle**](ServersLifecycle.md)> | | [optional] -**network** | [**crate::models::ServersCreateServerNetworkRequest**](ServersCreateServerNetworkRequest.md) | | -**resources** | [**crate::models::ServersResources**](ServersResources.md) | | -**runtime** | [**crate::models::ServersCreateServerRuntimeRequest**](ServersCreateServerRuntimeRequest.md) | | -**tags** | Option<[**serde_json::Value**](.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-cli/docs/ServersCreateServerResponse.md b/sdks/api/full/rust-cli/docs/ServersCreateServerResponse.md deleted file mode 100644 index 29bae37bf7..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersCreateServerResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ServersCreateServerResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**server** | [**crate::models::ServersServer**](ServersServer.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-cli/docs/ServersCreateServerRuntimeRequest.md b/sdks/api/full/rust-cli/docs/ServersCreateServerRuntimeRequest.md deleted file mode 100644 index c23873def3..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersCreateServerRuntimeRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# ServersCreateServerRuntimeRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**arguments** | Option<**Vec**> | | [optional] -**build** | [**uuid::Uuid**](uuid::Uuid.md) | | -**environment** | Option<**::std::collections::HashMap**> | | [optional] - -[[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-cli/docs/ServersDatacenter.md b/sdks/api/full/rust-cli/docs/ServersDatacenter.md deleted file mode 100644 index c8161ed9c1..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersDatacenter.md +++ /dev/null @@ -1,13 +0,0 @@ -# ServersDatacenter - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**name** | **String** | | -**slug** | **String** | | - -[[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-cli/docs/ServersDatacentersApi.md b/sdks/api/full/rust-cli/docs/ServersDatacentersApi.md deleted file mode 100644 index 565fb365df..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersDatacentersApi.md +++ /dev/null @@ -1,38 +0,0 @@ -# \ServersDatacentersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**servers_datacenters_list**](ServersDatacentersApi.md#servers_datacenters_list) | **GET** /games/{game_id}/environments/{environment_id}/datacenters | - - - -## servers_datacenters_list - -> crate::models::ServersListDatacentersResponse servers_datacenters_list(game_id, environment_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::ServersListDatacentersResponse**](ServersListDatacentersResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ServersGetBuildResponse.md b/sdks/api/full/rust-cli/docs/ServersGetBuildResponse.md deleted file mode 100644 index fdadac8aaf..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersGetBuildResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ServersGetBuildResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build** | [**crate::models::ServersBuild**](ServersBuild.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-cli/docs/ServersGetServerLogsResponse.md b/sdks/api/full/rust-cli/docs/ServersGetServerLogsResponse.md deleted file mode 100644 index ed594b4b5f..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersGetServerLogsResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# ServersGetServerLogsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**lines** | **Vec** | Sorted old to new. | -**timestamps** | **Vec** | Sorted old to new. | -**watch** | [**crate::models::WatchResponse**](WatchResponse.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-cli/docs/ServersGetServerResponse.md b/sdks/api/full/rust-cli/docs/ServersGetServerResponse.md deleted file mode 100644 index f5e5e42f86..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersGetServerResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ServersGetServerResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**server** | [**crate::models::ServersServer**](ServersServer.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-cli/docs/ServersLifecycle.md b/sdks/api/full/rust-cli/docs/ServersLifecycle.md deleted file mode 100644 index 7f0b0c0a62..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersLifecycle.md +++ /dev/null @@ -1,11 +0,0 @@ -# ServersLifecycle - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**kill_timeout** | Option<**i64**> | 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. | [optional] - -[[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-cli/docs/ServersListBuildsResponse.md b/sdks/api/full/rust-cli/docs/ServersListBuildsResponse.md deleted file mode 100644 index b59db66aaf..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersListBuildsResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ServersListBuildsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**builds** | [**Vec**](ServersBuild.md) | A list of builds for the game associated with the token. | - -[[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-cli/docs/ServersListDatacentersResponse.md b/sdks/api/full/rust-cli/docs/ServersListDatacentersResponse.md deleted file mode 100644 index de8f16f5ee..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersListDatacentersResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ServersListDatacentersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**datacenters** | [**Vec**](ServersDatacenter.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-cli/docs/ServersListServersResponse.md b/sdks/api/full/rust-cli/docs/ServersListServersResponse.md deleted file mode 100644 index b1c8e2d66a..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersListServersResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ServersListServersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**servers** | [**Vec**](ServersServer.md) | A list of servers for the game associated with the token. | - -[[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-cli/docs/ServersLogStream.md b/sdks/api/full/rust-cli/docs/ServersLogStream.md deleted file mode 100644 index 9706b84a3a..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersLogStream.md +++ /dev/null @@ -1,10 +0,0 @@ -# ServersLogStream - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ServersLogsApi.md b/sdks/api/full/rust-cli/docs/ServersLogsApi.md deleted file mode 100644 index 4727cba190..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersLogsApi.md +++ /dev/null @@ -1,43 +0,0 @@ -# \ServersLogsApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**servers_logs_get**](ServersLogsApi.md#servers_logs_get) | **GET** /games/{game_id}/environments/{environment_id}/servers/{server_id}/logs | - - - -## servers_logs_get - -> crate::models::ServersGetServerLogsResponse servers_logs_get(game_id, environment_id, server_id, stream, watch_index) - - -Returns the logs for a given server. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**game_id** | **uuid::Uuid** | | [required] | -**environment_id** | **uuid::Uuid** | | [required] | -**server_id** | **uuid::Uuid** | | [required] | -**stream** | [**ServersLogStream**](.md) | | [required] | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | - -### Return type - -[**crate::models::ServersGetServerLogsResponse**](ServersGetServerLogsResponse.md) - -### Authorization - -[BearerAuth](../README.md#BearerAuth) - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/sdks/api/full/rust-cli/docs/ServersNetwork.md b/sdks/api/full/rust-cli/docs/ServersNetwork.md deleted file mode 100644 index e1b819556d..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersNetwork.md +++ /dev/null @@ -1,12 +0,0 @@ -# ServersNetwork - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**mode** | Option<[**crate::models::ServersNetworkMode**](ServersNetworkMode.md)> | | [optional] -**ports** | [**::std::collections::HashMap**](ServersPort.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-cli/docs/ServersNetworkMode.md b/sdks/api/full/rust-cli/docs/ServersNetworkMode.md deleted file mode 100644 index 9fdd3e28c1..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersNetworkMode.md +++ /dev/null @@ -1,10 +0,0 @@ -# ServersNetworkMode - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ServersPatchBuildTagsRequest.md b/sdks/api/full/rust-cli/docs/ServersPatchBuildTagsRequest.md deleted file mode 100644 index fc559cc4cf..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersPatchBuildTagsRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# ServersPatchBuildTagsRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**exclusive_tags** | Option<**Vec**> | Removes the given tag keys from all other builds. | [optional] -**tags** | Option<[**serde_json::Value**](.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-cli/docs/ServersPort.md b/sdks/api/full/rust-cli/docs/ServersPort.md deleted file mode 100644 index 5ade4ddd58..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersPort.md +++ /dev/null @@ -1,15 +0,0 @@ -# ServersPort - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**internal_port** | Option<**i32**> | | [optional] -**protocol** | [**crate::models::ServersPortProtocol**](ServersPortProtocol.md) | | -**public_hostname** | Option<**String**> | | [optional] -**public_port** | Option<**i32**> | | [optional] -**routing** | [**crate::models::ServersPortRouting**](ServersPortRouting.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-cli/docs/ServersPortProtocol.md b/sdks/api/full/rust-cli/docs/ServersPortProtocol.md deleted file mode 100644 index 595d11df8f..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersPortProtocol.md +++ /dev/null @@ -1,10 +0,0 @@ -# ServersPortProtocol - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[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-cli/docs/ServersPortRouting.md b/sdks/api/full/rust-cli/docs/ServersPortRouting.md deleted file mode 100644 index 1ac474c230..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersPortRouting.md +++ /dev/null @@ -1,12 +0,0 @@ -# ServersPortRouting - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_guard** | Option<[**serde_json::Value**](.md)> | | [optional] -**host** | Option<[**serde_json::Value**](.md)> | | [optional] - -[[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-cli/docs/ServersResources.md b/sdks/api/full/rust-cli/docs/ServersResources.md deleted file mode 100644 index 3b3f9d6882..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersResources.md +++ /dev/null @@ -1,12 +0,0 @@ -# ServersResources - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**cpu** | **i32** | The number of CPU cores in millicores, or 1/1000 of a core. For example, 1/8 of a core would be 125 millicores, and 1 core would be 1000 millicores. | -**memory** | **i32** | The amount of memory in megabytes | - -[[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-cli/docs/ServersRuntime.md b/sdks/api/full/rust-cli/docs/ServersRuntime.md deleted file mode 100644 index 78fbaa28dc..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersRuntime.md +++ /dev/null @@ -1,13 +0,0 @@ -# ServersRuntime - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**arguments** | Option<**Vec**> | | [optional] -**build** | [**uuid::Uuid**](uuid::Uuid.md) | | -**environment** | Option<**::std::collections::HashMap**> | | [optional] - -[[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-cli/docs/ServersServer.md b/sdks/api/full/rust-cli/docs/ServersServer.md deleted file mode 100644 index da090fe822..0000000000 --- a/sdks/api/full/rust-cli/docs/ServersServer.md +++ /dev/null @@ -1,21 +0,0 @@ -# ServersServer - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**created_at** | **i64** | | -**datacenter** | [**uuid::Uuid**](uuid::Uuid.md) | | -**destroyed_at** | Option<**i64**> | | [optional] -**environment** | [**uuid::Uuid**](uuid::Uuid.md) | | -**id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**lifecycle** | [**crate::models::ServersLifecycle**](ServersLifecycle.md) | | -**network** | [**crate::models::ServersNetwork**](ServersNetwork.md) | | -**resources** | [**crate::models::ServersResources**](ServersResources.md) | | -**runtime** | [**crate::models::ServersRuntime**](ServersRuntime.md) | | -**started_at** | Option<**i64**> | | [optional] -**tags** | Option<[**serde_json::Value**](.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-cli/docs/UploadPrepareFile.md b/sdks/api/full/rust-cli/docs/UploadPrepareFile.md deleted file mode 100644 index 1d9005c4f8..0000000000 --- a/sdks/api/full/rust-cli/docs/UploadPrepareFile.md +++ /dev/null @@ -1,13 +0,0 @@ -# UploadPrepareFile - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**content_length** | **i64** | Unsigned 64 bit integer. | -**content_type** | Option<**String**> | The MIME type of the file. | [optional] -**path** | **String** | The path/filename of the file. | - -[[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-cli/docs/UploadPresignedRequest.md b/sdks/api/full/rust-cli/docs/UploadPresignedRequest.md deleted file mode 100644 index dcefbbcaba..0000000000 --- a/sdks/api/full/rust-cli/docs/UploadPresignedRequest.md +++ /dev/null @@ -1,14 +0,0 @@ -# UploadPresignedRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**byte_offset** | **i64** | The byte offset for this multipart chunk. Always 0 if not a multipart upload. | -**content_length** | **i64** | Expected size of this upload. | -**path** | **String** | The name of the file to upload. This is the same as the one given in the upload prepare file. | -**url** | **String** | The URL of the presigned request for which to upload your file to. | - -[[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-cli/docs/ValidationError.md b/sdks/api/full/rust-cli/docs/ValidationError.md deleted file mode 100644 index 600f96792f..0000000000 --- a/sdks/api/full/rust-cli/docs/ValidationError.md +++ /dev/null @@ -1,11 +0,0 @@ -# ValidationError - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**path** | **Vec** | A list of strings denoting the origin of a validation error. | - -[[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-cli/docs/WatchResponse.md b/sdks/api/full/rust-cli/docs/WatchResponse.md deleted file mode 100644 index 9b64aba4f0..0000000000 --- a/sdks/api/full/rust-cli/docs/WatchResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# WatchResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**index** | **String** | Index indicating the version of the data responded. Pass this to `WatchQuery` to block and wait for the next response. | - -[[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-cli/git_push.sh b/sdks/api/full/rust-cli/git_push.sh deleted file mode 100644 index f53a75d4fa..0000000000 --- a/sdks/api/full/rust-cli/git_push.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ -# -# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" - -git_user_id=$1 -git_repo_id=$2 -release_note=$3 -git_host=$4 - -if [ "$git_host" = "" ]; then - git_host="github.com" - echo "[INFO] No command line input provided. Set \$git_host to $git_host" -fi - -if [ "$git_user_id" = "" ]; then - git_user_id="GIT_USER_ID" - echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" -fi - -if [ "$git_repo_id" = "" ]; then - git_repo_id="GIT_REPO_ID" - echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" -fi - -if [ "$release_note" = "" ]; then - release_note="Minor update" - echo "[INFO] No command line input provided. Set \$release_note to $release_note" -fi - -# Initialize the local directory as a Git repository -git init - -# Adds the files in the local repository and stages them for commit. -git add . - -# Commits the tracked changes and prepares them to be pushed to a remote repository. -git commit -m "$release_note" - -# Sets the new remote -git_remote=$(git remote) -if [ "$git_remote" = "" ]; then # git remote not defined - - if [ "$GIT_TOKEN" = "" ]; then - echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." - git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git - else - git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git - fi - -fi - -git pull origin master - -# Pushes (Forces) the changes in the local repository up to the remote repository -echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" -git push origin master 2>&1 | grep -v 'To https' diff --git a/sdks/api/full/rust-cli/src/apis/actor_api.rs b/sdks/api/full/rust-cli/src/apis/actor_api.rs deleted file mode 100644 index 329ce72a09..0000000000 --- a/sdks/api/full/rust-cli/src/apis/actor_api.rs +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`actor_create`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorCreateError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_destroy`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorDestroyError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorGetError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_upgrade`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorUpgradeError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_upgrade_all`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorUpgradeAllError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Create a new dynamic actor. -pub async fn actor_create(configuration: &configuration::Configuration, actor_create_actor_request: crate::models::ActorCreateActorRequest, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/actors", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&actor_create_actor_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Destroy a dynamic actor. -pub async fn actor_destroy(configuration: &configuration::Configuration, actor: &str, project: Option<&str>, environment: Option<&str>, override_kill_timeout: Option) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/actors/{actor}", local_var_configuration.base_path, actor=crate::apis::urlencode(actor)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = override_kill_timeout { - local_var_req_builder = local_var_req_builder.query(&[("override_kill_timeout", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Gets a dynamic actor. -pub async fn actor_get(configuration: &configuration::Configuration, actor: &str, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/actors/{actor}", local_var_configuration.base_path, actor=crate::apis::urlencode(actor)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists all actors associated with the token used. Can be filtered by tags in the query string. -pub async fn actor_list(configuration: &configuration::Configuration, project: Option<&str>, environment: Option<&str>, tags_json: Option<&str>, include_destroyed: Option, cursor: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/actors", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = tags_json { - local_var_req_builder = local_var_req_builder.query(&[("tags_json", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = include_destroyed { - local_var_req_builder = local_var_req_builder.query(&[("include_destroyed", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = cursor { - local_var_req_builder = local_var_req_builder.query(&[("cursor", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Upgrades a dynamic actor. -pub async fn actor_upgrade(configuration: &configuration::Configuration, actor: &str, actor_upgrade_actor_request: crate::models::ActorUpgradeActorRequest, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/actors/{actor}/upgrade", local_var_configuration.base_path, actor=crate::apis::urlencode(actor)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&actor_upgrade_actor_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Upgrades a dynamic actor. -pub async fn actor_upgrade_all(configuration: &configuration::Configuration, actor_upgrade_all_actors_request: crate::models::ActorUpgradeAllActorsRequest, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/actors/upgrade", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&actor_upgrade_all_actors_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/actor_builds_api.rs b/sdks/api/full/rust-cli/src/apis/actor_builds_api.rs deleted file mode 100644 index ed106893ef..0000000000 --- a/sdks/api/full/rust-cli/src/apis/actor_builds_api.rs +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`actor_builds_complete`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorBuildsCompleteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_builds_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorBuildsGetError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_builds_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorBuildsListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_builds_patch_tags`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorBuildsPatchTagsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`actor_builds_prepare`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorBuildsPrepareError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Marks an upload as complete. -pub async fn actor_builds_complete(configuration: &configuration::Configuration, build: &str, project: Option<&str>, environment: Option<&str>) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/builds/{build}/complete", local_var_configuration.base_path, build=crate::apis::urlencode(build)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Get a build. -pub async fn actor_builds_get(configuration: &configuration::Configuration, build: &str, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/builds/{build}", local_var_configuration.base_path, build=crate::apis::urlencode(build)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists all builds of the project associated with the token used. Can be filtered by tags in the query string. -pub async fn actor_builds_list(configuration: &configuration::Configuration, project: Option<&str>, environment: Option<&str>, tags_json: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/builds", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = tags_json { - local_var_req_builder = local_var_req_builder.query(&[("tags_json", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn actor_builds_patch_tags(configuration: &configuration::Configuration, build: &str, actor_patch_build_tags_request: crate::models::ActorPatchBuildTagsRequest, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/builds/{build}/tags", local_var_configuration.base_path, build=crate::apis::urlencode(build)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&actor_patch_build_tags_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Creates a new project build for the given project. -pub async fn actor_builds_prepare(configuration: &configuration::Configuration, actor_prepare_build_request: crate::models::ActorPrepareBuildRequest, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/builds/prepare", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&actor_prepare_build_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/actor_logs_api.rs b/sdks/api/full/rust-cli/src/apis/actor_logs_api.rs deleted file mode 100644 index 461db7db1d..0000000000 --- a/sdks/api/full/rust-cli/src/apis/actor_logs_api.rs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`actor_logs_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorLogsGetError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns the logs for a given actor. -pub async fn actor_logs_get(configuration: &configuration::Configuration, actor: &str, stream: crate::models::ActorLogStream, project: Option<&str>, environment: Option<&str>, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/actors/{actor}/logs", local_var_configuration.base_path, actor=crate::apis::urlencode(actor)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - local_var_req_builder = local_var_req_builder.query(&[("stream", &stream.to_string())]); - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/actor_regions_api.rs b/sdks/api/full/rust-cli/src/apis/actor_regions_api.rs deleted file mode 100644 index 4dacb2916b..0000000000 --- a/sdks/api/full/rust-cli/src/apis/actor_regions_api.rs +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`actor_regions_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ActorRegionsListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -pub async fn actor_regions_list(configuration: &configuration::Configuration, project: Option<&str>, environment: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/regions", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = project { - local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = environment { - local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/auth_identity_email_api.rs b/sdks/api/full/rust-cli/src/apis/auth_identity_email_api.rs deleted file mode 100644 index 751bdad564..0000000000 --- a/sdks/api/full/rust-cli/src/apis/auth_identity_email_api.rs +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`auth_identity_email_complete_email_verification`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AuthIdentityEmailCompleteEmailVerificationError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`auth_identity_email_start_email_verification`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AuthIdentityEmailStartEmailVerificationError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Completes the email verification process. -pub async fn auth_identity_email_complete_email_verification(configuration: &configuration::Configuration, auth_identity_complete_email_verification_request: crate::models::AuthIdentityCompleteEmailVerificationRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/auth/identity/email/complete-verification", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&auth_identity_complete_email_verification_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Starts the verification process for linking an email to your identity. -pub async fn auth_identity_email_start_email_verification(configuration: &configuration::Configuration, auth_identity_start_email_verification_request: crate::models::AuthIdentityStartEmailVerificationRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/auth/identity/email/start-verification", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&auth_identity_start_email_verification_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/auth_tokens_api.rs b/sdks/api/full/rust-cli/src/apis/auth_tokens_api.rs deleted file mode 100644 index 1890915227..0000000000 --- a/sdks/api/full/rust-cli/src/apis/auth_tokens_api.rs +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`auth_tokens_refresh_identity_token`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AuthTokensRefreshIdentityTokenError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Refreshes the current identity's token and sets authentication headers. -pub async fn auth_tokens_refresh_identity_token(configuration: &configuration::Configuration, auth_refresh_identity_token_request: crate::models::AuthRefreshIdentityTokenRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/auth/tokens/identity", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&auth_refresh_identity_token_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_api.rs deleted file mode 100644 index a440747fbd..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_bootstrap`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudBootstrapError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns the basic information required to use the cloud APIs. -pub async fn cloud_bootstrap(configuration: &configuration::Configuration, ) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/bootstrap", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_auth_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_auth_api.rs deleted file mode 100644 index dd9b6ace1c..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_auth_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_auth_inspect`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudAuthInspectError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns information about the current authenticated agent. -pub async fn cloud_auth_inspect(configuration: &configuration::Configuration, ) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/auth/inspect", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_devices_links_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_devices_links_api.rs deleted file mode 100644 index ded16ed7e6..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_devices_links_api.rs +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_devices_links_complete`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudDevicesLinksCompleteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_devices_links_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudDevicesLinksGetError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_devices_links_prepare`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudDevicesLinksPrepareError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -pub async fn cloud_devices_links_complete(configuration: &configuration::Configuration, cloud_devices_complete_device_link_request: crate::models::CloudDevicesCompleteDeviceLinkRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/devices/links/complete", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - local_var_req_builder = local_var_req_builder.json(&cloud_devices_complete_device_link_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn cloud_devices_links_get(configuration: &configuration::Configuration, device_link_token: &str, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/devices/links", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - local_var_req_builder = local_var_req_builder.query(&[("device_link_token", &device_link_token.to_string())]); - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn cloud_devices_links_prepare(configuration: &configuration::Configuration, ) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/devices/links", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_api.rs deleted file mode 100644 index b9a0a98e2b..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_api.rs +++ /dev/null @@ -1,380 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_create_game`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesCreateGameError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_game_banner_upload_complete`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesGameBannerUploadCompleteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_game_banner_upload_prepare`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesGameBannerUploadPrepareError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_game_logo_upload_complete`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesGameLogoUploadCompleteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_game_logo_upload_prepare`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesGameLogoUploadPrepareError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_get_game_by_id`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesGetGameByIdError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_get_games`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesGetGamesError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_validate_game`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesValidateGameError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Creates a new game. -pub async fn cloud_games_create_game(configuration: &configuration::Configuration, cloud_games_create_game_request: crate::models::CloudGamesCreateGameRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_create_game_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Completes an game banner image upload. Must be called after the file upload process completes. -pub async fn cloud_games_game_banner_upload_complete(configuration: &configuration::Configuration, game_id: &str, upload_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/banner-upload/{upload_id}/complete", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), upload_id=crate::apis::urlencode(upload_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Prepares a game banner image upload. -pub async fn cloud_games_game_banner_upload_prepare(configuration: &configuration::Configuration, game_id: &str, cloud_games_game_banner_upload_prepare_request: crate::models::CloudGamesGameBannerUploadPrepareRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/banner-upload/prepare", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_game_banner_upload_prepare_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Completes a game logo image upload. Must be called after the file upload process completes. -pub async fn cloud_games_game_logo_upload_complete(configuration: &configuration::Configuration, game_id: &str, upload_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/logo-upload/{upload_id}/complete", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), upload_id=crate::apis::urlencode(upload_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Prepares a game logo image upload. -pub async fn cloud_games_game_logo_upload_prepare(configuration: &configuration::Configuration, game_id: &str, cloud_games_game_logo_upload_prepare_request: crate::models::CloudGamesGameLogoUploadPrepareRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/logo-upload/prepare", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_game_logo_upload_prepare_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a game by its game id. -pub async fn cloud_games_get_game_by_id(configuration: &configuration::Configuration, game_id: &str, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a list of games in which the current identity is a group member of its development team. -pub async fn cloud_games_get_games(configuration: &configuration::Configuration, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Validates information used to create a new game. -pub async fn cloud_games_validate_game(configuration: &configuration::Configuration, cloud_games_validate_game_request: crate::models::CloudGamesValidateGameRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/validate", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_validate_game_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_avatars_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_avatars_api.rs deleted file mode 100644 index f8f658cb3b..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_avatars_api.rs +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_avatars_complete_custom_avatar_upload`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesAvatarsCompleteCustomAvatarUploadError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_avatars_list_game_custom_avatars`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesAvatarsListGameCustomAvatarsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_avatars_prepare_custom_avatar_upload`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesAvatarsPrepareCustomAvatarUploadError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Completes a custom avatar image upload. Must be called after the file upload process completes. -pub async fn cloud_games_avatars_complete_custom_avatar_upload(configuration: &configuration::Configuration, game_id: &str, upload_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/avatar-upload/{upload_id}/complete", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), upload_id=crate::apis::urlencode(upload_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists custom avatars for the given game. -pub async fn cloud_games_avatars_list_game_custom_avatars(configuration: &configuration::Configuration, game_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/avatars", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Prepares a custom avatar image upload. Complete upload with `rivet.api.cloud#CompleteCustomAvatarUpload`. -pub async fn cloud_games_avatars_prepare_custom_avatar_upload(configuration: &configuration::Configuration, game_id: &str, cloud_games_prepare_custom_avatar_upload_request: crate::models::CloudGamesPrepareCustomAvatarUploadRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/prepare", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_prepare_custom_avatar_upload_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_builds_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_builds_api.rs deleted file mode 100644 index d1bc1e91f6..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_builds_api.rs +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_builds_create_game_build`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesBuildsCreateGameBuildError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_builds_list_game_builds`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesBuildsListGameBuildsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Creates a new game build for the given game. -pub async fn cloud_games_builds_create_game_build(configuration: &configuration::Configuration, game_id: &str, cloud_games_create_game_build_request: crate::models::CloudGamesCreateGameBuildRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/builds", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_create_game_build_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists game builds for the given game. -pub async fn cloud_games_builds_list_game_builds(configuration: &configuration::Configuration, game_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/builds", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_cdn_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_cdn_api.rs deleted file mode 100644 index 7e017e7854..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_cdn_api.rs +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_cdn_create_game_cdn_site`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesCdnCreateGameCdnSiteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_cdn_list_game_cdn_sites`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesCdnListGameCdnSitesError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Creates a new CDN site for the given game. -pub async fn cloud_games_cdn_create_game_cdn_site(configuration: &configuration::Configuration, game_id: &str, cloud_games_create_game_cdn_site_request: crate::models::CloudGamesCreateGameCdnSiteRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/cdn/sites", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_create_game_cdn_site_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists CDN sites for a game. -pub async fn cloud_games_cdn_list_game_cdn_sites(configuration: &configuration::Configuration, game_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/cdn/sites", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_matchmaker_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_matchmaker_api.rs deleted file mode 100644 index 81ac9a1086..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_matchmaker_api.rs +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_matchmaker_delete_matchmaker_lobby`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesMatchmakerDeleteMatchmakerLobbyError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_matchmaker_export_lobby_logs`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesMatchmakerExportLobbyLogsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_matchmaker_export_matchmaker_lobby_history`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesMatchmakerExportMatchmakerLobbyHistoryError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_matchmaker_get_lobby_logs`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesMatchmakerGetLobbyLogsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Deletes a matchmaker lobby, stopping it immediately. -pub async fn cloud_games_matchmaker_delete_matchmaker_lobby(configuration: &configuration::Configuration, game_id: &str, lobby_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/matchmaker/lobbies/{lobby_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), lobby_id=crate::apis::urlencode(lobby_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Generates a download URL for logs. -pub async fn cloud_games_matchmaker_export_lobby_logs(configuration: &configuration::Configuration, game_id: &str, lobby_id: &str, cloud_games_export_lobby_logs_request: crate::models::CloudGamesExportLobbyLogsRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/matchmaker/lobbies/{lobby_id}/logs/export", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), lobby_id=crate::apis::urlencode(lobby_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_export_lobby_logs_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Exports lobby history over a given query time span. -pub async fn cloud_games_matchmaker_export_matchmaker_lobby_history(configuration: &configuration::Configuration, game_id: &str, cloud_games_export_matchmaker_lobby_history_request: crate::models::CloudGamesExportMatchmakerLobbyHistoryRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/matchmaker/lobbies/export-history", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_export_matchmaker_lobby_history_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns the logs for a given lobby. -pub async fn cloud_games_matchmaker_get_lobby_logs(configuration: &configuration::Configuration, game_id: &str, lobby_id: &str, stream: crate::models::CloudGamesLogStream, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/matchmaker/lobbies/{lobby_id}/logs", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), lobby_id=crate::apis::urlencode(lobby_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - local_var_req_builder = local_var_req_builder.query(&[("stream", &stream.to_string())]); - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_analytics_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_analytics_api.rs deleted file mode 100644 index 07ac2d5954..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_analytics_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_namespaces_analytics_get_analytics_matchmaker_live`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesAnalyticsGetAnalyticsMatchmakerLiveError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns live information about all active lobbies for a given namespace. -pub async fn cloud_games_namespaces_analytics_get_analytics_matchmaker_live(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/analytics/matchmaker/live", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_api.rs deleted file mode 100644 index db4128e3af..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_api.rs +++ /dev/null @@ -1,739 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_namespaces_add_namespace_domain`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesAddNamespaceDomainError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_create_game_namespace`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesCreateGameNamespaceError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_create_game_namespace_token_development`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_create_game_namespace_token_public`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesCreateGameNamespaceTokenPublicError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_get_game_namespace_by_id`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesGetGameNamespaceByIdError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_get_game_namespace_version_history_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesGetGameNamespaceVersionHistoryListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_remove_namespace_cdn_auth_user`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesRemoveNamespaceCdnAuthUserError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_remove_namespace_domain`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesRemoveNamespaceDomainError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_set_namespace_cdn_auth_type`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesSetNamespaceCdnAuthTypeError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_toggle_namespace_domain_public_auth`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesToggleNamespaceDomainPublicAuthError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_update_game_namespace_matchmaker_config`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_update_game_namespace_version`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesUpdateGameNamespaceVersionError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_update_namespace_cdn_auth_user`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesUpdateNamespaceCdnAuthUserError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_validate_game_namespace`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesValidateGameNamespaceError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_validate_game_namespace_matchmaker_config`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_validate_game_namespace_token_development`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Adds a domain to the given game namespace. -pub async fn cloud_games_namespaces_add_namespace_domain(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_add_namespace_domain_request: crate::models::CloudGamesNamespacesAddNamespaceDomainRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/domains", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_add_namespace_domain_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Creates a new namespace for the given game. -pub async fn cloud_games_namespaces_create_game_namespace(configuration: &configuration::Configuration, game_id: &str, cloud_games_namespaces_create_game_namespace_request: crate::models::CloudGamesNamespacesCreateGameNamespaceRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_create_game_namespace_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Creates a development token for the given namespace. -pub async fn cloud_games_namespaces_create_game_namespace_token_development(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_create_game_namespace_token_development_request: crate::models::CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/tokens/development", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_create_game_namespace_token_development_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Creates a public token for the given namespace. -pub async fn cloud_games_namespaces_create_game_namespace_token_public(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/tokens/public", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Gets a game namespace by namespace ID. -pub async fn cloud_games_namespaces_get_game_namespace_by_id(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Gets the version history for a given namespace. -pub async fn cloud_games_namespaces_get_game_namespace_version_history_list(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, anchor: Option<&str>, limit: Option) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/version-history", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = anchor { - local_var_req_builder = local_var_req_builder.query(&[("anchor", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = limit { - local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Removes an authenticated user from the given game namespace. -pub async fn cloud_games_namespaces_remove_namespace_cdn_auth_user(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, user: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/auth-user/{user}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id), user=crate::apis::urlencode(user)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Removes a domain from the given game namespace. -pub async fn cloud_games_namespaces_remove_namespace_domain(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, domain: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/domains/{domain}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id), domain=crate::apis::urlencode(domain)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Updates the CDN authentication type of the given game namespace. -pub async fn cloud_games_namespaces_set_namespace_cdn_auth_type(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_set_namespace_cdn_auth_type_request: crate::models::CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/cdn-auth", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_set_namespace_cdn_auth_type_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Toggles whether or not to allow authentication based on domain for the given game namespace. -pub async fn cloud_games_namespaces_toggle_namespace_domain_public_auth(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_toggle_namespace_domain_public_auth_request: crate::models::CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/domain-public-auth", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_toggle_namespace_domain_public_auth_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Updates matchmaker config for the given game namespace. -pub async fn cloud_games_namespaces_update_game_namespace_matchmaker_config(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_update_game_namespace_matchmaker_config_request: crate::models::CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/mm-config", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_update_game_namespace_matchmaker_config_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Updates the version of a game namespace. -pub async fn cloud_games_namespaces_update_game_namespace_version(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_update_game_namespace_version_request: crate::models::CloudGamesNamespacesUpdateGameNamespaceVersionRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/version", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_update_game_namespace_version_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Adds an authenticated user to the given game namespace. -pub async fn cloud_games_namespaces_update_namespace_cdn_auth_user(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_update_namespace_cdn_auth_user_request: crate::models::CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/auth-user", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_update_namespace_cdn_auth_user_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Validates information used to create a new game namespace. -pub async fn cloud_games_namespaces_validate_game_namespace(configuration: &configuration::Configuration, game_id: &str, cloud_games_namespaces_validate_game_namespace_request: crate::models::CloudGamesNamespacesValidateGameNamespaceRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/validate", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_validate_game_namespace_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Validates information used to update a game namespace's matchmaker config. -pub async fn cloud_games_namespaces_validate_game_namespace_matchmaker_config(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_validate_game_namespace_matchmaker_config_request: crate::models::CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/mm-config/validate", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_validate_game_namespace_matchmaker_config_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Validates information used to create a new game namespace development token. -pub async fn cloud_games_namespaces_validate_game_namespace_token_development(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, cloud_games_namespaces_validate_game_namespace_token_development_request: crate::models::CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/tokens/development/validate", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_namespaces_validate_game_namespace_token_development_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_logs_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_logs_api.rs deleted file mode 100644 index 43e8b17d20..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_namespaces_logs_api.rs +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_namespaces_logs_get_namespace_lobby`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesLogsGetNamespaceLobbyError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_namespaces_logs_list_namespace_lobbies`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesNamespacesLogsListNamespaceLobbiesError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns a lobby from the given game namespace. -pub async fn cloud_games_namespaces_logs_get_namespace_lobby(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, lobby_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/logs/lobbies/{lobby_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id), lobby_id=crate::apis::urlencode(lobby_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a list of lobbies for the given game namespace. -pub async fn cloud_games_namespaces_logs_list_namespace_lobbies(configuration: &configuration::Configuration, game_id: &str, namespace_id: &str, before_create_ts: Option) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/namespaces/{namespace_id}/logs/lobbies", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), namespace_id=crate::apis::urlencode(namespace_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = before_create_ts { - local_var_req_builder = local_var_req_builder.query(&[("before_create_ts", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_tokens_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_tokens_api.rs deleted file mode 100644 index 42318b5460..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_tokens_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_tokens_create_cloud_token`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesTokensCreateCloudTokenError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Creates a new game cloud token. -pub async fn cloud_games_tokens_create_cloud_token(configuration: &configuration::Configuration, game_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/tokens/cloud", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_games_versions_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_games_versions_api.rs deleted file mode 100644 index 3b57b01cc3..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_games_versions_api.rs +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_games_versions_create_game_version`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesVersionsCreateGameVersionError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_versions_get_game_version_by_id`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesVersionsGetGameVersionByIdError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_versions_reserve_version_name`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesVersionsReserveVersionNameError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`cloud_games_versions_validate_game_version`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGamesVersionsValidateGameVersionError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Creates a new game version. -pub async fn cloud_games_versions_create_game_version(configuration: &configuration::Configuration, game_id: &str, cloud_games_create_game_version_request: crate::models::CloudGamesCreateGameVersionRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/versions", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_create_game_version_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a game version by its version ID. -pub async fn cloud_games_versions_get_game_version_by_id(configuration: &configuration::Configuration, game_id: &str, version_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/versions/{version_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), version_id=crate::apis::urlencode(version_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Reserves a display name for the next version. Used to generate a monotomically increasing build number without causing a race condition with multiple versions getting created at the same time. -pub async fn cloud_games_versions_reserve_version_name(configuration: &configuration::Configuration, game_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/versions/reserve-name", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Validates information used to create a new game version. -pub async fn cloud_games_versions_validate_game_version(configuration: &configuration::Configuration, game_id: &str, cloud_games_validate_game_version_request: crate::models::CloudGamesValidateGameVersionRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/games/{game_id}/versions/validate", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_games_validate_game_version_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_groups_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_groups_api.rs deleted file mode 100644 index 74d4ad260f..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_groups_api.rs +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_groups_validate`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudGroupsValidateError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Validates information used to create a new group. -pub async fn cloud_groups_validate(configuration: &configuration::Configuration, cloud_validate_group_request: crate::models::CloudValidateGroupRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/groups/validate", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&cloud_validate_group_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_logs_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_logs_api.rs deleted file mode 100644 index 30436fa40d..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_logs_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_logs_get_ray_perf_logs`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudLogsGetRayPerfLogsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns performance information about a Rivet Ray. -pub async fn cloud_logs_get_ray_perf_logs(configuration: &configuration::Configuration, ray_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/rays/{ray_id}/perf", local_var_configuration.base_path, ray_id=crate::apis::urlencode(ray_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_tiers_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_tiers_api.rs deleted file mode 100644 index 3f8df8ee31..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_tiers_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_tiers_get_region_tiers`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudTiersGetRegionTiersError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns all available region tiers. -pub async fn cloud_tiers_get_region_tiers(configuration: &configuration::Configuration, ) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/region-tiers", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/cloud_uploads_api.rs b/sdks/api/full/rust-cli/src/apis/cloud_uploads_api.rs deleted file mode 100644 index 5ff4809f43..0000000000 --- a/sdks/api/full/rust-cli/src/apis/cloud_uploads_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`cloud_uploads_complete_upload`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum CloudUploadsCompleteUploadError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Marks an upload as complete. -pub async fn cloud_uploads_complete_upload(configuration: &configuration::Configuration, upload_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/cloud/uploads/{upload_id}/complete", local_var_configuration.base_path, upload_id=crate::apis::urlencode(upload_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/configuration.rs b/sdks/api/full/rust-cli/src/apis/configuration.rs deleted file mode 100644 index 6535a51c12..0000000000 --- a/sdks/api/full/rust-cli/src/apis/configuration.rs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - -#[derive(Debug, Clone)] -pub struct Configuration { - pub base_path: String, - pub user_agent: Option, - pub client: reqwest::Client, - pub basic_auth: Option, - pub oauth_access_token: Option, - pub bearer_access_token: Option, - pub api_key: Option, - // TODO: take an oauth2 token source, similar to the go one -} - -pub type BasicAuth = (String, Option); - -#[derive(Debug, Clone)] -pub struct ApiKey { - pub prefix: Option, - pub key: String, -} - - -impl Configuration { - pub fn new() -> Configuration { - Configuration::default() - } -} - -impl Default for Configuration { - fn default() -> Self { - Configuration { - base_path: "https://api.rivet.gg".to_owned(), - user_agent: Some("OpenAPI-Generator/0.0.1/rust".to_owned()), - client: reqwest::Client::new(), - basic_auth: None, - oauth_access_token: None, - bearer_access_token: None, - api_key: None, - - } - } -} diff --git a/sdks/api/full/rust-cli/src/apis/games_environments_tokens_api.rs b/sdks/api/full/rust-cli/src/apis/games_environments_tokens_api.rs deleted file mode 100644 index a36af51a32..0000000000 --- a/sdks/api/full/rust-cli/src/apis/games_environments_tokens_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`games_environments_tokens_create_service_token`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GamesEnvironmentsTokensCreateServiceTokenError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Creates a new environment service token. -pub async fn games_environments_tokens_create_service_token(configuration: &configuration::Configuration, game_id: &str, environment_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/tokens/service", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/group_api.rs b/sdks/api/full/rust-cli/src/apis/group_api.rs deleted file mode 100644 index a2e46b3ada..0000000000 --- a/sdks/api/full/rust-cli/src/apis/group_api.rs +++ /dev/null @@ -1,758 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`group_ban_identity`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupBanIdentityError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_complete_avatar_upload`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupCompleteAvatarUploadError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_create`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupCreateError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_get_bans`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupGetBansError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_get_join_requests`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupGetJoinRequestsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_get_members`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupGetMembersError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_get_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupGetProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_get_summary`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupGetSummaryError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_kick_member`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupKickMemberError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_leave`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupLeaveError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_list_suggested`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupListSuggestedError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_prepare_avatar_upload`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupPrepareAvatarUploadError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_transfer_ownership`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupTransferOwnershipError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_unban_identity`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupUnbanIdentityError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_update_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupUpdateProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_validate_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupValidateProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Bans an identity from a group. Must be the owner of the group to perform this action. The banned identity will no longer be able to create a join request or use a group invite. -pub async fn group_ban_identity(configuration: &configuration::Configuration, group_id: &str, identity_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/bans/{identity_id}", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id), identity_id=crate::apis::urlencode(identity_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Completes an avatar image upload. Must be called after the file upload process completes. Call `rivet.api.group#PrepareAvatarUpload` first. -pub async fn group_complete_avatar_upload(configuration: &configuration::Configuration, group_id: &str, upload_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/avatar-upload/{upload_id}/complete", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id), upload_id=crate::apis::urlencode(upload_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Creates a new group. -pub async fn group_create(configuration: &configuration::Configuration, group_create_request: crate::models::GroupCreateRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&group_create_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a group's bans. Must have valid permissions to view. -pub async fn group_get_bans(configuration: &configuration::Configuration, group_id: &str, anchor: Option<&str>, count: Option, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/bans", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = anchor { - local_var_req_builder = local_var_req_builder.query(&[("anchor", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = count { - local_var_req_builder = local_var_req_builder.query(&[("count", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a group's join requests. Must have valid permissions to view. -pub async fn group_get_join_requests(configuration: &configuration::Configuration, group_id: &str, anchor: Option<&str>, count: Option, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/join-requests", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = anchor { - local_var_req_builder = local_var_req_builder.query(&[("anchor", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = count { - local_var_req_builder = local_var_req_builder.query(&[("count", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a group's members. -pub async fn group_get_members(configuration: &configuration::Configuration, group_id: &str, anchor: Option<&str>, count: Option, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/members", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = anchor { - local_var_req_builder = local_var_req_builder.query(&[("anchor", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = count { - local_var_req_builder = local_var_req_builder.query(&[("count", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a group profile. -pub async fn group_get_profile(configuration: &configuration::Configuration, group_id: &str, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/profile", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn group_get_summary(configuration: &configuration::Configuration, group_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/summary", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Kicks an identity from a group. Must be the owner of the group to perform this action. -pub async fn group_kick_member(configuration: &configuration::Configuration, group_id: &str, identity_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/kick/{identity_id}", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id), identity_id=crate::apis::urlencode(identity_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Leaves a group. -pub async fn group_leave(configuration: &configuration::Configuration, group_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/leave", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Returns a list of suggested groups. -pub async fn group_list_suggested(configuration: &configuration::Configuration, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Prepares an avatar image upload. Complete upload with `rivet.api.group#CompleteAvatarUpload`. -pub async fn group_prepare_avatar_upload(configuration: &configuration::Configuration, group_prepare_avatar_upload_request: crate::models::GroupPrepareAvatarUploadRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/avatar-upload/prepare", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&group_prepare_avatar_upload_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Transfers ownership of a group to another identity. -pub async fn group_transfer_ownership(configuration: &configuration::Configuration, group_id: &str, group_transfer_ownership_request: crate::models::GroupTransferOwnershipRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/transfer-owner", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&group_transfer_ownership_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Unbans an identity from a group. Must be the owner of the group to perform this action. -pub async fn group_unban_identity(configuration: &configuration::Configuration, group_id: &str, identity_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/bans/{identity_id}", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id), identity_id=crate::apis::urlencode(identity_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn group_update_profile(configuration: &configuration::Configuration, group_id: &str, group_update_profile_request: crate::models::GroupUpdateProfileRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/profile", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&group_update_profile_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Validate contents of group profile. Use to provide immediate feedback on profile changes before committing them. -pub async fn group_validate_profile(configuration: &configuration::Configuration, group_validate_profile_request: crate::models::GroupValidateProfileRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/profile/validate", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&group_validate_profile_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/group_invites_api.rs b/sdks/api/full/rust-cli/src/apis/group_invites_api.rs deleted file mode 100644 index 2940010eeb..0000000000 --- a/sdks/api/full/rust-cli/src/apis/group_invites_api.rs +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`group_invites_consume_invite`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupInvitesConsumeInviteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_invites_create_invite`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupInvitesCreateInviteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_invites_get_invite`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupInvitesGetInviteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Consumes a group invite to join a group. -pub async fn group_invites_consume_invite(configuration: &configuration::Configuration, group_invite_code: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/invites/{group_invite_code}/consume", local_var_configuration.base_path, group_invite_code=crate::apis::urlencode(group_invite_code)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Creates a group invite. Can be shared with other identities to let them join this group. -pub async fn group_invites_create_invite(configuration: &configuration::Configuration, group_id: &str, group_create_invite_request: crate::models::GroupCreateInviteRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/invites", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&group_create_invite_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Inspects a group invite returning information about the team that created it. -pub async fn group_invites_get_invite(configuration: &configuration::Configuration, group_invite_code: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/invites/{group_invite_code}", local_var_configuration.base_path, group_invite_code=crate::apis::urlencode(group_invite_code)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/group_join_requests_api.rs b/sdks/api/full/rust-cli/src/apis/group_join_requests_api.rs deleted file mode 100644 index 1b345544c5..0000000000 --- a/sdks/api/full/rust-cli/src/apis/group_join_requests_api.rs +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`group_join_requests_create_join_request`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupJoinRequestsCreateJoinRequestError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`group_join_requests_resolve_join_request`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupJoinRequestsResolveJoinRequestError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Requests to join a group. -pub async fn group_join_requests_create_join_request(configuration: &configuration::Configuration, group_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/join-request", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Resolves a join request for a given group. -pub async fn group_join_requests_resolve_join_request(configuration: &configuration::Configuration, group_id: &str, identity_id: &str, group_resolve_join_request_request: crate::models::GroupResolveJoinRequestRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/group/groups/{group_id}/join-request/{identity_id}", local_var_configuration.base_path, group_id=crate::apis::urlencode(group_id), identity_id=crate::apis::urlencode(identity_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&group_resolve_join_request_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/identity_activities_api.rs b/sdks/api/full/rust-cli/src/apis/identity_activities_api.rs deleted file mode 100644 index b50c773b28..0000000000 --- a/sdks/api/full/rust-cli/src/apis/identity_activities_api.rs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`identity_activities_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityActivitiesListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns an overview of all players currently online or in game. -pub async fn identity_activities_list(configuration: &configuration::Configuration, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/activities", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/identity_api.rs b/sdks/api/full/rust-cli/src/apis/identity_api.rs deleted file mode 100644 index fc7ff309f7..0000000000 --- a/sdks/api/full/rust-cli/src/apis/identity_api.rs +++ /dev/null @@ -1,691 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`identity_complete_avatar_upload`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityCompleteAvatarUploadError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_get_handles`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityGetHandlesError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_get_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityGetProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_get_self_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityGetSelfProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_get_summaries`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityGetSummariesError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_mark_deletion`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityMarkDeletionError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_prepare_avatar_upload`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityPrepareAvatarUploadError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_remove_game_activity`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityRemoveGameActivityError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_set_game_activity`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentitySetGameActivityError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_setup`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentitySetupError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_signup_for_beta`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentitySignupForBetaError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_unmark_deletion`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityUnmarkDeletionError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_update_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityUpdateProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_update_status`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityUpdateStatusError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`identity_validate_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityValidateProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Completes an avatar image upload. Must be called after the file upload process completes. -pub async fn identity_complete_avatar_upload(configuration: &configuration::Configuration, upload_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/avatar-upload/{upload_id}/complete", local_var_configuration.base_path, upload_id=crate::apis::urlencode(upload_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Fetches a list of identity handles. -pub async fn identity_get_handles(configuration: &configuration::Configuration, identity_ids: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/batch/handle", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - local_var_req_builder = local_var_req_builder.query(&[("identity_ids", &identity_ids.to_string())]); - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Fetches an identity profile. -pub async fn identity_get_profile(configuration: &configuration::Configuration, identity_id: &str, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/{identity_id}/profile", local_var_configuration.base_path, identity_id=crate::apis::urlencode(identity_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Fetches the current identity's profile. -pub async fn identity_get_self_profile(configuration: &configuration::Configuration, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/profile", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Fetches a list of identity summaries. -pub async fn identity_get_summaries(configuration: &configuration::Configuration, identity_ids: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/batch/summary", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - local_var_req_builder = local_var_req_builder.query(&[("identity_ids", &identity_ids.to_string())]); - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn identity_mark_deletion(configuration: &configuration::Configuration, ) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/delete-request", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Prepares an avatar image upload. Complete upload with `CompleteIdentityAvatarUpload`. -pub async fn identity_prepare_avatar_upload(configuration: &configuration::Configuration, identity_prepare_avatar_upload_request: crate::models::IdentityPrepareAvatarUploadRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/avatar-upload/prepare", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&identity_prepare_avatar_upload_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Removes the current identity's game activity. -pub async fn identity_remove_game_activity(configuration: &configuration::Configuration, ) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/activity", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Sets the current identity's game activity. This activity will automatically be removed when the identity goes offline. -pub async fn identity_set_game_activity(configuration: &configuration::Configuration, identity_set_game_activity_request: crate::models::IdentitySetGameActivityRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/activity", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&identity_set_game_activity_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Gets or creates an identity. Passing an existing identity token in the body refreshes the token. Temporary Accounts Until the identity is linked with the Rivet Hub (see `PrepareGameLink`), this identity will be temporary but still behave like all other identities. This is intended to allow users to play the game without signing up while still having the benefits of having an account. When they are ready to save their account, they should be instructed to link their account (see `PrepareGameLink`). Storing Token `identity_token` should be stored in some form of persistent storage. The token should be read from storage and passed to `Setup` every time the client starts. -pub async fn identity_setup(configuration: &configuration::Configuration, identity_setup_request: crate::models::IdentitySetupRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&identity_setup_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Completes an avatar image upload. Must be called after the file upload process completes. -pub async fn identity_signup_for_beta(configuration: &configuration::Configuration, identity_signup_for_beta_request: crate::models::IdentitySignupForBetaRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/beta-signup", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&identity_signup_for_beta_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn identity_unmark_deletion(configuration: &configuration::Configuration, ) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/delete-request", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Updates profile of the current identity. -pub async fn identity_update_profile(configuration: &configuration::Configuration, identity_update_profile_request: crate::models::IdentityUpdateProfileRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/profile", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&identity_update_profile_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Updates the current identity's status. -pub async fn identity_update_status(configuration: &configuration::Configuration, identity_update_status_request: crate::models::IdentityUpdateStatusRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/identities/self/status", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&identity_update_status_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Validate contents of identity profile. Use to provide immediate feedback on profile changes before committing them. -pub async fn identity_validate_profile(configuration: &configuration::Configuration, identity_update_profile_request: crate::models::IdentityUpdateProfileRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/self/profile/validate", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&identity_update_profile_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/identity_events_api.rs b/sdks/api/full/rust-cli/src/apis/identity_events_api.rs deleted file mode 100644 index db247b63fe..0000000000 --- a/sdks/api/full/rust-cli/src/apis/identity_events_api.rs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`identity_events_watch`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityEventsWatchError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns all events relative to the current identity. -pub async fn identity_events_watch(configuration: &configuration::Configuration, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/events/live", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/job_run_api.rs b/sdks/api/full/rust-cli/src/apis/job_run_api.rs deleted file mode 100644 index a67c3ad575..0000000000 --- a/sdks/api/full/rust-cli/src/apis/job_run_api.rs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`job_run_cleanup`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum JobRunCleanupError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -pub async fn job_run_cleanup(configuration: &configuration::Configuration, ) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/job/runs/cleanup", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/matchmaker_lobbies_api.rs b/sdks/api/full/rust-cli/src/apis/matchmaker_lobbies_api.rs deleted file mode 100644 index 50c2f0f0c6..0000000000 --- a/sdks/api/full/rust-cli/src/apis/matchmaker_lobbies_api.rs +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`matchmaker_lobbies_create`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesCreateError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_lobbies_find`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesFindError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_lobbies_get_state`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesGetStateError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_lobbies_join`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesJoinError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_lobbies_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_lobbies_ready`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesReadyError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_lobbies_set_closed`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesSetClosedError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_lobbies_set_state`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerLobbiesSetStateError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Creates a custom lobby. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. -pub async fn matchmaker_lobbies_create(configuration: &configuration::Configuration, matchmaker_lobbies_create_request: crate::models::MatchmakerLobbiesCreateRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/create", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&matchmaker_lobbies_create_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Finds a lobby based on the given criteria. If a lobby is not found and `prevent_auto_create_lobby` is `false`, a new lobby will be created. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. -pub async fn matchmaker_lobbies_find(configuration: &configuration::Configuration, matchmaker_lobbies_find_request: crate::models::MatchmakerLobbiesFindRequest, origin: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/find", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(local_var_param_value) = origin { - local_var_req_builder = local_var_req_builder.header("origin", local_var_param_value.to_string()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&matchmaker_lobbies_find_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Get the state of any lobby. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. -pub async fn matchmaker_lobbies_get_state(configuration: &configuration::Configuration, lobby_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/{lobby_id}/state", local_var_configuration.base_path, lobby_id=crate::apis::urlencode(lobby_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Joins a specific lobby. This request will use the direct player count configured for the lobby group. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. -pub async fn matchmaker_lobbies_join(configuration: &configuration::Configuration, matchmaker_lobbies_join_request: crate::models::MatchmakerLobbiesJoinRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/join", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&matchmaker_lobbies_join_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists all open lobbies. When [tokenless authentication](/docs/general/concepts/tokenless-authentication/web) is enabled in your game namespace, this endpoint does not require a token to authenticate. Otherwise, a [development namespace token](/docs/general/concepts/token-types#namespace-development) can be used for mock responses and a [public namespace token](/docs/general/concepts/token-types#namespace-public) can be used for general authentication. -pub async fn matchmaker_lobbies_list(configuration: &configuration::Configuration, include_state: Option) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/list", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = include_state { - local_var_req_builder = local_var_req_builder.query(&[("include_state", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Marks the current lobby as ready to accept connections. Players will not be able to connect to this lobby until the lobby is flagged as ready. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. -pub async fn matchmaker_lobbies_ready(configuration: &configuration::Configuration, ) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/ready", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// If `is_closed` is `true`, the matchmaker will no longer route players to the lobby. Players can still join using the /join endpoint (this can be disabled by the developer by rejecting all new connections after setting the lobby to closed). Does not shutdown the lobby. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. -pub async fn matchmaker_lobbies_set_closed(configuration: &configuration::Configuration, matchmaker_lobbies_set_closed_request: crate::models::MatchmakerLobbiesSetClosedRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/closed", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&matchmaker_lobbies_set_closed_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Sets the state JSON of the current lobby. This endpoint requires a [lobby token](/docs/general/concepts/token-types#matchmaker-lobby) for authentication, or a [development namespace token](/docs/general/concepts/token-types#namespace-development) for mock responses. When running on Rivet servers, you can access the given lobby token from the [`RIVET_TOKEN`](/docs/matchmaker/concepts/lobby-env) environment variable. -pub async fn matchmaker_lobbies_set_state(configuration: &configuration::Configuration, body: Option) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/lobbies/state", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&body); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/matchmaker_players_api.rs b/sdks/api/full/rust-cli/src/apis/matchmaker_players_api.rs deleted file mode 100644 index e0cb52729e..0000000000 --- a/sdks/api/full/rust-cli/src/apis/matchmaker_players_api.rs +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`matchmaker_players_connected`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerPlayersConnectedError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_players_disconnected`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerPlayersDisconnectedError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`matchmaker_players_get_statistics`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerPlayersGetStatisticsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Validates the player token is valid and has not already been consumed then marks the player as connected. # Player Tokens and Reserved Slots Player tokens reserve a spot in the lobby until they expire. This allows for precise matchmaking up to exactly the lobby's player limit, which is important for games with small lobbies and a high influx of players. By calling this endpoint with the player token, the player's spot is marked as connected and will not expire. If this endpoint is never called, the player's token will expire and this spot will be filled by another player. # Anti-Botting Player tokens are only issued by caling `lobbies.join`, calling `lobbies.find`, or from the `GlobalEventMatchmakerLobbyJoin` event. These endpoints have anti-botting measures (i.e. enforcing max player limits, captchas, and detecting bots), so valid player tokens provide some confidence that the player is not a bot. Therefore, it's important to make sure the token is valid by waiting for this endpoint to return OK before allowing the connected socket to do anything else. If this endpoint returns an error, the socket should be disconnected immediately. # How to Transmit the Player Token The client is responsible for acquiring the player token by caling `lobbies.join`, calling `lobbies.find`, or from the `GlobalEventMatchmakerLobbyJoin` event. Beyond that, it's up to the developer how the player token is transmitted to the lobby. If using WebSockets, the player token can be transmitted as a query parameter. Otherwise, the player token will likely be automatically sent by the client once the socket opens. As mentioned above, nothing else should happen until the player token is validated. -pub async fn matchmaker_players_connected(configuration: &configuration::Configuration, matchmaker_players_connected_request: crate::models::MatchmakerPlayersConnectedRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/players/connected", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&matchmaker_players_connected_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Marks a player as disconnected. # Ghost Players If players are not marked as disconnected, lobbies will result with \"ghost players\" that the matchmaker thinks exist but are no longer connected to the lobby. -pub async fn matchmaker_players_disconnected(configuration: &configuration::Configuration, matchmaker_players_connected_request: crate::models::MatchmakerPlayersConnectedRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/players/disconnected", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&matchmaker_players_connected_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Gives matchmaker statistics about the players in game. -pub async fn matchmaker_players_get_statistics(configuration: &configuration::Configuration, ) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/players/statistics", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/matchmaker_regions_api.rs b/sdks/api/full/rust-cli/src/apis/matchmaker_regions_api.rs deleted file mode 100644 index f70241924f..0000000000 --- a/sdks/api/full/rust-cli/src/apis/matchmaker_regions_api.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`matchmaker_regions_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum MatchmakerRegionsListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns a list of regions available to this namespace. Regions are sorted by most optimal to least optimal. The player's IP address is used to calculate the regions' optimality. -pub async fn matchmaker_regions_list(configuration: &configuration::Configuration, ) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/matchmaker/regions", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/mod.rs b/sdks/api/full/rust-cli/src/apis/mod.rs deleted file mode 100644 index d45f134146..0000000000 --- a/sdks/api/full/rust-cli/src/apis/mod.rs +++ /dev/null @@ -1,135 +0,0 @@ -use std::error; -use std::fmt; - -#[derive(Debug, Clone)] -pub struct ResponseContent { - pub status: reqwest::StatusCode, - pub content: String, - pub entity: Option, -} - -#[derive(Debug)] -pub enum Error { - Reqwest(reqwest::Error), - Serde(serde_json::Error), - Io(std::io::Error), - ResponseError(ResponseContent), -} - -impl fmt::Display for Error { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let (module, e) = match self { - Error::Reqwest(e) => ("reqwest", e.to_string()), - Error::Serde(e) => ("serde", e.to_string()), - Error::Io(e) => ("IO", e.to_string()), - Error::ResponseError(e) => ("response", format!("status code {}\n{}", e.status, e.content)), - }; - write!(f, "error in {}: {}", module, e) - } -} - -impl error::Error for Error { - fn source(&self) -> Option<&(dyn error::Error + 'static)> { - Some(match self { - Error::Reqwest(e) => e, - Error::Serde(e) => e, - Error::Io(e) => e, - Error::ResponseError(_) => return None, - }) - } -} - -impl From for Error { - fn from(e: reqwest::Error) -> Self { - Error::Reqwest(e) - } -} - -impl From for Error { - fn from(e: serde_json::Error) -> Self { - Error::Serde(e) - } -} - -impl From for Error { - fn from(e: std::io::Error) -> Self { - Error::Io(e) - } -} - -pub fn urlencode>(s: T) -> String { - ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect() -} - -pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String, String)> { - if let serde_json::Value::Object(object) = value { - let mut params = vec![]; - - for (key, value) in object { - match value { - serde_json::Value::Object(_) => params.append(&mut parse_deep_object( - &format!("{}[{}]", prefix, key), - value, - )), - serde_json::Value::Array(array) => { - for (i, value) in array.iter().enumerate() { - params.append(&mut parse_deep_object( - &format!("{}[{}][{}]", prefix, key, i), - value, - )); - } - }, - serde_json::Value::String(s) => params.push((format!("{}[{}]", prefix, key), s.clone())), - _ => params.push((format!("{}[{}]", prefix, key), value.to_string())), - } - } - - return params; - } - - unimplemented!("Only objects are supported with style=deepObject") -} - -pub mod actor_api; -pub mod actor_builds_api; -pub mod actor_logs_api; -pub mod actor_regions_api; -pub mod auth_identity_email_api; -pub mod auth_tokens_api; -pub mod cloud_api; -pub mod cloud_auth_api; -pub mod cloud_devices_links_api; -pub mod cloud_games_api; -pub mod cloud_games_avatars_api; -pub mod cloud_games_builds_api; -pub mod cloud_games_cdn_api; -pub mod cloud_games_matchmaker_api; -pub mod cloud_games_namespaces_api; -pub mod cloud_games_namespaces_analytics_api; -pub mod cloud_games_namespaces_logs_api; -pub mod cloud_games_tokens_api; -pub mod cloud_games_versions_api; -pub mod cloud_groups_api; -pub mod cloud_logs_api; -pub mod cloud_tiers_api; -pub mod cloud_uploads_api; -pub mod games_environments_tokens_api; -pub mod group_api; -pub mod group_invites_api; -pub mod group_join_requests_api; -pub mod identity_api; -pub mod identity_activities_api; -pub mod identity_events_api; -pub mod job_run_api; -pub mod matchmaker_lobbies_api; -pub mod matchmaker_players_api; -pub mod matchmaker_regions_api; -pub mod portal_games_api; -pub mod provision_datacenters_api; -pub mod provision_servers_api; -pub mod servers_api; -pub mod servers_builds_api; -pub mod servers_datacenters_api; -pub mod servers_logs_api; - -pub mod configuration; diff --git a/sdks/api/full/rust-cli/src/apis/portal_games_api.rs b/sdks/api/full/rust-cli/src/apis/portal_games_api.rs deleted file mode 100644 index 731e627d6b..0000000000 --- a/sdks/api/full/rust-cli/src/apis/portal_games_api.rs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`portal_games_get_game_profile`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum PortalGamesGetGameProfileError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns a game profile. -pub async fn portal_games_get_game_profile(configuration: &configuration::Configuration, game_name_id: &str, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/portal/games/{game_name_id}/profile", local_var_configuration.base_path, game_name_id=crate::apis::urlencode(game_name_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/provision_datacenters_api.rs b/sdks/api/full/rust-cli/src/apis/provision_datacenters_api.rs deleted file mode 100644 index 8b1708d3c7..0000000000 --- a/sdks/api/full/rust-cli/src/apis/provision_datacenters_api.rs +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`provision_datacenters_get_servers`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ProvisionDatacentersGetServersError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`provision_datacenters_get_tls`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ProvisionDatacentersGetTlsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -pub async fn provision_datacenters_get_servers(configuration: &configuration::Configuration, datacenter_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/datacenters/{datacenter_id}/servers", local_var_configuration.base_path, datacenter_id=crate::apis::urlencode(datacenter_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn provision_datacenters_get_tls(configuration: &configuration::Configuration, datacenter_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/datacenters/{datacenter_id}/tls", local_var_configuration.base_path, datacenter_id=crate::apis::urlencode(datacenter_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/provision_servers_api.rs b/sdks/api/full/rust-cli/src/apis/provision_servers_api.rs deleted file mode 100644 index c2aab2852d..0000000000 --- a/sdks/api/full/rust-cli/src/apis/provision_servers_api.rs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`provision_servers_get_info`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ProvisionServersGetInfoError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -pub async fn provision_servers_get_info(configuration: &configuration::Configuration, ip: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/servers/{ip}", local_var_configuration.base_path, ip=crate::apis::urlencode(ip)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/servers_api.rs b/sdks/api/full/rust-cli/src/apis/servers_api.rs deleted file mode 100644 index 3ae454a3c5..0000000000 --- a/sdks/api/full/rust-cli/src/apis/servers_api.rs +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`servers_create`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersCreateError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`servers_destroy`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersDestroyError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`servers_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersGetError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`servers_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Create a new dynamic server. -pub async fn servers_create(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, servers_create_server_request: crate::models::ServersCreateServerRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/servers", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&servers_create_server_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Destroy a dynamic server. -pub async fn servers_destroy(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, server_id: &str, override_kill_timeout: Option) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/servers/{server_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id), server_id=crate::apis::urlencode(server_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = override_kill_timeout { - local_var_req_builder = local_var_req_builder.query(&[("override_kill_timeout", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Gets a dynamic server. -pub async fn servers_get(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, server_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/servers/{server_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id), server_id=crate::apis::urlencode(server_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists all servers associated with the token used. Can be filtered by tags in the query string. -pub async fn servers_list(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, tags_json: Option<&str>, include_destroyed: Option, cursor: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/servers", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = tags_json { - local_var_req_builder = local_var_req_builder.query(&[("tags_json", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = include_destroyed { - local_var_req_builder = local_var_req_builder.query(&[("include_destroyed", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = cursor { - local_var_req_builder = local_var_req_builder.query(&[("cursor", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/servers_builds_api.rs b/sdks/api/full/rust-cli/src/apis/servers_builds_api.rs deleted file mode 100644 index 1dcd704434..0000000000 --- a/sdks/api/full/rust-cli/src/apis/servers_builds_api.rs +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`servers_builds_complete`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersBuildsCompleteError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`servers_builds_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersBuildsGetError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`servers_builds_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersBuildsListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`servers_builds_patch_tags`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersBuildsPatchTagsError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - -/// struct for typed errors of method [`servers_builds_prepare`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersBuildsPrepareError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Marks an upload as complete. -pub async fn servers_builds_complete(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, build_id: &str) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/builds/{build_id}/complete", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id), build_id=crate::apis::urlencode(build_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists all builds of the game associated with the token used. Can be filtered by tags in the query string. -pub async fn servers_builds_get(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, build_id: &str, tags_json: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/builds/{build_id}", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id), build_id=crate::apis::urlencode(build_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = tags_json { - local_var_req_builder = local_var_req_builder.query(&[("tags_json", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Lists all builds of the game associated with the token used. Can be filtered by tags in the query string. -pub async fn servers_builds_list(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, tags_json: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/builds", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_str) = tags_json { - local_var_req_builder = local_var_req_builder.query(&[("tags_json", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -pub async fn servers_builds_patch_tags(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, build_id: &str, servers_patch_build_tags_request: crate::models::ServersPatchBuildTagsRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/builds/{build_id}/tags", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id), build_id=crate::apis::urlencode(build_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&servers_patch_build_tags_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - -/// Creates a new game build for the given game. -pub async fn servers_builds_prepare(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, servers_create_build_request: crate::models::ServersCreateBuildRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/builds/prepare", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - local_var_req_builder = local_var_req_builder.json(&servers_create_build_request); - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/servers_datacenters_api.rs b/sdks/api/full/rust-cli/src/apis/servers_datacenters_api.rs deleted file mode 100644 index 5bb388081f..0000000000 --- a/sdks/api/full/rust-cli/src/apis/servers_datacenters_api.rs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`servers_datacenters_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersDatacentersListError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -pub async fn servers_datacenters_list(configuration: &configuration::Configuration, game_id: &str, environment_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/datacenters", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/apis/servers_logs_api.rs b/sdks/api/full/rust-cli/src/apis/servers_logs_api.rs deleted file mode 100644 index d0233ea3a7..0000000000 --- a/sdks/api/full/rust-cli/src/apis/servers_logs_api.rs +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -use reqwest; - -use crate::apis::ResponseContent; -use super::{Error, configuration}; - - -/// struct for typed errors of method [`servers_logs_get`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum ServersLogsGetError { - Status400(crate::models::ErrorBody), - Status403(crate::models::ErrorBody), - Status404(crate::models::ErrorBody), - Status408(crate::models::ErrorBody), - Status429(crate::models::ErrorBody), - Status500(crate::models::ErrorBody), - UnknownValue(serde_json::Value), -} - - -/// Returns the logs for a given server. -pub async fn servers_logs_get(configuration: &configuration::Configuration, game_id: &str, environment_id: &str, server_id: &str, stream: crate::models::ServersLogStream, watch_index: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/servers/{server_id}/logs", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id), server_id=crate::apis::urlencode(server_id)); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); - - local_var_req_builder = local_var_req_builder.query(&[("stream", &stream.to_string())]); - if let Some(ref local_var_str) = watch_index { - local_var_req_builder = local_var_req_builder.query(&[("watch_index", &local_var_str.to_string())]); - } - if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { - local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); - } - if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { - local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); - }; - - let local_var_req = local_var_req_builder.build()?; - let local_var_resp = local_var_client.execute(local_var_req).await?; - - let local_var_status = local_var_resp.status(); - let local_var_content = local_var_resp.text().await?; - - if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - serde_json::from_str(&local_var_content).map_err(Error::from) - } else { - let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); - let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; - Err(Error::ResponseError(local_var_error)) - } -} - diff --git a/sdks/api/full/rust-cli/src/lib.rs b/sdks/api/full/rust-cli/src/lib.rs deleted file mode 100644 index c1dd666f79..0000000000 --- a/sdks/api/full/rust-cli/src/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[macro_use] -extern crate serde_derive; - -extern crate serde; -extern crate serde_json; -extern crate url; -extern crate reqwest; - -pub mod apis; -pub mod models; diff --git a/sdks/api/full/rust-cli/src/models/actor_actor.rs b/sdks/api/full/rust-cli/src/models/actor_actor.rs deleted file mode 100644 index 4ad5243fbc..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_actor.rs +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorActor { - /// RFC3339 timestamp - #[serde(rename = "created_at")] - pub created_at: String, - /// RFC3339 timestamp - #[serde(rename = "destroyed_at", skip_serializing_if = "Option::is_none")] - pub destroyed_at: Option, - #[serde(rename = "id")] - pub id: uuid::Uuid, - #[serde(rename = "lifecycle")] - pub lifecycle: Box, - #[serde(rename = "network")] - pub network: Box, - #[serde(rename = "region")] - pub region: String, - #[serde(rename = "resources")] - pub resources: Box, - #[serde(rename = "runtime")] - pub runtime: Box, - /// RFC3339 timestamp - #[serde(rename = "started_at", skip_serializing_if = "Option::is_none")] - pub started_at: Option, - #[serde(rename = "tags", deserialize_with = "Option::deserialize")] - pub tags: Option, -} - -impl ActorActor { - pub fn new(created_at: String, id: uuid::Uuid, lifecycle: crate::models::ActorLifecycle, network: crate::models::ActorNetwork, region: String, resources: crate::models::ActorResources, runtime: crate::models::ActorRuntime, tags: Option) -> ActorActor { - ActorActor { - created_at, - destroyed_at: None, - id, - lifecycle: Box::new(lifecycle), - network: Box::new(network), - region, - resources: Box::new(resources), - runtime: Box::new(runtime), - started_at: None, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_build.rs b/sdks/api/full/rust-cli/src/models/actor_build.rs deleted file mode 100644 index 15122033fb..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_build.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorBuild { - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// RFC3339 timestamp - #[serde(rename = "created_at")] - pub created_at: String, - #[serde(rename = "id")] - pub id: uuid::Uuid, - #[serde(rename = "name")] - pub name: String, - /// Tags of this build - #[serde(rename = "tags")] - pub tags: ::std::collections::HashMap, -} - -impl ActorBuild { - pub fn new(content_length: i64, created_at: String, id: uuid::Uuid, name: String, tags: ::std::collections::HashMap) -> ActorBuild { - ActorBuild { - content_length, - created_at, - id, - name, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_build_compression.rs b/sdks/api/full/rust-cli/src/models/actor_build_compression.rs deleted file mode 100644 index 9554afe9c0..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_build_compression.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ActorBuildCompression { - #[serde(rename = "none")] - None, - #[serde(rename = "lz4")] - Lz4, - -} - -impl ToString for ActorBuildCompression { - fn to_string(&self) -> String { - match self { - Self::None => String::from("none"), - Self::Lz4 => String::from("lz4"), - } - } -} - -impl Default for ActorBuildCompression { - fn default() -> ActorBuildCompression { - Self::None - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/actor_build_kind.rs b/sdks/api/full/rust-cli/src/models/actor_build_kind.rs deleted file mode 100644 index 9e9fd07ff3..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_build_kind.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ActorBuildKind { - #[serde(rename = "docker_image")] - DockerImage, - #[serde(rename = "oci_bundle")] - OciBundle, - #[serde(rename = "javascript")] - Javascript, - -} - -impl ToString for ActorBuildKind { - fn to_string(&self) -> String { - match self { - Self::DockerImage => String::from("docker_image"), - Self::OciBundle => String::from("oci_bundle"), - Self::Javascript => String::from("javascript"), - } - } -} - -impl Default for ActorBuildKind { - fn default() -> ActorBuildKind { - Self::DockerImage - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/actor_create_actor_network_request.rs b/sdks/api/full/rust-cli/src/models/actor_create_actor_network_request.rs deleted file mode 100644 index 1f8bb0e290..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_create_actor_network_request.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorCreateActorNetworkRequest { - #[serde(rename = "mode", skip_serializing_if = "Option::is_none")] - pub mode: Option, - #[serde(rename = "ports", skip_serializing_if = "Option::is_none")] - pub ports: Option<::std::collections::HashMap>, -} - -impl ActorCreateActorNetworkRequest { - pub fn new() -> ActorCreateActorNetworkRequest { - ActorCreateActorNetworkRequest { - mode: None, - ports: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_create_actor_port_request.rs b/sdks/api/full/rust-cli/src/models/actor_create_actor_port_request.rs deleted file mode 100644 index 74497965ba..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_create_actor_port_request.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorCreateActorPortRequest { - #[serde(rename = "internal_port", skip_serializing_if = "Option::is_none")] - pub internal_port: Option, - #[serde(rename = "protocol")] - pub protocol: crate::models::ActorPortProtocol, - #[serde(rename = "routing", skip_serializing_if = "Option::is_none")] - pub routing: Option>, -} - -impl ActorCreateActorPortRequest { - pub fn new(protocol: crate::models::ActorPortProtocol) -> ActorCreateActorPortRequest { - ActorCreateActorPortRequest { - internal_port: None, - protocol, - routing: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_create_actor_request.rs b/sdks/api/full/rust-cli/src/models/actor_create_actor_request.rs deleted file mode 100644 index 21b7f38048..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_create_actor_request.rs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorCreateActorRequest { - #[serde(rename = "build", skip_serializing_if = "Option::is_none")] - pub build: Option, - #[serde(rename = "build_tags", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub build_tags: Option>, - #[serde(rename = "lifecycle", skip_serializing_if = "Option::is_none")] - pub lifecycle: Option>, - #[serde(rename = "network", skip_serializing_if = "Option::is_none")] - pub network: Option>, - #[serde(rename = "region", skip_serializing_if = "Option::is_none")] - pub region: Option, - #[serde(rename = "resources", skip_serializing_if = "Option::is_none")] - pub resources: Option>, - #[serde(rename = "runtime", skip_serializing_if = "Option::is_none")] - pub runtime: Option>, - #[serde(rename = "tags", deserialize_with = "Option::deserialize")] - pub tags: Option, -} - -impl ActorCreateActorRequest { - pub fn new(tags: Option) -> ActorCreateActorRequest { - ActorCreateActorRequest { - build: None, - build_tags: None, - lifecycle: None, - network: None, - region: None, - resources: None, - runtime: None, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_create_actor_response.rs b/sdks/api/full/rust-cli/src/models/actor_create_actor_response.rs deleted file mode 100644 index bed37f45b7..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_create_actor_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorCreateActorResponse { - #[serde(rename = "actor")] - pub actor: Box, -} - -impl ActorCreateActorResponse { - pub fn new(actor: crate::models::ActorActor) -> ActorCreateActorResponse { - ActorCreateActorResponse { - actor: Box::new(actor), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_create_actor_runtime_request.rs b/sdks/api/full/rust-cli/src/models/actor_create_actor_runtime_request.rs deleted file mode 100644 index 16acaad961..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_create_actor_runtime_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorCreateActorRuntimeRequest { - #[serde(rename = "environment", skip_serializing_if = "Option::is_none")] - pub environment: Option<::std::collections::HashMap>, -} - -impl ActorCreateActorRuntimeRequest { - pub fn new() -> ActorCreateActorRuntimeRequest { - ActorCreateActorRuntimeRequest { - environment: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_get_actor_logs_response.rs b/sdks/api/full/rust-cli/src/models/actor_get_actor_logs_response.rs deleted file mode 100644 index 7475d6b35b..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_get_actor_logs_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorGetActorLogsResponse { - /// Sorted old to new. - #[serde(rename = "lines")] - pub lines: Vec, - /// Sorted old to new. - #[serde(rename = "timestamps")] - pub timestamps: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl ActorGetActorLogsResponse { - pub fn new(lines: Vec, timestamps: Vec, watch: crate::models::WatchResponse) -> ActorGetActorLogsResponse { - ActorGetActorLogsResponse { - lines, - timestamps, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_get_actor_response.rs b/sdks/api/full/rust-cli/src/models/actor_get_actor_response.rs deleted file mode 100644 index 39f675add9..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_get_actor_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorGetActorResponse { - #[serde(rename = "actor")] - pub actor: Box, -} - -impl ActorGetActorResponse { - pub fn new(actor: crate::models::ActorActor) -> ActorGetActorResponse { - ActorGetActorResponse { - actor: Box::new(actor), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_get_build_response.rs b/sdks/api/full/rust-cli/src/models/actor_get_build_response.rs deleted file mode 100644 index 6b3176958d..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_get_build_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorGetBuildResponse { - #[serde(rename = "build")] - pub build: Box, -} - -impl ActorGetBuildResponse { - pub fn new(build: crate::models::ActorBuild) -> ActorGetBuildResponse { - ActorGetBuildResponse { - build: Box::new(build), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_guard_routing.rs b/sdks/api/full/rust-cli/src/models/actor_guard_routing.rs deleted file mode 100644 index 4ea1eccbc1..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_guard_routing.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorGuardRouting { - #[serde(rename = "authorization", skip_serializing_if = "Option::is_none")] - pub authorization: Option>, -} - -impl ActorGuardRouting { - pub fn new() -> ActorGuardRouting { - ActorGuardRouting { - authorization: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_lifecycle.rs b/sdks/api/full/rust-cli/src/models/actor_lifecycle.rs deleted file mode 100644 index cfcf65fe31..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_lifecycle.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorLifecycle { - /// 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. - #[serde(rename = "durable", skip_serializing_if = "Option::is_none")] - pub durable: Option, - /// 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. - #[serde(rename = "kill_timeout", skip_serializing_if = "Option::is_none")] - pub kill_timeout: Option, -} - -impl ActorLifecycle { - pub fn new() -> ActorLifecycle { - ActorLifecycle { - durable: None, - kill_timeout: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_list_actors_response.rs b/sdks/api/full/rust-cli/src/models/actor_list_actors_response.rs deleted file mode 100644 index 36c315efc1..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_list_actors_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorListActorsResponse { - /// A list of actors for the project associated with the token. - #[serde(rename = "actors")] - pub actors: Vec, -} - -impl ActorListActorsResponse { - pub fn new(actors: Vec) -> ActorListActorsResponse { - ActorListActorsResponse { - actors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_list_builds_response.rs b/sdks/api/full/rust-cli/src/models/actor_list_builds_response.rs deleted file mode 100644 index d7aa8fc073..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_list_builds_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorListBuildsResponse { - /// A list of builds for the project associated with the token. - #[serde(rename = "builds")] - pub builds: Vec, -} - -impl ActorListBuildsResponse { - pub fn new(builds: Vec) -> ActorListBuildsResponse { - ActorListBuildsResponse { - builds, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_list_regions_response.rs b/sdks/api/full/rust-cli/src/models/actor_list_regions_response.rs deleted file mode 100644 index cee15d56f7..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_list_regions_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorListRegionsResponse { - #[serde(rename = "regions")] - pub regions: Vec, -} - -impl ActorListRegionsResponse { - pub fn new(regions: Vec) -> ActorListRegionsResponse { - ActorListRegionsResponse { - regions, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_log_stream.rs b/sdks/api/full/rust-cli/src/models/actor_log_stream.rs deleted file mode 100644 index e4ec433d4f..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_log_stream.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ActorLogStream { - #[serde(rename = "std_out")] - StdOut, - #[serde(rename = "std_err")] - StdErr, - -} - -impl ToString for ActorLogStream { - fn to_string(&self) -> String { - match self { - Self::StdOut => String::from("std_out"), - Self::StdErr => String::from("std_err"), - } - } -} - -impl Default for ActorLogStream { - fn default() -> ActorLogStream { - Self::StdOut - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/actor_network.rs b/sdks/api/full/rust-cli/src/models/actor_network.rs deleted file mode 100644 index 00c077b796..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_network.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorNetwork { - #[serde(rename = "mode")] - pub mode: crate::models::ActorNetworkMode, - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, -} - -impl ActorNetwork { - pub fn new(mode: crate::models::ActorNetworkMode, ports: ::std::collections::HashMap) -> ActorNetwork { - ActorNetwork { - mode, - ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_network_mode.rs b/sdks/api/full/rust-cli/src/models/actor_network_mode.rs deleted file mode 100644 index db460774fb..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_network_mode.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ActorNetworkMode { - #[serde(rename = "bridge")] - Bridge, - #[serde(rename = "host")] - Host, - -} - -impl ToString for ActorNetworkMode { - fn to_string(&self) -> String { - match self { - Self::Bridge => String::from("bridge"), - Self::Host => String::from("host"), - } - } -} - -impl Default for ActorNetworkMode { - fn default() -> ActorNetworkMode { - Self::Bridge - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/actor_patch_build_tags_request.rs b/sdks/api/full/rust-cli/src/models/actor_patch_build_tags_request.rs deleted file mode 100644 index 26ec7f51b9..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_patch_build_tags_request.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorPatchBuildTagsRequest { - /// Removes the given tag keys from all other builds. - #[serde(rename = "exclusive_tags", skip_serializing_if = "Option::is_none")] - pub exclusive_tags: Option>, - #[serde(rename = "tags", deserialize_with = "Option::deserialize")] - pub tags: Option, -} - -impl ActorPatchBuildTagsRequest { - pub fn new(tags: Option) -> ActorPatchBuildTagsRequest { - ActorPatchBuildTagsRequest { - exclusive_tags: None, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_port.rs b/sdks/api/full/rust-cli/src/models/actor_port.rs deleted file mode 100644 index a217927b23..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_port.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorPort { - #[serde(rename = "internal_port", skip_serializing_if = "Option::is_none")] - pub internal_port: Option, - #[serde(rename = "protocol")] - pub protocol: crate::models::ActorPortProtocol, - #[serde(rename = "public_hostname", skip_serializing_if = "Option::is_none")] - pub public_hostname: Option, - #[serde(rename = "public_port", skip_serializing_if = "Option::is_none")] - pub public_port: Option, - #[serde(rename = "routing")] - pub routing: Box, -} - -impl ActorPort { - pub fn new(protocol: crate::models::ActorPortProtocol, routing: crate::models::ActorPortRouting) -> ActorPort { - ActorPort { - internal_port: None, - protocol, - public_hostname: None, - public_port: None, - routing: Box::new(routing), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_port_authorization.rs b/sdks/api/full/rust-cli/src/models/actor_port_authorization.rs deleted file mode 100644 index c3962e01ac..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_port_authorization.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorPortAuthorization { - #[serde(rename = "bearer", skip_serializing_if = "Option::is_none")] - pub bearer: Option, - #[serde(rename = "query", skip_serializing_if = "Option::is_none")] - pub query: Option>, -} - -impl ActorPortAuthorization { - pub fn new() -> ActorPortAuthorization { - ActorPortAuthorization { - bearer: None, - query: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_port_protocol.rs b/sdks/api/full/rust-cli/src/models/actor_port_protocol.rs deleted file mode 100644 index 06ef550fe2..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_port_protocol.rs +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ActorPortProtocol { - #[serde(rename = "http")] - Http, - #[serde(rename = "https")] - Https, - #[serde(rename = "tcp")] - Tcp, - #[serde(rename = "tcp_tls")] - TcpTls, - #[serde(rename = "udp")] - Udp, - -} - -impl ToString for ActorPortProtocol { - fn to_string(&self) -> String { - match self { - Self::Http => String::from("http"), - Self::Https => String::from("https"), - Self::Tcp => String::from("tcp"), - Self::TcpTls => String::from("tcp_tls"), - Self::Udp => String::from("udp"), - } - } -} - -impl Default for ActorPortProtocol { - fn default() -> ActorPortProtocol { - Self::Http - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/actor_port_query_authorization.rs b/sdks/api/full/rust-cli/src/models/actor_port_query_authorization.rs deleted file mode 100644 index ea8b447713..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_port_query_authorization.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorPortQueryAuthorization { - #[serde(rename = "key")] - pub key: String, - #[serde(rename = "value")] - pub value: String, -} - -impl ActorPortQueryAuthorization { - pub fn new(key: String, value: String) -> ActorPortQueryAuthorization { - ActorPortQueryAuthorization { - key, - value, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_port_routing.rs b/sdks/api/full/rust-cli/src/models/actor_port_routing.rs deleted file mode 100644 index d360b659fe..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_port_routing.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorPortRouting { - #[serde(rename = "guard", skip_serializing_if = "Option::is_none")] - pub guard: Option>, - #[serde(rename = "host", skip_serializing_if = "Option::is_none")] - pub host: Option, -} - -impl ActorPortRouting { - pub fn new() -> ActorPortRouting { - ActorPortRouting { - guard: None, - host: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_prepare_build_request.rs b/sdks/api/full/rust-cli/src/models/actor_prepare_build_request.rs deleted file mode 100644 index 0a3b3f8f62..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_prepare_build_request.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorPrepareBuildRequest { - #[serde(rename = "compression", skip_serializing_if = "Option::is_none")] - pub compression: Option, - #[serde(rename = "image_file")] - pub image_file: Box, - /// A tag given to the project build. - #[serde(rename = "image_tag", skip_serializing_if = "Option::is_none")] - pub image_tag: Option, - #[serde(rename = "kind", skip_serializing_if = "Option::is_none")] - pub kind: Option, - #[serde(rename = "name")] - pub name: String, -} - -impl ActorPrepareBuildRequest { - pub fn new(image_file: crate::models::UploadPrepareFile, name: String) -> ActorPrepareBuildRequest { - ActorPrepareBuildRequest { - compression: None, - image_file: Box::new(image_file), - image_tag: None, - kind: None, - name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_prepare_build_response.rs b/sdks/api/full/rust-cli/src/models/actor_prepare_build_response.rs deleted file mode 100644 index 0a33e1e63a..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_prepare_build_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorPrepareBuildResponse { - #[serde(rename = "build")] - pub build: uuid::Uuid, - #[serde(rename = "presigned_requests")] - pub presigned_requests: Vec, -} - -impl ActorPrepareBuildResponse { - pub fn new(build: uuid::Uuid, presigned_requests: Vec) -> ActorPrepareBuildResponse { - ActorPrepareBuildResponse { - build, - presigned_requests, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_region.rs b/sdks/api/full/rust-cli/src/models/actor_region.rs deleted file mode 100644 index 9d89f0371e..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_region.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorRegion { - #[serde(rename = "id")] - pub id: String, - #[serde(rename = "name")] - pub name: String, -} - -impl ActorRegion { - pub fn new(id: String, name: String) -> ActorRegion { - ActorRegion { - id, - name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_resources.rs b/sdks/api/full/rust-cli/src/models/actor_resources.rs deleted file mode 100644 index 57d7dc7ed4..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_resources.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorResources { - /// The number of CPU cores in millicores, or 1/1000 of a core. For example, 1/8 of a core would be 125 millicores, and 1 core would be 1000 millicores. - #[serde(rename = "cpu")] - pub cpu: i32, - /// The amount of memory in megabytes - #[serde(rename = "memory")] - pub memory: i32, -} - -impl ActorResources { - pub fn new(cpu: i32, memory: i32) -> ActorResources { - ActorResources { - cpu, - memory, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_runtime.rs b/sdks/api/full/rust-cli/src/models/actor_runtime.rs deleted file mode 100644 index 63ba97b4e7..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_runtime.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorRuntime { - #[serde(rename = "arguments", skip_serializing_if = "Option::is_none")] - pub arguments: Option>, - #[serde(rename = "build")] - pub build: uuid::Uuid, - #[serde(rename = "environment", skip_serializing_if = "Option::is_none")] - pub environment: Option<::std::collections::HashMap>, -} - -impl ActorRuntime { - pub fn new(build: uuid::Uuid) -> ActorRuntime { - ActorRuntime { - arguments: None, - build, - environment: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_upgrade_actor_request.rs b/sdks/api/full/rust-cli/src/models/actor_upgrade_actor_request.rs deleted file mode 100644 index 915c048b23..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_upgrade_actor_request.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorUpgradeActorRequest { - #[serde(rename = "build", skip_serializing_if = "Option::is_none")] - pub build: Option, - #[serde(rename = "build_tags", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub build_tags: Option>, -} - -impl ActorUpgradeActorRequest { - pub fn new() -> ActorUpgradeActorRequest { - ActorUpgradeActorRequest { - build: None, - build_tags: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_upgrade_all_actors_request.rs b/sdks/api/full/rust-cli/src/models/actor_upgrade_all_actors_request.rs deleted file mode 100644 index 9cc796c5e1..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_upgrade_all_actors_request.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorUpgradeAllActorsRequest { - #[serde(rename = "build", skip_serializing_if = "Option::is_none")] - pub build: Option, - #[serde(rename = "build_tags", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub build_tags: Option>, - #[serde(rename = "tags", deserialize_with = "Option::deserialize")] - pub tags: Option, -} - -impl ActorUpgradeAllActorsRequest { - pub fn new(tags: Option) -> ActorUpgradeAllActorsRequest { - ActorUpgradeAllActorsRequest { - build: None, - build_tags: None, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/actor_upgrade_all_actors_response.rs b/sdks/api/full/rust-cli/src/models/actor_upgrade_all_actors_response.rs deleted file mode 100644 index 344888fa58..0000000000 --- a/sdks/api/full/rust-cli/src/models/actor_upgrade_all_actors_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ActorUpgradeAllActorsResponse { - #[serde(rename = "count")] - pub count: i64, -} - -impl ActorUpgradeAllActorsResponse { - pub fn new(count: i64) -> ActorUpgradeAllActorsResponse { - ActorUpgradeAllActorsResponse { - count, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/auth_complete_status.rs b/sdks/api/full/rust-cli/src/models/auth_complete_status.rs deleted file mode 100644 index f2d9876170..0000000000 --- a/sdks/api/full/rust-cli/src/models/auth_complete_status.rs +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// AuthCompleteStatus : Represents the state of an external account linking process. - -/// Represents the state of an external account linking process. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum AuthCompleteStatus { - #[serde(rename = "switch_identity")] - SwitchIdentity, - #[serde(rename = "linked_account_added")] - LinkedAccountAdded, - #[serde(rename = "already_complete")] - AlreadyComplete, - #[serde(rename = "expired")] - Expired, - #[serde(rename = "too_many_attempts")] - TooManyAttempts, - #[serde(rename = "incorrect")] - Incorrect, - -} - -impl ToString for AuthCompleteStatus { - fn to_string(&self) -> String { - match self { - Self::SwitchIdentity => String::from("switch_identity"), - Self::LinkedAccountAdded => String::from("linked_account_added"), - Self::AlreadyComplete => String::from("already_complete"), - Self::Expired => String::from("expired"), - Self::TooManyAttempts => String::from("too_many_attempts"), - Self::Incorrect => String::from("incorrect"), - } - } -} - -impl Default for AuthCompleteStatus { - fn default() -> AuthCompleteStatus { - Self::SwitchIdentity - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/auth_identity_complete_email_verification_request.rs b/sdks/api/full/rust-cli/src/models/auth_identity_complete_email_verification_request.rs deleted file mode 100644 index 5fb77a7dd3..0000000000 --- a/sdks/api/full/rust-cli/src/models/auth_identity_complete_email_verification_request.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AuthIdentityCompleteEmailVerificationRequest { - /// The code sent to the requestee's email. - #[serde(rename = "code")] - pub code: String, - #[serde(rename = "verification_id")] - pub verification_id: uuid::Uuid, -} - -impl AuthIdentityCompleteEmailVerificationRequest { - pub fn new(code: String, verification_id: uuid::Uuid) -> AuthIdentityCompleteEmailVerificationRequest { - AuthIdentityCompleteEmailVerificationRequest { - code, - verification_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/auth_identity_complete_email_verification_response.rs b/sdks/api/full/rust-cli/src/models/auth_identity_complete_email_verification_response.rs deleted file mode 100644 index 557811bb75..0000000000 --- a/sdks/api/full/rust-cli/src/models/auth_identity_complete_email_verification_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AuthIdentityCompleteEmailVerificationResponse { - #[serde(rename = "status")] - pub status: crate::models::AuthCompleteStatus, -} - -impl AuthIdentityCompleteEmailVerificationResponse { - pub fn new(status: crate::models::AuthCompleteStatus) -> AuthIdentityCompleteEmailVerificationResponse { - AuthIdentityCompleteEmailVerificationResponse { - status, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/auth_identity_start_email_verification_request.rs b/sdks/api/full/rust-cli/src/models/auth_identity_start_email_verification_request.rs deleted file mode 100644 index d11fbea291..0000000000 --- a/sdks/api/full/rust-cli/src/models/auth_identity_start_email_verification_request.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AuthIdentityStartEmailVerificationRequest { - #[serde(rename = "captcha", skip_serializing_if = "Option::is_none")] - pub captcha: Option>, - #[serde(rename = "email")] - pub email: String, - #[serde(rename = "game_id", skip_serializing_if = "Option::is_none")] - pub game_id: Option, -} - -impl AuthIdentityStartEmailVerificationRequest { - pub fn new(email: String) -> AuthIdentityStartEmailVerificationRequest { - AuthIdentityStartEmailVerificationRequest { - captcha: None, - email, - game_id: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/auth_identity_start_email_verification_response.rs b/sdks/api/full/rust-cli/src/models/auth_identity_start_email_verification_response.rs deleted file mode 100644 index 78533e77b2..0000000000 --- a/sdks/api/full/rust-cli/src/models/auth_identity_start_email_verification_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AuthIdentityStartEmailVerificationResponse { - #[serde(rename = "verification_id")] - pub verification_id: uuid::Uuid, -} - -impl AuthIdentityStartEmailVerificationResponse { - pub fn new(verification_id: uuid::Uuid) -> AuthIdentityStartEmailVerificationResponse { - AuthIdentityStartEmailVerificationResponse { - verification_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/auth_refresh_identity_token_request.rs b/sdks/api/full/rust-cli/src/models/auth_refresh_identity_token_request.rs deleted file mode 100644 index bfaf83a1f3..0000000000 --- a/sdks/api/full/rust-cli/src/models/auth_refresh_identity_token_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AuthRefreshIdentityTokenRequest { - /// When `true`, the current identity for the provided cookie will be logged out and a new identity will be returned. - #[serde(rename = "logout", skip_serializing_if = "Option::is_none")] - pub logout: Option, -} - -impl AuthRefreshIdentityTokenRequest { - pub fn new() -> AuthRefreshIdentityTokenRequest { - AuthRefreshIdentityTokenRequest { - logout: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/auth_refresh_identity_token_response.rs b/sdks/api/full/rust-cli/src/models/auth_refresh_identity_token_response.rs deleted file mode 100644 index 04fc595d97..0000000000 --- a/sdks/api/full/rust-cli/src/models/auth_refresh_identity_token_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AuthRefreshIdentityTokenResponse { - /// Token expiration time (in milliseconds). - #[serde(rename = "exp")] - pub exp: String, - #[serde(rename = "identity_id")] - pub identity_id: uuid::Uuid, - /// A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. - #[serde(rename = "token")] - pub token: String, -} - -impl AuthRefreshIdentityTokenResponse { - pub fn new(exp: String, identity_id: uuid::Uuid, token: String) -> AuthRefreshIdentityTokenResponse { - AuthRefreshIdentityTokenResponse { - exp, - identity_id, - token, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/captcha_config.rs b/sdks/api/full/rust-cli/src/models/captcha_config.rs deleted file mode 100644 index d285073ecd..0000000000 --- a/sdks/api/full/rust-cli/src/models/captcha_config.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CaptchaConfig : Methods to verify a captcha - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CaptchaConfig { - #[serde(rename = "hcaptcha", skip_serializing_if = "Option::is_none")] - pub hcaptcha: Option>, - #[serde(rename = "turnstile", skip_serializing_if = "Option::is_none")] - pub turnstile: Option>, -} - -impl CaptchaConfig { - /// Methods to verify a captcha - pub fn new() -> CaptchaConfig { - CaptchaConfig { - hcaptcha: None, - turnstile: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/captcha_config_hcaptcha.rs b/sdks/api/full/rust-cli/src/models/captcha_config_hcaptcha.rs deleted file mode 100644 index a342255d1d..0000000000 --- a/sdks/api/full/rust-cli/src/models/captcha_config_hcaptcha.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CaptchaConfigHcaptcha : Captcha configuration. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CaptchaConfigHcaptcha { - #[serde(rename = "client_response")] - pub client_response: String, -} - -impl CaptchaConfigHcaptcha { - /// Captcha configuration. - pub fn new(client_response: String) -> CaptchaConfigHcaptcha { - CaptchaConfigHcaptcha { - client_response, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/captcha_config_turnstile.rs b/sdks/api/full/rust-cli/src/models/captcha_config_turnstile.rs deleted file mode 100644 index ca74d127c0..0000000000 --- a/sdks/api/full/rust-cli/src/models/captcha_config_turnstile.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CaptchaConfigTurnstile : Captcha configuration. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CaptchaConfigTurnstile { - #[serde(rename = "client_response")] - pub client_response: String, -} - -impl CaptchaConfigTurnstile { - /// Captcha configuration. - pub fn new(client_response: String) -> CaptchaConfigTurnstile { - CaptchaConfigTurnstile { - client_response, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_auth_agent.rs b/sdks/api/full/rust-cli/src/models/cloud_auth_agent.rs deleted file mode 100644 index 5ab694c6ad..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_auth_agent.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudAuthAgent : The current authenticated agent. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudAuthAgent { - #[serde(rename = "game_cloud", skip_serializing_if = "Option::is_none")] - pub game_cloud: Option>, - #[serde(rename = "identity", skip_serializing_if = "Option::is_none")] - pub identity: Option>, -} - -impl CloudAuthAgent { - /// The current authenticated agent. - pub fn new() -> CloudAuthAgent { - CloudAuthAgent { - game_cloud: None, - identity: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_auth_agent_game_cloud.rs b/sdks/api/full/rust-cli/src/models/cloud_auth_agent_game_cloud.rs deleted file mode 100644 index 4698420b34..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_auth_agent_game_cloud.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudAuthAgentGameCloud : The current authenticated game cloud. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudAuthAgentGameCloud { - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, -} - -impl CloudAuthAgentGameCloud { - /// The current authenticated game cloud. - pub fn new(game_id: uuid::Uuid) -> CloudAuthAgentGameCloud { - CloudAuthAgentGameCloud { - game_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_auth_agent_identity.rs b/sdks/api/full/rust-cli/src/models/cloud_auth_agent_identity.rs deleted file mode 100644 index 38dff8d0ec..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_auth_agent_identity.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudAuthAgentIdentity : The current authenticated identity. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudAuthAgentIdentity { - #[serde(rename = "identity_id")] - pub identity_id: uuid::Uuid, -} - -impl CloudAuthAgentIdentity { - /// The current authenticated identity. - pub fn new(identity_id: uuid::Uuid) -> CloudAuthAgentIdentity { - CloudAuthAgentIdentity { - identity_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_access.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_access.rs deleted file mode 100644 index 30ad6842f2..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_access.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudBootstrapAccess { - #[serde(rename = "public")] - Public, - #[serde(rename = "private")] - Private, - #[serde(rename = "development")] - Development, - -} - -impl ToString for CloudBootstrapAccess { - fn to_string(&self) -> String { - match self { - Self::Public => String::from("public"), - Self::Private => String::from("private"), - Self::Development => String::from("development"), - } - } -} - -impl Default for CloudBootstrapAccess { - fn default() -> CloudBootstrapAccess { - Self::Public - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_captcha.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_captcha.rs deleted file mode 100644 index 9f83ccbc73..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_captcha.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudBootstrapCaptcha { - #[serde(rename = "turnstile", skip_serializing_if = "Option::is_none")] - pub turnstile: Option>, -} - -impl CloudBootstrapCaptcha { - pub fn new() -> CloudBootstrapCaptcha { - CloudBootstrapCaptcha { - turnstile: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_captcha_turnstile.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_captcha_turnstile.rs deleted file mode 100644 index 4e326bb691..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_captcha_turnstile.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudBootstrapCaptchaTurnstile { - #[serde(rename = "site_key")] - pub site_key: String, -} - -impl CloudBootstrapCaptchaTurnstile { - pub fn new(site_key: String) -> CloudBootstrapCaptchaTurnstile { - CloudBootstrapCaptchaTurnstile { - site_key, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_cluster.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_cluster.rs deleted file mode 100644 index 3152f22de5..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_cluster.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudBootstrapCluster : The type of cluster that the backend is currently running. - -/// The type of cluster that the backend is currently running. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudBootstrapCluster { - #[serde(rename = "enterprise")] - Enterprise, - #[serde(rename = "oss")] - Oss, - -} - -impl ToString for CloudBootstrapCluster { - fn to_string(&self) -> String { - match self { - Self::Enterprise => String::from("enterprise"), - Self::Oss => String::from("oss"), - } - } -} - -impl Default for CloudBootstrapCluster { - fn default() -> CloudBootstrapCluster { - Self::Enterprise - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_domains.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_domains.rs deleted file mode 100644 index 1ba4c25ae0..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_domains.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudBootstrapDomains : Domains that host parts of Rivet - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudBootstrapDomains { - #[serde(rename = "cdn", skip_serializing_if = "Option::is_none")] - pub cdn: Option, - #[serde(rename = "job", skip_serializing_if = "Option::is_none")] - pub job: Option, - #[serde(rename = "opengb", skip_serializing_if = "Option::is_none")] - pub opengb: Option, -} - -impl CloudBootstrapDomains { - /// Domains that host parts of Rivet - pub fn new() -> CloudBootstrapDomains { - CloudBootstrapDomains { - cdn: None, - job: None, - opengb: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_login_methods.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_login_methods.rs deleted file mode 100644 index f643f7fb3f..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_login_methods.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudBootstrapLoginMethods { - #[serde(rename = "email")] - pub email: bool, -} - -impl CloudBootstrapLoginMethods { - pub fn new(email: bool) -> CloudBootstrapLoginMethods { - CloudBootstrapLoginMethods { - email, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_origins.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_origins.rs deleted file mode 100644 index 4a26422571..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_origins.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudBootstrapOrigins : Origins used to build URLs from - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudBootstrapOrigins { - #[serde(rename = "hub")] - pub hub: String, -} - -impl CloudBootstrapOrigins { - /// Origins used to build URLs from - pub fn new(hub: String) -> CloudBootstrapOrigins { - CloudBootstrapOrigins { - hub, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_response.rs b/sdks/api/full/rust-cli/src/models/cloud_bootstrap_response.rs deleted file mode 100644 index a0a2c78897..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_bootstrap_response.rs +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudBootstrapResponse { - #[serde(rename = "access")] - pub access: crate::models::CloudBootstrapAccess, - #[serde(rename = "captcha")] - pub captcha: Box, - #[serde(rename = "cluster")] - pub cluster: crate::models::CloudBootstrapCluster, - #[serde(rename = "deploy_hash")] - pub deploy_hash: String, - #[serde(rename = "domains")] - pub domains: Box, - #[serde(rename = "login_methods")] - pub login_methods: Box, - #[serde(rename = "origins")] - pub origins: Box, -} - -impl CloudBootstrapResponse { - pub fn new(access: crate::models::CloudBootstrapAccess, captcha: crate::models::CloudBootstrapCaptcha, cluster: crate::models::CloudBootstrapCluster, deploy_hash: String, domains: crate::models::CloudBootstrapDomains, login_methods: crate::models::CloudBootstrapLoginMethods, origins: crate::models::CloudBootstrapOrigins) -> CloudBootstrapResponse { - CloudBootstrapResponse { - access, - captcha: Box::new(captcha), - cluster, - deploy_hash, - domains: Box::new(domains), - login_methods: Box::new(login_methods), - origins: Box::new(origins), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_build_summary.rs b/sdks/api/full/rust-cli/src/models/cloud_build_summary.rs deleted file mode 100644 index 2191748cf3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_build_summary.rs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudBuildSummary : A build summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudBuildSummary { - #[serde(rename = "build_id")] - pub build_id: uuid::Uuid, - /// Whether or not this build has completely been uploaded. - #[serde(rename = "complete")] - pub complete: bool, - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// Tags of this build - #[serde(rename = "tags")] - pub tags: ::std::collections::HashMap, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudBuildSummary { - /// A build summary. - pub fn new(build_id: uuid::Uuid, complete: bool, content_length: i64, create_ts: String, display_name: String, tags: ::std::collections::HashMap, upload_id: uuid::Uuid) -> CloudBuildSummary { - CloudBuildSummary { - build_id, - complete, - content_length, - create_ts, - display_name, - tags, - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_auth_type.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_auth_type.rs deleted file mode 100644 index bd9b926551..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_auth_type.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCdnAuthType : A value denoting what type of authentication to use for a game namespace's CDN. - -/// A value denoting what type of authentication to use for a game namespace's CDN. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudCdnAuthType { - #[serde(rename = "none")] - None, - #[serde(rename = "basic")] - Basic, - -} - -impl ToString for CloudCdnAuthType { - fn to_string(&self) -> String { - match self { - Self::None => String::from("none"), - Self::Basic => String::from("basic"), - } - } -} - -impl Default for CloudCdnAuthType { - fn default() -> CloudCdnAuthType { - Self::None - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_auth_user.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_auth_user.rs deleted file mode 100644 index 21b67ffac2..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_auth_user.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCdnNamespaceAuthUser : An authenticated CDN user for a given namespace. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudCdnNamespaceAuthUser { - /// A user name. - #[serde(rename = "user")] - pub user: String, -} - -impl CloudCdnNamespaceAuthUser { - /// An authenticated CDN user for a given namespace. - pub fn new(user: String) -> CloudCdnNamespaceAuthUser { - CloudCdnNamespaceAuthUser { - user, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_config.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_config.rs deleted file mode 100644 index 438f4a8cc3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_config.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCdnNamespaceConfig : CDN configuration for a given namespace. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudCdnNamespaceConfig { - #[serde(rename = "auth_type")] - pub auth_type: crate::models::CloudCdnAuthType, - /// A list of CDN authenticated users for a given namespace. - #[serde(rename = "auth_user_list")] - pub auth_user_list: Vec, - /// A list of CDN domains for a given namespace. - #[serde(rename = "domains")] - pub domains: Vec, - /// Whether or not to allow users to connect to the given namespace via domain name. - #[serde(rename = "enable_domain_public_auth")] - pub enable_domain_public_auth: bool, -} - -impl CloudCdnNamespaceConfig { - /// CDN configuration for a given namespace. - pub fn new(auth_type: crate::models::CloudCdnAuthType, auth_user_list: Vec, domains: Vec, enable_domain_public_auth: bool) -> CloudCdnNamespaceConfig { - CloudCdnNamespaceConfig { - auth_type, - auth_user_list, - domains, - enable_domain_public_auth, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain.rs deleted file mode 100644 index db81a282e7..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain.rs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCdnNamespaceDomain : A CDN domain for a given namespace. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudCdnNamespaceDomain { - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// A valid domain name (no protocol). - #[serde(rename = "domain")] - pub domain: String, - #[serde(rename = "verification_errors")] - pub verification_errors: Vec, - #[serde(rename = "verification_method")] - pub verification_method: Box, - #[serde(rename = "verification_status")] - pub verification_status: crate::models::CloudCdnNamespaceDomainVerificationStatus, -} - -impl CloudCdnNamespaceDomain { - /// A CDN domain for a given namespace. - pub fn new(create_ts: String, domain: String, verification_errors: Vec, verification_method: crate::models::CloudCdnNamespaceDomainVerificationMethod, verification_status: crate::models::CloudCdnNamespaceDomainVerificationStatus) -> CloudCdnNamespaceDomain { - CloudCdnNamespaceDomain { - create_ts, - domain, - verification_errors, - verification_method: Box::new(verification_method), - verification_status, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_method.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_method.rs deleted file mode 100644 index b6dfced487..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_method.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCdnNamespaceDomainVerificationMethod : A union representing the verification method used for this CDN domain. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudCdnNamespaceDomainVerificationMethod { - #[serde(rename = "http", skip_serializing_if = "Option::is_none")] - pub http: Option>, - #[serde(rename = "invalid", skip_serializing_if = "Option::is_none")] - pub invalid: Option, -} - -impl CloudCdnNamespaceDomainVerificationMethod { - /// A union representing the verification method used for this CDN domain. - pub fn new() -> CloudCdnNamespaceDomainVerificationMethod { - CloudCdnNamespaceDomainVerificationMethod { - http: None, - invalid: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_method_http.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_method_http.rs deleted file mode 100644 index 2e382e2dea..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_method_http.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudCdnNamespaceDomainVerificationMethodHttp { - #[serde(rename = "cname_record")] - pub cname_record: String, -} - -impl CloudCdnNamespaceDomainVerificationMethodHttp { - pub fn new(cname_record: String) -> CloudCdnNamespaceDomainVerificationMethodHttp { - CloudCdnNamespaceDomainVerificationMethodHttp { - cname_record, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_status.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_status.rs deleted file mode 100644 index c76e43bf9a..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_namespace_domain_verification_status.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCdnNamespaceDomainVerificationStatus : A value denoting the status of a CDN domain's verification status. - -/// A value denoting the status of a CDN domain's verification status. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudCdnNamespaceDomainVerificationStatus { - #[serde(rename = "active")] - Active, - #[serde(rename = "pending")] - Pending, - #[serde(rename = "failed")] - Failed, - -} - -impl ToString for CloudCdnNamespaceDomainVerificationStatus { - fn to_string(&self) -> String { - match self { - Self::Active => String::from("active"), - Self::Pending => String::from("pending"), - Self::Failed => String::from("failed"), - } - } -} - -impl Default for CloudCdnNamespaceDomainVerificationStatus { - fn default() -> CloudCdnNamespaceDomainVerificationStatus { - Self::Active - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_cdn_site_summary.rs b/sdks/api/full/rust-cli/src/models/cloud_cdn_site_summary.rs deleted file mode 100644 index 15f0418c57..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_cdn_site_summary.rs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCdnSiteSummary : A CDN site summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudCdnSiteSummary { - /// Whether or not this site has completely been uploaded. - #[serde(rename = "complete")] - pub complete: bool, - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "site_id")] - pub site_id: uuid::Uuid, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudCdnSiteSummary { - /// A CDN site summary. - pub fn new(complete: bool, content_length: i64, create_ts: String, display_name: String, site_id: uuid::Uuid, upload_id: uuid::Uuid) -> CloudCdnSiteSummary { - CloudCdnSiteSummary { - complete, - content_length, - create_ts, - display_name, - site_id, - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_custom_avatar_summary.rs b/sdks/api/full/rust-cli/src/models/cloud_custom_avatar_summary.rs deleted file mode 100644 index e3716280da..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_custom_avatar_summary.rs +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudCustomAvatarSummary : A custom avatar summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudCustomAvatarSummary { - /// Whether or not this custom avatar has completely been uploaded. - #[serde(rename = "complete")] - pub complete: bool, - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, - /// The URL of this custom avatar image. Only present if upload is complete. - #[serde(rename = "url", skip_serializing_if = "Option::is_none")] - pub url: Option, -} - -impl CloudCustomAvatarSummary { - /// A custom avatar summary. - pub fn new(complete: bool, content_length: i64, create_ts: String, display_name: String, upload_id: uuid::Uuid) -> CloudCustomAvatarSummary { - CloudCustomAvatarSummary { - complete, - content_length, - create_ts, - display_name, - upload_id, - url: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_devices_complete_device_link_request.rs b/sdks/api/full/rust-cli/src/models/cloud_devices_complete_device_link_request.rs deleted file mode 100644 index be88fe67ec..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_devices_complete_device_link_request.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudDevicesCompleteDeviceLinkRequest { - /// Documentation at https://jwt.io/ - #[serde(rename = "device_link_token")] - pub device_link_token: String, - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, -} - -impl CloudDevicesCompleteDeviceLinkRequest { - pub fn new(device_link_token: String, game_id: uuid::Uuid) -> CloudDevicesCompleteDeviceLinkRequest { - CloudDevicesCompleteDeviceLinkRequest { - device_link_token, - game_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_devices_get_device_link_response.rs b/sdks/api/full/rust-cli/src/models/cloud_devices_get_device_link_response.rs deleted file mode 100644 index 38a1f79d55..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_devices_get_device_link_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudDevicesGetDeviceLinkResponse { - #[serde(rename = "cloud_token", skip_serializing_if = "Option::is_none")] - pub cloud_token: Option, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl CloudDevicesGetDeviceLinkResponse { - pub fn new(watch: crate::models::WatchResponse) -> CloudDevicesGetDeviceLinkResponse { - CloudDevicesGetDeviceLinkResponse { - cloud_token: None, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_devices_prepare_device_link_response.rs b/sdks/api/full/rust-cli/src/models/cloud_devices_prepare_device_link_response.rs deleted file mode 100644 index 3e33ef2133..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_devices_prepare_device_link_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudDevicesPrepareDeviceLinkResponse { - #[serde(rename = "device_link_id")] - pub device_link_id: uuid::Uuid, - #[serde(rename = "device_link_token")] - pub device_link_token: String, - #[serde(rename = "device_link_url")] - pub device_link_url: String, -} - -impl CloudDevicesPrepareDeviceLinkResponse { - pub fn new(device_link_id: uuid::Uuid, device_link_token: String, device_link_url: String) -> CloudDevicesPrepareDeviceLinkResponse { - CloudDevicesPrepareDeviceLinkResponse { - device_link_id, - device_link_token, - device_link_url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_game_full.rs b/sdks/api/full/rust-cli/src/models/cloud_game_full.rs deleted file mode 100644 index a4ffd17835..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_game_full.rs +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudGameFull : A full game. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGameFull { - /// A list of region summaries. - #[serde(rename = "available_regions")] - pub available_regions: Vec, - /// The URL of this game's banner image. - #[serde(rename = "banner_url", skip_serializing_if = "Option::is_none")] - pub banner_url: Option, - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - #[serde(rename = "developer_group_id")] - pub developer_group_id: uuid::Uuid, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, - /// The URL of this game's logo image. - #[serde(rename = "logo_url", skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, - /// A list of namespace summaries. - #[serde(rename = "namespaces")] - pub namespaces: Vec, - /// Unsigned 32 bit integer. - #[serde(rename = "total_player_count")] - pub total_player_count: i32, - /// A list of version summaries. - #[serde(rename = "versions")] - pub versions: Vec, -} - -impl CloudGameFull { - /// A full game. - pub fn new(available_regions: Vec, create_ts: String, developer_group_id: uuid::Uuid, display_name: String, game_id: uuid::Uuid, name_id: String, namespaces: Vec, total_player_count: i32, versions: Vec) -> CloudGameFull { - CloudGameFull { - available_regions, - banner_url: None, - create_ts, - developer_group_id, - display_name, - game_id, - logo_url: None, - name_id, - namespaces, - total_player_count, - versions, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_game_lobby_expenses.rs b/sdks/api/full/rust-cli/src/models/cloud_game_lobby_expenses.rs deleted file mode 100644 index 8fd76e7e4e..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_game_lobby_expenses.rs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudGameLobbyExpenses : Game lobby expenses. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGameLobbyExpenses { - /// A list of multiple region tier expenses. - #[serde(rename = "expenses")] - pub expenses: Vec, - #[serde(rename = "game")] - pub game: Box, - /// A list of namespace summaries. - #[serde(rename = "namespaces")] - pub namespaces: Vec, -} - -impl CloudGameLobbyExpenses { - /// Game lobby expenses. - pub fn new(expenses: Vec, game: crate::models::GameHandle, namespaces: Vec) -> CloudGameLobbyExpenses { - CloudGameLobbyExpenses { - expenses, - game: Box::new(game), - namespaces, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_build_compression.rs b/sdks/api/full/rust-cli/src/models/cloud_games_build_compression.rs deleted file mode 100644 index 9980cc9cb9..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_build_compression.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudGamesBuildCompression { - #[serde(rename = "none")] - None, - #[serde(rename = "lz4")] - Lz4, - -} - -impl ToString for CloudGamesBuildCompression { - fn to_string(&self) -> String { - match self { - Self::None => String::from("none"), - Self::Lz4 => String::from("lz4"), - } - } -} - -impl Default for CloudGamesBuildCompression { - fn default() -> CloudGamesBuildCompression { - Self::None - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_build_kind.rs b/sdks/api/full/rust-cli/src/models/cloud_games_build_kind.rs deleted file mode 100644 index 892db37414..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_build_kind.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudGamesBuildKind { - #[serde(rename = "docker_image")] - DockerImage, - #[serde(rename = "oci_bundle")] - OciBundle, - -} - -impl ToString for CloudGamesBuildKind { - fn to_string(&self) -> String { - match self { - Self::DockerImage => String::from("docker_image"), - Self::OciBundle => String::from("oci_bundle"), - } - } -} - -impl Default for CloudGamesBuildKind { - fn default() -> CloudGamesBuildKind { - Self::DockerImage - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_cloud_token_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_cloud_token_response.rs deleted file mode 100644 index d6264302b4..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_cloud_token_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateCloudTokenResponse { - /// A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. - #[serde(rename = "token")] - pub token: String, -} - -impl CloudGamesCreateCloudTokenResponse { - pub fn new(token: String) -> CloudGamesCreateCloudTokenResponse { - CloudGamesCreateCloudTokenResponse { - token, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_build_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_build_request.rs deleted file mode 100644 index b25d286793..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_build_request.rs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameBuildRequest { - #[serde(rename = "compression", skip_serializing_if = "Option::is_none")] - pub compression: Option, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "image_file")] - pub image_file: Box, - /// A tag given to the game build. - #[serde(rename = "image_tag")] - pub image_tag: String, - #[serde(rename = "kind", skip_serializing_if = "Option::is_none")] - pub kind: Option, - #[serde(rename = "multipart_upload", skip_serializing_if = "Option::is_none")] - pub multipart_upload: Option, -} - -impl CloudGamesCreateGameBuildRequest { - pub fn new(display_name: String, image_file: crate::models::UploadPrepareFile, image_tag: String) -> CloudGamesCreateGameBuildRequest { - CloudGamesCreateGameBuildRequest { - compression: None, - display_name, - image_file: Box::new(image_file), - image_tag, - kind: None, - multipart_upload: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_build_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_build_response.rs deleted file mode 100644 index bf7ed65cca..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_build_response.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameBuildResponse { - #[serde(rename = "build_id")] - pub build_id: uuid::Uuid, - #[serde(rename = "image_presigned_request", skip_serializing_if = "Option::is_none")] - pub image_presigned_request: Option>, - #[serde(rename = "image_presigned_requests", skip_serializing_if = "Option::is_none")] - pub image_presigned_requests: Option>, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudGamesCreateGameBuildResponse { - pub fn new(build_id: uuid::Uuid, upload_id: uuid::Uuid) -> CloudGamesCreateGameBuildResponse { - CloudGamesCreateGameBuildResponse { - build_id, - image_presigned_request: None, - image_presigned_requests: None, - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_cdn_site_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_cdn_site_request.rs deleted file mode 100644 index 57d52bb0a7..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_cdn_site_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameCdnSiteRequest { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// A list of files preparing to upload. - #[serde(rename = "files")] - pub files: Vec, -} - -impl CloudGamesCreateGameCdnSiteRequest { - pub fn new(display_name: String, files: Vec) -> CloudGamesCreateGameCdnSiteRequest { - CloudGamesCreateGameCdnSiteRequest { - display_name, - files, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_cdn_site_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_cdn_site_response.rs deleted file mode 100644 index 55458bf686..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_cdn_site_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameCdnSiteResponse { - #[serde(rename = "presigned_requests")] - pub presigned_requests: Vec, - #[serde(rename = "site_id")] - pub site_id: uuid::Uuid, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudGamesCreateGameCdnSiteResponse { - pub fn new(presigned_requests: Vec, site_id: uuid::Uuid, upload_id: uuid::Uuid) -> CloudGamesCreateGameCdnSiteResponse { - CloudGamesCreateGameCdnSiteResponse { - presigned_requests, - site_id, - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_request.rs deleted file mode 100644 index e5fd44a582..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_request.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameRequest { - #[serde(rename = "developer_group_id")] - pub developer_group_id: uuid::Uuid, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// 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. - #[serde(rename = "name_id", skip_serializing_if = "Option::is_none")] - pub name_id: Option, -} - -impl CloudGamesCreateGameRequest { - pub fn new(developer_group_id: uuid::Uuid, display_name: String) -> CloudGamesCreateGameRequest { - CloudGamesCreateGameRequest { - developer_group_id, - display_name, - name_id: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_response.rs deleted file mode 100644 index 9cb95bbc78..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameResponse { - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, -} - -impl CloudGamesCreateGameResponse { - pub fn new(game_id: uuid::Uuid) -> CloudGamesCreateGameResponse { - CloudGamesCreateGameResponse { - game_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_version_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_version_request.rs deleted file mode 100644 index 0fd1233300..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_version_request.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameVersionRequest { - #[serde(rename = "config")] - pub config: Box, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, -} - -impl CloudGamesCreateGameVersionRequest { - pub fn new(config: crate::models::CloudVersionConfig, display_name: String) -> CloudGamesCreateGameVersionRequest { - CloudGamesCreateGameVersionRequest { - config: Box::new(config), - display_name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_version_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_create_game_version_response.rs deleted file mode 100644 index fdda808ad3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_create_game_version_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesCreateGameVersionResponse { - #[serde(rename = "version_id")] - pub version_id: uuid::Uuid, -} - -impl CloudGamesCreateGameVersionResponse { - pub fn new(version_id: uuid::Uuid) -> CloudGamesCreateGameVersionResponse { - CloudGamesCreateGameVersionResponse { - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_delete_matchmaker_lobby_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_delete_matchmaker_lobby_response.rs deleted file mode 100644 index d7fa01f123..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_delete_matchmaker_lobby_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesDeleteMatchmakerLobbyResponse { - /// Whether or not the lobby was successfully stopped. - #[serde(rename = "did_remove")] - pub did_remove: bool, -} - -impl CloudGamesDeleteMatchmakerLobbyResponse { - pub fn new(did_remove: bool) -> CloudGamesDeleteMatchmakerLobbyResponse { - CloudGamesDeleteMatchmakerLobbyResponse { - did_remove, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_export_lobby_logs_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_export_lobby_logs_request.rs deleted file mode 100644 index 6f095bf46c..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_export_lobby_logs_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesExportLobbyLogsRequest { - #[serde(rename = "stream")] - pub stream: crate::models::CloudGamesLogStream, -} - -impl CloudGamesExportLobbyLogsRequest { - pub fn new(stream: crate::models::CloudGamesLogStream) -> CloudGamesExportLobbyLogsRequest { - CloudGamesExportLobbyLogsRequest { - stream, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_export_lobby_logs_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_export_lobby_logs_response.rs deleted file mode 100644 index 3d37548c73..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_export_lobby_logs_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesExportLobbyLogsResponse { - /// The URL to a CSV file for the given lobby history. - #[serde(rename = "url")] - pub url: String, -} - -impl CloudGamesExportLobbyLogsResponse { - pub fn new(url: String) -> CloudGamesExportLobbyLogsResponse { - CloudGamesExportLobbyLogsResponse { - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_export_matchmaker_lobby_history_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_export_matchmaker_lobby_history_request.rs deleted file mode 100644 index 87efdd49d2..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_export_matchmaker_lobby_history_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesExportMatchmakerLobbyHistoryRequest { - /// Unsigned 64 bit integer. - #[serde(rename = "query_end")] - pub query_end: i64, - /// Unsigned 64 bit integer. - #[serde(rename = "query_start")] - pub query_start: i64, -} - -impl CloudGamesExportMatchmakerLobbyHistoryRequest { - pub fn new(query_end: i64, query_start: i64) -> CloudGamesExportMatchmakerLobbyHistoryRequest { - CloudGamesExportMatchmakerLobbyHistoryRequest { - query_end, - query_start, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_export_matchmaker_lobby_history_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_export_matchmaker_lobby_history_response.rs deleted file mode 100644 index a526adcc88..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_export_matchmaker_lobby_history_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesExportMatchmakerLobbyHistoryResponse { - /// The URL to a CSV file for the given lobby history. - #[serde(rename = "url")] - pub url: String, -} - -impl CloudGamesExportMatchmakerLobbyHistoryResponse { - pub fn new(url: String) -> CloudGamesExportMatchmakerLobbyHistoryResponse { - CloudGamesExportMatchmakerLobbyHistoryResponse { - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_game_banner_upload_prepare_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_game_banner_upload_prepare_request.rs deleted file mode 100644 index 46eb2ebf13..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_game_banner_upload_prepare_request.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGameBannerUploadPrepareRequest { - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// The MIME type of the game banner. - #[serde(rename = "mime", skip_serializing_if = "Option::is_none")] - pub mime: Option, - /// The path/filename of the game banner. - #[serde(rename = "path")] - pub path: String, -} - -impl CloudGamesGameBannerUploadPrepareRequest { - pub fn new(content_length: i64, path: String) -> CloudGamesGameBannerUploadPrepareRequest { - CloudGamesGameBannerUploadPrepareRequest { - content_length, - mime: None, - path, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_game_banner_upload_prepare_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_game_banner_upload_prepare_response.rs deleted file mode 100644 index f93a11279d..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_game_banner_upload_prepare_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGameBannerUploadPrepareResponse { - #[serde(rename = "presigned_request")] - pub presigned_request: Box, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudGamesGameBannerUploadPrepareResponse { - pub fn new(presigned_request: crate::models::UploadPresignedRequest, upload_id: uuid::Uuid) -> CloudGamesGameBannerUploadPrepareResponse { - CloudGamesGameBannerUploadPrepareResponse { - presigned_request: Box::new(presigned_request), - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_game_logo_upload_prepare_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_game_logo_upload_prepare_request.rs deleted file mode 100644 index fb54a8713c..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_game_logo_upload_prepare_request.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGameLogoUploadPrepareRequest { - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// The MIME type of the game logo. - #[serde(rename = "mime", skip_serializing_if = "Option::is_none")] - pub mime: Option, - /// The path/filename of the game logo. - #[serde(rename = "path")] - pub path: String, -} - -impl CloudGamesGameLogoUploadPrepareRequest { - pub fn new(content_length: i64, path: String) -> CloudGamesGameLogoUploadPrepareRequest { - CloudGamesGameLogoUploadPrepareRequest { - content_length, - mime: None, - path, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_game_logo_upload_prepare_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_game_logo_upload_prepare_response.rs deleted file mode 100644 index 9030027d3f..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_game_logo_upload_prepare_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGameLogoUploadPrepareResponse { - #[serde(rename = "presigned_request")] - pub presigned_request: Box, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudGamesGameLogoUploadPrepareResponse { - pub fn new(presigned_request: crate::models::UploadPresignedRequest, upload_id: uuid::Uuid) -> CloudGamesGameLogoUploadPrepareResponse { - CloudGamesGameLogoUploadPrepareResponse { - presigned_request: Box::new(presigned_request), - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_get_game_by_id_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_get_game_by_id_response.rs deleted file mode 100644 index 7b34a45026..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_get_game_by_id_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGetGameByIdResponse { - #[serde(rename = "game")] - pub game: Box, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl CloudGamesGetGameByIdResponse { - pub fn new(game: crate::models::CloudGameFull, watch: crate::models::WatchResponse) -> CloudGamesGetGameByIdResponse { - CloudGamesGetGameByIdResponse { - game: Box::new(game), - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_get_game_version_by_id_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_get_game_version_by_id_response.rs deleted file mode 100644 index 17d85fdb62..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_get_game_version_by_id_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGetGameVersionByIdResponse { - #[serde(rename = "version")] - pub version: Box, -} - -impl CloudGamesGetGameVersionByIdResponse { - pub fn new(version: crate::models::CloudVersionFull) -> CloudGamesGetGameVersionByIdResponse { - CloudGamesGetGameVersionByIdResponse { - version: Box::new(version), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_get_games_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_get_games_response.rs deleted file mode 100644 index d6bf996615..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_get_games_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGetGamesResponse { - /// A list of game summaries. - #[serde(rename = "games")] - pub games: Vec, - /// A list of group summaries. - #[serde(rename = "groups")] - pub groups: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl CloudGamesGetGamesResponse { - pub fn new(games: Vec, groups: Vec, watch: crate::models::WatchResponse) -> CloudGamesGetGamesResponse { - CloudGamesGetGamesResponse { - games, - groups, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_get_lobby_logs_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_get_lobby_logs_response.rs deleted file mode 100644 index 58f54377ac..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_get_lobby_logs_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesGetLobbyLogsResponse { - /// Sorted old to new. - #[serde(rename = "lines")] - pub lines: Vec, - /// Sorted old to new. - #[serde(rename = "timestamps")] - pub timestamps: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl CloudGamesGetLobbyLogsResponse { - pub fn new(lines: Vec, timestamps: Vec, watch: crate::models::WatchResponse) -> CloudGamesGetLobbyLogsResponse { - CloudGamesGetLobbyLogsResponse { - lines, - timestamps, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_list_game_builds_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_list_game_builds_response.rs deleted file mode 100644 index b1acc359db..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_list_game_builds_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesListGameBuildsResponse { - /// A list of build summaries. - #[serde(rename = "builds")] - pub builds: Vec, -} - -impl CloudGamesListGameBuildsResponse { - pub fn new(builds: Vec) -> CloudGamesListGameBuildsResponse { - CloudGamesListGameBuildsResponse { - builds, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_list_game_cdn_sites_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_list_game_cdn_sites_response.rs deleted file mode 100644 index 6c6d5a0dc1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_list_game_cdn_sites_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesListGameCdnSitesResponse { - /// A list of CDN site summaries. - #[serde(rename = "sites")] - pub sites: Vec, -} - -impl CloudGamesListGameCdnSitesResponse { - pub fn new(sites: Vec) -> CloudGamesListGameCdnSitesResponse { - CloudGamesListGameCdnSitesResponse { - sites, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_list_game_custom_avatars_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_list_game_custom_avatars_response.rs deleted file mode 100644 index 12d3443345..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_list_game_custom_avatars_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesListGameCustomAvatarsResponse { - /// A list of custom avatar summaries. - #[serde(rename = "custom_avatars")] - pub custom_avatars: Vec, -} - -impl CloudGamesListGameCustomAvatarsResponse { - pub fn new(custom_avatars: Vec) -> CloudGamesListGameCustomAvatarsResponse { - CloudGamesListGameCustomAvatarsResponse { - custom_avatars, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_log_stream.rs b/sdks/api/full/rust-cli/src/models/cloud_games_log_stream.rs deleted file mode 100644 index 64bc9afaf3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_log_stream.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudGamesLogStream { - #[serde(rename = "std_out")] - StdOut, - #[serde(rename = "std_err")] - StdErr, - -} - -impl ToString for CloudGamesLogStream { - fn to_string(&self) -> String { - match self { - Self::StdOut => String::from("std_out"), - Self::StdErr => String::from("std_err"), - } - } -} - -impl Default for CloudGamesLogStream { - fn default() -> CloudGamesLogStream { - Self::StdOut - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_add_namespace_domain_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_add_namespace_domain_request.rs deleted file mode 100644 index 444ef1c6a1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_add_namespace_domain_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesAddNamespaceDomainRequest { - /// A valid domain name (no protocol). - #[serde(rename = "domain")] - pub domain: String, -} - -impl CloudGamesNamespacesAddNamespaceDomainRequest { - pub fn new(domain: String) -> CloudGamesNamespacesAddNamespaceDomainRequest { - CloudGamesNamespacesAddNamespaceDomainRequest { - domain, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_request.rs deleted file mode 100644 index 39f79522d1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_request.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesCreateGameNamespaceRequest { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, - #[serde(rename = "version_id")] - pub version_id: uuid::Uuid, -} - -impl CloudGamesNamespacesCreateGameNamespaceRequest { - pub fn new(display_name: String, name_id: String, version_id: uuid::Uuid) -> CloudGamesNamespacesCreateGameNamespaceRequest { - CloudGamesNamespacesCreateGameNamespaceRequest { - display_name, - name_id, - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_response.rs deleted file mode 100644 index 816d4796b3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesCreateGameNamespaceResponse { - #[serde(rename = "namespace_id")] - pub namespace_id: uuid::Uuid, -} - -impl CloudGamesNamespacesCreateGameNamespaceResponse { - pub fn new(namespace_id: uuid::Uuid) -> CloudGamesNamespacesCreateGameNamespaceResponse { - CloudGamesNamespacesCreateGameNamespaceResponse { - namespace_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_development_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_development_request.rs deleted file mode 100644 index d494b88b33..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_development_request.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest { - /// The hostname used for the token. - #[serde(rename = "hostname")] - pub hostname: String, - /// **Deprecated** A list of docker ports. - #[serde(rename = "lobby_ports", skip_serializing_if = "Option::is_none")] - pub lobby_ports: Option>, - #[serde(rename = "ports", skip_serializing_if = "Option::is_none")] - pub ports: Option<::std::collections::HashMap>, -} - -impl CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest { - pub fn new(hostname: String) -> CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest { - CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest { - hostname, - lobby_ports: None, - ports: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_development_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_development_response.rs deleted file mode 100644 index 1e607255f1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_development_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse { - /// A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. - #[serde(rename = "token")] - pub token: String, -} - -impl CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse { - pub fn new(token: String) -> CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse { - CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse { - token, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_public_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_public_response.rs deleted file mode 100644 index 9d6dd8b1ed..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_create_game_namespace_token_public_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse { - /// A JSON Web Token. Slightly modified to include a description prefix and use Protobufs of JSON. - #[serde(rename = "token")] - pub token: String, -} - -impl CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse { - pub fn new(token: String) -> CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse { - CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse { - token, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_analytics_matchmaker_live_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_analytics_matchmaker_live_response.rs deleted file mode 100644 index 09a134856e..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_analytics_matchmaker_live_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse { - /// A list of analytics lobby summaries. - #[serde(rename = "lobbies")] - pub lobbies: Vec, -} - -impl CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse { - pub fn new(lobbies: Vec) -> CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse { - CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse { - lobbies, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_game_namespace_by_id_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_game_namespace_by_id_response.rs deleted file mode 100644 index 5aa1f56dc4..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_game_namespace_by_id_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesGetGameNamespaceByIdResponse { - #[serde(rename = "namespace")] - pub namespace: Box, -} - -impl CloudGamesNamespacesGetGameNamespaceByIdResponse { - pub fn new(namespace: crate::models::CloudNamespaceFull) -> CloudGamesNamespacesGetGameNamespaceByIdResponse { - CloudGamesNamespacesGetGameNamespaceByIdResponse { - namespace: Box::new(namespace), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_game_namespace_version_history_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_game_namespace_version_history_response.rs deleted file mode 100644 index 0e28f0773e..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_game_namespace_version_history_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse { - /// A list of previously deployed namespace versions. - #[serde(rename = "versions")] - pub versions: Vec, -} - -impl CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse { - pub fn new(versions: Vec) -> CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse { - CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse { - versions, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_namespace_lobby_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_namespace_lobby_response.rs deleted file mode 100644 index c09446bc8c..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_get_namespace_lobby_response.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesGetNamespaceLobbyResponse { - #[serde(rename = "lobby")] - pub lobby: Box, - #[serde(rename = "metrics", skip_serializing_if = "Option::is_none")] - pub metrics: Option>, - /// **Deprecated** A list of service performance summaries. - #[serde(rename = "perf_lists")] - pub perf_lists: Vec, - /// **Deprecated** A list of URLs. - #[serde(rename = "stderr_presigned_urls")] - pub stderr_presigned_urls: Vec, - /// **Deprecated** A list of URLs. - #[serde(rename = "stdout_presigned_urls")] - pub stdout_presigned_urls: Vec, -} - -impl CloudGamesNamespacesGetNamespaceLobbyResponse { - pub fn new(lobby: crate::models::CloudLogsLobbySummary, perf_lists: Vec, stderr_presigned_urls: Vec, stdout_presigned_urls: Vec) -> CloudGamesNamespacesGetNamespaceLobbyResponse { - CloudGamesNamespacesGetNamespaceLobbyResponse { - lobby: Box::new(lobby), - metrics: None, - perf_lists, - stderr_presigned_urls, - stdout_presigned_urls, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_inspect_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_inspect_response.rs deleted file mode 100644 index 90fc0df81b..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_inspect_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesInspectResponse { - #[serde(rename = "agent")] - pub agent: Box, -} - -impl CloudGamesNamespacesInspectResponse { - pub fn new(agent: crate::models::CloudAuthAgent) -> CloudGamesNamespacesInspectResponse { - CloudGamesNamespacesInspectResponse { - agent: Box::new(agent), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_list_namespace_lobbies_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_list_namespace_lobbies_response.rs deleted file mode 100644 index 42e804d011..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_list_namespace_lobbies_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesListNamespaceLobbiesResponse { - /// A list of lobby log summaries. - #[serde(rename = "lobbies")] - pub lobbies: Vec, -} - -impl CloudGamesNamespacesListNamespaceLobbiesResponse { - pub fn new(lobbies: Vec) -> CloudGamesNamespacesListNamespaceLobbiesResponse { - CloudGamesNamespacesListNamespaceLobbiesResponse { - lobbies, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_set_namespace_cdn_auth_type_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_set_namespace_cdn_auth_type_request.rs deleted file mode 100644 index d6f98905b4..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_set_namespace_cdn_auth_type_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest { - #[serde(rename = "auth_type")] - pub auth_type: crate::models::CloudCdnAuthType, -} - -impl CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest { - pub fn new(auth_type: crate::models::CloudCdnAuthType) -> CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest { - CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest { - auth_type, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_toggle_namespace_domain_public_auth_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_toggle_namespace_domain_public_auth_request.rs deleted file mode 100644 index 8f756de255..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_toggle_namespace_domain_public_auth_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest { - /// Whether or not to enable authentication based on domain. - #[serde(rename = "enabled")] - pub enabled: bool, -} - -impl CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest { - pub fn new(enabled: bool) -> CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest { - CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest { - enabled, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_game_namespace_matchmaker_config_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_game_namespace_matchmaker_config_request.rs deleted file mode 100644 index 1e10a667a3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_game_namespace_matchmaker_config_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest { - /// Unsigned 32 bit integer. - #[serde(rename = "lobby_count_max")] - pub lobby_count_max: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players")] - pub max_players: i32, -} - -impl CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest { - pub fn new(lobby_count_max: i32, max_players: i32) -> CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest { - CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest { - lobby_count_max, - max_players, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_game_namespace_version_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_game_namespace_version_request.rs deleted file mode 100644 index 7bc24f72d1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_game_namespace_version_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesUpdateGameNamespaceVersionRequest { - #[serde(rename = "version_id")] - pub version_id: uuid::Uuid, -} - -impl CloudGamesNamespacesUpdateGameNamespaceVersionRequest { - pub fn new(version_id: uuid::Uuid) -> CloudGamesNamespacesUpdateGameNamespaceVersionRequest { - CloudGamesNamespacesUpdateGameNamespaceVersionRequest { - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_namespace_cdn_auth_user_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_namespace_cdn_auth_user_request.rs deleted file mode 100644 index 639da0d8a5..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_update_namespace_cdn_auth_user_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest { - /// A bcrypt encrypted password. An error is returned if the given string is not properly encrypted. - #[serde(rename = "password")] - pub password: String, - /// A user name. - #[serde(rename = "user")] - pub user: String, -} - -impl CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest { - pub fn new(password: String, user: String) -> CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest { - CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest { - password, - user, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_request.rs deleted file mode 100644 index b144620c51..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest { - /// Unsigned 32 bit integer. - #[serde(rename = "lobby_count_max")] - pub lobby_count_max: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players")] - pub max_players: i32, -} - -impl CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest { - pub fn new(lobby_count_max: i32, max_players: i32) -> CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest { - CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest { - lobby_count_max, - max_players, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_response.rs deleted file mode 100644 index 5b0d3eee10..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_matchmaker_config_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse { - /// A list of validation errors. - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse { - pub fn new(errors: Vec) -> CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse { - CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_request.rs deleted file mode 100644 index 3b49b7bcab..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesValidateGameNamespaceRequest { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, -} - -impl CloudGamesNamespacesValidateGameNamespaceRequest { - pub fn new(display_name: String, name_id: String) -> CloudGamesNamespacesValidateGameNamespaceRequest { - CloudGamesNamespacesValidateGameNamespaceRequest { - display_name, - name_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_response.rs deleted file mode 100644 index 65be900bea..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesValidateGameNamespaceResponse { - /// A list of validation errors. - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl CloudGamesNamespacesValidateGameNamespaceResponse { - pub fn new(errors: Vec) -> CloudGamesNamespacesValidateGameNamespaceResponse { - CloudGamesNamespacesValidateGameNamespaceResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_token_development_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_token_development_request.rs deleted file mode 100644 index c3c7db4f09..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_token_development_request.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest { - #[serde(rename = "hostname")] - pub hostname: String, - /// A list of docker ports. - #[serde(rename = "lobby_ports")] - pub lobby_ports: Vec, -} - -impl CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest { - pub fn new(hostname: String, lobby_ports: Vec) -> CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest { - CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest { - hostname, - lobby_ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_token_development_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_token_development_response.rs deleted file mode 100644 index b647adf24a..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_namespaces_validate_game_namespace_token_development_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse { - /// A list of validation errors. - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse { - pub fn new(errors: Vec) -> CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse { - CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_prepare_custom_avatar_upload_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_prepare_custom_avatar_upload_request.rs deleted file mode 100644 index fe9c725209..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_prepare_custom_avatar_upload_request.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesPrepareCustomAvatarUploadRequest { - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// The MIME type of the custom avatar. - #[serde(rename = "mime", skip_serializing_if = "Option::is_none")] - pub mime: Option, - /// The path/filename of the custom avatar. - #[serde(rename = "path")] - pub path: String, -} - -impl CloudGamesPrepareCustomAvatarUploadRequest { - pub fn new(content_length: i64, path: String) -> CloudGamesPrepareCustomAvatarUploadRequest { - CloudGamesPrepareCustomAvatarUploadRequest { - content_length, - mime: None, - path, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_prepare_custom_avatar_upload_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_prepare_custom_avatar_upload_response.rs deleted file mode 100644 index acf310ffb8..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_prepare_custom_avatar_upload_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesPrepareCustomAvatarUploadResponse { - #[serde(rename = "presigned_request")] - pub presigned_request: Box, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudGamesPrepareCustomAvatarUploadResponse { - pub fn new(presigned_request: crate::models::UploadPresignedRequest, upload_id: uuid::Uuid) -> CloudGamesPrepareCustomAvatarUploadResponse { - CloudGamesPrepareCustomAvatarUploadResponse { - presigned_request: Box::new(presigned_request), - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_reserve_version_name_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_reserve_version_name_response.rs deleted file mode 100644 index 1ca6b9fd43..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_reserve_version_name_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesReserveVersionNameResponse { - /// Represent a resource's readable display name. - #[serde(rename = "version_display_name")] - pub version_display_name: String, -} - -impl CloudGamesReserveVersionNameResponse { - pub fn new(version_display_name: String) -> CloudGamesReserveVersionNameResponse { - CloudGamesReserveVersionNameResponse { - version_display_name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_request.rs deleted file mode 100644 index 30f7fb8d7b..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesValidateGameRequest { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// 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. - #[serde(rename = "name_id", skip_serializing_if = "Option::is_none")] - pub name_id: Option, -} - -impl CloudGamesValidateGameRequest { - pub fn new(display_name: String) -> CloudGamesValidateGameRequest { - CloudGamesValidateGameRequest { - display_name, - name_id: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_response.rs deleted file mode 100644 index d5b3f32d81..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesValidateGameResponse { - /// A list of validation errors. - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl CloudGamesValidateGameResponse { - pub fn new(errors: Vec) -> CloudGamesValidateGameResponse { - CloudGamesValidateGameResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_version_request.rs b/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_version_request.rs deleted file mode 100644 index 2f2f612e67..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_version_request.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesValidateGameVersionRequest { - #[serde(rename = "config")] - pub config: Box, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, -} - -impl CloudGamesValidateGameVersionRequest { - pub fn new(config: crate::models::CloudVersionConfig, display_name: String) -> CloudGamesValidateGameVersionRequest { - CloudGamesValidateGameVersionRequest { - config: Box::new(config), - display_name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_version_response.rs b/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_version_response.rs deleted file mode 100644 index 8d55feaec9..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_games_validate_game_version_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGamesValidateGameVersionResponse { - /// A list of validation errors. - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl CloudGamesValidateGameVersionResponse { - pub fn new(errors: Vec) -> CloudGamesValidateGameVersionResponse { - CloudGamesValidateGameVersionResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_get_ray_perf_logs_response.rs b/sdks/api/full/rust-cli/src/models/cloud_get_ray_perf_logs_response.rs deleted file mode 100644 index ec13db31b5..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_get_ray_perf_logs_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGetRayPerfLogsResponse { - /// A list of service performance summaries. - #[serde(rename = "perf_lists")] - pub perf_lists: Vec, -} - -impl CloudGetRayPerfLogsResponse { - pub fn new(perf_lists: Vec) -> CloudGetRayPerfLogsResponse { - CloudGetRayPerfLogsResponse { - perf_lists, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_get_region_tiers_response.rs b/sdks/api/full/rust-cli/src/models/cloud_get_region_tiers_response.rs deleted file mode 100644 index e49ac514bf..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_get_region_tiers_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGetRegionTiersResponse { - /// A list of region server tiers. - #[serde(rename = "tiers")] - pub tiers: Vec, -} - -impl CloudGetRegionTiersResponse { - pub fn new(tiers: Vec) -> CloudGetRegionTiersResponse { - CloudGetRegionTiersResponse { - tiers, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_group_bank_source.rs b/sdks/api/full/rust-cli/src/models/cloud_group_bank_source.rs deleted file mode 100644 index 78e864f8c4..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_group_bank_source.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudGroupBankSource { - /// The bank account number of this group's bank source. - #[serde(rename = "account_number")] - pub account_number: String, - /// The bank routing number of this group's bank source. - #[serde(rename = "routing_number")] - pub routing_number: String, -} - -impl CloudGroupBankSource { - pub fn new(account_number: String, routing_number: String) -> CloudGroupBankSource { - CloudGroupBankSource { - account_number, - routing_number, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_inspect_response.rs b/sdks/api/full/rust-cli/src/models/cloud_inspect_response.rs deleted file mode 100644 index 21bfa6f475..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_inspect_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudInspectResponse { - #[serde(rename = "agent")] - pub agent: Box, -} - -impl CloudInspectResponse { - pub fn new(agent: crate::models::CloudAuthAgent) -> CloudInspectResponse { - CloudInspectResponse { - agent: Box::new(agent), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_lobby_summary_analytics.rs b/sdks/api/full/rust-cli/src/models/cloud_lobby_summary_analytics.rs deleted file mode 100644 index e99c372fb3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_lobby_summary_analytics.rs +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudLobbySummaryAnalytics : Analytical information about a lobby. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudLobbySummaryAnalytics { - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Whether or not this lobby is in a closed state. - #[serde(rename = "is_closed")] - pub is_closed: bool, - /// Whether or not this lobby is idle. - #[serde(rename = "is_idle")] - pub is_idle: bool, - /// Whether or not this lobby is outdated. - #[serde(rename = "is_outdated")] - pub is_outdated: bool, - /// Whether or not this lobby is ready. - #[serde(rename = "is_ready")] - pub is_ready: bool, - #[serde(rename = "lobby_group_id")] - pub lobby_group_id: uuid::Uuid, - /// 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. - #[serde(rename = "lobby_group_name_id")] - pub lobby_group_name_id: String, - #[serde(rename = "lobby_id")] - pub lobby_id: uuid::Uuid, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_direct")] - pub max_players_direct: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_normal")] - pub max_players_normal: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_party")] - pub max_players_party: i32, - #[serde(rename = "region_id")] - pub region_id: uuid::Uuid, - /// Unsigned 32 bit integer. - #[serde(rename = "registered_player_count")] - pub registered_player_count: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "total_player_count")] - pub total_player_count: i32, -} - -impl CloudLobbySummaryAnalytics { - /// Analytical information about a lobby. - pub fn new(create_ts: String, is_closed: bool, is_idle: bool, is_outdated: bool, is_ready: bool, lobby_group_id: uuid::Uuid, lobby_group_name_id: String, lobby_id: uuid::Uuid, max_players_direct: i32, max_players_normal: i32, max_players_party: i32, region_id: uuid::Uuid, registered_player_count: i32, total_player_count: i32) -> CloudLobbySummaryAnalytics { - CloudLobbySummaryAnalytics { - create_ts, - is_closed, - is_idle, - is_outdated, - is_ready, - lobby_group_id, - lobby_group_name_id, - lobby_id, - max_players_direct, - max_players_normal, - max_players_party, - region_id, - registered_player_count, - total_player_count, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_status.rs b/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_status.rs deleted file mode 100644 index 6ce2a4709b..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_status.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudLogsLobbyStatus : A union representing the state of a lobby. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudLogsLobbyStatus { - #[serde(rename = "running")] - pub running: serde_json::Value, - #[serde(rename = "stopped", skip_serializing_if = "Option::is_none")] - pub stopped: Option>, -} - -impl CloudLogsLobbyStatus { - /// A union representing the state of a lobby. - pub fn new(running: serde_json::Value) -> CloudLogsLobbyStatus { - CloudLogsLobbyStatus { - running, - stopped: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_status_stopped.rs b/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_status_stopped.rs deleted file mode 100644 index c74fa79844..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_status_stopped.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudLogsLobbyStatusStopped : The status of a stopped lobby. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudLogsLobbyStatusStopped { - /// The exit code returned by the lobby's main process when stopped. - #[serde(rename = "exit_code")] - pub exit_code: i32, - /// Whether or not the lobby failed or stopped successfully. - #[serde(rename = "failed")] - pub failed: bool, - /// RFC3339 timestamp - #[serde(rename = "stop_ts")] - pub stop_ts: String, -} - -impl CloudLogsLobbyStatusStopped { - /// The status of a stopped lobby. - pub fn new(exit_code: i32, failed: bool, stop_ts: String) -> CloudLogsLobbyStatusStopped { - CloudLogsLobbyStatusStopped { - exit_code, - failed, - stop_ts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_summary.rs b/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_summary.rs deleted file mode 100644 index 7f24f714de..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_logs_lobby_summary.rs +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudLogsLobbySummary : A logs summary for a lobby. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudLogsLobbySummary { - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// 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. - #[serde(rename = "lobby_group_name_id")] - pub lobby_group_name_id: String, - #[serde(rename = "lobby_id")] - pub lobby_id: uuid::Uuid, - #[serde(rename = "namespace_id")] - pub namespace_id: uuid::Uuid, - /// RFC3339 timestamp - #[serde(rename = "ready_ts", skip_serializing_if = "Option::is_none")] - pub ready_ts: Option, - #[serde(rename = "region_id")] - pub region_id: uuid::Uuid, - /// RFC3339 timestamp - #[serde(rename = "start_ts", skip_serializing_if = "Option::is_none")] - pub start_ts: Option, - #[serde(rename = "status")] - pub status: Box, -} - -impl CloudLogsLobbySummary { - /// A logs summary for a lobby. - pub fn new(create_ts: String, lobby_group_name_id: String, lobby_id: uuid::Uuid, namespace_id: uuid::Uuid, region_id: uuid::Uuid, status: crate::models::CloudLogsLobbyStatus) -> CloudLogsLobbySummary { - CloudLogsLobbySummary { - create_ts, - lobby_group_name_id, - lobby_id, - namespace_id, - ready_ts: None, - region_id, - start_ts: None, - status: Box::new(status), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_logs_perf_mark.rs b/sdks/api/full/rust-cli/src/models/cloud_logs_perf_mark.rs deleted file mode 100644 index 7df6a121f9..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_logs_perf_mark.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudLogsPerfMark : A performance mark. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudLogsPerfMark { - /// The label given to this performance mark. - #[serde(rename = "label")] - pub label: String, - #[serde(rename = "ray_id", skip_serializing_if = "Option::is_none")] - pub ray_id: Option, - #[serde(rename = "req_id", skip_serializing_if = "Option::is_none")] - pub req_id: Option, - /// RFC3339 timestamp - #[serde(rename = "ts")] - pub ts: String, -} - -impl CloudLogsPerfMark { - /// A performance mark. - pub fn new(label: String, ts: String) -> CloudLogsPerfMark { - CloudLogsPerfMark { - label, - ray_id: None, - req_id: None, - ts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_logs_perf_span.rs b/sdks/api/full/rust-cli/src/models/cloud_logs_perf_span.rs deleted file mode 100644 index 43429ba2c8..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_logs_perf_span.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudLogsPerfSpan : A performance span. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudLogsPerfSpan { - /// RFC3339 timestamp - #[serde(rename = "finish_ts", skip_serializing_if = "Option::is_none")] - pub finish_ts: Option, - /// The label given to this performance span. - #[serde(rename = "label")] - pub label: String, - #[serde(rename = "req_id", skip_serializing_if = "Option::is_none")] - pub req_id: Option, - /// RFC3339 timestamp - #[serde(rename = "start_ts")] - pub start_ts: String, -} - -impl CloudLogsPerfSpan { - /// A performance span. - pub fn new(label: String, start_ts: String) -> CloudLogsPerfSpan { - CloudLogsPerfSpan { - finish_ts: None, - label, - req_id: None, - start_ts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_matchmaker_development_port.rs b/sdks/api/full/rust-cli/src/models/cloud_matchmaker_development_port.rs deleted file mode 100644 index b901399953..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_matchmaker_development_port.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudMatchmakerDevelopmentPort : A port configuration used to create development tokens. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudMatchmakerDevelopmentPort { - #[serde(rename = "port", skip_serializing_if = "Option::is_none")] - pub port: Option, - #[serde(rename = "port_range", skip_serializing_if = "Option::is_none")] - pub port_range: Option>, - #[serde(rename = "protocol")] - pub protocol: crate::models::CloudVersionMatchmakerPortProtocol, -} - -impl CloudMatchmakerDevelopmentPort { - /// A port configuration used to create development tokens. - pub fn new(protocol: crate::models::CloudVersionMatchmakerPortProtocol) -> CloudMatchmakerDevelopmentPort { - CloudMatchmakerDevelopmentPort { - port: None, - port_range: None, - protocol, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_matchmaker_namespace_config.rs b/sdks/api/full/rust-cli/src/models/cloud_matchmaker_namespace_config.rs deleted file mode 100644 index 458a1df6b1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_matchmaker_namespace_config.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudMatchmakerNamespaceConfig : Matchmaker configuration for a given namespace. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudMatchmakerNamespaceConfig { - /// Unsigned 32 bit integer. - #[serde(rename = "lobby_count_max")] - pub lobby_count_max: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_per_client")] - pub max_players_per_client: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_per_client_hosting")] - pub max_players_per_client_hosting: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_per_client_proxy")] - pub max_players_per_client_proxy: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_per_client_tor")] - pub max_players_per_client_tor: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_per_client_vpn")] - pub max_players_per_client_vpn: i32, -} - -impl CloudMatchmakerNamespaceConfig { - /// Matchmaker configuration for a given namespace. - pub fn new(lobby_count_max: i32, max_players_per_client: i32, max_players_per_client_hosting: i32, max_players_per_client_proxy: i32, max_players_per_client_tor: i32, max_players_per_client_vpn: i32) -> CloudMatchmakerNamespaceConfig { - CloudMatchmakerNamespaceConfig { - lobby_count_max, - max_players_per_client, - max_players_per_client_hosting, - max_players_per_client_proxy, - max_players_per_client_tor, - max_players_per_client_vpn, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_namespace_config.rs b/sdks/api/full/rust-cli/src/models/cloud_namespace_config.rs deleted file mode 100644 index 7dfe67ee46..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_namespace_config.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudNamespaceConfig : Cloud configuration for a given namespace. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudNamespaceConfig { - #[serde(rename = "cdn")] - pub cdn: Box, - /// Identity configuration for a given namespace. - #[serde(rename = "identity")] - pub identity: serde_json::Value, - /// KV configuration for a given namespace. - #[serde(rename = "kv")] - pub kv: serde_json::Value, - #[serde(rename = "matchmaker")] - pub matchmaker: Box, -} - -impl CloudNamespaceConfig { - /// Cloud configuration for a given namespace. - pub fn new(cdn: crate::models::CloudCdnNamespaceConfig, identity: serde_json::Value, kv: serde_json::Value, matchmaker: crate::models::CloudMatchmakerNamespaceConfig) -> CloudNamespaceConfig { - CloudNamespaceConfig { - cdn: Box::new(cdn), - identity, - kv, - matchmaker: Box::new(matchmaker), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_namespace_full.rs b/sdks/api/full/rust-cli/src/models/cloud_namespace_full.rs deleted file mode 100644 index 581f7008ae..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_namespace_full.rs +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudNamespaceFull : A full namespace. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudNamespaceFull { - #[serde(rename = "config")] - pub config: Box, - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, - #[serde(rename = "namespace_id")] - pub namespace_id: uuid::Uuid, - #[serde(rename = "version_id")] - pub version_id: uuid::Uuid, -} - -impl CloudNamespaceFull { - /// A full namespace. - pub fn new(config: crate::models::CloudNamespaceConfig, create_ts: String, display_name: String, name_id: String, namespace_id: uuid::Uuid, version_id: uuid::Uuid) -> CloudNamespaceFull { - CloudNamespaceFull { - config: Box::new(config), - create_ts, - display_name, - name_id, - namespace_id, - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_namespace_summary.rs b/sdks/api/full/rust-cli/src/models/cloud_namespace_summary.rs deleted file mode 100644 index d7e3215a51..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_namespace_summary.rs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudNamespaceSummary : A namespace summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudNamespaceSummary { - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, - #[serde(rename = "namespace_id")] - pub namespace_id: uuid::Uuid, - #[serde(rename = "version_id")] - pub version_id: uuid::Uuid, -} - -impl CloudNamespaceSummary { - /// A namespace summary. - pub fn new(create_ts: String, display_name: String, name_id: String, namespace_id: uuid::Uuid, version_id: uuid::Uuid) -> CloudNamespaceSummary { - CloudNamespaceSummary { - create_ts, - display_name, - name_id, - namespace_id, - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_namespace_version.rs b/sdks/api/full/rust-cli/src/models/cloud_namespace_version.rs deleted file mode 100644 index fcab3769a1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_namespace_version.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudNamespaceVersion : A previously deployed namespace version. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudNamespaceVersion { - /// RFC3339 timestamp - #[serde(rename = "deploy_ts")] - pub deploy_ts: String, - /// A universally unique identifier. - #[serde(rename = "namespace_id")] - pub namespace_id: String, - /// A universally unique identifier. - #[serde(rename = "version_id")] - pub version_id: String, -} - -impl CloudNamespaceVersion { - /// A previously deployed namespace version. - pub fn new(deploy_ts: String, namespace_id: String, version_id: String) -> CloudNamespaceVersion { - CloudNamespaceVersion { - deploy_ts, - namespace_id, - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_region_summary.rs b/sdks/api/full/rust-cli/src/models/cloud_region_summary.rs deleted file mode 100644 index 397c9ceb8e..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_region_summary.rs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudRegionSummary : A region summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudRegionSummary { - /// The server provider of this region. - #[serde(rename = "provider")] - pub provider: String, - /// Represent a resource's readable display name. - #[serde(rename = "provider_display_name")] - pub provider_display_name: String, - /// Represent a resource's readable display name. - #[serde(rename = "region_display_name")] - pub region_display_name: String, - #[serde(rename = "region_id")] - pub region_id: uuid::Uuid, - /// 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. - #[serde(rename = "region_name_id")] - pub region_name_id: String, - #[serde(rename = "universal_region")] - pub universal_region: crate::models::CloudUniversalRegion, -} - -impl CloudRegionSummary { - /// A region summary. - pub fn new(provider: String, provider_display_name: String, region_display_name: String, region_id: uuid::Uuid, region_name_id: String, universal_region: crate::models::CloudUniversalRegion) -> CloudRegionSummary { - CloudRegionSummary { - provider, - provider_display_name, - region_display_name, - region_id, - region_name_id, - universal_region, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_region_tier.rs b/sdks/api/full/rust-cli/src/models/cloud_region_tier.rs deleted file mode 100644 index 7b21fb0790..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_region_tier.rs +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudRegionTier : A region server tier. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudRegionTier { - /// Internet bandwidth (MB). - #[serde(rename = "bandwidth")] - pub bandwidth: i32, - /// CPU frequency (MHz). - #[serde(rename = "cpu")] - pub cpu: i32, - /// Allocated disk space (MB). - #[serde(rename = "disk")] - pub disk: i32, - /// Allocated memory (MB). - #[serde(rename = "memory")] - pub memory: i32, - /// **Deprecated** Price billed for every second this server is running (in quadrillionth USD, 1,000,000,000,000 = $1.00). - #[serde(rename = "price_per_second")] - pub price_per_second: i32, - /// Together with the numerator, denotes the portion of the CPU a given server uses. - #[serde(rename = "rivet_cores_denominator")] - pub rivet_cores_denominator: i32, - /// Together with the denominator, denotes the portion of the CPU a given server uses. - #[serde(rename = "rivet_cores_numerator")] - pub rivet_cores_numerator: i32, - /// 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. - #[serde(rename = "tier_name_id")] - pub tier_name_id: String, -} - -impl CloudRegionTier { - /// A region server tier. - pub fn new(bandwidth: i32, cpu: i32, disk: i32, memory: i32, price_per_second: i32, rivet_cores_denominator: i32, rivet_cores_numerator: i32, tier_name_id: String) -> CloudRegionTier { - CloudRegionTier { - bandwidth, - cpu, - disk, - memory, - price_per_second, - rivet_cores_denominator, - rivet_cores_numerator, - tier_name_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_region_tier_expenses.rs b/sdks/api/full/rust-cli/src/models/cloud_region_tier_expenses.rs deleted file mode 100644 index 58daa9b4a1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_region_tier_expenses.rs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudRegionTierExpenses : Region tier expenses. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudRegionTierExpenses { - /// Amount of expenses for this region tier (in hundred-thousandths USD, 100,000 = $1.00). - #[serde(rename = "expenses")] - pub expenses: f64, - /// 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. - #[serde(rename = "lobby_group_name_id")] - pub lobby_group_name_id: String, - #[serde(rename = "namespace_id")] - pub namespace_id: uuid::Uuid, - #[serde(rename = "region_id")] - pub region_id: uuid::Uuid, - /// 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. - #[serde(rename = "tier_name_id")] - pub tier_name_id: String, - /// How long a region tier has been active (in milliseconds). - #[serde(rename = "uptime")] - pub uptime: f64, -} - -impl CloudRegionTierExpenses { - /// Region tier expenses. - pub fn new(expenses: f64, lobby_group_name_id: String, namespace_id: uuid::Uuid, region_id: uuid::Uuid, tier_name_id: String, uptime: f64) -> CloudRegionTierExpenses { - CloudRegionTierExpenses { - expenses, - lobby_group_name_id, - namespace_id, - region_id, - tier_name_id, - uptime, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_svc_metrics.rs b/sdks/api/full/rust-cli/src/models/cloud_svc_metrics.rs deleted file mode 100644 index e4d5250626..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_svc_metrics.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudSvcMetrics : Metrics relating to a job service. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudSvcMetrics { - /// Total allocated memory (MB). - #[serde(rename = "allocated_memory", skip_serializing_if = "Option::is_none")] - pub allocated_memory: Option, - /// CPU metrics. - #[serde(rename = "cpu")] - pub cpu: Vec, - /// The job name. - #[serde(rename = "job")] - pub job: String, - /// Memory metrics. - #[serde(rename = "memory")] - pub memory: Vec, -} - -impl CloudSvcMetrics { - /// Metrics relating to a job service. - pub fn new(cpu: Vec, job: String, memory: Vec) -> CloudSvcMetrics { - CloudSvcMetrics { - allocated_memory: None, - cpu, - job, - memory, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_svc_perf.rs b/sdks/api/full/rust-cli/src/models/cloud_svc_perf.rs deleted file mode 100644 index 297dd08172..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_svc_perf.rs +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudSvcPerf : A service performance summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudSvcPerf { - /// Unsigned 64 bit integer. - #[serde(rename = "duration")] - pub duration: i64, - /// A list of performance marks. - #[serde(rename = "marks")] - pub marks: Vec, - #[serde(rename = "req_id", skip_serializing_if = "Option::is_none")] - pub req_id: Option, - /// A list of performance spans. - #[serde(rename = "spans")] - pub spans: Vec, - /// The name of the service. - #[serde(rename = "svc_name")] - pub svc_name: String, - /// RFC3339 timestamp - #[serde(rename = "ts")] - pub ts: String, -} - -impl CloudSvcPerf { - /// A service performance summary. - pub fn new(duration: i64, marks: Vec, spans: Vec, svc_name: String, ts: String) -> CloudSvcPerf { - CloudSvcPerf { - duration, - marks, - req_id: None, - spans, - svc_name, - ts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_universal_region.rs b/sdks/api/full/rust-cli/src/models/cloud_universal_region.rs deleted file mode 100644 index 33d71d0238..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_universal_region.rs +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudUniversalRegion : **Deprecated** - -/// **Deprecated** -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum CloudUniversalRegion { - #[serde(rename = "unknown")] - Unknown, - #[serde(rename = "local")] - Local, - #[serde(rename = "amsterdam")] - Amsterdam, - #[serde(rename = "atlanta")] - Atlanta, - #[serde(rename = "bangalore")] - Bangalore, - #[serde(rename = "dallas")] - Dallas, - #[serde(rename = "frankfurt")] - Frankfurt, - #[serde(rename = "london")] - London, - #[serde(rename = "mumbai")] - Mumbai, - #[serde(rename = "newark")] - Newark, - #[serde(rename = "new_york_city")] - NewYorkCity, - #[serde(rename = "san_francisco")] - SanFrancisco, - #[serde(rename = "singapore")] - Singapore, - #[serde(rename = "sydney")] - Sydney, - #[serde(rename = "tokyo")] - Tokyo, - #[serde(rename = "toronto")] - Toronto, - #[serde(rename = "washington_dc")] - WashingtonDc, - #[serde(rename = "chicago")] - Chicago, - #[serde(rename = "paris")] - Paris, - #[serde(rename = "seattle")] - Seattle, - #[serde(rename = "sao_paulo")] - SaoPaulo, - #[serde(rename = "stockholm")] - Stockholm, - #[serde(rename = "chennai")] - Chennai, - #[serde(rename = "osaka")] - Osaka, - #[serde(rename = "milan")] - Milan, - #[serde(rename = "miami")] - Miami, - #[serde(rename = "jakarta")] - Jakarta, - #[serde(rename = "los_angeles")] - LosAngeles, - -} - -impl ToString for CloudUniversalRegion { - fn to_string(&self) -> String { - match self { - Self::Unknown => String::from("unknown"), - Self::Local => String::from("local"), - Self::Amsterdam => String::from("amsterdam"), - Self::Atlanta => String::from("atlanta"), - Self::Bangalore => String::from("bangalore"), - Self::Dallas => String::from("dallas"), - Self::Frankfurt => String::from("frankfurt"), - Self::London => String::from("london"), - Self::Mumbai => String::from("mumbai"), - Self::Newark => String::from("newark"), - Self::NewYorkCity => String::from("new_york_city"), - Self::SanFrancisco => String::from("san_francisco"), - Self::Singapore => String::from("singapore"), - Self::Sydney => String::from("sydney"), - Self::Tokyo => String::from("tokyo"), - Self::Toronto => String::from("toronto"), - Self::WashingtonDc => String::from("washington_dc"), - Self::Chicago => String::from("chicago"), - Self::Paris => String::from("paris"), - Self::Seattle => String::from("seattle"), - Self::SaoPaulo => String::from("sao_paulo"), - Self::Stockholm => String::from("stockholm"), - Self::Chennai => String::from("chennai"), - Self::Osaka => String::from("osaka"), - Self::Milan => String::from("milan"), - Self::Miami => String::from("miami"), - Self::Jakarta => String::from("jakarta"), - Self::LosAngeles => String::from("los_angeles"), - } - } -} - -impl Default for CloudUniversalRegion { - fn default() -> CloudUniversalRegion { - Self::Unknown - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_validate_group_request.rs b/sdks/api/full/rust-cli/src/models/cloud_validate_group_request.rs deleted file mode 100644 index 998146bdce..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_validate_group_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudValidateGroupRequest { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, -} - -impl CloudValidateGroupRequest { - pub fn new(display_name: String) -> CloudValidateGroupRequest { - CloudValidateGroupRequest { - display_name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_validate_group_response.rs b/sdks/api/full/rust-cli/src/models/cloud_validate_group_response.rs deleted file mode 100644 index 285d7b19c9..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_validate_group_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct CloudValidateGroupResponse { - /// A list of validation errors. - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl CloudValidateGroupResponse { - pub fn new(errors: Vec) -> CloudValidateGroupResponse { - CloudValidateGroupResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_cdn_config.rs deleted file mode 100644 index 5986543020..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_config.rs +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionCdnConfig : CDN configuration for a given version. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionCdnConfig { - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "build_command", skip_serializing_if = "Option::is_none")] - pub build_command: Option, - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "build_env", skip_serializing_if = "Option::is_none")] - pub build_env: Option<::std::collections::HashMap>, - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "build_output", skip_serializing_if = "Option::is_none")] - pub build_output: Option, - /// Multiple CDN version routes. - #[serde(rename = "routes", skip_serializing_if = "Option::is_none")] - pub routes: Option>, - #[serde(rename = "site_id", skip_serializing_if = "Option::is_none")] - pub site_id: Option, -} - -impl CloudVersionCdnConfig { - /// CDN configuration for a given version. - pub fn new() -> CloudVersionCdnConfig { - CloudVersionCdnConfig { - build_command: None, - build_env: None, - build_output: None, - routes: None, - site_id: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_custom_headers_middleware.rs b/sdks/api/full/rust-cli/src/models/cloud_version_cdn_custom_headers_middleware.rs deleted file mode 100644 index a06e043541..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_custom_headers_middleware.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionCdnCustomHeadersMiddleware { - #[serde(rename = "headers")] - pub headers: Vec, -} - -impl CloudVersionCdnCustomHeadersMiddleware { - pub fn new(headers: Vec) -> CloudVersionCdnCustomHeadersMiddleware { - CloudVersionCdnCustomHeadersMiddleware { - headers, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_header.rs b/sdks/api/full/rust-cli/src/models/cloud_version_cdn_header.rs deleted file mode 100644 index a62089037e..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_header.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionCdnHeader { - #[serde(rename = "name")] - pub name: String, - #[serde(rename = "value")] - pub value: String, -} - -impl CloudVersionCdnHeader { - pub fn new(name: String, value: String) -> CloudVersionCdnHeader { - CloudVersionCdnHeader { - name, - value, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_middleware.rs b/sdks/api/full/rust-cli/src/models/cloud_version_cdn_middleware.rs deleted file mode 100644 index ccbad1abf8..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_middleware.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionCdnMiddleware { - #[serde(rename = "kind")] - pub kind: Box, -} - -impl CloudVersionCdnMiddleware { - pub fn new(kind: crate::models::CloudVersionCdnMiddlewareKind) -> CloudVersionCdnMiddleware { - CloudVersionCdnMiddleware { - kind: Box::new(kind), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_middleware_kind.rs b/sdks/api/full/rust-cli/src/models/cloud_version_cdn_middleware_kind.rs deleted file mode 100644 index ceb83d085a..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_middleware_kind.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionCdnMiddlewareKind { - #[serde(rename = "custom_headers", skip_serializing_if = "Option::is_none")] - pub custom_headers: Option>, -} - -impl CloudVersionCdnMiddlewareKind { - pub fn new() -> CloudVersionCdnMiddlewareKind { - CloudVersionCdnMiddlewareKind { - custom_headers: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_route.rs b/sdks/api/full/rust-cli/src/models/cloud_version_cdn_route.rs deleted file mode 100644 index 2bc0616035..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_cdn_route.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionCdnRoute { - #[serde(rename = "glob")] - pub glob: String, - /// Multiple CDN version middleware. - #[serde(rename = "middlewares")] - pub middlewares: Vec, - /// Unsigned 32 bit integer. - #[serde(rename = "priority")] - pub priority: i32, -} - -impl CloudVersionCdnRoute { - pub fn new(glob: String, middlewares: Vec, priority: i32) -> CloudVersionCdnRoute { - CloudVersionCdnRoute { - glob, - middlewares, - priority, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_config.rs deleted file mode 100644 index 056f121f80..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_config.rs +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionConfig : Cloud configuration for a given version. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionConfig { - #[serde(rename = "cdn", skip_serializing_if = "Option::is_none")] - pub cdn: Option>, - #[serde(rename = "engine", skip_serializing_if = "Option::is_none")] - pub engine: Option>, - #[serde(rename = "identity", skip_serializing_if = "Option::is_none")] - pub identity: Option>, - /// KV configuration for a given version. - #[serde(rename = "kv", skip_serializing_if = "Option::is_none")] - pub kv: Option, - #[serde(rename = "matchmaker", skip_serializing_if = "Option::is_none")] - pub matchmaker: Option>, - #[serde(rename = "scripts", skip_serializing_if = "Option::is_none")] - pub scripts: Option<::std::collections::HashMap>, -} - -impl CloudVersionConfig { - /// Cloud configuration for a given version. - pub fn new() -> CloudVersionConfig { - CloudVersionConfig { - cdn: None, - engine: None, - identity: None, - kv: None, - matchmaker: None, - scripts: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_engine_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_engine_config.rs deleted file mode 100644 index 56b15cc7e3..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_engine_config.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionEngineConfig { - #[serde(rename = "custom", skip_serializing_if = "Option::is_none")] - pub custom: Option, - #[serde(rename = "godot", skip_serializing_if = "Option::is_none")] - pub godot: Option, - #[serde(rename = "html5", skip_serializing_if = "Option::is_none")] - pub html5: Option, - #[serde(rename = "unity", skip_serializing_if = "Option::is_none")] - pub unity: Option, - #[serde(rename = "unreal", skip_serializing_if = "Option::is_none")] - pub unreal: Option>, -} - -impl CloudVersionEngineConfig { - pub fn new() -> CloudVersionEngineConfig { - CloudVersionEngineConfig { - custom: None, - godot: None, - html5: None, - unity: None, - unreal: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_engine_unreal_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_engine_unreal_config.rs deleted file mode 100644 index 285d5536aa..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_engine_unreal_config.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionEngineUnrealConfig { - /// Name of the Unreal module that holds the game code. This is usually the value of `$.Modules[0].Name` in the file `MyProject.unproject`. _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "game_module")] - pub game_module: String, -} - -impl CloudVersionEngineUnrealConfig { - pub fn new(game_module: String) -> CloudVersionEngineUnrealConfig { - CloudVersionEngineUnrealConfig { - game_module, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_full.rs b/sdks/api/full/rust-cli/src/models/cloud_version_full.rs deleted file mode 100644 index ac4942fb27..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_full.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionFull : A full version. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionFull { - #[serde(rename = "config")] - pub config: Box, - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "version_id")] - pub version_id: uuid::Uuid, -} - -impl CloudVersionFull { - /// A full version. - pub fn new(config: crate::models::CloudVersionConfig, create_ts: String, display_name: String, version_id: uuid::Uuid) -> CloudVersionFull { - CloudVersionFull { - config: Box::new(config), - create_ts, - display_name, - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_identity_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_identity_config.rs deleted file mode 100644 index 09657f9f09..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_identity_config.rs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionIdentityConfig : **Deprecated** Identity configuration for a given version. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionIdentityConfig { - /// **Deprecated** - #[serde(rename = "avatars", skip_serializing_if = "Option::is_none")] - pub avatars: Option>, - /// **Deprecated** - #[serde(rename = "custom_avatars", skip_serializing_if = "Option::is_none")] - pub custom_avatars: Option>, - /// **Deprecated** - #[serde(rename = "custom_display_names", skip_serializing_if = "Option::is_none")] - pub custom_display_names: Option>, - /// **Deprecated** - #[serde(rename = "display_names", skip_serializing_if = "Option::is_none")] - pub display_names: Option>, -} - -impl CloudVersionIdentityConfig { - /// **Deprecated** Identity configuration for a given version. - pub fn new() -> CloudVersionIdentityConfig { - CloudVersionIdentityConfig { - avatars: None, - custom_avatars: None, - custom_display_names: None, - display_names: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_identity_custom_avatar.rs b/sdks/api/full/rust-cli/src/models/cloud_version_identity_custom_avatar.rs deleted file mode 100644 index 09fc3dc084..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_identity_custom_avatar.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionIdentityCustomAvatar { - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl CloudVersionIdentityCustomAvatar { - pub fn new(upload_id: uuid::Uuid) -> CloudVersionIdentityCustomAvatar { - CloudVersionIdentityCustomAvatar { - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_identity_custom_display_name.rs b/sdks/api/full/rust-cli/src/models/cloud_version_identity_custom_display_name.rs deleted file mode 100644 index 41fcfc2245..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_identity_custom_display_name.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionIdentityCustomDisplayName { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, -} - -impl CloudVersionIdentityCustomDisplayName { - pub fn new(display_name: String) -> CloudVersionIdentityCustomDisplayName { - CloudVersionIdentityCustomDisplayName { - display_name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha.rs deleted file mode 100644 index 0400a3174b..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerCaptcha : Matchmaker captcha configuration. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerCaptcha { - #[serde(rename = "hcaptcha", skip_serializing_if = "Option::is_none")] - pub hcaptcha: Option>, - /// Denotes how many requests a connection can make before it is required to reverify a captcha. - #[serde(rename = "requests_before_reverify")] - pub requests_before_reverify: i32, - #[serde(rename = "turnstile", skip_serializing_if = "Option::is_none")] - pub turnstile: Option>, - /// Denotes how long a connection can continue to reconnect without having to reverify a captcha (in milliseconds). - #[serde(rename = "verification_ttl")] - pub verification_ttl: i64, -} - -impl CloudVersionMatchmakerCaptcha { - /// Matchmaker captcha configuration. - pub fn new(requests_before_reverify: i32, verification_ttl: i64) -> CloudVersionMatchmakerCaptcha { - CloudVersionMatchmakerCaptcha { - hcaptcha: None, - requests_before_reverify, - turnstile: None, - verification_ttl, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_hcaptcha.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_hcaptcha.rs deleted file mode 100644 index c102c863d6..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_hcaptcha.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerCaptchaHcaptcha : hCpatcha configuration. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerCaptchaHcaptcha { - #[serde(rename = "level", skip_serializing_if = "Option::is_none")] - pub level: Option, - /// Secret key for your hCaptcha application. Must be set. - #[serde(rename = "secret_key", skip_serializing_if = "Option::is_none")] - pub secret_key: Option, - /// Site key for your hCaptcha application. Must be set. - #[serde(rename = "site_key", skip_serializing_if = "Option::is_none")] - pub site_key: Option, -} - -impl CloudVersionMatchmakerCaptchaHcaptcha { - /// hCpatcha configuration. - pub fn new() -> CloudVersionMatchmakerCaptchaHcaptcha { - CloudVersionMatchmakerCaptchaHcaptcha { - level: None, - secret_key: None, - site_key: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_hcaptcha_level.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_hcaptcha_level.rs deleted file mode 100644 index f01e7f3b10..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_hcaptcha_level.rs +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerCaptchaHcaptchaLevel : **Deprecated** How hard a captcha should be. - -/// **Deprecated** How hard a captcha should be. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub enum CloudVersionMatchmakerCaptchaHcaptchaLevel { - #[serde(rename = "easy")] - Easy, - #[serde(rename = "moderate")] - Moderate, - #[serde(rename = "difficult")] - Difficult, - #[serde(rename = "always_on")] - AlwaysOn, - -} - -impl ToString for CloudVersionMatchmakerCaptchaHcaptchaLevel { - fn to_string(&self) -> String { - match self { - Self::Easy => String::from("easy"), - Self::Moderate => String::from("moderate"), - Self::Difficult => String::from("difficult"), - Self::AlwaysOn => String::from("always_on"), - } - } -} - -impl Default for CloudVersionMatchmakerCaptchaHcaptchaLevel { - fn default() -> CloudVersionMatchmakerCaptchaHcaptchaLevel { - Self::Easy - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_turnstile.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_turnstile.rs deleted file mode 100644 index 0422fee6b2..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_captcha_turnstile.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerCaptchaTurnstile : Turnstile captcha configuration. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerCaptchaTurnstile { - #[serde(rename = "secret_key")] - pub secret_key: String, - #[serde(rename = "site_key")] - pub site_key: String, -} - -impl CloudVersionMatchmakerCaptchaTurnstile { - /// Turnstile captcha configuration. - pub fn new(secret_key: String, site_key: String) -> CloudVersionMatchmakerCaptchaTurnstile { - CloudVersionMatchmakerCaptchaTurnstile { - secret_key, - site_key, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_config.rs deleted file mode 100644 index b849e2def7..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_config.rs +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerConfig : Matchmaker configuration for a given version. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerConfig { - #[serde(rename = "captcha", skip_serializing_if = "Option::is_none")] - pub captcha: Option>, - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "dev_hostname", skip_serializing_if = "Option::is_none")] - pub dev_hostname: Option, - #[serde(rename = "docker", skip_serializing_if = "Option::is_none")] - pub docker: Option>, - /// A list of game modes. - #[serde(rename = "game_modes", skip_serializing_if = "Option::is_none")] - pub game_modes: Option<::std::collections::HashMap>, - #[serde(rename = "idle_lobbies", skip_serializing_if = "Option::is_none")] - pub idle_lobbies: Option>, - /// **Deprecated: use `game_modes` instead** A list of game modes. - #[serde(rename = "lobby_groups", skip_serializing_if = "Option::is_none")] - pub lobby_groups: Option>, - #[serde(rename = "max_players", skip_serializing_if = "Option::is_none")] - pub max_players: Option, - #[serde(rename = "max_players_direct", skip_serializing_if = "Option::is_none")] - pub max_players_direct: Option, - #[serde(rename = "max_players_party", skip_serializing_if = "Option::is_none")] - pub max_players_party: Option, - #[serde(rename = "regions", skip_serializing_if = "Option::is_none")] - pub regions: Option<::std::collections::HashMap>, - #[serde(rename = "tier", skip_serializing_if = "Option::is_none")] - pub tier: Option, -} - -impl CloudVersionMatchmakerConfig { - /// Matchmaker configuration for a given version. - pub fn new() -> CloudVersionMatchmakerConfig { - CloudVersionMatchmakerConfig { - captcha: None, - dev_hostname: None, - docker: None, - game_modes: None, - idle_lobbies: None, - lobby_groups: None, - max_players: None, - max_players_direct: None, - max_players_party: None, - regions: None, - tier: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode.rs deleted file mode 100644 index 5f2c84ffc5..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode.rs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameMode : A game mode. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameMode { - #[serde(rename = "actions", skip_serializing_if = "Option::is_none")] - pub actions: Option>, - #[serde(rename = "allow_dynamic_max_players", skip_serializing_if = "Option::is_none")] - pub allow_dynamic_max_players: Option, - #[serde(rename = "docker", skip_serializing_if = "Option::is_none")] - pub docker: Option>, - #[serde(rename = "idle_lobbies", skip_serializing_if = "Option::is_none")] - pub idle_lobbies: Option>, - #[serde(rename = "listable", skip_serializing_if = "Option::is_none")] - pub listable: Option, - #[serde(rename = "max_players", skip_serializing_if = "Option::is_none")] - pub max_players: Option, - #[serde(rename = "max_players_direct", skip_serializing_if = "Option::is_none")] - pub max_players_direct: Option, - #[serde(rename = "max_players_party", skip_serializing_if = "Option::is_none")] - pub max_players_party: Option, - #[serde(rename = "regions", skip_serializing_if = "Option::is_none")] - pub regions: Option<::std::collections::HashMap>, - #[serde(rename = "taggable", skip_serializing_if = "Option::is_none")] - pub taggable: Option, - #[serde(rename = "tier", skip_serializing_if = "Option::is_none")] - pub tier: Option, -} - -impl CloudVersionMatchmakerGameMode { - /// A game mode. - pub fn new() -> CloudVersionMatchmakerGameMode { - CloudVersionMatchmakerGameMode { - actions: None, - allow_dynamic_max_players: None, - docker: None, - idle_lobbies: None, - listable: None, - max_players: None, - max_players_direct: None, - max_players_party: None, - regions: None, - taggable: None, - tier: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_actions.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_actions.rs deleted file mode 100644 index 69211f69a5..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_actions.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeActions : Configuration for the connection types allowed for a game mode. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeActions { - #[serde(rename = "create", skip_serializing_if = "Option::is_none")] - pub create: Option>, - #[serde(rename = "find", skip_serializing_if = "Option::is_none")] - pub find: Option>, - #[serde(rename = "join", skip_serializing_if = "Option::is_none")] - pub join: Option>, -} - -impl CloudVersionMatchmakerGameModeActions { - /// Configuration for the connection types allowed for a game mode. - pub fn new() -> CloudVersionMatchmakerGameModeActions { - CloudVersionMatchmakerGameModeActions { - create: None, - find: None, - join: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_create_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_create_config.rs deleted file mode 100644 index 13a1c53e50..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_create_config.rs +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeCreateConfig : Configures the requirements and authentication for the /create endpoint. If this value is not set in the config, the /create endpoint is NOT enabled. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeCreateConfig { - /// Defaults to true when unset. - #[serde(rename = "enable_private", skip_serializing_if = "Option::is_none")] - pub enable_private: Option, - /// Defaults to false when unset. - #[serde(rename = "enable_public", skip_serializing_if = "Option::is_none")] - pub enable_public: Option, - /// Sets whether or not the /create endpoint is enabled. - #[serde(rename = "enabled")] - pub enabled: bool, - #[serde(rename = "identity_requirement", skip_serializing_if = "Option::is_none")] - pub identity_requirement: Option, - /// **Deprecated** - #[serde(rename = "max_lobbies_per_identity", skip_serializing_if = "Option::is_none")] - pub max_lobbies_per_identity: Option, - #[serde(rename = "verification", skip_serializing_if = "Option::is_none")] - pub verification: Option>, -} - -impl CloudVersionMatchmakerGameModeCreateConfig { - /// Configures the requirements and authentication for the /create endpoint. If this value is not set in the config, the /create endpoint is NOT enabled. - pub fn new(enabled: bool) -> CloudVersionMatchmakerGameModeCreateConfig { - CloudVersionMatchmakerGameModeCreateConfig { - enable_private: None, - enable_public: None, - enabled, - identity_requirement: None, - max_lobbies_per_identity: None, - verification: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_find_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_find_config.rs deleted file mode 100644 index c47446e670..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_find_config.rs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeFindConfig : Configures the requirements and authentication for the /find endpoint. If this value is not set in the config, the /find endpoint is still enabled. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeFindConfig { - /// Sets whether or not the /find endpoint is enabled. - #[serde(rename = "enabled")] - pub enabled: bool, - #[serde(rename = "identity_requirement", skip_serializing_if = "Option::is_none")] - pub identity_requirement: Option, - #[serde(rename = "verification", skip_serializing_if = "Option::is_none")] - pub verification: Option>, -} - -impl CloudVersionMatchmakerGameModeFindConfig { - /// Configures the requirements and authentication for the /find endpoint. If this value is not set in the config, the /find endpoint is still enabled. - pub fn new(enabled: bool) -> CloudVersionMatchmakerGameModeFindConfig { - CloudVersionMatchmakerGameModeFindConfig { - enabled, - identity_requirement: None, - verification: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_identity_requirement.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_identity_requirement.rs deleted file mode 100644 index efd474b0f1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_identity_requirement.rs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeIdentityRequirement : **Deprecated** The registration requirement for a user when joining/finding/creating a lobby. \"None\" allows for connections without an identity. - -/// **Deprecated** The registration requirement for a user when joining/finding/creating a lobby. \"None\" allows for connections without an identity. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub enum CloudVersionMatchmakerGameModeIdentityRequirement { - #[serde(rename = "none")] - None, - #[serde(rename = "guest")] - Guest, - #[serde(rename = "registered")] - Registered, - -} - -impl ToString for CloudVersionMatchmakerGameModeIdentityRequirement { - fn to_string(&self) -> String { - match self { - Self::None => String::from("none"), - Self::Guest => String::from("guest"), - Self::Registered => String::from("registered"), - } - } -} - -impl Default for CloudVersionMatchmakerGameModeIdentityRequirement { - fn default() -> CloudVersionMatchmakerGameModeIdentityRequirement { - Self::None - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_idle_lobbies_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_idle_lobbies_config.rs deleted file mode 100644 index ec7ff0ceec..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_idle_lobbies_config.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeIdleLobbiesConfig : Configuration for how many idle lobbies a game version should have. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeIdleLobbiesConfig { - #[serde(rename = "max")] - pub max: i32, - #[serde(rename = "min")] - pub min: i32, -} - -impl CloudVersionMatchmakerGameModeIdleLobbiesConfig { - /// Configuration for how many idle lobbies a game version should have. - pub fn new(max: i32, min: i32) -> CloudVersionMatchmakerGameModeIdleLobbiesConfig { - CloudVersionMatchmakerGameModeIdleLobbiesConfig { - max, - min, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_join_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_join_config.rs deleted file mode 100644 index 5a7f01d870..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_join_config.rs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeJoinConfig : Configures the requirements and authentication for the /join endpoint. If this value is not set in the config, the /join endpoint is still enabled. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeJoinConfig { - /// Sets whether or not the /join endpoint is enabled. - #[serde(rename = "enabled")] - pub enabled: bool, - #[serde(rename = "identity_requirement", skip_serializing_if = "Option::is_none")] - pub identity_requirement: Option, - #[serde(rename = "verification", skip_serializing_if = "Option::is_none")] - pub verification: Option>, -} - -impl CloudVersionMatchmakerGameModeJoinConfig { - /// Configures the requirements and authentication for the /join endpoint. If this value is not set in the config, the /join endpoint is still enabled. - pub fn new(enabled: bool) -> CloudVersionMatchmakerGameModeJoinConfig { - CloudVersionMatchmakerGameModeJoinConfig { - enabled, - identity_requirement: None, - verification: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_region.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_region.rs deleted file mode 100644 index 79203979ff..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_region.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeRegion : A game mode region. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeRegion { - #[serde(rename = "idle_lobbies", skip_serializing_if = "Option::is_none")] - pub idle_lobbies: Option>, - #[serde(rename = "tier", skip_serializing_if = "Option::is_none")] - pub tier: Option, -} - -impl CloudVersionMatchmakerGameModeRegion { - /// A game mode region. - pub fn new() -> CloudVersionMatchmakerGameModeRegion { - CloudVersionMatchmakerGameModeRegion { - idle_lobbies: None, - tier: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_runtime_docker.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_runtime_docker.rs deleted file mode 100644 index c38c6f2da8..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_runtime_docker.rs +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeRuntimeDocker : A game mode runtime running through Docker. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeRuntimeDocker { - #[serde(rename = "args", skip_serializing_if = "Option::is_none")] - pub args: Option>, - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "build_args", skip_serializing_if = "Option::is_none")] - pub build_args: Option<::std::collections::HashMap>, - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "dockerfile", skip_serializing_if = "Option::is_none")] - pub dockerfile: Option, - #[serde(rename = "env", skip_serializing_if = "Option::is_none")] - pub env: Option<::std::collections::HashMap>, - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "image", skip_serializing_if = "Option::is_none")] - pub image: Option, - #[serde(rename = "image_id", skip_serializing_if = "Option::is_none")] - pub image_id: Option, - #[serde(rename = "network_mode", skip_serializing_if = "Option::is_none")] - pub network_mode: Option, - #[serde(rename = "ports", skip_serializing_if = "Option::is_none")] - pub ports: Option<::std::collections::HashMap>, -} - -impl CloudVersionMatchmakerGameModeRuntimeDocker { - /// A game mode runtime running through Docker. - pub fn new() -> CloudVersionMatchmakerGameModeRuntimeDocker { - CloudVersionMatchmakerGameModeRuntimeDocker { - args: None, - build_args: None, - dockerfile: None, - env: None, - image: None, - image_id: None, - network_mode: None, - ports: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_runtime_docker_port.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_runtime_docker_port.rs deleted file mode 100644 index 6c62491236..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_runtime_docker_port.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeRuntimeDockerPort : Port config for a docker build. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeRuntimeDockerPort { - /// _Configures Rivet CLI behavior. Has no effect on server behavior._ - #[serde(rename = "dev_port", skip_serializing_if = "Option::is_none")] - pub dev_port: Option, - #[serde(rename = "dev_port_range", skip_serializing_if = "Option::is_none")] - pub dev_port_range: Option>, - #[serde(rename = "dev_protocol", skip_serializing_if = "Option::is_none")] - pub dev_protocol: Option, - /// The port number to connect to. ### Related - cloud.version.matchmaker.PortProtocol - cloud.version.matchmaker.ProxyKind - #[serde(rename = "port", skip_serializing_if = "Option::is_none")] - pub port: Option, - #[serde(rename = "port_range", skip_serializing_if = "Option::is_none")] - pub port_range: Option>, - #[serde(rename = "protocol", skip_serializing_if = "Option::is_none")] - pub protocol: Option, - #[serde(rename = "proxy", skip_serializing_if = "Option::is_none")] - pub proxy: Option, -} - -impl CloudVersionMatchmakerGameModeRuntimeDockerPort { - /// Port config for a docker build. - pub fn new() -> CloudVersionMatchmakerGameModeRuntimeDockerPort { - CloudVersionMatchmakerGameModeRuntimeDockerPort { - dev_port: None, - dev_port_range: None, - dev_protocol: None, - port: None, - port_range: None, - protocol: None, - proxy: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_verification_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_verification_config.rs deleted file mode 100644 index 76e500ce29..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_game_mode_verification_config.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerGameModeVerificationConfig : 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. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerGameModeVerificationConfig { - #[serde(rename = "headers")] - pub headers: ::std::collections::HashMap, - #[serde(rename = "url")] - pub url: String, -} - -impl CloudVersionMatchmakerGameModeVerificationConfig { - /// 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. - pub fn new(headers: ::std::collections::HashMap, url: String) -> CloudVersionMatchmakerGameModeVerificationConfig { - CloudVersionMatchmakerGameModeVerificationConfig { - headers, - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group.rs deleted file mode 100644 index 3c252dce19..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerLobbyGroup : A game mode. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerLobbyGroup { - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_direct")] - pub max_players_direct: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_normal")] - pub max_players_normal: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "max_players_party")] - pub max_players_party: i32, - /// **Deprecated: use GameMode instead** 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. - #[serde(rename = "name_id")] - pub name_id: String, - /// A list of game mode regions. - #[serde(rename = "regions")] - pub regions: Vec, - #[serde(rename = "runtime")] - pub runtime: Box, -} - -impl CloudVersionMatchmakerLobbyGroup { - /// A game mode. - pub fn new(max_players_direct: i32, max_players_normal: i32, max_players_party: i32, name_id: String, regions: Vec, runtime: crate::models::CloudVersionMatchmakerLobbyGroupRuntime) -> CloudVersionMatchmakerLobbyGroup { - CloudVersionMatchmakerLobbyGroup { - max_players_direct, - max_players_normal, - max_players_party, - name_id, - regions, - runtime: Box::new(runtime), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_idle_lobbies_config.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_idle_lobbies_config.rs deleted file mode 100644 index f79f2fd55d..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_idle_lobbies_config.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig : **Deprecated: use GameMode instead** Configuration for how many idle lobbies a game version should have. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig { - /// Unsigned 32 bit integer. - #[serde(rename = "max_idle_lobbies")] - pub max_idle_lobbies: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "min_idle_lobbies")] - pub min_idle_lobbies: i32, -} - -impl CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig { - /// **Deprecated: use GameMode instead** Configuration for how many idle lobbies a game version should have. - pub fn new(max_idle_lobbies: i32, min_idle_lobbies: i32) -> CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig { - CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig { - max_idle_lobbies, - min_idle_lobbies, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_region.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_region.rs deleted file mode 100644 index a920af7166..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_region.rs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerLobbyGroupRegion : **Deprecated: use GameMode instead** A game mode region. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerLobbyGroupRegion { - #[serde(rename = "idle_lobbies", skip_serializing_if = "Option::is_none")] - pub idle_lobbies: Option>, - #[serde(rename = "region_id")] - pub region_id: uuid::Uuid, - /// 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. - #[serde(rename = "tier_name_id")] - pub tier_name_id: String, -} - -impl CloudVersionMatchmakerLobbyGroupRegion { - /// **Deprecated: use GameMode instead** A game mode region. - pub fn new(region_id: uuid::Uuid, tier_name_id: String) -> CloudVersionMatchmakerLobbyGroupRegion { - CloudVersionMatchmakerLobbyGroupRegion { - idle_lobbies: None, - region_id, - tier_name_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime.rs deleted file mode 100644 index 60fd57d4d2..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerLobbyGroupRuntime : **Deprecated: use GameMode instead** A union representing the runtime a game mode runs on. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerLobbyGroupRuntime { - #[serde(rename = "docker", skip_serializing_if = "Option::is_none")] - pub docker: Option>, -} - -impl CloudVersionMatchmakerLobbyGroupRuntime { - /// **Deprecated: use GameMode instead** A union representing the runtime a game mode runs on. - pub fn new() -> CloudVersionMatchmakerLobbyGroupRuntime { - CloudVersionMatchmakerLobbyGroupRuntime { - docker: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker.rs deleted file mode 100644 index e462bcbba7..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerLobbyGroupRuntimeDocker : **Deprecated: use GameMode instead** A game mode runtime running through Docker. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerLobbyGroupRuntimeDocker { - #[serde(rename = "args")] - pub args: Vec, - #[serde(rename = "build_id", skip_serializing_if = "Option::is_none")] - pub build_id: Option, - #[serde(rename = "env_vars")] - pub env_vars: Vec, - #[serde(rename = "network_mode", skip_serializing_if = "Option::is_none")] - pub network_mode: Option, - #[serde(rename = "ports")] - pub ports: Vec, -} - -impl CloudVersionMatchmakerLobbyGroupRuntimeDocker { - /// **Deprecated: use GameMode instead** A game mode runtime running through Docker. - pub fn new(args: Vec, env_vars: Vec, ports: Vec) -> CloudVersionMatchmakerLobbyGroupRuntimeDocker { - CloudVersionMatchmakerLobbyGroupRuntimeDocker { - args, - build_id: None, - env_vars, - network_mode: None, - ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker_env_var.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker_env_var.rs deleted file mode 100644 index 86dc75bc01..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker_env_var.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar : **Deprecated: use GameMode instead** A docker environment variable. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar { - #[serde(rename = "key")] - pub key: String, - #[serde(rename = "value")] - pub value: String, -} - -impl CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar { - /// **Deprecated: use GameMode instead** A docker environment variable. - pub fn new(key: String, value: String) -> CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar { - CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar { - key, - value, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker_port.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker_port.rs deleted file mode 100644 index e66443297f..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_lobby_group_runtime_docker_port.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerLobbyGroupRuntimeDockerPort : **Deprecated: use GameMode instead** A docker port. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerLobbyGroupRuntimeDockerPort { - /// The label of this docker port. - #[serde(rename = "label")] - pub label: String, - #[serde(rename = "port_range", skip_serializing_if = "Option::is_none")] - pub port_range: Option>, - #[serde(rename = "proxy_protocol")] - pub proxy_protocol: crate::models::CloudVersionMatchmakerPortProtocol, - /// The port number to connect to. - #[serde(rename = "target_port", skip_serializing_if = "Option::is_none")] - pub target_port: Option, -} - -impl CloudVersionMatchmakerLobbyGroupRuntimeDockerPort { - /// **Deprecated: use GameMode instead** A docker port. - pub fn new(label: String, proxy_protocol: crate::models::CloudVersionMatchmakerPortProtocol) -> CloudVersionMatchmakerLobbyGroupRuntimeDockerPort { - CloudVersionMatchmakerLobbyGroupRuntimeDockerPort { - label, - port_range: None, - proxy_protocol, - target_port: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_network_mode.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_network_mode.rs deleted file mode 100644 index c2c49c0fe2..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_network_mode.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerNetworkMode : Configures how the container's network is isolated from the host. `bridge` (default) networking isolates the container's network from the host & other containers. `host` networking removes isolation between the container and the host. Only available in Rivet Open Source & Enterprise. Read more about bridge vs host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). - -/// Configures how the container's network is isolated from the host. `bridge` (default) networking isolates the container's network from the host & other containers. `host` networking removes isolation between the container and the host. Only available in Rivet Open Source & Enterprise. Read more about bridge vs host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub enum CloudVersionMatchmakerNetworkMode { - #[serde(rename = "bridge")] - Bridge, - #[serde(rename = "host")] - Host, - -} - -impl ToString for CloudVersionMatchmakerNetworkMode { - fn to_string(&self) -> String { - match self { - Self::Bridge => String::from("bridge"), - Self::Host => String::from("host"), - } - } -} - -impl Default for CloudVersionMatchmakerNetworkMode { - fn default() -> CloudVersionMatchmakerNetworkMode { - Self::Bridge - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_port_protocol.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_port_protocol.rs deleted file mode 100644 index d5e7328356..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_port_protocol.rs +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerPortProtocol : Signifies the protocol of the port. Note 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: - With HTTP, the port will always be 80. The hostname of the port correctly routes the incoming connection to the correct port being used by the game server. - With HTTPS, the port will always be 443. The hostname of the port correctly routes the incoming connection to the correct port being used by the game server. - Using TCP/UDP, the port will be a random number between 26000 and 31999. This gets automatically routed to the correct port being used by the game server. ### Related - cloud.version.matchmaker.GameModeRuntimeDockerPort - cloud.version.matchmaker.ProxyKind - /docs/dynamic-servers/concepts/game-guard - matchmaker.lobbies.find - -/// Signifies the protocol of the port. Note 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: - With HTTP, the port will always be 80. The hostname of the port correctly routes the incoming connection to the correct port being used by the game server. - With HTTPS, the port will always be 443. The hostname of the port correctly routes the incoming connection to the correct port being used by the game server. - Using TCP/UDP, the port will be a random number between 26000 and 31999. This gets automatically routed to the correct port being used by the game server. ### Related - cloud.version.matchmaker.GameModeRuntimeDockerPort - cloud.version.matchmaker.ProxyKind - /docs/dynamic-servers/concepts/game-guard - matchmaker.lobbies.find -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub enum CloudVersionMatchmakerPortProtocol { - #[serde(rename = "http")] - Http, - #[serde(rename = "https")] - Https, - #[serde(rename = "tcp")] - Tcp, - #[serde(rename = "tcp_tls")] - TcpTls, - #[serde(rename = "udp")] - Udp, - -} - -impl ToString for CloudVersionMatchmakerPortProtocol { - fn to_string(&self) -> String { - match self { - Self::Http => String::from("http"), - Self::Https => String::from("https"), - Self::Tcp => String::from("tcp"), - Self::TcpTls => String::from("tcp_tls"), - Self::Udp => String::from("udp"), - } - } -} - -impl Default for CloudVersionMatchmakerPortProtocol { - fn default() -> CloudVersionMatchmakerPortProtocol { - Self::Http - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_port_range.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_port_range.rs deleted file mode 100644 index f77a0d3ed1..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_port_range.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerPortRange : Range of ports that can be connected to. If configured, `network_mode` must equal `host`. Port ranges may overlap between containers, it is the responsibility of the developer to ensure ports are available before using. Read more about host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). Only available on Rivet Open Source & Enterprise. ### Related - cloud.version.matchmaker.PortProtocol - cloud.version.matchmaker.ProxyKind - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionMatchmakerPortRange { - /// Unsigned 32 bit integer. - #[serde(rename = "max")] - pub max: i32, - /// Unsigned 32 bit integer. - #[serde(rename = "min")] - pub min: i32, -} - -impl CloudVersionMatchmakerPortRange { - /// Range of ports that can be connected to. If configured, `network_mode` must equal `host`. Port ranges may overlap between containers, it is the responsibility of the developer to ensure ports are available before using. Read more about host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). Only available on Rivet Open Source & Enterprise. ### Related - cloud.version.matchmaker.PortProtocol - cloud.version.matchmaker.ProxyKind - pub fn new(max: i32, min: i32) -> CloudVersionMatchmakerPortRange { - CloudVersionMatchmakerPortRange { - max, - min, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_proxy_kind.rs b/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_proxy_kind.rs deleted file mode 100644 index 9482e5af6b..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_matchmaker_proxy_kind.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionMatchmakerProxyKind : Range of ports that can be connected to. `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. `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. ### Related - /docs/dynamic-servers/concepts/game-guard - cloud.version.matchmaker.PortProtocol - -/// Range of ports that can be connected to. `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. `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. ### Related - /docs/dynamic-servers/concepts/game-guard - cloud.version.matchmaker.PortProtocol -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub enum CloudVersionMatchmakerProxyKind { - #[serde(rename = "none")] - None, - #[serde(rename = "game_guard")] - GameGuard, - -} - -impl ToString for CloudVersionMatchmakerProxyKind { - fn to_string(&self) -> String { - match self { - Self::None => String::from("none"), - Self::GameGuard => String::from("game_guard"), - } - } -} - -impl Default for CloudVersionMatchmakerProxyKind { - fn default() -> CloudVersionMatchmakerProxyKind { - Self::None - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/cloud_version_summary.rs b/sdks/api/full/rust-cli/src/models/cloud_version_summary.rs deleted file mode 100644 index da670510c2..0000000000 --- a/sdks/api/full/rust-cli/src/models/cloud_version_summary.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// CloudVersionSummary : A version summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct CloudVersionSummary { - /// RFC3339 timestamp - #[serde(rename = "create_ts")] - pub create_ts: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "version_id")] - pub version_id: uuid::Uuid, -} - -impl CloudVersionSummary { - /// A version summary. - pub fn new(create_ts: String, display_name: String, version_id: uuid::Uuid) -> CloudVersionSummary { - CloudVersionSummary { - create_ts, - display_name, - version_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/error_body.rs b/sdks/api/full/rust-cli/src/models/error_body.rs deleted file mode 100644 index 1ad1d62334..0000000000 --- a/sdks/api/full/rust-cli/src/models/error_body.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ErrorBody { - #[serde(rename = "code")] - pub code: String, - #[serde(rename = "documentation", skip_serializing_if = "Option::is_none")] - pub documentation: Option, - #[serde(rename = "message")] - pub message: String, - /// Unstructured metadata relating to an error. Must be manually parsed. - #[serde(rename = "metadata", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub metadata: Option>, - #[serde(rename = "ray_id")] - pub ray_id: String, -} - -impl ErrorBody { - pub fn new(code: String, message: String, ray_id: String) -> ErrorBody { - ErrorBody { - code, - documentation: None, - message, - metadata: None, - ray_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_handle.rs b/sdks/api/full/rust-cli/src/models/game_handle.rs deleted file mode 100644 index 346a1b6a6e..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_handle.rs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GameHandle { - /// The URL of this game's banner image. - #[serde(rename = "banner_url", skip_serializing_if = "Option::is_none")] - pub banner_url: Option, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, - /// The URL of this game's logo image. - #[serde(rename = "logo_url", skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, -} - -impl GameHandle { - pub fn new(display_name: String, game_id: uuid::Uuid, name_id: String) -> GameHandle { - GameHandle { - banner_url: None, - display_name, - game_id, - logo_url: None, - name_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_leaderboard_category.rs b/sdks/api/full/rust-cli/src/models/game_leaderboard_category.rs deleted file mode 100644 index 29cb86fe4e..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_leaderboard_category.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameLeaderboardCategory : A game leaderboard category. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GameLeaderboardCategory { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, -} - -impl GameLeaderboardCategory { - /// A game leaderboard category. - pub fn new(display_name: String) -> GameLeaderboardCategory { - GameLeaderboardCategory { - display_name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_platform_link.rs b/sdks/api/full/rust-cli/src/models/game_platform_link.rs deleted file mode 100644 index f8a8591e22..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_platform_link.rs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GamePlatformLink : A platform link denoting a supported platform. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GamePlatformLink { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// The URL to the given game's method of distribution on this platform. - #[serde(rename = "url")] - pub url: String, -} - -impl GamePlatformLink { - /// A platform link denoting a supported platform. - pub fn new(display_name: String, url: String) -> GamePlatformLink { - GamePlatformLink { - display_name, - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_profile.rs b/sdks/api/full/rust-cli/src/models/game_profile.rs deleted file mode 100644 index 4fd3a3dfdb..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_profile.rs +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameProfile : A game profile. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GameProfile { - /// The URL of this game's banner image. - #[serde(rename = "banner_url", skip_serializing_if = "Option::is_none")] - pub banner_url: Option, - /// A description of the given game. - #[serde(rename = "description")] - pub description: String, - #[serde(rename = "developer")] - pub developer: Box, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, - /// A list of game leaderboard categories. - #[serde(rename = "group_leaderboard_categories")] - pub group_leaderboard_categories: Vec, - /// A list of game leaderboard categories. - #[serde(rename = "identity_leaderboard_categories")] - pub identity_leaderboard_categories: Vec, - /// The URL of this game's logo image. - #[serde(rename = "logo_url", skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, - /// A list of platform links. - #[serde(rename = "platforms")] - pub platforms: Vec, - /// A list of group summaries. - #[serde(rename = "recommended_groups")] - pub recommended_groups: Vec, - /// A list of game tags. - #[serde(rename = "tags")] - pub tags: Vec, - /// The URL to this game's website. - #[serde(rename = "url")] - pub url: String, -} - -impl GameProfile { - /// A game profile. - pub fn new(description: String, developer: crate::models::GroupSummary, display_name: String, game_id: uuid::Uuid, group_leaderboard_categories: Vec, identity_leaderboard_categories: Vec, name_id: String, platforms: Vec, recommended_groups: Vec, tags: Vec, url: String) -> GameProfile { - GameProfile { - banner_url: None, - description, - developer: Box::new(developer), - display_name, - game_id, - group_leaderboard_categories, - identity_leaderboard_categories, - logo_url: None, - name_id, - platforms, - recommended_groups, - tags, - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_stat.rs b/sdks/api/full/rust-cli/src/models/game_stat.rs deleted file mode 100644 index d9fbbfe2d1..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_stat.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameStat : A game statistic. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GameStat { - #[serde(rename = "config")] - pub config: Box, - /// A single overall value of the given statistic. - #[serde(rename = "overall_value")] - pub overall_value: f64, -} - -impl GameStat { - /// A game statistic. - pub fn new(config: crate::models::GameStatConfig, overall_value: f64) -> GameStat { - GameStat { - config: Box::new(config), - overall_value, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_stat_aggregation_method.rs b/sdks/api/full/rust-cli/src/models/game_stat_aggregation_method.rs deleted file mode 100644 index 7f11571aa2..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_stat_aggregation_method.rs +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameStatAggregationMethod : A value denoting the aggregation method of a game statistic. - -/// A value denoting the aggregation method of a game statistic. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum GameStatAggregationMethod { - #[serde(rename = "sum")] - Sum, - #[serde(rename = "average")] - Average, - #[serde(rename = "min")] - Min, - #[serde(rename = "max")] - Max, - -} - -impl ToString for GameStatAggregationMethod { - fn to_string(&self) -> String { - match self { - Self::Sum => String::from("sum"), - Self::Average => String::from("average"), - Self::Min => String::from("min"), - Self::Max => String::from("max"), - } - } -} - -impl Default for GameStatAggregationMethod { - fn default() -> GameStatAggregationMethod { - Self::Sum - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/game_stat_config.rs b/sdks/api/full/rust-cli/src/models/game_stat_config.rs deleted file mode 100644 index f9c47ec3b2..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_stat_config.rs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameStatConfig : A game statistic config. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GameStatConfig { - #[serde(rename = "aggregation")] - pub aggregation: crate::models::GameStatAggregationMethod, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "format")] - pub format: crate::models::GameStatFormatMethod, - #[serde(rename = "icon_id")] - pub icon_id: uuid::Uuid, - /// A string appended to the end of a game statistic's value that is not exactly 1. Example: 45 **dollars**. - #[serde(rename = "postfix_plural", skip_serializing_if = "Option::is_none")] - pub postfix_plural: Option, - /// A string appended to the end of a singular game statistic's value. Example: 1 **dollar**. - #[serde(rename = "postfix_singular", skip_serializing_if = "Option::is_none")] - pub postfix_singular: Option, - /// A string prepended to the beginning of a game statistic's value that is not exactly 1. Example: **values** 45. - #[serde(rename = "prefix_plural", skip_serializing_if = "Option::is_none")] - pub prefix_plural: Option, - /// A string appended to the beginning of a singular game statistic's value. Example: **value** 1. - #[serde(rename = "prefix_singular", skip_serializing_if = "Option::is_none")] - pub prefix_singular: Option, - #[serde(rename = "priority")] - pub priority: i32, - #[serde(rename = "record_id")] - pub record_id: uuid::Uuid, - #[serde(rename = "sorting")] - pub sorting: crate::models::GameStatSortingMethod, -} - -impl GameStatConfig { - /// A game statistic config. - pub fn new(aggregation: crate::models::GameStatAggregationMethod, display_name: String, format: crate::models::GameStatFormatMethod, icon_id: uuid::Uuid, priority: i32, record_id: uuid::Uuid, sorting: crate::models::GameStatSortingMethod) -> GameStatConfig { - GameStatConfig { - aggregation, - display_name, - format, - icon_id, - postfix_plural: None, - postfix_singular: None, - prefix_plural: None, - prefix_singular: None, - priority, - record_id, - sorting, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_stat_format_method.rs b/sdks/api/full/rust-cli/src/models/game_stat_format_method.rs deleted file mode 100644 index 7340afdf6e..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_stat_format_method.rs +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameStatFormatMethod : A value denoting the format method of a game statistic. - -/// A value denoting the format method of a game statistic. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum GameStatFormatMethod { - #[serde(rename = "integer")] - Integer, - #[serde(rename = "float_1")] - Float1, - #[serde(rename = "float_2")] - Float2, - #[serde(rename = "float_3")] - Float3, - #[serde(rename = "duration_minute")] - DurationMinute, - #[serde(rename = "duration_second")] - DurationSecond, - #[serde(rename = "duration_hundredth_second")] - DurationHundredthSecond, - -} - -impl ToString for GameStatFormatMethod { - fn to_string(&self) -> String { - match self { - Self::Integer => String::from("integer"), - Self::Float1 => String::from("float_1"), - Self::Float2 => String::from("float_2"), - Self::Float3 => String::from("float_3"), - Self::DurationMinute => String::from("duration_minute"), - Self::DurationSecond => String::from("duration_second"), - Self::DurationHundredthSecond => String::from("duration_hundredth_second"), - } - } -} - -impl Default for GameStatFormatMethod { - fn default() -> GameStatFormatMethod { - Self::Integer - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/game_stat_sorting_method.rs b/sdks/api/full/rust-cli/src/models/game_stat_sorting_method.rs deleted file mode 100644 index 695fcf70a6..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_stat_sorting_method.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameStatSortingMethod : A value denoting the sorting method of a game statistic. - -/// A value denoting the sorting method of a game statistic. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum GameStatSortingMethod { - #[serde(rename = "desc")] - Desc, - #[serde(rename = "asc")] - Asc, - -} - -impl ToString for GameStatSortingMethod { - fn to_string(&self) -> String { - match self { - Self::Desc => String::from("desc"), - Self::Asc => String::from("asc"), - } - } -} - -impl Default for GameStatSortingMethod { - fn default() -> GameStatSortingMethod { - Self::Desc - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/game_stat_summary.rs b/sdks/api/full/rust-cli/src/models/game_stat_summary.rs deleted file mode 100644 index 1d1a267675..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_stat_summary.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GameStatSummary : A game statistic summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GameStatSummary { - #[serde(rename = "game")] - pub game: Box, - #[serde(rename = "stats")] - pub stats: Vec, -} - -impl GameStatSummary { - /// A game statistic summary. - pub fn new(game: crate::models::GameHandle, stats: Vec) -> GameStatSummary { - GameStatSummary { - game: Box::new(game), - stats, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/game_summary.rs b/sdks/api/full/rust-cli/src/models/game_summary.rs deleted file mode 100644 index 88d337f3db..0000000000 --- a/sdks/api/full/rust-cli/src/models/game_summary.rs +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GameSummary { - /// The URL of this game's banner image. - #[serde(rename = "banner_url", skip_serializing_if = "Option::is_none")] - pub banner_url: Option, - #[serde(rename = "developer")] - pub developer: Box, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, - /// The URL of this game's logo image. - #[serde(rename = "logo_url", skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// 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. - #[serde(rename = "name_id")] - pub name_id: String, - /// Unsigned 32 bit integer. - #[serde(rename = "total_player_count")] - pub total_player_count: i32, - #[serde(rename = "url")] - pub url: String, -} - -impl GameSummary { - pub fn new(developer: crate::models::GroupHandle, display_name: String, game_id: uuid::Uuid, name_id: String, total_player_count: i32, url: String) -> GameSummary { - GameSummary { - banner_url: None, - developer: Box::new(developer), - display_name, - game_id, - logo_url: None, - name_id, - total_player_count, - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/games_environments_create_service_token_response.rs b/sdks/api/full/rust-cli/src/models/games_environments_create_service_token_response.rs deleted file mode 100644 index fb7f482fce..0000000000 --- a/sdks/api/full/rust-cli/src/models/games_environments_create_service_token_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GamesEnvironmentsCreateServiceTokenResponse { - /// A JSON Web Token. - #[serde(rename = "token")] - pub token: String, -} - -impl GamesEnvironmentsCreateServiceTokenResponse { - pub fn new(token: String) -> GamesEnvironmentsCreateServiceTokenResponse { - GamesEnvironmentsCreateServiceTokenResponse { - token, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/geo_coord.rs b/sdks/api/full/rust-cli/src/models/geo_coord.rs deleted file mode 100644 index 6ebb7e3346..0000000000 --- a/sdks/api/full/rust-cli/src/models/geo_coord.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GeoCoord : Geographical coordinates for a location on Planet Earth. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GeoCoord { - #[serde(rename = "latitude")] - pub latitude: f64, - #[serde(rename = "longitude")] - pub longitude: f64, -} - -impl GeoCoord { - /// Geographical coordinates for a location on Planet Earth. - pub fn new(latitude: f64, longitude: f64) -> GeoCoord { - GeoCoord { - latitude, - longitude, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/geo_distance.rs b/sdks/api/full/rust-cli/src/models/geo_distance.rs deleted file mode 100644 index 19b1f82bf0..0000000000 --- a/sdks/api/full/rust-cli/src/models/geo_distance.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GeoDistance : Distance available in multiple units. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GeoDistance { - #[serde(rename = "kilometers")] - pub kilometers: f64, - #[serde(rename = "miles")] - pub miles: f64, -} - -impl GeoDistance { - /// Distance available in multiple units. - pub fn new(kilometers: f64, miles: f64) -> GeoDistance { - GeoDistance { - kilometers, - miles, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/global_event_notification.rs b/sdks/api/full/rust-cli/src/models/global_event_notification.rs deleted file mode 100644 index d0ff0d22ee..0000000000 --- a/sdks/api/full/rust-cli/src/models/global_event_notification.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GlobalEventNotification { - #[serde(rename = "description")] - pub description: String, - #[serde(rename = "thumbnail_url")] - pub thumbnail_url: String, - #[serde(rename = "title")] - pub title: String, - #[serde(rename = "url")] - pub url: String, -} - -impl GlobalEventNotification { - pub fn new(description: String, thumbnail_url: String, title: String, url: String) -> GlobalEventNotification { - GlobalEventNotification { - description, - thumbnail_url, - title, - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_banned_identity.rs b/sdks/api/full/rust-cli/src/models/group_banned_identity.rs deleted file mode 100644 index 2e552da163..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_banned_identity.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GroupBannedIdentity : A banned identity. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupBannedIdentity { - /// RFC3339 timestamp - #[serde(rename = "ban_ts")] - pub ban_ts: String, - #[serde(rename = "identity")] - pub identity: Box, -} - -impl GroupBannedIdentity { - /// A banned identity. - pub fn new(ban_ts: String, identity: crate::models::IdentityHandle) -> GroupBannedIdentity { - GroupBannedIdentity { - ban_ts, - identity: Box::new(identity), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_consume_invite_response.rs b/sdks/api/full/rust-cli/src/models/group_consume_invite_response.rs deleted file mode 100644 index fe68dce2b4..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_consume_invite_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupConsumeInviteResponse { - #[serde(rename = "group_id", skip_serializing_if = "Option::is_none")] - pub group_id: Option, -} - -impl GroupConsumeInviteResponse { - pub fn new() -> GroupConsumeInviteResponse { - GroupConsumeInviteResponse { - group_id: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_create_invite_request.rs b/sdks/api/full/rust-cli/src/models/group_create_invite_request.rs deleted file mode 100644 index c4a59e94e5..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_create_invite_request.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupCreateInviteRequest { - /// How long until the group invite expires (in milliseconds). - #[serde(rename = "ttl", skip_serializing_if = "Option::is_none")] - pub ttl: Option, - /// How many times the group invite can be used. - #[serde(rename = "use_count", skip_serializing_if = "Option::is_none")] - pub use_count: Option, -} - -impl GroupCreateInviteRequest { - pub fn new() -> GroupCreateInviteRequest { - GroupCreateInviteRequest { - ttl: None, - use_count: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_create_invite_response.rs b/sdks/api/full/rust-cli/src/models/group_create_invite_response.rs deleted file mode 100644 index 47edeb56b1..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_create_invite_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupCreateInviteResponse { - /// The code that will be passed to `rivet.api.group#ConsumeInvite` to join a group. - #[serde(rename = "code")] - pub code: String, -} - -impl GroupCreateInviteResponse { - pub fn new(code: String) -> GroupCreateInviteResponse { - GroupCreateInviteResponse { - code, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_create_request.rs b/sdks/api/full/rust-cli/src/models/group_create_request.rs deleted file mode 100644 index 503c9ce897..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_create_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupCreateRequest { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, -} - -impl GroupCreateRequest { - pub fn new(display_name: String) -> GroupCreateRequest { - GroupCreateRequest { - display_name, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_create_response.rs b/sdks/api/full/rust-cli/src/models/group_create_response.rs deleted file mode 100644 index f31960ece8..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_create_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupCreateResponse { - #[serde(rename = "group_id")] - pub group_id: uuid::Uuid, -} - -impl GroupCreateResponse { - pub fn new(group_id: uuid::Uuid) -> GroupCreateResponse { - GroupCreateResponse { - group_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_external_links.rs b/sdks/api/full/rust-cli/src/models/group_external_links.rs deleted file mode 100644 index b9e0f15885..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_external_links.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GroupExternalLinks : External links for this group. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupExternalLinks { - /// A link to this group's profile page. - #[serde(rename = "profile")] - pub profile: String, -} - -impl GroupExternalLinks { - /// External links for this group. - pub fn new(profile: String) -> GroupExternalLinks { - GroupExternalLinks { - profile, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_get_bans_response.rs b/sdks/api/full/rust-cli/src/models/group_get_bans_response.rs deleted file mode 100644 index b2727d9fa0..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_get_bans_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupGetBansResponse { - /// The pagination anchor. - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - /// A list of banned group members. - #[serde(rename = "banned_identities")] - pub banned_identities: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl GroupGetBansResponse { - pub fn new(banned_identities: Vec, watch: crate::models::WatchResponse) -> GroupGetBansResponse { - GroupGetBansResponse { - anchor: None, - banned_identities, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_get_invite_response.rs b/sdks/api/full/rust-cli/src/models/group_get_invite_response.rs deleted file mode 100644 index caead9d125..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_get_invite_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupGetInviteResponse { - #[serde(rename = "group")] - pub group: Box, -} - -impl GroupGetInviteResponse { - pub fn new(group: crate::models::GroupHandle) -> GroupGetInviteResponse { - GroupGetInviteResponse { - group: Box::new(group), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_get_join_requests_response.rs b/sdks/api/full/rust-cli/src/models/group_get_join_requests_response.rs deleted file mode 100644 index 62988ed18c..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_get_join_requests_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupGetJoinRequestsResponse { - /// The pagination anchor. - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - /// A list of group join requests. - #[serde(rename = "join_requests")] - pub join_requests: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl GroupGetJoinRequestsResponse { - pub fn new(join_requests: Vec, watch: crate::models::WatchResponse) -> GroupGetJoinRequestsResponse { - GroupGetJoinRequestsResponse { - anchor: None, - join_requests, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_get_members_response.rs b/sdks/api/full/rust-cli/src/models/group_get_members_response.rs deleted file mode 100644 index 7b4917659c..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_get_members_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupGetMembersResponse { - /// The pagination anchor. - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - /// A list of group members. - #[serde(rename = "members")] - pub members: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl GroupGetMembersResponse { - pub fn new(members: Vec, watch: crate::models::WatchResponse) -> GroupGetMembersResponse { - GroupGetMembersResponse { - anchor: None, - members, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_get_profile_response.rs b/sdks/api/full/rust-cli/src/models/group_get_profile_response.rs deleted file mode 100644 index d89ac68b35..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_get_profile_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupGetProfileResponse { - #[serde(rename = "group")] - pub group: Box, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl GroupGetProfileResponse { - pub fn new(group: crate::models::GroupProfile, watch: crate::models::WatchResponse) -> GroupGetProfileResponse { - GroupGetProfileResponse { - group: Box::new(group), - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_get_summary_response.rs b/sdks/api/full/rust-cli/src/models/group_get_summary_response.rs deleted file mode 100644 index cc55fd9905..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_get_summary_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupGetSummaryResponse { - #[serde(rename = "group")] - pub group: Box, -} - -impl GroupGetSummaryResponse { - pub fn new(group: crate::models::GroupSummary) -> GroupGetSummaryResponse { - GroupGetSummaryResponse { - group: Box::new(group), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_handle.rs b/sdks/api/full/rust-cli/src/models/group_handle.rs deleted file mode 100644 index 6aed5a1bfa..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_handle.rs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GroupHandle : A group handle. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupHandle { - /// The URL of this group's avatar image - #[serde(rename = "avatar_url", skip_serializing_if = "Option::is_none")] - pub avatar_url: Option, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "external")] - pub external: Box, - #[serde(rename = "group_id")] - pub group_id: uuid::Uuid, - /// Whether or not this group is a developer group. - #[serde(rename = "is_developer", skip_serializing_if = "Option::is_none")] - pub is_developer: Option, -} - -impl GroupHandle { - /// A group handle. - pub fn new(display_name: String, external: crate::models::GroupExternalLinks, group_id: uuid::Uuid) -> GroupHandle { - GroupHandle { - avatar_url: None, - display_name, - external: Box::new(external), - group_id, - is_developer: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_join_request.rs b/sdks/api/full/rust-cli/src/models/group_join_request.rs deleted file mode 100644 index 64edb19238..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_join_request.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GroupJoinRequest : A group join request. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupJoinRequest { - #[serde(rename = "identity")] - pub identity: Box, - /// RFC3339 timestamp - #[serde(rename = "ts")] - pub ts: String, -} - -impl GroupJoinRequest { - /// A group join request. - pub fn new(identity: crate::models::IdentityHandle, ts: String) -> GroupJoinRequest { - GroupJoinRequest { - identity: Box::new(identity), - ts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_list_suggested_response.rs b/sdks/api/full/rust-cli/src/models/group_list_suggested_response.rs deleted file mode 100644 index 2fe41ffa8e..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_list_suggested_response.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupListSuggestedResponse { - /// A list of group summaries. - #[serde(rename = "groups")] - pub groups: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl GroupListSuggestedResponse { - pub fn new(groups: Vec, watch: crate::models::WatchResponse) -> GroupListSuggestedResponse { - GroupListSuggestedResponse { - groups, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_member.rs b/sdks/api/full/rust-cli/src/models/group_member.rs deleted file mode 100644 index aecd0ba064..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_member.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GroupMember : A group member. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupMember { - #[serde(rename = "identity")] - pub identity: Box, -} - -impl GroupMember { - /// A group member. - pub fn new(identity: crate::models::IdentityHandle) -> GroupMember { - GroupMember { - identity: Box::new(identity), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_prepare_avatar_upload_request.rs b/sdks/api/full/rust-cli/src/models/group_prepare_avatar_upload_request.rs deleted file mode 100644 index e07a49db68..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_prepare_avatar_upload_request.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupPrepareAvatarUploadRequest { - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// The MIME type of the group avatar. - #[serde(rename = "mime", skip_serializing_if = "Option::is_none")] - pub mime: Option, - /// The path/filename of the group avatar. - #[serde(rename = "path")] - pub path: String, -} - -impl GroupPrepareAvatarUploadRequest { - pub fn new(content_length: i64, path: String) -> GroupPrepareAvatarUploadRequest { - GroupPrepareAvatarUploadRequest { - content_length, - mime: None, - path, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_prepare_avatar_upload_response.rs b/sdks/api/full/rust-cli/src/models/group_prepare_avatar_upload_response.rs deleted file mode 100644 index 4917e80c8d..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_prepare_avatar_upload_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupPrepareAvatarUploadResponse { - #[serde(rename = "presigned_request")] - pub presigned_request: Box, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl GroupPrepareAvatarUploadResponse { - pub fn new(presigned_request: crate::models::UploadPresignedRequest, upload_id: uuid::Uuid) -> GroupPrepareAvatarUploadResponse { - GroupPrepareAvatarUploadResponse { - presigned_request: Box::new(presigned_request), - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_profile.rs b/sdks/api/full/rust-cli/src/models/group_profile.rs deleted file mode 100644 index c7ac6c1011..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_profile.rs +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GroupProfile : A list of group profiles. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupProfile { - /// The URL of this group's avatar image. - #[serde(rename = "avatar_url", skip_serializing_if = "Option::is_none")] - pub avatar_url: Option, - /// Detailed information about a profile. - #[serde(rename = "bio")] - pub bio: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "external")] - pub external: Box, - #[serde(rename = "group_id")] - pub group_id: uuid::Uuid, - /// Whether or not the current identity is a member of this group. - #[serde(rename = "is_current_identity_member", skip_serializing_if = "Option::is_none")] - pub is_current_identity_member: Option, - /// Whether or not the current identity is currently requesting to join this group. - #[serde(rename = "is_current_identity_requesting_join", skip_serializing_if = "Option::is_none")] - pub is_current_identity_requesting_join: Option, - /// Whether or not this group is a developer. - #[serde(rename = "is_developer", skip_serializing_if = "Option::is_none")] - pub is_developer: Option, - /// A list of group join requests. - #[serde(rename = "join_requests")] - pub join_requests: Vec, - /// Unsigned 32 bit integer. - #[serde(rename = "member_count", skip_serializing_if = "Option::is_none")] - pub member_count: Option, - /// A list of group members. - #[serde(rename = "members")] - pub members: Vec, - #[serde(rename = "owner_identity_id")] - pub owner_identity_id: uuid::Uuid, - #[serde(rename = "publicity")] - pub publicity: crate::models::GroupPublicity, -} - -impl GroupProfile { - /// A list of group profiles. - pub fn new(bio: String, display_name: String, external: crate::models::GroupExternalLinks, group_id: uuid::Uuid, join_requests: Vec, members: Vec, owner_identity_id: uuid::Uuid, publicity: crate::models::GroupPublicity) -> GroupProfile { - GroupProfile { - avatar_url: None, - bio, - display_name, - external: Box::new(external), - group_id, - is_current_identity_member: None, - is_current_identity_requesting_join: None, - is_developer: None, - join_requests, - member_count: None, - members, - owner_identity_id, - publicity, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_publicity.rs b/sdks/api/full/rust-cli/src/models/group_publicity.rs deleted file mode 100644 index e8d758d80b..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_publicity.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// GroupPublicity : The current publicity value for the given group. - -/// The current publicity value for the given group. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum GroupPublicity { - #[serde(rename = "open")] - Open, - #[serde(rename = "closed")] - Closed, - -} - -impl ToString for GroupPublicity { - fn to_string(&self) -> String { - match self { - Self::Open => String::from("open"), - Self::Closed => String::from("closed"), - } - } -} - -impl Default for GroupPublicity { - fn default() -> GroupPublicity { - Self::Open - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/group_resolve_join_request_request.rs b/sdks/api/full/rust-cli/src/models/group_resolve_join_request_request.rs deleted file mode 100644 index 32c1e7fef7..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_resolve_join_request_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupResolveJoinRequestRequest { - #[serde(rename = "resolution", skip_serializing_if = "Option::is_none")] - pub resolution: Option, -} - -impl GroupResolveJoinRequestRequest { - pub fn new() -> GroupResolveJoinRequestRequest { - GroupResolveJoinRequestRequest { - resolution: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_summary.rs b/sdks/api/full/rust-cli/src/models/group_summary.rs deleted file mode 100644 index 85ae0cfede..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_summary.rs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupSummary { - /// The URL of this group's avatar image. - #[serde(rename = "avatar_url", skip_serializing_if = "Option::is_none")] - pub avatar_url: Option, - /// Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$ - #[serde(rename = "bio")] - pub bio: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "external")] - pub external: Box, - #[serde(rename = "group_id")] - pub group_id: uuid::Uuid, - /// Whether or not the current identity is a member of this group. - #[serde(rename = "is_current_identity_member")] - pub is_current_identity_member: bool, - /// **Deprecated** Whether or not this group is a developer. - #[serde(rename = "is_developer")] - pub is_developer: bool, - #[serde(rename = "member_count")] - pub member_count: i32, - #[serde(rename = "owner_identity_id")] - pub owner_identity_id: uuid::Uuid, - #[serde(rename = "publicity")] - pub publicity: crate::models::GroupPublicity, -} - -impl GroupSummary { - pub fn new(bio: String, display_name: String, external: crate::models::GroupExternalLinks, group_id: uuid::Uuid, is_current_identity_member: bool, is_developer: bool, member_count: i32, owner_identity_id: uuid::Uuid, publicity: crate::models::GroupPublicity) -> GroupSummary { - GroupSummary { - avatar_url: None, - bio, - display_name, - external: Box::new(external), - group_id, - is_current_identity_member, - is_developer, - member_count, - owner_identity_id, - publicity, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_transfer_ownership_request.rs b/sdks/api/full/rust-cli/src/models/group_transfer_ownership_request.rs deleted file mode 100644 index 39cbd20782..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_transfer_ownership_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupTransferOwnershipRequest { - /// Identity to transfer the group to. Must be a member of the group. - #[serde(rename = "new_owner_identity_id")] - pub new_owner_identity_id: String, -} - -impl GroupTransferOwnershipRequest { - pub fn new(new_owner_identity_id: String) -> GroupTransferOwnershipRequest { - GroupTransferOwnershipRequest { - new_owner_identity_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_update_profile_request.rs b/sdks/api/full/rust-cli/src/models/group_update_profile_request.rs deleted file mode 100644 index e8e7672df5..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_update_profile_request.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupUpdateProfileRequest { - /// Detailed information about a profile. - #[serde(rename = "bio", skip_serializing_if = "Option::is_none")] - pub bio: Option, - /// Represent a resource's readable display name. - #[serde(rename = "display_name", skip_serializing_if = "Option::is_none")] - pub display_name: Option, - #[serde(rename = "publicity", skip_serializing_if = "Option::is_none")] - pub publicity: Option, -} - -impl GroupUpdateProfileRequest { - pub fn new() -> GroupUpdateProfileRequest { - GroupUpdateProfileRequest { - bio: None, - display_name: None, - publicity: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_validate_profile_request.rs b/sdks/api/full/rust-cli/src/models/group_validate_profile_request.rs deleted file mode 100644 index 501acb5beb..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_validate_profile_request.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupValidateProfileRequest { - /// Represent a resource's readable display name. - #[serde(rename = "bio", skip_serializing_if = "Option::is_none")] - pub bio: Option, - /// Represent a resource's readable display name. - #[serde(rename = "display_name", skip_serializing_if = "Option::is_none")] - pub display_name: Option, - #[serde(rename = "publicity", skip_serializing_if = "Option::is_none")] - pub publicity: Option, -} - -impl GroupValidateProfileRequest { - pub fn new() -> GroupValidateProfileRequest { - GroupValidateProfileRequest { - bio: None, - display_name: None, - publicity: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/group_validate_profile_response.rs b/sdks/api/full/rust-cli/src/models/group_validate_profile_response.rs deleted file mode 100644 index decad7e290..0000000000 --- a/sdks/api/full/rust-cli/src/models/group_validate_profile_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct GroupValidateProfileResponse { - /// A list of validation errors. - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl GroupValidateProfileResponse { - pub fn new(errors: Vec) -> GroupValidateProfileResponse { - GroupValidateProfileResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_dev_state.rs b/sdks/api/full/rust-cli/src/models/identity_dev_state.rs deleted file mode 100644 index bfe9d673a4..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_dev_state.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityDevState : The state of the given identity's developer status. - -/// The state of the given identity's developer status. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum IdentityDevState { - #[serde(rename = "inactive")] - Inactive, - #[serde(rename = "pending")] - Pending, - #[serde(rename = "accepted")] - Accepted, - -} - -impl ToString for IdentityDevState { - fn to_string(&self) -> String { - match self { - Self::Inactive => String::from("inactive"), - Self::Pending => String::from("pending"), - Self::Accepted => String::from("accepted"), - } - } -} - -impl Default for IdentityDevState { - fn default() -> IdentityDevState { - Self::Inactive - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/identity_email_linked_account.rs b/sdks/api/full/rust-cli/src/models/identity_email_linked_account.rs deleted file mode 100644 index 6c458bb42f..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_email_linked_account.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityEmailLinkedAccount : An identity's linked email. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityEmailLinkedAccount { - /// A valid email address - #[serde(rename = "email")] - pub email: String, -} - -impl IdentityEmailLinkedAccount { - /// An identity's linked email. - pub fn new(email: String) -> IdentityEmailLinkedAccount { - IdentityEmailLinkedAccount { - email, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_external_links.rs b/sdks/api/full/rust-cli/src/models/identity_external_links.rs deleted file mode 100644 index dddc3a0917..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_external_links.rs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityExternalLinks : External links for an identity. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityExternalLinks { - /// A link to this identity's profile page. - #[serde(rename = "profile")] - pub profile: String, - /// A link to the Rivet settings page. - #[serde(rename = "settings", skip_serializing_if = "Option::is_none")] - pub settings: Option, -} - -impl IdentityExternalLinks { - /// External links for an identity. - pub fn new(profile: String) -> IdentityExternalLinks { - IdentityExternalLinks { - profile, - settings: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_game_activity.rs b/sdks/api/full/rust-cli/src/models/identity_game_activity.rs deleted file mode 100644 index e4be94ffcb..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_game_activity.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityGameActivity : The game an identity is currently participating in. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGameActivity { - #[serde(rename = "game")] - pub game: Box, - /// A short activity message about the current game activity. - #[serde(rename = "message")] - pub message: String, - /// JSON data seen only by the given identity and their mutual followers. - #[serde(rename = "mutual_metadata", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub mutual_metadata: Option>, - /// JSON data seen by anyone. - #[serde(rename = "public_metadata", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub public_metadata: Option>, -} - -impl IdentityGameActivity { - /// The game an identity is currently participating in. - pub fn new(game: crate::models::GameHandle, message: String) -> IdentityGameActivity { - IdentityGameActivity { - game: Box::new(game), - message, - mutual_metadata: None, - public_metadata: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_game_link_status.rs b/sdks/api/full/rust-cli/src/models/identity_game_link_status.rs deleted file mode 100644 index 8fc24f518e..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_game_link_status.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum IdentityGameLinkStatus { - #[serde(rename = "incomplete")] - Incomplete, - #[serde(rename = "complete")] - Complete, - #[serde(rename = "cancelled")] - Cancelled, - -} - -impl ToString for IdentityGameLinkStatus { - fn to_string(&self) -> String { - match self { - Self::Incomplete => String::from("incomplete"), - Self::Complete => String::from("complete"), - Self::Cancelled => String::from("cancelled"), - } - } -} - -impl Default for IdentityGameLinkStatus { - fn default() -> IdentityGameLinkStatus { - Self::Incomplete - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/identity_get_handles_response.rs b/sdks/api/full/rust-cli/src/models/identity_get_handles_response.rs deleted file mode 100644 index ddbb9f7a0a..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_get_handles_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGetHandlesResponse { - #[serde(rename = "identities")] - pub identities: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityGetHandlesResponse { - pub fn new(identities: Vec, watch: crate::models::WatchResponse) -> IdentityGetHandlesResponse { - IdentityGetHandlesResponse { - identities, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_get_profile_response.rs b/sdks/api/full/rust-cli/src/models/identity_get_profile_response.rs deleted file mode 100644 index a1e34af613..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_get_profile_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGetProfileResponse { - #[serde(rename = "identity")] - pub identity: Box, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityGetProfileResponse { - pub fn new(identity: crate::models::IdentityProfile, watch: crate::models::WatchResponse) -> IdentityGetProfileResponse { - IdentityGetProfileResponse { - identity: Box::new(identity), - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_get_summaries_response.rs b/sdks/api/full/rust-cli/src/models/identity_get_summaries_response.rs deleted file mode 100644 index bf83a8b651..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_get_summaries_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGetSummariesResponse { - #[serde(rename = "identities")] - pub identities: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityGetSummariesResponse { - pub fn new(identities: Vec, watch: crate::models::WatchResponse) -> IdentityGetSummariesResponse { - IdentityGetSummariesResponse { - identities, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_global_event.rs b/sdks/api/full/rust-cli/src/models/identity_global_event.rs deleted file mode 100644 index e3533a36a9..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_global_event.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityGlobalEvent : An event relevant to the current identity. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGlobalEvent { - #[serde(rename = "kind")] - pub kind: Box, - #[serde(rename = "notification", skip_serializing_if = "Option::is_none")] - pub notification: Option>, - /// RFC3339 timestamp - #[serde(rename = "ts")] - pub ts: String, -} - -impl IdentityGlobalEvent { - /// An event relevant to the current identity. - pub fn new(kind: crate::models::IdentityGlobalEventKind, ts: String) -> IdentityGlobalEvent { - IdentityGlobalEvent { - kind: Box::new(kind), - notification: None, - ts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_global_event_identity_update.rs b/sdks/api/full/rust-cli/src/models/identity_global_event_identity_update.rs deleted file mode 100644 index 5ccdc16e9f..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_global_event_identity_update.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGlobalEventIdentityUpdate { - #[serde(rename = "identity")] - pub identity: Box, -} - -impl IdentityGlobalEventIdentityUpdate { - pub fn new(identity: crate::models::IdentityProfile) -> IdentityGlobalEventIdentityUpdate { - IdentityGlobalEventIdentityUpdate { - identity: Box::new(identity), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_global_event_kind.rs b/sdks/api/full/rust-cli/src/models/identity_global_event_kind.rs deleted file mode 100644 index fab257077b..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_global_event_kind.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGlobalEventKind { - #[serde(rename = "identity_update", skip_serializing_if = "Option::is_none")] - pub identity_update: Option>, -} - -impl IdentityGlobalEventKind { - pub fn new() -> IdentityGlobalEventKind { - IdentityGlobalEventKind { - identity_update: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_global_event_notification.rs b/sdks/api/full/rust-cli/src/models/identity_global_event_notification.rs deleted file mode 100644 index 8472601185..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_global_event_notification.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityGlobalEventNotification : Notifications represent information that should be presented to the user immediately. At the moment, only chat message events have associated notifications. # Display Notifications should be displayed in an unobtrusive manner throughout the entire game. Notifications should disappear after a few seconds if not interacted with. # Interactions If your platform supports it, notifications should be able to be clicked or tapped in order to open the relevant context for the event. For a simple implementation of notification interactions, open `url` in a web browser to present the relevant context. For example, a chat message notification will open the thread the chat message was sent in. For advanced implementations that implement a custom chat UI, use `GlobalEvent.kind` to determine what action to take when the notification is interacted with. For example, if the global event kind is `GlobalEventChatMessage`, then open the chat UI for the given thread. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGlobalEventNotification { - #[serde(rename = "description")] - pub description: String, - /// URL to an image thumbnail that should be shown for this notification. - #[serde(rename = "thumbnail_url")] - pub thumbnail_url: String, - #[serde(rename = "title")] - pub title: String, - /// Rivet Hub URL that holds the relevant context for this notification. - #[serde(rename = "url")] - pub url: String, -} - -impl IdentityGlobalEventNotification { - /// Notifications represent information that should be presented to the user immediately. At the moment, only chat message events have associated notifications. # Display Notifications should be displayed in an unobtrusive manner throughout the entire game. Notifications should disappear after a few seconds if not interacted with. # Interactions If your platform supports it, notifications should be able to be clicked or tapped in order to open the relevant context for the event. For a simple implementation of notification interactions, open `url` in a web browser to present the relevant context. For example, a chat message notification will open the thread the chat message was sent in. For advanced implementations that implement a custom chat UI, use `GlobalEvent.kind` to determine what action to take when the notification is interacted with. For example, if the global event kind is `GlobalEventChatMessage`, then open the chat UI for the given thread. - pub fn new(description: String, thumbnail_url: String, title: String, url: String) -> IdentityGlobalEventNotification { - IdentityGlobalEventNotification { - description, - thumbnail_url, - title, - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_group.rs b/sdks/api/full/rust-cli/src/models/identity_group.rs deleted file mode 100644 index a280ad6ad2..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_group.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityGroup : A group that the given identity. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityGroup { - #[serde(rename = "group")] - pub group: Box, -} - -impl IdentityGroup { - /// A group that the given identity. - pub fn new(group: crate::models::GroupHandle) -> IdentityGroup { - IdentityGroup { - group: Box::new(group), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_handle.rs b/sdks/api/full/rust-cli/src/models/identity_handle.rs deleted file mode 100644 index aa3767fe0e..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_handle.rs +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityHandle : An identity handle. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityHandle { - #[serde(rename = "account_number")] - pub account_number: i32, - /// The URL of this identity's avatar image. - #[serde(rename = "avatar_url")] - pub avatar_url: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "external")] - pub external: Box, - #[serde(rename = "identity_id")] - pub identity_id: uuid::Uuid, - /// Whether or not this identity is registered with a linked account. - #[serde(rename = "is_registered")] - pub is_registered: bool, -} - -impl IdentityHandle { - /// An identity handle. - pub fn new(account_number: i32, avatar_url: String, display_name: String, external: crate::models::IdentityExternalLinks, identity_id: uuid::Uuid, is_registered: bool) -> IdentityHandle { - IdentityHandle { - account_number, - avatar_url, - display_name, - external: Box::new(external), - identity_id, - is_registered, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_linked_account.rs b/sdks/api/full/rust-cli/src/models/identity_linked_account.rs deleted file mode 100644 index b0f4f62dde..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_linked_account.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityLinkedAccount : A union representing an identity's linked accounts. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityLinkedAccount { - #[serde(rename = "default_user", skip_serializing_if = "Option::is_none")] - pub default_user: Option, - #[serde(rename = "email", skip_serializing_if = "Option::is_none")] - pub email: Option>, -} - -impl IdentityLinkedAccount { - /// A union representing an identity's linked accounts. - pub fn new() -> IdentityLinkedAccount { - IdentityLinkedAccount { - default_user: None, - email: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_list_activities_response.rs b/sdks/api/full/rust-cli/src/models/identity_list_activities_response.rs deleted file mode 100644 index 373cbb29e5..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_list_activities_response.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityListActivitiesResponse { - #[serde(rename = "games")] - pub games: Vec, - #[serde(rename = "identities")] - pub identities: Vec, - #[serde(rename = "suggested_groups")] - pub suggested_groups: Vec, - #[serde(rename = "suggested_players")] - pub suggested_players: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityListActivitiesResponse { - pub fn new(games: Vec, identities: Vec, suggested_groups: Vec, suggested_players: Vec, watch: crate::models::WatchResponse) -> IdentityListActivitiesResponse { - IdentityListActivitiesResponse { - games, - identities, - suggested_groups, - suggested_players, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_prepare_avatar_upload_request.rs b/sdks/api/full/rust-cli/src/models/identity_prepare_avatar_upload_request.rs deleted file mode 100644 index 89c23ec726..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_prepare_avatar_upload_request.rs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityPrepareAvatarUploadRequest { - #[serde(rename = "content_length")] - pub content_length: i64, - /// See https://www.iana.org/assignments/media-types/media-types.xhtml - #[serde(rename = "mime")] - pub mime: String, - #[serde(rename = "path")] - pub path: String, -} - -impl IdentityPrepareAvatarUploadRequest { - pub fn new(content_length: i64, mime: String, path: String) -> IdentityPrepareAvatarUploadRequest { - IdentityPrepareAvatarUploadRequest { - content_length, - mime, - path, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_prepare_avatar_upload_response.rs b/sdks/api/full/rust-cli/src/models/identity_prepare_avatar_upload_response.rs deleted file mode 100644 index 756fdda3de..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_prepare_avatar_upload_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityPrepareAvatarUploadResponse { - #[serde(rename = "presigned_request")] - pub presigned_request: Box, - #[serde(rename = "upload_id")] - pub upload_id: uuid::Uuid, -} - -impl IdentityPrepareAvatarUploadResponse { - pub fn new(presigned_request: crate::models::UploadPresignedRequest, upload_id: uuid::Uuid) -> IdentityPrepareAvatarUploadResponse { - IdentityPrepareAvatarUploadResponse { - presigned_request: Box::new(presigned_request), - upload_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_profile.rs b/sdks/api/full/rust-cli/src/models/identity_profile.rs deleted file mode 100644 index ef5de34586..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_profile.rs +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityProfile : An identity profile. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityProfile { - #[serde(rename = "account_number")] - pub account_number: i32, - /// The URL of this identity's avatar image. - #[serde(rename = "avatar_url")] - pub avatar_url: String, - /// Whether or not this identity is awaiting account deletion. Only visible to when the requestee is this identity. - #[serde(rename = "awaiting_deletion", skip_serializing_if = "Option::is_none")] - pub awaiting_deletion: Option, - /// Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$ - #[serde(rename = "bio")] - pub bio: String, - #[serde(rename = "dev_state", skip_serializing_if = "Option::is_none")] - pub dev_state: Option, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "external")] - pub external: Box, - #[serde(rename = "follower_count")] - pub follower_count: i64, - /// Whether or not the requestee's identity is following this identity. - #[serde(rename = "following")] - pub following: bool, - #[serde(rename = "following_count")] - pub following_count: i64, - #[serde(rename = "games")] - pub games: Vec, - #[serde(rename = "groups")] - pub groups: Vec, - #[serde(rename = "identity_id")] - pub identity_id: uuid::Uuid, - /// Whether or not this identity is an admin. - #[serde(rename = "is_admin")] - pub is_admin: bool, - /// Whether or not this identity is both following and is followed by the requestee's identity. - #[serde(rename = "is_following_me")] - pub is_following_me: bool, - /// Whether or not this game user has been linked through the Rivet dashboard. - #[serde(rename = "is_game_linked", skip_serializing_if = "Option::is_none")] - pub is_game_linked: Option, - #[serde(rename = "is_mutual_following")] - pub is_mutual_following: bool, - /// Whether or not this identity is registered with a linked account. - #[serde(rename = "is_registered")] - pub is_registered: bool, - /// RFC3339 timestamp - #[serde(rename = "join_ts")] - pub join_ts: String, - #[serde(rename = "linked_accounts")] - pub linked_accounts: Vec, -} - -impl IdentityProfile { - /// An identity profile. - pub fn new(account_number: i32, avatar_url: String, bio: String, display_name: String, external: crate::models::IdentityExternalLinks, follower_count: i64, following: bool, following_count: i64, games: Vec, groups: Vec, identity_id: uuid::Uuid, is_admin: bool, is_following_me: bool, is_mutual_following: bool, is_registered: bool, join_ts: String, linked_accounts: Vec) -> IdentityProfile { - IdentityProfile { - account_number, - avatar_url, - awaiting_deletion: None, - bio, - dev_state: None, - display_name, - external: Box::new(external), - follower_count, - following, - following_count, - games, - groups, - identity_id, - is_admin, - is_following_me, - is_game_linked: None, - is_mutual_following, - is_registered, - join_ts, - linked_accounts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_set_game_activity_request.rs b/sdks/api/full/rust-cli/src/models/identity_set_game_activity_request.rs deleted file mode 100644 index cb53bb90bb..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_set_game_activity_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentitySetGameActivityRequest { - #[serde(rename = "game_activity")] - pub game_activity: Box, -} - -impl IdentitySetGameActivityRequest { - pub fn new(game_activity: crate::models::IdentityUpdateGameActivity) -> IdentitySetGameActivityRequest { - IdentitySetGameActivityRequest { - game_activity: Box::new(game_activity), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_setup_request.rs b/sdks/api/full/rust-cli/src/models/identity_setup_request.rs deleted file mode 100644 index dba1402ee0..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_setup_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentitySetupRequest { - /// Documentation at https://jwt.io/ - #[serde(rename = "existing_identity_token", skip_serializing_if = "Option::is_none")] - pub existing_identity_token: Option, -} - -impl IdentitySetupRequest { - pub fn new() -> IdentitySetupRequest { - IdentitySetupRequest { - existing_identity_token: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_setup_response.rs b/sdks/api/full/rust-cli/src/models/identity_setup_response.rs deleted file mode 100644 index d72d496270..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_setup_response.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentitySetupResponse { - #[serde(rename = "game_id")] - pub game_id: uuid::Uuid, - #[serde(rename = "identity")] - pub identity: Box, - /// Documentation at https://jwt.io/ - #[serde(rename = "identity_token")] - pub identity_token: String, - /// RFC3339 timestamp - #[serde(rename = "identity_token_expire_ts")] - pub identity_token_expire_ts: String, -} - -impl IdentitySetupResponse { - pub fn new(game_id: uuid::Uuid, identity: crate::models::IdentityProfile, identity_token: String, identity_token_expire_ts: String) -> IdentitySetupResponse { - IdentitySetupResponse { - game_id, - identity: Box::new(identity), - identity_token, - identity_token_expire_ts, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_signup_for_beta_request.rs b/sdks/api/full/rust-cli/src/models/identity_signup_for_beta_request.rs deleted file mode 100644 index 7e4e94dd23..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_signup_for_beta_request.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentitySignupForBetaRequest { - #[serde(rename = "company_name", skip_serializing_if = "Option::is_none")] - pub company_name: Option, - #[serde(rename = "company_size")] - pub company_size: String, - #[serde(rename = "goals")] - pub goals: String, - #[serde(rename = "name")] - pub name: String, - #[serde(rename = "preferred_tools")] - pub preferred_tools: String, -} - -impl IdentitySignupForBetaRequest { - pub fn new(company_size: String, goals: String, name: String, preferred_tools: String) -> IdentitySignupForBetaRequest { - IdentitySignupForBetaRequest { - company_name: None, - company_size, - goals, - name, - preferred_tools, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_status.rs b/sdks/api/full/rust-cli/src/models/identity_status.rs deleted file mode 100644 index 992b7897ac..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_status.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityStatus : The current status of an identity. This helps players understand if another player is currently playing or has their game in the background. - -/// The current status of an identity. This helps players understand if another player is currently playing or has their game in the background. -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum IdentityStatus { - #[serde(rename = "online")] - Online, - #[serde(rename = "away")] - Away, - #[serde(rename = "offline")] - Offline, - -} - -impl ToString for IdentityStatus { - fn to_string(&self) -> String { - match self { - Self::Online => String::from("online"), - Self::Away => String::from("away"), - Self::Offline => String::from("offline"), - } - } -} - -impl Default for IdentityStatus { - fn default() -> IdentityStatus { - Self::Online - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/identity_summary.rs b/sdks/api/full/rust-cli/src/models/identity_summary.rs deleted file mode 100644 index d1d1fd63ec..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_summary.rs +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentitySummary : An identity summary. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentitySummary { - #[serde(rename = "account_number")] - pub account_number: i32, - /// The URL of this identity's avatar image. - #[serde(rename = "avatar_url")] - pub avatar_url: String, - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "external")] - pub external: Box, - /// Whether or not the requestee's identity is following this identity. - #[serde(rename = "following")] - pub following: bool, - #[serde(rename = "identity_id")] - pub identity_id: uuid::Uuid, - /// Whether or not this identity is both following and is followed by the requestee's identity. - #[serde(rename = "is_following_me")] - pub is_following_me: bool, - #[serde(rename = "is_mutual_following")] - pub is_mutual_following: bool, - /// Whether or not this identity is registered with a linked account. - #[serde(rename = "is_registered")] - pub is_registered: bool, -} - -impl IdentitySummary { - /// An identity summary. - pub fn new(account_number: i32, avatar_url: String, display_name: String, external: crate::models::IdentityExternalLinks, following: bool, identity_id: uuid::Uuid, is_following_me: bool, is_mutual_following: bool, is_registered: bool) -> IdentitySummary { - IdentitySummary { - account_number, - avatar_url, - display_name, - external: Box::new(external), - following, - identity_id, - is_following_me, - is_mutual_following, - is_registered, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_update_game_activity.rs b/sdks/api/full/rust-cli/src/models/identity_update_game_activity.rs deleted file mode 100644 index eb5698c4e9..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_update_game_activity.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityUpdateGameActivity : Information about the identity's current game. This is information that all other identities can see about what the current identity is doing. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityUpdateGameActivity { - /// A short message about the current game activity. - #[serde(rename = "message", skip_serializing_if = "Option::is_none")] - pub message: Option, - /// JSON data seen only by the given identity and their mutual followers. - #[serde(rename = "mutual_metadata", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub mutual_metadata: Option>, - /// JSON data seen by anyone. - #[serde(rename = "public_metadata", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub public_metadata: Option>, -} - -impl IdentityUpdateGameActivity { - /// Information about the identity's current game. This is information that all other identities can see about what the current identity is doing. - pub fn new() -> IdentityUpdateGameActivity { - IdentityUpdateGameActivity { - message: None, - mutual_metadata: None, - public_metadata: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_update_profile_request.rs b/sdks/api/full/rust-cli/src/models/identity_update_profile_request.rs deleted file mode 100644 index 24d90a91c4..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_update_profile_request.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityUpdateProfileRequest { - #[serde(rename = "account_number", skip_serializing_if = "Option::is_none")] - pub account_number: Option, - /// Follows regex ^(?:[^\\n\\r]+\\n?|\\n){1,5}$ - #[serde(rename = "bio", skip_serializing_if = "Option::is_none")] - pub bio: Option, - /// Represent a resource's readable display name. - #[serde(rename = "display_name", skip_serializing_if = "Option::is_none")] - pub display_name: Option, -} - -impl IdentityUpdateProfileRequest { - pub fn new() -> IdentityUpdateProfileRequest { - IdentityUpdateProfileRequest { - account_number: None, - bio: None, - display_name: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_update_status_request.rs b/sdks/api/full/rust-cli/src/models/identity_update_status_request.rs deleted file mode 100644 index c6c79c6881..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_update_status_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityUpdateStatusRequest { - #[serde(rename = "status")] - pub status: crate::models::IdentityStatus, -} - -impl IdentityUpdateStatusRequest { - pub fn new(status: crate::models::IdentityStatus) -> IdentityUpdateStatusRequest { - IdentityUpdateStatusRequest { - status, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_validate_profile_response.rs b/sdks/api/full/rust-cli/src/models/identity_validate_profile_response.rs deleted file mode 100644 index f08e3f02b1..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_validate_profile_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityValidateProfileResponse { - #[serde(rename = "errors")] - pub errors: Vec, -} - -impl IdentityValidateProfileResponse { - pub fn new(errors: Vec) -> IdentityValidateProfileResponse { - IdentityValidateProfileResponse { - errors, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/identity_watch_events_response.rs b/sdks/api/full/rust-cli/src/models/identity_watch_events_response.rs deleted file mode 100644 index e04fd721dc..0000000000 --- a/sdks/api/full/rust-cli/src/models/identity_watch_events_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityWatchEventsResponse { - #[serde(rename = "events")] - pub events: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityWatchEventsResponse { - pub fn new(events: Vec, watch: crate::models::WatchResponse) -> IdentityWatchEventsResponse { - IdentityWatchEventsResponse { - events, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_create_lobby_response.rs b/sdks/api/full/rust-cli/src/models/matchmaker_create_lobby_response.rs deleted file mode 100644 index 0d1bcc029a..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_create_lobby_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerCreateLobbyResponse { - #[serde(rename = "lobby")] - pub lobby: Box, - #[serde(rename = "player")] - pub player: Box, - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, -} - -impl MatchmakerCreateLobbyResponse { - pub fn new(lobby: crate::models::MatchmakerJoinLobby, player: crate::models::MatchmakerJoinPlayer, ports: ::std::collections::HashMap) -> MatchmakerCreateLobbyResponse { - MatchmakerCreateLobbyResponse { - lobby: Box::new(lobby), - player: Box::new(player), - ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_custom_lobby_publicity.rs b/sdks/api/full/rust-cli/src/models/matchmaker_custom_lobby_publicity.rs deleted file mode 100644 index e3dcead796..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_custom_lobby_publicity.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum MatchmakerCustomLobbyPublicity { - #[serde(rename = "public")] - Public, - #[serde(rename = "private")] - Private, - -} - -impl ToString for MatchmakerCustomLobbyPublicity { - fn to_string(&self) -> String { - match self { - Self::Public => String::from("public"), - Self::Private => String::from("private"), - } - } -} - -impl Default for MatchmakerCustomLobbyPublicity { - fn default() -> MatchmakerCustomLobbyPublicity { - Self::Public - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_find_lobby_response.rs b/sdks/api/full/rust-cli/src/models/matchmaker_find_lobby_response.rs deleted file mode 100644 index 0a72c11058..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_find_lobby_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerFindLobbyResponse { - #[serde(rename = "lobby")] - pub lobby: Box, - #[serde(rename = "player")] - pub player: Box, - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, -} - -impl MatchmakerFindLobbyResponse { - pub fn new(lobby: crate::models::MatchmakerJoinLobby, player: crate::models::MatchmakerJoinPlayer, ports: ::std::collections::HashMap) -> MatchmakerFindLobbyResponse { - MatchmakerFindLobbyResponse { - lobby: Box::new(lobby), - player: Box::new(player), - ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_game_mode_info.rs b/sdks/api/full/rust-cli/src/models/matchmaker_game_mode_info.rs deleted file mode 100644 index d3d921a688..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_game_mode_info.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// MatchmakerGameModeInfo : A game mode that the player can join. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerGameModeInfo { - /// 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. - #[serde(rename = "game_mode_id")] - pub game_mode_id: String, -} - -impl MatchmakerGameModeInfo { - /// A game mode that the player can join. - pub fn new(game_mode_id: String) -> MatchmakerGameModeInfo { - MatchmakerGameModeInfo { - game_mode_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_game_mode_statistics.rs b/sdks/api/full/rust-cli/src/models/matchmaker_game_mode_statistics.rs deleted file mode 100644 index d2da15d2d9..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_game_mode_statistics.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerGameModeStatistics { - #[serde(rename = "player_count")] - pub player_count: i64, - #[serde(rename = "regions")] - pub regions: ::std::collections::HashMap, -} - -impl MatchmakerGameModeStatistics { - pub fn new(player_count: i64, regions: ::std::collections::HashMap) -> MatchmakerGameModeStatistics { - MatchmakerGameModeStatistics { - player_count, - regions, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_get_statistics_response.rs b/sdks/api/full/rust-cli/src/models/matchmaker_get_statistics_response.rs deleted file mode 100644 index 4275e93a5e..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_get_statistics_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerGetStatisticsResponse { - #[serde(rename = "game_modes")] - pub game_modes: ::std::collections::HashMap, - #[serde(rename = "player_count")] - pub player_count: i64, -} - -impl MatchmakerGetStatisticsResponse { - pub fn new(game_modes: ::std::collections::HashMap, player_count: i64) -> MatchmakerGetStatisticsResponse { - MatchmakerGetStatisticsResponse { - game_modes, - player_count, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_join_lobby.rs b/sdks/api/full/rust-cli/src/models/matchmaker_join_lobby.rs deleted file mode 100644 index aaf5bd9cd7..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_join_lobby.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// MatchmakerJoinLobby : A matchmaker lobby. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerJoinLobby { - #[serde(rename = "lobby_id")] - pub lobby_id: uuid::Uuid, - #[serde(rename = "player")] - pub player: Box, - /// **Deprecated** - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, - #[serde(rename = "region")] - pub region: Box, -} - -impl MatchmakerJoinLobby { - /// A matchmaker lobby. - pub fn new(lobby_id: uuid::Uuid, player: crate::models::MatchmakerJoinPlayer, ports: ::std::collections::HashMap, region: crate::models::MatchmakerJoinRegion) -> MatchmakerJoinLobby { - MatchmakerJoinLobby { - lobby_id, - player: Box::new(player), - ports, - region: Box::new(region), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_join_lobby_response.rs b/sdks/api/full/rust-cli/src/models/matchmaker_join_lobby_response.rs deleted file mode 100644 index d284339b25..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_join_lobby_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerJoinLobbyResponse { - #[serde(rename = "lobby")] - pub lobby: Box, - #[serde(rename = "player")] - pub player: Box, - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, -} - -impl MatchmakerJoinLobbyResponse { - pub fn new(lobby: crate::models::MatchmakerJoinLobby, player: crate::models::MatchmakerJoinPlayer, ports: ::std::collections::HashMap) -> MatchmakerJoinLobbyResponse { - MatchmakerJoinLobbyResponse { - lobby: Box::new(lobby), - player: Box::new(player), - ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_join_player.rs b/sdks/api/full/rust-cli/src/models/matchmaker_join_player.rs deleted file mode 100644 index 198434b8ac..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_join_player.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// MatchmakerJoinPlayer : A matchmaker lobby player. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerJoinPlayer { - /// Documentation at https://jwt.io/ - #[serde(rename = "token")] - pub token: String, -} - -impl MatchmakerJoinPlayer { - /// A matchmaker lobby player. - pub fn new(token: String) -> MatchmakerJoinPlayer { - MatchmakerJoinPlayer { - token, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_join_port.rs b/sdks/api/full/rust-cli/src/models/matchmaker_join_port.rs deleted file mode 100644 index 86e07f170a..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_join_port.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerJoinPort { - /// The host for the given port. Will be null if using a port range. - #[serde(rename = "host", skip_serializing_if = "Option::is_none")] - pub host: Option, - #[serde(rename = "hostname")] - pub hostname: String, - /// Whether or not this lobby port uses TLS. You cannot mix a non-TLS and TLS ports. - #[serde(rename = "is_tls")] - pub is_tls: bool, - /// The port number for this lobby. Will be null if using a port range. - #[serde(rename = "port", skip_serializing_if = "Option::is_none")] - pub port: Option, - #[serde(rename = "port_range", skip_serializing_if = "Option::is_none")] - pub port_range: Option>, -} - -impl MatchmakerJoinPort { - pub fn new(hostname: String, is_tls: bool) -> MatchmakerJoinPort { - MatchmakerJoinPort { - host: None, - hostname, - is_tls, - port: None, - port_range: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_join_port_range.rs b/sdks/api/full/rust-cli/src/models/matchmaker_join_port_range.rs deleted file mode 100644 index 5b793d5c52..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_join_port_range.rs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// MatchmakerJoinPortRange : Inclusive range of ports that can be connected to. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerJoinPortRange { - /// Maximum port that can be connected to. Inclusive range. - #[serde(rename = "max")] - pub max: i32, - /// Minimum port that can be connected to. Inclusive range. - #[serde(rename = "min")] - pub min: i32, -} - -impl MatchmakerJoinPortRange { - /// Inclusive range of ports that can be connected to. - pub fn new(max: i32, min: i32) -> MatchmakerJoinPortRange { - MatchmakerJoinPortRange { - max, - min, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_join_region.rs b/sdks/api/full/rust-cli/src/models/matchmaker_join_region.rs deleted file mode 100644 index 7f38d680cf..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_join_region.rs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// MatchmakerJoinRegion : A matchmaker lobby region. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerJoinRegion { - /// Represent a resource's readable display name. - #[serde(rename = "display_name")] - pub display_name: String, - /// 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. - #[serde(rename = "region_id")] - pub region_id: String, -} - -impl MatchmakerJoinRegion { - /// A matchmaker lobby region. - pub fn new(display_name: String, region_id: String) -> MatchmakerJoinRegion { - MatchmakerJoinRegion { - display_name, - region_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_list_lobbies_response.rs b/sdks/api/full/rust-cli/src/models/matchmaker_list_lobbies_response.rs deleted file mode 100644 index 181d6b0bd0..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_list_lobbies_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerListLobbiesResponse { - #[serde(rename = "game_modes")] - pub game_modes: Vec, - #[serde(rename = "lobbies")] - pub lobbies: Vec, - #[serde(rename = "regions")] - pub regions: Vec, -} - -impl MatchmakerListLobbiesResponse { - pub fn new(game_modes: Vec, lobbies: Vec, regions: Vec) -> MatchmakerListLobbiesResponse { - MatchmakerListLobbiesResponse { - game_modes, - lobbies, - regions, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_list_regions_response.rs b/sdks/api/full/rust-cli/src/models/matchmaker_list_regions_response.rs deleted file mode 100644 index 07eae13752..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_list_regions_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerListRegionsResponse { - #[serde(rename = "regions")] - pub regions: Vec, -} - -impl MatchmakerListRegionsResponse { - pub fn new(regions: Vec) -> MatchmakerListRegionsResponse { - MatchmakerListRegionsResponse { - regions, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_create_request.rs b/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_create_request.rs deleted file mode 100644 index 4a61128a8f..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_create_request.rs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerLobbiesCreateRequest { - #[serde(rename = "captcha", skip_serializing_if = "Option::is_none")] - pub captcha: Option>, - #[serde(rename = "game_mode")] - pub game_mode: String, - #[serde(rename = "lobby_config", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub lobby_config: Option>, - #[serde(rename = "max_players", skip_serializing_if = "Option::is_none")] - pub max_players: Option, - #[serde(rename = "publicity", skip_serializing_if = "Option::is_none")] - pub publicity: Option, - #[serde(rename = "region", skip_serializing_if = "Option::is_none")] - pub region: Option, - #[serde(rename = "tags", skip_serializing_if = "Option::is_none")] - pub tags: Option<::std::collections::HashMap>, - #[serde(rename = "verification_data", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub verification_data: Option>, -} - -impl MatchmakerLobbiesCreateRequest { - pub fn new(game_mode: String) -> MatchmakerLobbiesCreateRequest { - MatchmakerLobbiesCreateRequest { - captcha: None, - game_mode, - lobby_config: None, - max_players: None, - publicity: None, - region: None, - tags: None, - verification_data: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_find_request.rs b/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_find_request.rs deleted file mode 100644 index 6761c70629..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_find_request.rs +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerLobbiesFindRequest { - #[serde(rename = "captcha", skip_serializing_if = "Option::is_none")] - pub captcha: Option>, - #[serde(rename = "game_modes")] - pub game_modes: Vec, - #[serde(rename = "max_players", skip_serializing_if = "Option::is_none")] - pub max_players: Option, - #[serde(rename = "prevent_auto_create_lobby", skip_serializing_if = "Option::is_none")] - pub prevent_auto_create_lobby: Option, - #[serde(rename = "regions", skip_serializing_if = "Option::is_none")] - pub regions: Option>, - #[serde(rename = "tags", skip_serializing_if = "Option::is_none")] - pub tags: Option<::std::collections::HashMap>, - #[serde(rename = "verification_data", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub verification_data: Option>, -} - -impl MatchmakerLobbiesFindRequest { - pub fn new(game_modes: Vec) -> MatchmakerLobbiesFindRequest { - MatchmakerLobbiesFindRequest { - captcha: None, - game_modes, - max_players: None, - prevent_auto_create_lobby: None, - regions: None, - tags: None, - verification_data: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_join_request.rs b/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_join_request.rs deleted file mode 100644 index 6f622e00a1..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_join_request.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerLobbiesJoinRequest { - #[serde(rename = "captcha", skip_serializing_if = "Option::is_none")] - pub captcha: Option>, - #[serde(rename = "lobby_id")] - pub lobby_id: String, - #[serde(rename = "verification_data", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub verification_data: Option>, -} - -impl MatchmakerLobbiesJoinRequest { - pub fn new(lobby_id: String) -> MatchmakerLobbiesJoinRequest { - MatchmakerLobbiesJoinRequest { - captcha: None, - lobby_id, - verification_data: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_set_closed_request.rs b/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_set_closed_request.rs deleted file mode 100644 index 32b2a4cfe2..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_lobbies_set_closed_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerLobbiesSetClosedRequest { - #[serde(rename = "is_closed")] - pub is_closed: bool, -} - -impl MatchmakerLobbiesSetClosedRequest { - pub fn new(is_closed: bool) -> MatchmakerLobbiesSetClosedRequest { - MatchmakerLobbiesSetClosedRequest { - is_closed, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_lobby_info.rs b/sdks/api/full/rust-cli/src/models/matchmaker_lobby_info.rs deleted file mode 100644 index bdae0cba81..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_lobby_info.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// MatchmakerLobbyInfo : A public lobby in the lobby list. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerLobbyInfo { - #[serde(rename = "game_mode_id")] - pub game_mode_id: String, - #[serde(rename = "lobby_id")] - pub lobby_id: uuid::Uuid, - #[serde(rename = "max_players_direct")] - pub max_players_direct: i32, - #[serde(rename = "max_players_normal")] - pub max_players_normal: i32, - #[serde(rename = "max_players_party")] - pub max_players_party: i32, - #[serde(rename = "region_id")] - pub region_id: String, - #[serde(rename = "state", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")] - pub state: Option>, - #[serde(rename = "total_player_count")] - pub total_player_count: i32, -} - -impl MatchmakerLobbyInfo { - /// A public lobby in the lobby list. - pub fn new(game_mode_id: String, lobby_id: uuid::Uuid, max_players_direct: i32, max_players_normal: i32, max_players_party: i32, region_id: String, total_player_count: i32) -> MatchmakerLobbyInfo { - MatchmakerLobbyInfo { - game_mode_id, - lobby_id, - max_players_direct, - max_players_normal, - max_players_party, - region_id, - state: None, - total_player_count, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_players_connected_request.rs b/sdks/api/full/rust-cli/src/models/matchmaker_players_connected_request.rs deleted file mode 100644 index c5de54c33c..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_players_connected_request.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerPlayersConnectedRequest { - #[serde(rename = "player_token")] - pub player_token: String, -} - -impl MatchmakerPlayersConnectedRequest { - pub fn new(player_token: String) -> MatchmakerPlayersConnectedRequest { - MatchmakerPlayersConnectedRequest { - player_token, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_region_info.rs b/sdks/api/full/rust-cli/src/models/matchmaker_region_info.rs deleted file mode 100644 index ed5df899d6..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_region_info.rs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// MatchmakerRegionInfo : A region that the player can connect to. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerRegionInfo { - #[serde(rename = "datacenter_coord")] - pub datacenter_coord: Box, - #[serde(rename = "datacenter_distance_from_client")] - pub datacenter_distance_from_client: Box, - /// Represent a resource's readable display name. - #[serde(rename = "provider_display_name")] - pub provider_display_name: String, - /// Represent a resource's readable display name. - #[serde(rename = "region_display_name")] - pub region_display_name: String, - /// 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. - #[serde(rename = "region_id")] - pub region_id: String, -} - -impl MatchmakerRegionInfo { - /// A region that the player can connect to. - pub fn new(datacenter_coord: crate::models::GeoCoord, datacenter_distance_from_client: crate::models::GeoDistance, provider_display_name: String, region_display_name: String, region_id: String) -> MatchmakerRegionInfo { - MatchmakerRegionInfo { - datacenter_coord: Box::new(datacenter_coord), - datacenter_distance_from_client: Box::new(datacenter_distance_from_client), - provider_display_name, - region_display_name, - region_id, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/matchmaker_region_statistics.rs b/sdks/api/full/rust-cli/src/models/matchmaker_region_statistics.rs deleted file mode 100644 index 1f213d2419..0000000000 --- a/sdks/api/full/rust-cli/src/models/matchmaker_region_statistics.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct MatchmakerRegionStatistics { - #[serde(rename = "player_count")] - pub player_count: i64, -} - -impl MatchmakerRegionStatistics { - pub fn new(player_count: i64) -> MatchmakerRegionStatistics { - MatchmakerRegionStatistics { - player_count, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/mod.rs b/sdks/api/full/rust-cli/src/models/mod.rs deleted file mode 100644 index 2bf903d4a6..0000000000 --- a/sdks/api/full/rust-cli/src/models/mod.rs +++ /dev/null @@ -1,660 +0,0 @@ -pub mod actor_actor; -pub use self::actor_actor::ActorActor; -pub mod actor_build; -pub use self::actor_build::ActorBuild; -pub mod actor_build_compression; -pub use self::actor_build_compression::ActorBuildCompression; -pub mod actor_build_kind; -pub use self::actor_build_kind::ActorBuildKind; -pub mod actor_create_actor_network_request; -pub use self::actor_create_actor_network_request::ActorCreateActorNetworkRequest; -pub mod actor_create_actor_port_request; -pub use self::actor_create_actor_port_request::ActorCreateActorPortRequest; -pub mod actor_create_actor_request; -pub use self::actor_create_actor_request::ActorCreateActorRequest; -pub mod actor_create_actor_response; -pub use self::actor_create_actor_response::ActorCreateActorResponse; -pub mod actor_create_actor_runtime_request; -pub use self::actor_create_actor_runtime_request::ActorCreateActorRuntimeRequest; -pub mod actor_get_actor_logs_response; -pub use self::actor_get_actor_logs_response::ActorGetActorLogsResponse; -pub mod actor_get_actor_response; -pub use self::actor_get_actor_response::ActorGetActorResponse; -pub mod actor_get_build_response; -pub use self::actor_get_build_response::ActorGetBuildResponse; -pub mod actor_guard_routing; -pub use self::actor_guard_routing::ActorGuardRouting; -pub mod actor_lifecycle; -pub use self::actor_lifecycle::ActorLifecycle; -pub mod actor_list_actors_response; -pub use self::actor_list_actors_response::ActorListActorsResponse; -pub mod actor_list_builds_response; -pub use self::actor_list_builds_response::ActorListBuildsResponse; -pub mod actor_list_regions_response; -pub use self::actor_list_regions_response::ActorListRegionsResponse; -pub mod actor_log_stream; -pub use self::actor_log_stream::ActorLogStream; -pub mod actor_network; -pub use self::actor_network::ActorNetwork; -pub mod actor_network_mode; -pub use self::actor_network_mode::ActorNetworkMode; -pub mod actor_patch_build_tags_request; -pub use self::actor_patch_build_tags_request::ActorPatchBuildTagsRequest; -pub mod actor_port; -pub use self::actor_port::ActorPort; -pub mod actor_port_authorization; -pub use self::actor_port_authorization::ActorPortAuthorization; -pub mod actor_port_protocol; -pub use self::actor_port_protocol::ActorPortProtocol; -pub mod actor_port_query_authorization; -pub use self::actor_port_query_authorization::ActorPortQueryAuthorization; -pub mod actor_port_routing; -pub use self::actor_port_routing::ActorPortRouting; -pub mod actor_prepare_build_request; -pub use self::actor_prepare_build_request::ActorPrepareBuildRequest; -pub mod actor_prepare_build_response; -pub use self::actor_prepare_build_response::ActorPrepareBuildResponse; -pub mod actor_region; -pub use self::actor_region::ActorRegion; -pub mod actor_resources; -pub use self::actor_resources::ActorResources; -pub mod actor_runtime; -pub use self::actor_runtime::ActorRuntime; -pub mod actor_upgrade_actor_request; -pub use self::actor_upgrade_actor_request::ActorUpgradeActorRequest; -pub mod actor_upgrade_all_actors_request; -pub use self::actor_upgrade_all_actors_request::ActorUpgradeAllActorsRequest; -pub mod actor_upgrade_all_actors_response; -pub use self::actor_upgrade_all_actors_response::ActorUpgradeAllActorsResponse; -pub mod auth_complete_status; -pub use self::auth_complete_status::AuthCompleteStatus; -pub mod auth_identity_complete_email_verification_request; -pub use self::auth_identity_complete_email_verification_request::AuthIdentityCompleteEmailVerificationRequest; -pub mod auth_identity_complete_email_verification_response; -pub use self::auth_identity_complete_email_verification_response::AuthIdentityCompleteEmailVerificationResponse; -pub mod auth_identity_start_email_verification_request; -pub use self::auth_identity_start_email_verification_request::AuthIdentityStartEmailVerificationRequest; -pub mod auth_identity_start_email_verification_response; -pub use self::auth_identity_start_email_verification_response::AuthIdentityStartEmailVerificationResponse; -pub mod auth_refresh_identity_token_request; -pub use self::auth_refresh_identity_token_request::AuthRefreshIdentityTokenRequest; -pub mod auth_refresh_identity_token_response; -pub use self::auth_refresh_identity_token_response::AuthRefreshIdentityTokenResponse; -pub mod captcha_config; -pub use self::captcha_config::CaptchaConfig; -pub mod captcha_config_hcaptcha; -pub use self::captcha_config_hcaptcha::CaptchaConfigHcaptcha; -pub mod captcha_config_turnstile; -pub use self::captcha_config_turnstile::CaptchaConfigTurnstile; -pub mod cloud_auth_agent; -pub use self::cloud_auth_agent::CloudAuthAgent; -pub mod cloud_auth_agent_game_cloud; -pub use self::cloud_auth_agent_game_cloud::CloudAuthAgentGameCloud; -pub mod cloud_auth_agent_identity; -pub use self::cloud_auth_agent_identity::CloudAuthAgentIdentity; -pub mod cloud_bootstrap_access; -pub use self::cloud_bootstrap_access::CloudBootstrapAccess; -pub mod cloud_bootstrap_captcha; -pub use self::cloud_bootstrap_captcha::CloudBootstrapCaptcha; -pub mod cloud_bootstrap_captcha_turnstile; -pub use self::cloud_bootstrap_captcha_turnstile::CloudBootstrapCaptchaTurnstile; -pub mod cloud_bootstrap_cluster; -pub use self::cloud_bootstrap_cluster::CloudBootstrapCluster; -pub mod cloud_bootstrap_domains; -pub use self::cloud_bootstrap_domains::CloudBootstrapDomains; -pub mod cloud_bootstrap_login_methods; -pub use self::cloud_bootstrap_login_methods::CloudBootstrapLoginMethods; -pub mod cloud_bootstrap_origins; -pub use self::cloud_bootstrap_origins::CloudBootstrapOrigins; -pub mod cloud_bootstrap_response; -pub use self::cloud_bootstrap_response::CloudBootstrapResponse; -pub mod cloud_build_summary; -pub use self::cloud_build_summary::CloudBuildSummary; -pub mod cloud_cdn_auth_type; -pub use self::cloud_cdn_auth_type::CloudCdnAuthType; -pub mod cloud_cdn_namespace_auth_user; -pub use self::cloud_cdn_namespace_auth_user::CloudCdnNamespaceAuthUser; -pub mod cloud_cdn_namespace_config; -pub use self::cloud_cdn_namespace_config::CloudCdnNamespaceConfig; -pub mod cloud_cdn_namespace_domain; -pub use self::cloud_cdn_namespace_domain::CloudCdnNamespaceDomain; -pub mod cloud_cdn_namespace_domain_verification_method; -pub use self::cloud_cdn_namespace_domain_verification_method::CloudCdnNamespaceDomainVerificationMethod; -pub mod cloud_cdn_namespace_domain_verification_method_http; -pub use self::cloud_cdn_namespace_domain_verification_method_http::CloudCdnNamespaceDomainVerificationMethodHttp; -pub mod cloud_cdn_namespace_domain_verification_status; -pub use self::cloud_cdn_namespace_domain_verification_status::CloudCdnNamespaceDomainVerificationStatus; -pub mod cloud_cdn_site_summary; -pub use self::cloud_cdn_site_summary::CloudCdnSiteSummary; -pub mod cloud_custom_avatar_summary; -pub use self::cloud_custom_avatar_summary::CloudCustomAvatarSummary; -pub mod cloud_devices_complete_device_link_request; -pub use self::cloud_devices_complete_device_link_request::CloudDevicesCompleteDeviceLinkRequest; -pub mod cloud_devices_get_device_link_response; -pub use self::cloud_devices_get_device_link_response::CloudDevicesGetDeviceLinkResponse; -pub mod cloud_devices_prepare_device_link_response; -pub use self::cloud_devices_prepare_device_link_response::CloudDevicesPrepareDeviceLinkResponse; -pub mod cloud_game_full; -pub use self::cloud_game_full::CloudGameFull; -pub mod cloud_game_lobby_expenses; -pub use self::cloud_game_lobby_expenses::CloudGameLobbyExpenses; -pub mod cloud_games_build_compression; -pub use self::cloud_games_build_compression::CloudGamesBuildCompression; -pub mod cloud_games_build_kind; -pub use self::cloud_games_build_kind::CloudGamesBuildKind; -pub mod cloud_games_create_cloud_token_response; -pub use self::cloud_games_create_cloud_token_response::CloudGamesCreateCloudTokenResponse; -pub mod cloud_games_create_game_build_request; -pub use self::cloud_games_create_game_build_request::CloudGamesCreateGameBuildRequest; -pub mod cloud_games_create_game_build_response; -pub use self::cloud_games_create_game_build_response::CloudGamesCreateGameBuildResponse; -pub mod cloud_games_create_game_cdn_site_request; -pub use self::cloud_games_create_game_cdn_site_request::CloudGamesCreateGameCdnSiteRequest; -pub mod cloud_games_create_game_cdn_site_response; -pub use self::cloud_games_create_game_cdn_site_response::CloudGamesCreateGameCdnSiteResponse; -pub mod cloud_games_create_game_request; -pub use self::cloud_games_create_game_request::CloudGamesCreateGameRequest; -pub mod cloud_games_create_game_response; -pub use self::cloud_games_create_game_response::CloudGamesCreateGameResponse; -pub mod cloud_games_create_game_version_request; -pub use self::cloud_games_create_game_version_request::CloudGamesCreateGameVersionRequest; -pub mod cloud_games_create_game_version_response; -pub use self::cloud_games_create_game_version_response::CloudGamesCreateGameVersionResponse; -pub mod cloud_games_delete_matchmaker_lobby_response; -pub use self::cloud_games_delete_matchmaker_lobby_response::CloudGamesDeleteMatchmakerLobbyResponse; -pub mod cloud_games_export_lobby_logs_request; -pub use self::cloud_games_export_lobby_logs_request::CloudGamesExportLobbyLogsRequest; -pub mod cloud_games_export_lobby_logs_response; -pub use self::cloud_games_export_lobby_logs_response::CloudGamesExportLobbyLogsResponse; -pub mod cloud_games_export_matchmaker_lobby_history_request; -pub use self::cloud_games_export_matchmaker_lobby_history_request::CloudGamesExportMatchmakerLobbyHistoryRequest; -pub mod cloud_games_export_matchmaker_lobby_history_response; -pub use self::cloud_games_export_matchmaker_lobby_history_response::CloudGamesExportMatchmakerLobbyHistoryResponse; -pub mod cloud_games_game_banner_upload_prepare_request; -pub use self::cloud_games_game_banner_upload_prepare_request::CloudGamesGameBannerUploadPrepareRequest; -pub mod cloud_games_game_banner_upload_prepare_response; -pub use self::cloud_games_game_banner_upload_prepare_response::CloudGamesGameBannerUploadPrepareResponse; -pub mod cloud_games_game_logo_upload_prepare_request; -pub use self::cloud_games_game_logo_upload_prepare_request::CloudGamesGameLogoUploadPrepareRequest; -pub mod cloud_games_game_logo_upload_prepare_response; -pub use self::cloud_games_game_logo_upload_prepare_response::CloudGamesGameLogoUploadPrepareResponse; -pub mod cloud_games_get_game_by_id_response; -pub use self::cloud_games_get_game_by_id_response::CloudGamesGetGameByIdResponse; -pub mod cloud_games_get_game_version_by_id_response; -pub use self::cloud_games_get_game_version_by_id_response::CloudGamesGetGameVersionByIdResponse; -pub mod cloud_games_get_games_response; -pub use self::cloud_games_get_games_response::CloudGamesGetGamesResponse; -pub mod cloud_games_get_lobby_logs_response; -pub use self::cloud_games_get_lobby_logs_response::CloudGamesGetLobbyLogsResponse; -pub mod cloud_games_list_game_builds_response; -pub use self::cloud_games_list_game_builds_response::CloudGamesListGameBuildsResponse; -pub mod cloud_games_list_game_cdn_sites_response; -pub use self::cloud_games_list_game_cdn_sites_response::CloudGamesListGameCdnSitesResponse; -pub mod cloud_games_list_game_custom_avatars_response; -pub use self::cloud_games_list_game_custom_avatars_response::CloudGamesListGameCustomAvatarsResponse; -pub mod cloud_games_log_stream; -pub use self::cloud_games_log_stream::CloudGamesLogStream; -pub mod cloud_games_namespaces_add_namespace_domain_request; -pub use self::cloud_games_namespaces_add_namespace_domain_request::CloudGamesNamespacesAddNamespaceDomainRequest; -pub mod cloud_games_namespaces_create_game_namespace_request; -pub use self::cloud_games_namespaces_create_game_namespace_request::CloudGamesNamespacesCreateGameNamespaceRequest; -pub mod cloud_games_namespaces_create_game_namespace_response; -pub use self::cloud_games_namespaces_create_game_namespace_response::CloudGamesNamespacesCreateGameNamespaceResponse; -pub mod cloud_games_namespaces_create_game_namespace_token_development_request; -pub use self::cloud_games_namespaces_create_game_namespace_token_development_request::CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentRequest; -pub mod cloud_games_namespaces_create_game_namespace_token_development_response; -pub use self::cloud_games_namespaces_create_game_namespace_token_development_response::CloudGamesNamespacesCreateGameNamespaceTokenDevelopmentResponse; -pub mod cloud_games_namespaces_create_game_namespace_token_public_response; -pub use self::cloud_games_namespaces_create_game_namespace_token_public_response::CloudGamesNamespacesCreateGameNamespaceTokenPublicResponse; -pub mod cloud_games_namespaces_get_analytics_matchmaker_live_response; -pub use self::cloud_games_namespaces_get_analytics_matchmaker_live_response::CloudGamesNamespacesGetAnalyticsMatchmakerLiveResponse; -pub mod cloud_games_namespaces_get_game_namespace_by_id_response; -pub use self::cloud_games_namespaces_get_game_namespace_by_id_response::CloudGamesNamespacesGetGameNamespaceByIdResponse; -pub mod cloud_games_namespaces_get_game_namespace_version_history_response; -pub use self::cloud_games_namespaces_get_game_namespace_version_history_response::CloudGamesNamespacesGetGameNamespaceVersionHistoryResponse; -pub mod cloud_games_namespaces_get_namespace_lobby_response; -pub use self::cloud_games_namespaces_get_namespace_lobby_response::CloudGamesNamespacesGetNamespaceLobbyResponse; -pub mod cloud_games_namespaces_inspect_response; -pub use self::cloud_games_namespaces_inspect_response::CloudGamesNamespacesInspectResponse; -pub mod cloud_games_namespaces_list_namespace_lobbies_response; -pub use self::cloud_games_namespaces_list_namespace_lobbies_response::CloudGamesNamespacesListNamespaceLobbiesResponse; -pub mod cloud_games_namespaces_set_namespace_cdn_auth_type_request; -pub use self::cloud_games_namespaces_set_namespace_cdn_auth_type_request::CloudGamesNamespacesSetNamespaceCdnAuthTypeRequest; -pub mod cloud_games_namespaces_toggle_namespace_domain_public_auth_request; -pub use self::cloud_games_namespaces_toggle_namespace_domain_public_auth_request::CloudGamesNamespacesToggleNamespaceDomainPublicAuthRequest; -pub mod cloud_games_namespaces_update_game_namespace_matchmaker_config_request; -pub use self::cloud_games_namespaces_update_game_namespace_matchmaker_config_request::CloudGamesNamespacesUpdateGameNamespaceMatchmakerConfigRequest; -pub mod cloud_games_namespaces_update_game_namespace_version_request; -pub use self::cloud_games_namespaces_update_game_namespace_version_request::CloudGamesNamespacesUpdateGameNamespaceVersionRequest; -pub mod cloud_games_namespaces_update_namespace_cdn_auth_user_request; -pub use self::cloud_games_namespaces_update_namespace_cdn_auth_user_request::CloudGamesNamespacesUpdateNamespaceCdnAuthUserRequest; -pub mod cloud_games_namespaces_validate_game_namespace_matchmaker_config_request; -pub use self::cloud_games_namespaces_validate_game_namespace_matchmaker_config_request::CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigRequest; -pub mod cloud_games_namespaces_validate_game_namespace_matchmaker_config_response; -pub use self::cloud_games_namespaces_validate_game_namespace_matchmaker_config_response::CloudGamesNamespacesValidateGameNamespaceMatchmakerConfigResponse; -pub mod cloud_games_namespaces_validate_game_namespace_request; -pub use self::cloud_games_namespaces_validate_game_namespace_request::CloudGamesNamespacesValidateGameNamespaceRequest; -pub mod cloud_games_namespaces_validate_game_namespace_response; -pub use self::cloud_games_namespaces_validate_game_namespace_response::CloudGamesNamespacesValidateGameNamespaceResponse; -pub mod cloud_games_namespaces_validate_game_namespace_token_development_request; -pub use self::cloud_games_namespaces_validate_game_namespace_token_development_request::CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentRequest; -pub mod cloud_games_namespaces_validate_game_namespace_token_development_response; -pub use self::cloud_games_namespaces_validate_game_namespace_token_development_response::CloudGamesNamespacesValidateGameNamespaceTokenDevelopmentResponse; -pub mod cloud_games_prepare_custom_avatar_upload_request; -pub use self::cloud_games_prepare_custom_avatar_upload_request::CloudGamesPrepareCustomAvatarUploadRequest; -pub mod cloud_games_prepare_custom_avatar_upload_response; -pub use self::cloud_games_prepare_custom_avatar_upload_response::CloudGamesPrepareCustomAvatarUploadResponse; -pub mod cloud_games_reserve_version_name_response; -pub use self::cloud_games_reserve_version_name_response::CloudGamesReserveVersionNameResponse; -pub mod cloud_games_validate_game_request; -pub use self::cloud_games_validate_game_request::CloudGamesValidateGameRequest; -pub mod cloud_games_validate_game_response; -pub use self::cloud_games_validate_game_response::CloudGamesValidateGameResponse; -pub mod cloud_games_validate_game_version_request; -pub use self::cloud_games_validate_game_version_request::CloudGamesValidateGameVersionRequest; -pub mod cloud_games_validate_game_version_response; -pub use self::cloud_games_validate_game_version_response::CloudGamesValidateGameVersionResponse; -pub mod cloud_get_ray_perf_logs_response; -pub use self::cloud_get_ray_perf_logs_response::CloudGetRayPerfLogsResponse; -pub mod cloud_get_region_tiers_response; -pub use self::cloud_get_region_tiers_response::CloudGetRegionTiersResponse; -pub mod cloud_group_bank_source; -pub use self::cloud_group_bank_source::CloudGroupBankSource; -pub mod cloud_inspect_response; -pub use self::cloud_inspect_response::CloudInspectResponse; -pub mod cloud_lobby_summary_analytics; -pub use self::cloud_lobby_summary_analytics::CloudLobbySummaryAnalytics; -pub mod cloud_logs_lobby_status; -pub use self::cloud_logs_lobby_status::CloudLogsLobbyStatus; -pub mod cloud_logs_lobby_status_stopped; -pub use self::cloud_logs_lobby_status_stopped::CloudLogsLobbyStatusStopped; -pub mod cloud_logs_lobby_summary; -pub use self::cloud_logs_lobby_summary::CloudLogsLobbySummary; -pub mod cloud_logs_perf_mark; -pub use self::cloud_logs_perf_mark::CloudLogsPerfMark; -pub mod cloud_logs_perf_span; -pub use self::cloud_logs_perf_span::CloudLogsPerfSpan; -pub mod cloud_matchmaker_development_port; -pub use self::cloud_matchmaker_development_port::CloudMatchmakerDevelopmentPort; -pub mod cloud_matchmaker_namespace_config; -pub use self::cloud_matchmaker_namespace_config::CloudMatchmakerNamespaceConfig; -pub mod cloud_namespace_config; -pub use self::cloud_namespace_config::CloudNamespaceConfig; -pub mod cloud_namespace_full; -pub use self::cloud_namespace_full::CloudNamespaceFull; -pub mod cloud_namespace_summary; -pub use self::cloud_namespace_summary::CloudNamespaceSummary; -pub mod cloud_namespace_version; -pub use self::cloud_namespace_version::CloudNamespaceVersion; -pub mod cloud_region_summary; -pub use self::cloud_region_summary::CloudRegionSummary; -pub mod cloud_region_tier; -pub use self::cloud_region_tier::CloudRegionTier; -pub mod cloud_region_tier_expenses; -pub use self::cloud_region_tier_expenses::CloudRegionTierExpenses; -pub mod cloud_svc_metrics; -pub use self::cloud_svc_metrics::CloudSvcMetrics; -pub mod cloud_svc_perf; -pub use self::cloud_svc_perf::CloudSvcPerf; -pub mod cloud_universal_region; -pub use self::cloud_universal_region::CloudUniversalRegion; -pub mod cloud_validate_group_request; -pub use self::cloud_validate_group_request::CloudValidateGroupRequest; -pub mod cloud_validate_group_response; -pub use self::cloud_validate_group_response::CloudValidateGroupResponse; -pub mod cloud_version_cdn_config; -pub use self::cloud_version_cdn_config::CloudVersionCdnConfig; -pub mod cloud_version_cdn_custom_headers_middleware; -pub use self::cloud_version_cdn_custom_headers_middleware::CloudVersionCdnCustomHeadersMiddleware; -pub mod cloud_version_cdn_header; -pub use self::cloud_version_cdn_header::CloudVersionCdnHeader; -pub mod cloud_version_cdn_middleware; -pub use self::cloud_version_cdn_middleware::CloudVersionCdnMiddleware; -pub mod cloud_version_cdn_middleware_kind; -pub use self::cloud_version_cdn_middleware_kind::CloudVersionCdnMiddlewareKind; -pub mod cloud_version_cdn_route; -pub use self::cloud_version_cdn_route::CloudVersionCdnRoute; -pub mod cloud_version_config; -pub use self::cloud_version_config::CloudVersionConfig; -pub mod cloud_version_engine_config; -pub use self::cloud_version_engine_config::CloudVersionEngineConfig; -pub mod cloud_version_engine_unreal_config; -pub use self::cloud_version_engine_unreal_config::CloudVersionEngineUnrealConfig; -pub mod cloud_version_full; -pub use self::cloud_version_full::CloudVersionFull; -pub mod cloud_version_identity_config; -pub use self::cloud_version_identity_config::CloudVersionIdentityConfig; -pub mod cloud_version_identity_custom_avatar; -pub use self::cloud_version_identity_custom_avatar::CloudVersionIdentityCustomAvatar; -pub mod cloud_version_identity_custom_display_name; -pub use self::cloud_version_identity_custom_display_name::CloudVersionIdentityCustomDisplayName; -pub mod cloud_version_matchmaker_captcha; -pub use self::cloud_version_matchmaker_captcha::CloudVersionMatchmakerCaptcha; -pub mod cloud_version_matchmaker_captcha_hcaptcha; -pub use self::cloud_version_matchmaker_captcha_hcaptcha::CloudVersionMatchmakerCaptchaHcaptcha; -pub mod cloud_version_matchmaker_captcha_hcaptcha_level; -pub use self::cloud_version_matchmaker_captcha_hcaptcha_level::CloudVersionMatchmakerCaptchaHcaptchaLevel; -pub mod cloud_version_matchmaker_captcha_turnstile; -pub use self::cloud_version_matchmaker_captcha_turnstile::CloudVersionMatchmakerCaptchaTurnstile; -pub mod cloud_version_matchmaker_config; -pub use self::cloud_version_matchmaker_config::CloudVersionMatchmakerConfig; -pub mod cloud_version_matchmaker_game_mode; -pub use self::cloud_version_matchmaker_game_mode::CloudVersionMatchmakerGameMode; -pub mod cloud_version_matchmaker_game_mode_actions; -pub use self::cloud_version_matchmaker_game_mode_actions::CloudVersionMatchmakerGameModeActions; -pub mod cloud_version_matchmaker_game_mode_create_config; -pub use self::cloud_version_matchmaker_game_mode_create_config::CloudVersionMatchmakerGameModeCreateConfig; -pub mod cloud_version_matchmaker_game_mode_find_config; -pub use self::cloud_version_matchmaker_game_mode_find_config::CloudVersionMatchmakerGameModeFindConfig; -pub mod cloud_version_matchmaker_game_mode_identity_requirement; -pub use self::cloud_version_matchmaker_game_mode_identity_requirement::CloudVersionMatchmakerGameModeIdentityRequirement; -pub mod cloud_version_matchmaker_game_mode_idle_lobbies_config; -pub use self::cloud_version_matchmaker_game_mode_idle_lobbies_config::CloudVersionMatchmakerGameModeIdleLobbiesConfig; -pub mod cloud_version_matchmaker_game_mode_join_config; -pub use self::cloud_version_matchmaker_game_mode_join_config::CloudVersionMatchmakerGameModeJoinConfig; -pub mod cloud_version_matchmaker_game_mode_region; -pub use self::cloud_version_matchmaker_game_mode_region::CloudVersionMatchmakerGameModeRegion; -pub mod cloud_version_matchmaker_game_mode_runtime_docker; -pub use self::cloud_version_matchmaker_game_mode_runtime_docker::CloudVersionMatchmakerGameModeRuntimeDocker; -pub mod cloud_version_matchmaker_game_mode_runtime_docker_port; -pub use self::cloud_version_matchmaker_game_mode_runtime_docker_port::CloudVersionMatchmakerGameModeRuntimeDockerPort; -pub mod cloud_version_matchmaker_game_mode_verification_config; -pub use self::cloud_version_matchmaker_game_mode_verification_config::CloudVersionMatchmakerGameModeVerificationConfig; -pub mod cloud_version_matchmaker_lobby_group; -pub use self::cloud_version_matchmaker_lobby_group::CloudVersionMatchmakerLobbyGroup; -pub mod cloud_version_matchmaker_lobby_group_idle_lobbies_config; -pub use self::cloud_version_matchmaker_lobby_group_idle_lobbies_config::CloudVersionMatchmakerLobbyGroupIdleLobbiesConfig; -pub mod cloud_version_matchmaker_lobby_group_region; -pub use self::cloud_version_matchmaker_lobby_group_region::CloudVersionMatchmakerLobbyGroupRegion; -pub mod cloud_version_matchmaker_lobby_group_runtime; -pub use self::cloud_version_matchmaker_lobby_group_runtime::CloudVersionMatchmakerLobbyGroupRuntime; -pub mod cloud_version_matchmaker_lobby_group_runtime_docker; -pub use self::cloud_version_matchmaker_lobby_group_runtime_docker::CloudVersionMatchmakerLobbyGroupRuntimeDocker; -pub mod cloud_version_matchmaker_lobby_group_runtime_docker_env_var; -pub use self::cloud_version_matchmaker_lobby_group_runtime_docker_env_var::CloudVersionMatchmakerLobbyGroupRuntimeDockerEnvVar; -pub mod cloud_version_matchmaker_lobby_group_runtime_docker_port; -pub use self::cloud_version_matchmaker_lobby_group_runtime_docker_port::CloudVersionMatchmakerLobbyGroupRuntimeDockerPort; -pub mod cloud_version_matchmaker_network_mode; -pub use self::cloud_version_matchmaker_network_mode::CloudVersionMatchmakerNetworkMode; -pub mod cloud_version_matchmaker_port_protocol; -pub use self::cloud_version_matchmaker_port_protocol::CloudVersionMatchmakerPortProtocol; -pub mod cloud_version_matchmaker_port_range; -pub use self::cloud_version_matchmaker_port_range::CloudVersionMatchmakerPortRange; -pub mod cloud_version_matchmaker_proxy_kind; -pub use self::cloud_version_matchmaker_proxy_kind::CloudVersionMatchmakerProxyKind; -pub mod cloud_version_summary; -pub use self::cloud_version_summary::CloudVersionSummary; -pub mod error_body; -pub use self::error_body::ErrorBody; -pub mod game_handle; -pub use self::game_handle::GameHandle; -pub mod game_leaderboard_category; -pub use self::game_leaderboard_category::GameLeaderboardCategory; -pub mod game_platform_link; -pub use self::game_platform_link::GamePlatformLink; -pub mod game_profile; -pub use self::game_profile::GameProfile; -pub mod game_stat; -pub use self::game_stat::GameStat; -pub mod game_stat_aggregation_method; -pub use self::game_stat_aggregation_method::GameStatAggregationMethod; -pub mod game_stat_config; -pub use self::game_stat_config::GameStatConfig; -pub mod game_stat_format_method; -pub use self::game_stat_format_method::GameStatFormatMethod; -pub mod game_stat_sorting_method; -pub use self::game_stat_sorting_method::GameStatSortingMethod; -pub mod game_stat_summary; -pub use self::game_stat_summary::GameStatSummary; -pub mod game_summary; -pub use self::game_summary::GameSummary; -pub mod games_environments_create_service_token_response; -pub use self::games_environments_create_service_token_response::GamesEnvironmentsCreateServiceTokenResponse; -pub mod geo_coord; -pub use self::geo_coord::GeoCoord; -pub mod geo_distance; -pub use self::geo_distance::GeoDistance; -pub mod global_event_notification; -pub use self::global_event_notification::GlobalEventNotification; -pub mod group_banned_identity; -pub use self::group_banned_identity::GroupBannedIdentity; -pub mod group_consume_invite_response; -pub use self::group_consume_invite_response::GroupConsumeInviteResponse; -pub mod group_create_invite_request; -pub use self::group_create_invite_request::GroupCreateInviteRequest; -pub mod group_create_invite_response; -pub use self::group_create_invite_response::GroupCreateInviteResponse; -pub mod group_create_request; -pub use self::group_create_request::GroupCreateRequest; -pub mod group_create_response; -pub use self::group_create_response::GroupCreateResponse; -pub mod group_external_links; -pub use self::group_external_links::GroupExternalLinks; -pub mod group_get_bans_response; -pub use self::group_get_bans_response::GroupGetBansResponse; -pub mod group_get_invite_response; -pub use self::group_get_invite_response::GroupGetInviteResponse; -pub mod group_get_join_requests_response; -pub use self::group_get_join_requests_response::GroupGetJoinRequestsResponse; -pub mod group_get_members_response; -pub use self::group_get_members_response::GroupGetMembersResponse; -pub mod group_get_profile_response; -pub use self::group_get_profile_response::GroupGetProfileResponse; -pub mod group_get_summary_response; -pub use self::group_get_summary_response::GroupGetSummaryResponse; -pub mod group_handle; -pub use self::group_handle::GroupHandle; -pub mod group_join_request; -pub use self::group_join_request::GroupJoinRequest; -pub mod group_list_suggested_response; -pub use self::group_list_suggested_response::GroupListSuggestedResponse; -pub mod group_member; -pub use self::group_member::GroupMember; -pub mod group_prepare_avatar_upload_request; -pub use self::group_prepare_avatar_upload_request::GroupPrepareAvatarUploadRequest; -pub mod group_prepare_avatar_upload_response; -pub use self::group_prepare_avatar_upload_response::GroupPrepareAvatarUploadResponse; -pub mod group_profile; -pub use self::group_profile::GroupProfile; -pub mod group_publicity; -pub use self::group_publicity::GroupPublicity; -pub mod group_resolve_join_request_request; -pub use self::group_resolve_join_request_request::GroupResolveJoinRequestRequest; -pub mod group_summary; -pub use self::group_summary::GroupSummary; -pub mod group_transfer_ownership_request; -pub use self::group_transfer_ownership_request::GroupTransferOwnershipRequest; -pub mod group_update_profile_request; -pub use self::group_update_profile_request::GroupUpdateProfileRequest; -pub mod group_validate_profile_request; -pub use self::group_validate_profile_request::GroupValidateProfileRequest; -pub mod group_validate_profile_response; -pub use self::group_validate_profile_response::GroupValidateProfileResponse; -pub mod identity_dev_state; -pub use self::identity_dev_state::IdentityDevState; -pub mod identity_email_linked_account; -pub use self::identity_email_linked_account::IdentityEmailLinkedAccount; -pub mod identity_external_links; -pub use self::identity_external_links::IdentityExternalLinks; -pub mod identity_game_activity; -pub use self::identity_game_activity::IdentityGameActivity; -pub mod identity_game_link_status; -pub use self::identity_game_link_status::IdentityGameLinkStatus; -pub mod identity_get_handles_response; -pub use self::identity_get_handles_response::IdentityGetHandlesResponse; -pub mod identity_get_profile_response; -pub use self::identity_get_profile_response::IdentityGetProfileResponse; -pub mod identity_get_summaries_response; -pub use self::identity_get_summaries_response::IdentityGetSummariesResponse; -pub mod identity_global_event; -pub use self::identity_global_event::IdentityGlobalEvent; -pub mod identity_global_event_identity_update; -pub use self::identity_global_event_identity_update::IdentityGlobalEventIdentityUpdate; -pub mod identity_global_event_kind; -pub use self::identity_global_event_kind::IdentityGlobalEventKind; -pub mod identity_global_event_notification; -pub use self::identity_global_event_notification::IdentityGlobalEventNotification; -pub mod identity_group; -pub use self::identity_group::IdentityGroup; -pub mod identity_handle; -pub use self::identity_handle::IdentityHandle; -pub mod identity_linked_account; -pub use self::identity_linked_account::IdentityLinkedAccount; -pub mod identity_list_activities_response; -pub use self::identity_list_activities_response::IdentityListActivitiesResponse; -pub mod identity_prepare_avatar_upload_request; -pub use self::identity_prepare_avatar_upload_request::IdentityPrepareAvatarUploadRequest; -pub mod identity_prepare_avatar_upload_response; -pub use self::identity_prepare_avatar_upload_response::IdentityPrepareAvatarUploadResponse; -pub mod identity_profile; -pub use self::identity_profile::IdentityProfile; -pub mod identity_set_game_activity_request; -pub use self::identity_set_game_activity_request::IdentitySetGameActivityRequest; -pub mod identity_setup_request; -pub use self::identity_setup_request::IdentitySetupRequest; -pub mod identity_setup_response; -pub use self::identity_setup_response::IdentitySetupResponse; -pub mod identity_signup_for_beta_request; -pub use self::identity_signup_for_beta_request::IdentitySignupForBetaRequest; -pub mod identity_status; -pub use self::identity_status::IdentityStatus; -pub mod identity_summary; -pub use self::identity_summary::IdentitySummary; -pub mod identity_update_game_activity; -pub use self::identity_update_game_activity::IdentityUpdateGameActivity; -pub mod identity_update_profile_request; -pub use self::identity_update_profile_request::IdentityUpdateProfileRequest; -pub mod identity_update_status_request; -pub use self::identity_update_status_request::IdentityUpdateStatusRequest; -pub mod identity_validate_profile_response; -pub use self::identity_validate_profile_response::IdentityValidateProfileResponse; -pub mod identity_watch_events_response; -pub use self::identity_watch_events_response::IdentityWatchEventsResponse; -pub mod matchmaker_create_lobby_response; -pub use self::matchmaker_create_lobby_response::MatchmakerCreateLobbyResponse; -pub mod matchmaker_custom_lobby_publicity; -pub use self::matchmaker_custom_lobby_publicity::MatchmakerCustomLobbyPublicity; -pub mod matchmaker_find_lobby_response; -pub use self::matchmaker_find_lobby_response::MatchmakerFindLobbyResponse; -pub mod matchmaker_game_mode_info; -pub use self::matchmaker_game_mode_info::MatchmakerGameModeInfo; -pub mod matchmaker_game_mode_statistics; -pub use self::matchmaker_game_mode_statistics::MatchmakerGameModeStatistics; -pub mod matchmaker_get_statistics_response; -pub use self::matchmaker_get_statistics_response::MatchmakerGetStatisticsResponse; -pub mod matchmaker_join_lobby; -pub use self::matchmaker_join_lobby::MatchmakerJoinLobby; -pub mod matchmaker_join_lobby_response; -pub use self::matchmaker_join_lobby_response::MatchmakerJoinLobbyResponse; -pub mod matchmaker_join_player; -pub use self::matchmaker_join_player::MatchmakerJoinPlayer; -pub mod matchmaker_join_port; -pub use self::matchmaker_join_port::MatchmakerJoinPort; -pub mod matchmaker_join_port_range; -pub use self::matchmaker_join_port_range::MatchmakerJoinPortRange; -pub mod matchmaker_join_region; -pub use self::matchmaker_join_region::MatchmakerJoinRegion; -pub mod matchmaker_list_lobbies_response; -pub use self::matchmaker_list_lobbies_response::MatchmakerListLobbiesResponse; -pub mod matchmaker_list_regions_response; -pub use self::matchmaker_list_regions_response::MatchmakerListRegionsResponse; -pub mod matchmaker_lobbies_create_request; -pub use self::matchmaker_lobbies_create_request::MatchmakerLobbiesCreateRequest; -pub mod matchmaker_lobbies_find_request; -pub use self::matchmaker_lobbies_find_request::MatchmakerLobbiesFindRequest; -pub mod matchmaker_lobbies_join_request; -pub use self::matchmaker_lobbies_join_request::MatchmakerLobbiesJoinRequest; -pub mod matchmaker_lobbies_set_closed_request; -pub use self::matchmaker_lobbies_set_closed_request::MatchmakerLobbiesSetClosedRequest; -pub mod matchmaker_lobby_info; -pub use self::matchmaker_lobby_info::MatchmakerLobbyInfo; -pub mod matchmaker_players_connected_request; -pub use self::matchmaker_players_connected_request::MatchmakerPlayersConnectedRequest; -pub mod matchmaker_region_info; -pub use self::matchmaker_region_info::MatchmakerRegionInfo; -pub mod matchmaker_region_statistics; -pub use self::matchmaker_region_statistics::MatchmakerRegionStatistics; -pub mod portal_get_game_profile_response; -pub use self::portal_get_game_profile_response::PortalGetGameProfileResponse; -pub mod portal_get_suggested_games_response; -pub use self::portal_get_suggested_games_response::PortalGetSuggestedGamesResponse; -pub mod portal_notification_register_firebase_service; -pub use self::portal_notification_register_firebase_service::PortalNotificationRegisterFirebaseService; -pub mod portal_notification_register_service; -pub use self::portal_notification_register_service::PortalNotificationRegisterService; -pub mod portal_notification_unregister_service; -pub use self::portal_notification_unregister_service::PortalNotificationUnregisterService; -pub mod provision_datacenters_get_servers_response; -pub use self::provision_datacenters_get_servers_response::ProvisionDatacentersGetServersResponse; -pub mod provision_datacenters_get_tls_response; -pub use self::provision_datacenters_get_tls_response::ProvisionDatacentersGetTlsResponse; -pub mod provision_pool_type; -pub use self::provision_pool_type::ProvisionPoolType; -pub mod provision_server; -pub use self::provision_server::ProvisionServer; -pub mod provision_servers_get_info_response; -pub use self::provision_servers_get_info_response::ProvisionServersGetInfoResponse; -pub mod servers_build; -pub use self::servers_build::ServersBuild; -pub mod servers_build_compression; -pub use self::servers_build_compression::ServersBuildCompression; -pub mod servers_build_kind; -pub use self::servers_build_kind::ServersBuildKind; -pub mod servers_create_build_request; -pub use self::servers_create_build_request::ServersCreateBuildRequest; -pub mod servers_create_build_response; -pub use self::servers_create_build_response::ServersCreateBuildResponse; -pub mod servers_create_server_network_request; -pub use self::servers_create_server_network_request::ServersCreateServerNetworkRequest; -pub mod servers_create_server_port_request; -pub use self::servers_create_server_port_request::ServersCreateServerPortRequest; -pub mod servers_create_server_request; -pub use self::servers_create_server_request::ServersCreateServerRequest; -pub mod servers_create_server_response; -pub use self::servers_create_server_response::ServersCreateServerResponse; -pub mod servers_create_server_runtime_request; -pub use self::servers_create_server_runtime_request::ServersCreateServerRuntimeRequest; -pub mod servers_datacenter; -pub use self::servers_datacenter::ServersDatacenter; -pub mod servers_get_build_response; -pub use self::servers_get_build_response::ServersGetBuildResponse; -pub mod servers_get_server_logs_response; -pub use self::servers_get_server_logs_response::ServersGetServerLogsResponse; -pub mod servers_get_server_response; -pub use self::servers_get_server_response::ServersGetServerResponse; -pub mod servers_lifecycle; -pub use self::servers_lifecycle::ServersLifecycle; -pub mod servers_list_builds_response; -pub use self::servers_list_builds_response::ServersListBuildsResponse; -pub mod servers_list_datacenters_response; -pub use self::servers_list_datacenters_response::ServersListDatacentersResponse; -pub mod servers_list_servers_response; -pub use self::servers_list_servers_response::ServersListServersResponse; -pub mod servers_log_stream; -pub use self::servers_log_stream::ServersLogStream; -pub mod servers_network; -pub use self::servers_network::ServersNetwork; -pub mod servers_network_mode; -pub use self::servers_network_mode::ServersNetworkMode; -pub mod servers_patch_build_tags_request; -pub use self::servers_patch_build_tags_request::ServersPatchBuildTagsRequest; -pub mod servers_port; -pub use self::servers_port::ServersPort; -pub mod servers_port_protocol; -pub use self::servers_port_protocol::ServersPortProtocol; -pub mod servers_port_routing; -pub use self::servers_port_routing::ServersPortRouting; -pub mod servers_resources; -pub use self::servers_resources::ServersResources; -pub mod servers_runtime; -pub use self::servers_runtime::ServersRuntime; -pub mod servers_server; -pub use self::servers_server::ServersServer; -pub mod upload_prepare_file; -pub use self::upload_prepare_file::UploadPrepareFile; -pub mod upload_presigned_request; -pub use self::upload_presigned_request::UploadPresignedRequest; -pub mod validation_error; -pub use self::validation_error::ValidationError; -pub mod watch_response; -pub use self::watch_response::WatchResponse; diff --git a/sdks/api/full/rust-cli/src/models/portal_get_game_profile_response.rs b/sdks/api/full/rust-cli/src/models/portal_get_game_profile_response.rs deleted file mode 100644 index 956b0da212..0000000000 --- a/sdks/api/full/rust-cli/src/models/portal_get_game_profile_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct PortalGetGameProfileResponse { - #[serde(rename = "game")] - pub game: Box, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl PortalGetGameProfileResponse { - pub fn new(game: crate::models::GameProfile, watch: crate::models::WatchResponse) -> PortalGetGameProfileResponse { - PortalGetGameProfileResponse { - game: Box::new(game), - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/portal_get_suggested_games_response.rs b/sdks/api/full/rust-cli/src/models/portal_get_suggested_games_response.rs deleted file mode 100644 index a663aeaac5..0000000000 --- a/sdks/api/full/rust-cli/src/models/portal_get_suggested_games_response.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct PortalGetSuggestedGamesResponse { - /// A list of game summaries. - #[serde(rename = "games")] - pub games: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl PortalGetSuggestedGamesResponse { - pub fn new(games: Vec, watch: crate::models::WatchResponse) -> PortalGetSuggestedGamesResponse { - PortalGetSuggestedGamesResponse { - games, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/portal_notification_register_firebase_service.rs b/sdks/api/full/rust-cli/src/models/portal_notification_register_firebase_service.rs deleted file mode 100644 index 213357992e..0000000000 --- a/sdks/api/full/rust-cli/src/models/portal_notification_register_firebase_service.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct PortalNotificationRegisterFirebaseService { - #[serde(rename = "access_key")] - pub access_key: String, -} - -impl PortalNotificationRegisterFirebaseService { - pub fn new(access_key: String) -> PortalNotificationRegisterFirebaseService { - PortalNotificationRegisterFirebaseService { - access_key, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/portal_notification_register_service.rs b/sdks/api/full/rust-cli/src/models/portal_notification_register_service.rs deleted file mode 100644 index 1058fd743b..0000000000 --- a/sdks/api/full/rust-cli/src/models/portal_notification_register_service.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct PortalNotificationRegisterService { - #[serde(rename = "firebase", skip_serializing_if = "Option::is_none")] - pub firebase: Option>, -} - -impl PortalNotificationRegisterService { - pub fn new() -> PortalNotificationRegisterService { - PortalNotificationRegisterService { - firebase: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/portal_notification_unregister_service.rs b/sdks/api/full/rust-cli/src/models/portal_notification_unregister_service.rs deleted file mode 100644 index d4bda04c73..0000000000 --- a/sdks/api/full/rust-cli/src/models/portal_notification_unregister_service.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum PortalNotificationUnregisterService { - #[serde(rename = "firebase")] - Firebase, - -} - -impl ToString for PortalNotificationUnregisterService { - fn to_string(&self) -> String { - match self { - Self::Firebase => String::from("firebase"), - } - } -} - -impl Default for PortalNotificationUnregisterService { - fn default() -> PortalNotificationUnregisterService { - Self::Firebase - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/provision_datacenters_get_servers_response.rs b/sdks/api/full/rust-cli/src/models/provision_datacenters_get_servers_response.rs deleted file mode 100644 index cef831a654..0000000000 --- a/sdks/api/full/rust-cli/src/models/provision_datacenters_get_servers_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ProvisionDatacentersGetServersResponse { - #[serde(rename = "servers")] - pub servers: Vec, -} - -impl ProvisionDatacentersGetServersResponse { - pub fn new(servers: Vec) -> ProvisionDatacentersGetServersResponse { - ProvisionDatacentersGetServersResponse { - servers, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/provision_datacenters_get_tls_response.rs b/sdks/api/full/rust-cli/src/models/provision_datacenters_get_tls_response.rs deleted file mode 100644 index a2039a21ba..0000000000 --- a/sdks/api/full/rust-cli/src/models/provision_datacenters_get_tls_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ProvisionDatacentersGetTlsResponse { - #[serde(rename = "job_cert_pem")] - pub job_cert_pem: String, - #[serde(rename = "job_private_key_pem")] - pub job_private_key_pem: String, -} - -impl ProvisionDatacentersGetTlsResponse { - pub fn new(job_cert_pem: String, job_private_key_pem: String) -> ProvisionDatacentersGetTlsResponse { - ProvisionDatacentersGetTlsResponse { - job_cert_pem, - job_private_key_pem, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/provision_pool_type.rs b/sdks/api/full/rust-cli/src/models/provision_pool_type.rs deleted file mode 100644 index 109c5bb087..0000000000 --- a/sdks/api/full/rust-cli/src/models/provision_pool_type.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ProvisionPoolType { - #[serde(rename = "job")] - Job, - #[serde(rename = "gg")] - Gg, - #[serde(rename = "ats")] - Ats, - #[serde(rename = "pegboard")] - Pegboard, - #[serde(rename = "pegboard_isolate")] - PegboardIsolate, - #[serde(rename = "fdb")] - Fdb, - -} - -impl ToString for ProvisionPoolType { - fn to_string(&self) -> String { - match self { - Self::Job => String::from("job"), - Self::Gg => String::from("gg"), - Self::Ats => String::from("ats"), - Self::Pegboard => String::from("pegboard"), - Self::PegboardIsolate => String::from("pegboard_isolate"), - Self::Fdb => String::from("fdb"), - } - } -} - -impl Default for ProvisionPoolType { - fn default() -> ProvisionPoolType { - Self::Job - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/provision_server.rs b/sdks/api/full/rust-cli/src/models/provision_server.rs deleted file mode 100644 index 8eea17ce70..0000000000 --- a/sdks/api/full/rust-cli/src/models/provision_server.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ProvisionServer { - #[serde(rename = "datacenter_id")] - pub datacenter_id: uuid::Uuid, - #[serde(rename = "pool_type")] - pub pool_type: crate::models::ProvisionPoolType, - #[serde(rename = "public_ip", skip_serializing_if = "Option::is_none")] - pub public_ip: Option, - #[serde(rename = "server_id")] - pub server_id: uuid::Uuid, - #[serde(rename = "vlan_ip", skip_serializing_if = "Option::is_none")] - pub vlan_ip: Option, -} - -impl ProvisionServer { - pub fn new(datacenter_id: uuid::Uuid, pool_type: crate::models::ProvisionPoolType, server_id: uuid::Uuid) -> ProvisionServer { - ProvisionServer { - datacenter_id, - pool_type, - public_ip: None, - server_id, - vlan_ip: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/provision_servers_get_info_response.rs b/sdks/api/full/rust-cli/src/models/provision_servers_get_info_response.rs deleted file mode 100644 index 7c7048be3d..0000000000 --- a/sdks/api/full/rust-cli/src/models/provision_servers_get_info_response.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ProvisionServersGetInfoResponse { - #[serde(rename = "cluster_id")] - pub cluster_id: uuid::Uuid, - #[serde(rename = "datacenter_id")] - pub datacenter_id: uuid::Uuid, - #[serde(rename = "name")] - pub name: String, - #[serde(rename = "public_ip")] - pub public_ip: String, - #[serde(rename = "server_id")] - pub server_id: uuid::Uuid, - #[serde(rename = "vlan_ip")] - pub vlan_ip: String, -} - -impl ProvisionServersGetInfoResponse { - pub fn new(cluster_id: uuid::Uuid, datacenter_id: uuid::Uuid, name: String, public_ip: String, server_id: uuid::Uuid, vlan_ip: String) -> ProvisionServersGetInfoResponse { - ProvisionServersGetInfoResponse { - cluster_id, - datacenter_id, - name, - public_ip, - server_id, - vlan_ip, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_build.rs b/sdks/api/full/rust-cli/src/models/servers_build.rs deleted file mode 100644 index fdd8d54e66..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_build.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersBuild { - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// RFC3339 timestamp - #[serde(rename = "created_at")] - pub created_at: String, - #[serde(rename = "id")] - pub id: uuid::Uuid, - #[serde(rename = "name")] - pub name: String, - /// Tags of this build - #[serde(rename = "tags")] - pub tags: ::std::collections::HashMap, -} - -impl ServersBuild { - pub fn new(content_length: i64, created_at: String, id: uuid::Uuid, name: String, tags: ::std::collections::HashMap) -> ServersBuild { - ServersBuild { - content_length, - created_at, - id, - name, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_build_compression.rs b/sdks/api/full/rust-cli/src/models/servers_build_compression.rs deleted file mode 100644 index fd549d6279..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_build_compression.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ServersBuildCompression { - #[serde(rename = "none")] - None, - #[serde(rename = "lz4")] - Lz4, - -} - -impl ToString for ServersBuildCompression { - fn to_string(&self) -> String { - match self { - Self::None => String::from("none"), - Self::Lz4 => String::from("lz4"), - } - } -} - -impl Default for ServersBuildCompression { - fn default() -> ServersBuildCompression { - Self::None - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/servers_build_kind.rs b/sdks/api/full/rust-cli/src/models/servers_build_kind.rs deleted file mode 100644 index 853abbb0e7..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_build_kind.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ServersBuildKind { - #[serde(rename = "docker_image")] - DockerImage, - #[serde(rename = "oci_bundle")] - OciBundle, - -} - -impl ToString for ServersBuildKind { - fn to_string(&self) -> String { - match self { - Self::DockerImage => String::from("docker_image"), - Self::OciBundle => String::from("oci_bundle"), - } - } -} - -impl Default for ServersBuildKind { - fn default() -> ServersBuildKind { - Self::DockerImage - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/servers_create_build_request.rs b/sdks/api/full/rust-cli/src/models/servers_create_build_request.rs deleted file mode 100644 index eb128a33f3..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_create_build_request.rs +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersCreateBuildRequest { - #[serde(rename = "compression", skip_serializing_if = "Option::is_none")] - pub compression: Option, - #[serde(rename = "image_file")] - pub image_file: Box, - /// A tag given to the game build. - #[serde(rename = "image_tag")] - pub image_tag: String, - #[serde(rename = "kind", skip_serializing_if = "Option::is_none")] - pub kind: Option, - #[serde(rename = "multipart_upload", skip_serializing_if = "Option::is_none")] - pub multipart_upload: Option, - #[serde(rename = "name")] - pub name: String, - #[serde(rename = "prewarm_datacenters", skip_serializing_if = "Option::is_none")] - pub prewarm_datacenters: Option>, -} - -impl ServersCreateBuildRequest { - pub fn new(image_file: crate::models::UploadPrepareFile, image_tag: String, name: String) -> ServersCreateBuildRequest { - ServersCreateBuildRequest { - compression: None, - image_file: Box::new(image_file), - image_tag, - kind: None, - multipart_upload: None, - name, - prewarm_datacenters: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_create_build_response.rs b/sdks/api/full/rust-cli/src/models/servers_create_build_response.rs deleted file mode 100644 index c277171564..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_create_build_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersCreateBuildResponse { - #[serde(rename = "build")] - pub build: uuid::Uuid, - #[serde(rename = "image_presigned_request", skip_serializing_if = "Option::is_none")] - pub image_presigned_request: Option>, - #[serde(rename = "image_presigned_requests", skip_serializing_if = "Option::is_none")] - pub image_presigned_requests: Option>, -} - -impl ServersCreateBuildResponse { - pub fn new(build: uuid::Uuid) -> ServersCreateBuildResponse { - ServersCreateBuildResponse { - build, - image_presigned_request: None, - image_presigned_requests: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_create_server_network_request.rs b/sdks/api/full/rust-cli/src/models/servers_create_server_network_request.rs deleted file mode 100644 index d469cc181d..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_create_server_network_request.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersCreateServerNetworkRequest { - #[serde(rename = "mode", skip_serializing_if = "Option::is_none")] - pub mode: Option, - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, -} - -impl ServersCreateServerNetworkRequest { - pub fn new(ports: ::std::collections::HashMap) -> ServersCreateServerNetworkRequest { - ServersCreateServerNetworkRequest { - mode: None, - ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_create_server_port_request.rs b/sdks/api/full/rust-cli/src/models/servers_create_server_port_request.rs deleted file mode 100644 index d818685f71..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_create_server_port_request.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersCreateServerPortRequest { - #[serde(rename = "internal_port", skip_serializing_if = "Option::is_none")] - pub internal_port: Option, - #[serde(rename = "protocol")] - pub protocol: crate::models::ServersPortProtocol, - #[serde(rename = "routing", skip_serializing_if = "Option::is_none")] - pub routing: Option>, -} - -impl ServersCreateServerPortRequest { - pub fn new(protocol: crate::models::ServersPortProtocol) -> ServersCreateServerPortRequest { - ServersCreateServerPortRequest { - internal_port: None, - protocol, - routing: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_create_server_request.rs b/sdks/api/full/rust-cli/src/models/servers_create_server_request.rs deleted file mode 100644 index 84c0f99936..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_create_server_request.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersCreateServerRequest { - #[serde(rename = "datacenter")] - pub datacenter: uuid::Uuid, - #[serde(rename = "lifecycle", skip_serializing_if = "Option::is_none")] - pub lifecycle: Option>, - #[serde(rename = "network")] - pub network: Box, - #[serde(rename = "resources")] - pub resources: Box, - #[serde(rename = "runtime")] - pub runtime: Box, - #[serde(rename = "tags", deserialize_with = "Option::deserialize")] - pub tags: Option, -} - -impl ServersCreateServerRequest { - pub fn new(datacenter: uuid::Uuid, network: crate::models::ServersCreateServerNetworkRequest, resources: crate::models::ServersResources, runtime: crate::models::ServersCreateServerRuntimeRequest, tags: Option) -> ServersCreateServerRequest { - ServersCreateServerRequest { - datacenter, - lifecycle: None, - network: Box::new(network), - resources: Box::new(resources), - runtime: Box::new(runtime), - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_create_server_response.rs b/sdks/api/full/rust-cli/src/models/servers_create_server_response.rs deleted file mode 100644 index 3c32cbd896..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_create_server_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersCreateServerResponse { - #[serde(rename = "server")] - pub server: Box, -} - -impl ServersCreateServerResponse { - pub fn new(server: crate::models::ServersServer) -> ServersCreateServerResponse { - ServersCreateServerResponse { - server: Box::new(server), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_create_server_runtime_request.rs b/sdks/api/full/rust-cli/src/models/servers_create_server_runtime_request.rs deleted file mode 100644 index 11f4647cf9..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_create_server_runtime_request.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersCreateServerRuntimeRequest { - #[serde(rename = "arguments", skip_serializing_if = "Option::is_none")] - pub arguments: Option>, - #[serde(rename = "build")] - pub build: uuid::Uuid, - #[serde(rename = "environment", skip_serializing_if = "Option::is_none")] - pub environment: Option<::std::collections::HashMap>, -} - -impl ServersCreateServerRuntimeRequest { - pub fn new(build: uuid::Uuid) -> ServersCreateServerRuntimeRequest { - ServersCreateServerRuntimeRequest { - arguments: None, - build, - environment: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_datacenter.rs b/sdks/api/full/rust-cli/src/models/servers_datacenter.rs deleted file mode 100644 index b267b68a6e..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_datacenter.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersDatacenter { - #[serde(rename = "id")] - pub id: uuid::Uuid, - #[serde(rename = "name")] - pub name: String, - #[serde(rename = "slug")] - pub slug: String, -} - -impl ServersDatacenter { - pub fn new(id: uuid::Uuid, name: String, slug: String) -> ServersDatacenter { - ServersDatacenter { - id, - name, - slug, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_get_build_response.rs b/sdks/api/full/rust-cli/src/models/servers_get_build_response.rs deleted file mode 100644 index 25515b9332..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_get_build_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersGetBuildResponse { - #[serde(rename = "build")] - pub build: Box, -} - -impl ServersGetBuildResponse { - pub fn new(build: crate::models::ServersBuild) -> ServersGetBuildResponse { - ServersGetBuildResponse { - build: Box::new(build), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_get_server_logs_response.rs b/sdks/api/full/rust-cli/src/models/servers_get_server_logs_response.rs deleted file mode 100644 index dd6df5a770..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_get_server_logs_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersGetServerLogsResponse { - /// Sorted old to new. - #[serde(rename = "lines")] - pub lines: Vec, - /// Sorted old to new. - #[serde(rename = "timestamps")] - pub timestamps: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl ServersGetServerLogsResponse { - pub fn new(lines: Vec, timestamps: Vec, watch: crate::models::WatchResponse) -> ServersGetServerLogsResponse { - ServersGetServerLogsResponse { - lines, - timestamps, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_get_server_response.rs b/sdks/api/full/rust-cli/src/models/servers_get_server_response.rs deleted file mode 100644 index 2f017da813..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_get_server_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersGetServerResponse { - #[serde(rename = "server")] - pub server: Box, -} - -impl ServersGetServerResponse { - pub fn new(server: crate::models::ServersServer) -> ServersGetServerResponse { - ServersGetServerResponse { - server: Box::new(server), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_lifecycle.rs b/sdks/api/full/rust-cli/src/models/servers_lifecycle.rs deleted file mode 100644 index 47b2074f46..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_lifecycle.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersLifecycle { - /// 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. - #[serde(rename = "kill_timeout", skip_serializing_if = "Option::is_none")] - pub kill_timeout: Option, -} - -impl ServersLifecycle { - pub fn new() -> ServersLifecycle { - ServersLifecycle { - kill_timeout: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_list_builds_response.rs b/sdks/api/full/rust-cli/src/models/servers_list_builds_response.rs deleted file mode 100644 index c3e1d63e80..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_list_builds_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersListBuildsResponse { - /// A list of builds for the game associated with the token. - #[serde(rename = "builds")] - pub builds: Vec, -} - -impl ServersListBuildsResponse { - pub fn new(builds: Vec) -> ServersListBuildsResponse { - ServersListBuildsResponse { - builds, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_list_datacenters_response.rs b/sdks/api/full/rust-cli/src/models/servers_list_datacenters_response.rs deleted file mode 100644 index ac3a02b52d..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_list_datacenters_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersListDatacentersResponse { - #[serde(rename = "datacenters")] - pub datacenters: Vec, -} - -impl ServersListDatacentersResponse { - pub fn new(datacenters: Vec) -> ServersListDatacentersResponse { - ServersListDatacentersResponse { - datacenters, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_list_servers_response.rs b/sdks/api/full/rust-cli/src/models/servers_list_servers_response.rs deleted file mode 100644 index 202010aa26..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_list_servers_response.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersListServersResponse { - /// A list of servers for the game associated with the token. - #[serde(rename = "servers")] - pub servers: Vec, -} - -impl ServersListServersResponse { - pub fn new(servers: Vec) -> ServersListServersResponse { - ServersListServersResponse { - servers, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_log_stream.rs b/sdks/api/full/rust-cli/src/models/servers_log_stream.rs deleted file mode 100644 index b96bdda215..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_log_stream.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ServersLogStream { - #[serde(rename = "std_out")] - StdOut, - #[serde(rename = "std_err")] - StdErr, - -} - -impl ToString for ServersLogStream { - fn to_string(&self) -> String { - match self { - Self::StdOut => String::from("std_out"), - Self::StdErr => String::from("std_err"), - } - } -} - -impl Default for ServersLogStream { - fn default() -> ServersLogStream { - Self::StdOut - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/servers_network.rs b/sdks/api/full/rust-cli/src/models/servers_network.rs deleted file mode 100644 index 97bade5673..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_network.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersNetwork { - #[serde(rename = "mode", skip_serializing_if = "Option::is_none")] - pub mode: Option, - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, -} - -impl ServersNetwork { - pub fn new(ports: ::std::collections::HashMap) -> ServersNetwork { - ServersNetwork { - mode: None, - ports, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_network_mode.rs b/sdks/api/full/rust-cli/src/models/servers_network_mode.rs deleted file mode 100644 index bbb9bd9a5b..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_network_mode.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ServersNetworkMode { - #[serde(rename = "bridge")] - Bridge, - #[serde(rename = "host")] - Host, - -} - -impl ToString for ServersNetworkMode { - fn to_string(&self) -> String { - match self { - Self::Bridge => String::from("bridge"), - Self::Host => String::from("host"), - } - } -} - -impl Default for ServersNetworkMode { - fn default() -> ServersNetworkMode { - Self::Bridge - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/servers_patch_build_tags_request.rs b/sdks/api/full/rust-cli/src/models/servers_patch_build_tags_request.rs deleted file mode 100644 index 3857d9654a..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_patch_build_tags_request.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersPatchBuildTagsRequest { - /// Removes the given tag keys from all other builds. - #[serde(rename = "exclusive_tags", skip_serializing_if = "Option::is_none")] - pub exclusive_tags: Option>, - #[serde(rename = "tags", deserialize_with = "Option::deserialize")] - pub tags: Option, -} - -impl ServersPatchBuildTagsRequest { - pub fn new(tags: Option) -> ServersPatchBuildTagsRequest { - ServersPatchBuildTagsRequest { - exclusive_tags: None, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_port.rs b/sdks/api/full/rust-cli/src/models/servers_port.rs deleted file mode 100644 index ab305ac1e4..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_port.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersPort { - #[serde(rename = "internal_port", skip_serializing_if = "Option::is_none")] - pub internal_port: Option, - #[serde(rename = "protocol")] - pub protocol: crate::models::ServersPortProtocol, - #[serde(rename = "public_hostname", skip_serializing_if = "Option::is_none")] - pub public_hostname: Option, - #[serde(rename = "public_port", skip_serializing_if = "Option::is_none")] - pub public_port: Option, - #[serde(rename = "routing")] - pub routing: Box, -} - -impl ServersPort { - pub fn new(protocol: crate::models::ServersPortProtocol, routing: crate::models::ServersPortRouting) -> ServersPort { - ServersPort { - internal_port: None, - protocol, - public_hostname: None, - public_port: None, - routing: Box::new(routing), - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_port_protocol.rs b/sdks/api/full/rust-cli/src/models/servers_port_protocol.rs deleted file mode 100644 index e2e8c326c9..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_port_protocol.rs +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - -/// -#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum ServersPortProtocol { - #[serde(rename = "http")] - Http, - #[serde(rename = "https")] - Https, - #[serde(rename = "tcp")] - Tcp, - #[serde(rename = "tcp_tls")] - TcpTls, - #[serde(rename = "udp")] - Udp, - -} - -impl ToString for ServersPortProtocol { - fn to_string(&self) -> String { - match self { - Self::Http => String::from("http"), - Self::Https => String::from("https"), - Self::Tcp => String::from("tcp"), - Self::TcpTls => String::from("tcp_tls"), - Self::Udp => String::from("udp"), - } - } -} - -impl Default for ServersPortProtocol { - fn default() -> ServersPortProtocol { - Self::Http - } -} - - - - diff --git a/sdks/api/full/rust-cli/src/models/servers_port_routing.rs b/sdks/api/full/rust-cli/src/models/servers_port_routing.rs deleted file mode 100644 index 83f0846fc4..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_port_routing.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersPortRouting { - #[serde(rename = "game_guard", skip_serializing_if = "Option::is_none")] - pub game_guard: Option, - #[serde(rename = "host", skip_serializing_if = "Option::is_none")] - pub host: Option, -} - -impl ServersPortRouting { - pub fn new() -> ServersPortRouting { - ServersPortRouting { - game_guard: None, - host: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_resources.rs b/sdks/api/full/rust-cli/src/models/servers_resources.rs deleted file mode 100644 index d29a3cb0ac..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_resources.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersResources { - /// The number of CPU cores in millicores, or 1/1000 of a core. For example, 1/8 of a core would be 125 millicores, and 1 core would be 1000 millicores. - #[serde(rename = "cpu")] - pub cpu: i32, - /// The amount of memory in megabytes - #[serde(rename = "memory")] - pub memory: i32, -} - -impl ServersResources { - pub fn new(cpu: i32, memory: i32) -> ServersResources { - ServersResources { - cpu, - memory, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_runtime.rs b/sdks/api/full/rust-cli/src/models/servers_runtime.rs deleted file mode 100644 index 489b53a7a9..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_runtime.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersRuntime { - #[serde(rename = "arguments", skip_serializing_if = "Option::is_none")] - pub arguments: Option>, - #[serde(rename = "build")] - pub build: uuid::Uuid, - #[serde(rename = "environment", skip_serializing_if = "Option::is_none")] - pub environment: Option<::std::collections::HashMap>, -} - -impl ServersRuntime { - pub fn new(build: uuid::Uuid) -> ServersRuntime { - ServersRuntime { - arguments: None, - build, - environment: None, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/servers_server.rs b/sdks/api/full/rust-cli/src/models/servers_server.rs deleted file mode 100644 index 3238d633ea..0000000000 --- a/sdks/api/full/rust-cli/src/models/servers_server.rs +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ServersServer { - #[serde(rename = "created_at")] - pub created_at: i64, - #[serde(rename = "datacenter")] - pub datacenter: uuid::Uuid, - #[serde(rename = "destroyed_at", skip_serializing_if = "Option::is_none")] - pub destroyed_at: Option, - #[serde(rename = "environment")] - pub environment: uuid::Uuid, - #[serde(rename = "id")] - pub id: uuid::Uuid, - #[serde(rename = "lifecycle")] - pub lifecycle: Box, - #[serde(rename = "network")] - pub network: Box, - #[serde(rename = "resources")] - pub resources: Box, - #[serde(rename = "runtime")] - pub runtime: Box, - #[serde(rename = "started_at", skip_serializing_if = "Option::is_none")] - pub started_at: Option, - #[serde(rename = "tags", deserialize_with = "Option::deserialize")] - pub tags: Option, -} - -impl ServersServer { - pub fn new(created_at: i64, datacenter: uuid::Uuid, environment: uuid::Uuid, id: uuid::Uuid, lifecycle: crate::models::ServersLifecycle, network: crate::models::ServersNetwork, resources: crate::models::ServersResources, runtime: crate::models::ServersRuntime, tags: Option) -> ServersServer { - ServersServer { - created_at, - datacenter, - destroyed_at: None, - environment, - id, - lifecycle: Box::new(lifecycle), - network: Box::new(network), - resources: Box::new(resources), - runtime: Box::new(runtime), - started_at: None, - tags, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/upload_prepare_file.rs b/sdks/api/full/rust-cli/src/models/upload_prepare_file.rs deleted file mode 100644 index 0d197af99b..0000000000 --- a/sdks/api/full/rust-cli/src/models/upload_prepare_file.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// UploadPrepareFile : A file being prepared to upload. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct UploadPrepareFile { - /// Unsigned 64 bit integer. - #[serde(rename = "content_length")] - pub content_length: i64, - /// The MIME type of the file. - #[serde(rename = "content_type", skip_serializing_if = "Option::is_none")] - pub content_type: Option, - /// The path/filename of the file. - #[serde(rename = "path")] - pub path: String, -} - -impl UploadPrepareFile { - /// A file being prepared to upload. - pub fn new(content_length: i64, path: String) -> UploadPrepareFile { - UploadPrepareFile { - content_length, - content_type: None, - path, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/upload_presigned_request.rs b/sdks/api/full/rust-cli/src/models/upload_presigned_request.rs deleted file mode 100644 index 7f2ca3aad5..0000000000 --- a/sdks/api/full/rust-cli/src/models/upload_presigned_request.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// UploadPresignedRequest : A presigned request used to upload files. Upload your file to the given URL via a PUT request. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct UploadPresignedRequest { - /// The byte offset for this multipart chunk. Always 0 if not a multipart upload. - #[serde(rename = "byte_offset")] - pub byte_offset: i64, - /// Expected size of this upload. - #[serde(rename = "content_length")] - pub content_length: i64, - /// The name of the file to upload. This is the same as the one given in the upload prepare file. - #[serde(rename = "path")] - pub path: String, - /// The URL of the presigned request for which to upload your file to. - #[serde(rename = "url")] - pub url: String, -} - -impl UploadPresignedRequest { - /// A presigned request used to upload files. Upload your file to the given URL via a PUT request. - pub fn new(byte_offset: i64, content_length: i64, path: String, url: String) -> UploadPresignedRequest { - UploadPresignedRequest { - byte_offset, - content_length, - path, - url, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/validation_error.rs b/sdks/api/full/rust-cli/src/models/validation_error.rs deleted file mode 100644 index d4b2471cb7..0000000000 --- a/sdks/api/full/rust-cli/src/models/validation_error.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// ValidationError : An error given by failed content validation. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct ValidationError { - /// A list of strings denoting the origin of a validation error. - #[serde(rename = "path")] - pub path: Vec, -} - -impl ValidationError { - /// An error given by failed content validation. - pub fn new(path: Vec) -> ValidationError { - ValidationError { - path, - } - } -} - - diff --git a/sdks/api/full/rust-cli/src/models/watch_response.rs b/sdks/api/full/rust-cli/src/models/watch_response.rs deleted file mode 100644 index d1ca872c6c..0000000000 --- a/sdks/api/full/rust-cli/src/models/watch_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// WatchResponse : Provided by watchable endpoints used in blocking loops. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct WatchResponse { - /// Index indicating the version of the data responded. Pass this to `WatchQuery` to block and wait for the next response. - #[serde(rename = "index")] - pub index: String, -} - -impl WatchResponse { - /// Provided by watchable endpoints used in blocking loops. - pub fn new(index: String) -> WatchResponse { - WatchResponse { - index, - } - } -} - - diff --git a/sdks/api/full/rust/.openapi-generator/FILES b/sdks/api/full/rust/.openapi-generator/FILES index 45c2017a87..df77cc30ab 100644 --- a/sdks/api/full/rust/.openapi-generator/FILES +++ b/sdks/api/full/rust/.openapi-generator/FILES @@ -218,6 +218,10 @@ docs/CloudVersionMatchmakerPortProtocol.md docs/CloudVersionMatchmakerPortRange.md docs/CloudVersionMatchmakerProxyKind.md docs/CloudVersionSummary.md +docs/CoreIntercomPegboardApi.md +docs/EdgeIntercomPegboardApi.md +docs/EdgeIntercomPegboardPrewarmImageRequest.md +docs/EdgeIntercomPegboardToggleClientDrainRequest.md docs/ErrorBody.md docs/GameGameSummary.md docs/GameHandle.md @@ -400,6 +404,8 @@ src/apis/cloud_logs_api.rs src/apis/cloud_tiers_api.rs src/apis/cloud_uploads_api.rs src/apis/configuration.rs +src/apis/core_intercom_pegboard_api.rs +src/apis/edge_intercom_pegboard_api.rs src/apis/games_environments_tokens_api.rs src/apis/group_api.rs src/apis/group_invites_api.rs @@ -613,6 +619,8 @@ src/models/cloud_version_matchmaker_port_protocol.rs src/models/cloud_version_matchmaker_port_range.rs src/models/cloud_version_matchmaker_proxy_kind.rs src/models/cloud_version_summary.rs +src/models/edge_intercom_pegboard_prewarm_image_request.rs +src/models/edge_intercom_pegboard_toggle_client_drain_request.rs src/models/error_body.rs src/models/game_game_summary.rs src/models/game_handle.rs diff --git a/sdks/api/full/rust/README.md b/sdks/api/full/rust/README.md index 646d4e17cf..264475bd1b 100644 --- a/sdks/api/full/rust/README.md +++ b/sdks/api/full/rust/README.md @@ -94,6 +94,9 @@ Class | Method | HTTP request | Description *CloudLogsApi* | [**cloud_logs_get_ray_perf_logs**](docs/CloudLogsApi.md#cloud_logs_get_ray_perf_logs) | **GET** /cloud/rays/{ray_id}/perf | *CloudTiersApi* | [**cloud_tiers_get_region_tiers**](docs/CloudTiersApi.md#cloud_tiers_get_region_tiers) | **GET** /cloud/region-tiers | *CloudUploadsApi* | [**cloud_uploads_complete_upload**](docs/CloudUploadsApi.md#cloud_uploads_complete_upload) | **POST** /cloud/uploads/{upload_id}/complete | +*CoreIntercomPegboardApi* | [**core_intercom_pegboard_mark_client_registered**](docs/CoreIntercomPegboardApi.md#core_intercom_pegboard_mark_client_registered) | **POST** /pegboard/client/{client_id}/registered | +*EdgeIntercomPegboardApi* | [**edge_intercom_pegboard_prewarm_image**](docs/EdgeIntercomPegboardApi.md#edge_intercom_pegboard_prewarm_image) | **POST** /pegboard/image/{image_id}/prewarm | +*EdgeIntercomPegboardApi* | [**edge_intercom_pegboard_toggle_client_drain**](docs/EdgeIntercomPegboardApi.md#edge_intercom_pegboard_toggle_client_drain) | **POST** /pegboard/client/{client_id}/toggle-drain | *GamesEnvironmentsTokensApi* | [**games_environments_tokens_create_service_token**](docs/GamesEnvironmentsTokensApi.md#games_environments_tokens_create_service_token) | **POST** /games/{game_id}/environments/{environment_id}/tokens/service | *GroupApi* | [**group_ban_identity**](docs/GroupApi.md#group_ban_identity) | **POST** /group/groups/{group_id}/bans/{identity_id} | *GroupApi* | [**group_complete_avatar_upload**](docs/GroupApi.md#group_complete_avatar_upload) | **POST** /group/groups/{group_id}/avatar-upload/{upload_id}/complete | @@ -358,6 +361,8 @@ Class | Method | HTTP request | Description - [CloudVersionMatchmakerPortRange](docs/CloudVersionMatchmakerPortRange.md) - [CloudVersionMatchmakerProxyKind](docs/CloudVersionMatchmakerProxyKind.md) - [CloudVersionSummary](docs/CloudVersionSummary.md) + - [EdgeIntercomPegboardPrewarmImageRequest](docs/EdgeIntercomPegboardPrewarmImageRequest.md) + - [EdgeIntercomPegboardToggleClientDrainRequest](docs/EdgeIntercomPegboardToggleClientDrainRequest.md) - [ErrorBody](docs/ErrorBody.md) - [GameGameSummary](docs/GameGameSummary.md) - [GameHandle](docs/GameHandle.md) diff --git a/sdks/api/full/rust/docs/CoreIntercomPegboardApi.md b/sdks/api/full/rust/docs/CoreIntercomPegboardApi.md new file mode 100644 index 0000000000..b317e7e9f3 --- /dev/null +++ b/sdks/api/full/rust/docs/CoreIntercomPegboardApi.md @@ -0,0 +1,37 @@ +# \CoreIntercomPegboardApi + +All URIs are relative to *https://api.rivet.gg* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**core_intercom_pegboard_mark_client_registered**](CoreIntercomPegboardApi.md#core_intercom_pegboard_mark_client_registered) | **POST** /pegboard/client/{client_id}/registered | + + + +## core_intercom_pegboard_mark_client_registered + +> core_intercom_pegboard_mark_client_registered(client_id) + + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**client_id** | **uuid::Uuid** | | [required] | + +### Return type + + (empty response body) + +### Authorization + +[BearerAuth](../README.md#BearerAuth) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdks/api/full/rust/docs/EdgeIntercomPegboardApi.md b/sdks/api/full/rust/docs/EdgeIntercomPegboardApi.md new file mode 100644 index 0000000000..eca99556a7 --- /dev/null +++ b/sdks/api/full/rust/docs/EdgeIntercomPegboardApi.md @@ -0,0 +1,68 @@ +# \EdgeIntercomPegboardApi + +All URIs are relative to *https://api.rivet.gg* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**edge_intercom_pegboard_prewarm_image**](EdgeIntercomPegboardApi.md#edge_intercom_pegboard_prewarm_image) | **POST** /pegboard/image/{image_id}/prewarm | +[**edge_intercom_pegboard_toggle_client_drain**](EdgeIntercomPegboardApi.md#edge_intercom_pegboard_toggle_client_drain) | **POST** /pegboard/client/{client_id}/toggle-drain | + + + +## edge_intercom_pegboard_prewarm_image + +> edge_intercom_pegboard_prewarm_image(image_id, edge_intercom_pegboard_prewarm_image_request) + + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**image_id** | **uuid::Uuid** | | [required] | +**edge_intercom_pegboard_prewarm_image_request** | [**EdgeIntercomPegboardPrewarmImageRequest**](EdgeIntercomPegboardPrewarmImageRequest.md) | | [required] | + +### Return type + + (empty response body) + +### Authorization + +[BearerAuth](../README.md#BearerAuth) + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +## edge_intercom_pegboard_toggle_client_drain + +> edge_intercom_pegboard_toggle_client_drain(client_id, edge_intercom_pegboard_toggle_client_drain_request) + + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**client_id** | **uuid::Uuid** | | [required] | +**edge_intercom_pegboard_toggle_client_drain_request** | [**EdgeIntercomPegboardToggleClientDrainRequest**](EdgeIntercomPegboardToggleClientDrainRequest.md) | | [required] | + +### Return type + + (empty response body) + +### Authorization + +[BearerAuth](../README.md#BearerAuth) + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdks/api/full/rust/docs/EdgeIntercomPegboardPrewarmImageRequest.md b/sdks/api/full/rust/docs/EdgeIntercomPegboardPrewarmImageRequest.md new file mode 100644 index 0000000000..dca24ef72c --- /dev/null +++ b/sdks/api/full/rust/docs/EdgeIntercomPegboardPrewarmImageRequest.md @@ -0,0 +1,11 @@ +# EdgeIntercomPegboardPrewarmImageRequest + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**image_artifact_url_stub** | **String** | | + +[[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/docs/EdgeIntercomPegboardToggleClientDrainRequest.md b/sdks/api/full/rust/docs/EdgeIntercomPegboardToggleClientDrainRequest.md new file mode 100644 index 0000000000..0540c0f3c1 --- /dev/null +++ b/sdks/api/full/rust/docs/EdgeIntercomPegboardToggleClientDrainRequest.md @@ -0,0 +1,12 @@ +# EdgeIntercomPegboardToggleClientDrainRequest + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**draining** | **bool** | | +**drain_complete_ts** | Option<**String**> | RFC3339 timestamp | [optional] + +[[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/apis/core_intercom_pegboard_api.rs b/sdks/api/full/rust/src/apis/core_intercom_pegboard_api.rs new file mode 100644 index 0000000000..2ab80469c3 --- /dev/null +++ b/sdks/api/full/rust/src/apis/core_intercom_pegboard_api.rs @@ -0,0 +1,71 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + +use reqwest; + +use super::{configuration, Error}; +use crate::apis::ResponseContent; + +/// struct for typed errors of method [`core_intercom_pegboard_mark_client_registered`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum CoreIntercomPegboardMarkClientRegisteredError { + Status400(crate::models::ErrorBody), + Status403(crate::models::ErrorBody), + Status404(crate::models::ErrorBody), + Status408(crate::models::ErrorBody), + Status429(crate::models::ErrorBody), + Status500(crate::models::ErrorBody), + UnknownValue(serde_json::Value), +} + +pub async fn core_intercom_pegboard_mark_client_registered( + configuration: &configuration::Configuration, + client_id: &str, +) -> Result<(), Error> { + let local_var_configuration = configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!( + "{}/pegboard/client/{client_id}/registered", + local_var_configuration.base_path, + client_id = crate::apis::urlencode(client_id) + ); + let mut local_var_req_builder = + local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = + local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = + serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { + status: local_var_status, + content: local_var_content, + entity: local_var_entity, + }; + Err(Error::ResponseError(local_var_error)) + } +} diff --git a/sdks/api/full/rust/src/apis/edge_intercom_pegboard_api.rs b/sdks/api/full/rust/src/apis/edge_intercom_pegboard_api.rs new file mode 100644 index 0000000000..70a4e65e79 --- /dev/null +++ b/sdks/api/full/rust/src/apis/edge_intercom_pegboard_api.rs @@ -0,0 +1,134 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + +use reqwest; + +use super::{configuration, Error}; +use crate::apis::ResponseContent; + +/// struct for typed errors of method [`edge_intercom_pegboard_prewarm_image`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum EdgeIntercomPegboardPrewarmImageError { + Status400(crate::models::ErrorBody), + Status403(crate::models::ErrorBody), + Status404(crate::models::ErrorBody), + Status408(crate::models::ErrorBody), + Status429(crate::models::ErrorBody), + Status500(crate::models::ErrorBody), + UnknownValue(serde_json::Value), +} + +/// struct for typed errors of method [`edge_intercom_pegboard_toggle_client_drain`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum EdgeIntercomPegboardToggleClientDrainError { + Status400(crate::models::ErrorBody), + Status403(crate::models::ErrorBody), + Status404(crate::models::ErrorBody), + Status408(crate::models::ErrorBody), + Status429(crate::models::ErrorBody), + Status500(crate::models::ErrorBody), + UnknownValue(serde_json::Value), +} + +pub async fn edge_intercom_pegboard_prewarm_image( + configuration: &configuration::Configuration, + image_id: &str, + edge_intercom_pegboard_prewarm_image_request: crate::models::EdgeIntercomPegboardPrewarmImageRequest, +) -> Result<(), Error> { + let local_var_configuration = configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!( + "{}/pegboard/image/{image_id}/prewarm", + local_var_configuration.base_path, + image_id = crate::apis::urlencode(image_id) + ); + let mut local_var_req_builder = + local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = + local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + local_var_req_builder = + local_var_req_builder.json(&edge_intercom_pegboard_prewarm_image_request); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = + serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { + status: local_var_status, + content: local_var_content, + entity: local_var_entity, + }; + Err(Error::ResponseError(local_var_error)) + } +} + +pub async fn edge_intercom_pegboard_toggle_client_drain( + configuration: &configuration::Configuration, + client_id: &str, + edge_intercom_pegboard_toggle_client_drain_request: crate::models::EdgeIntercomPegboardToggleClientDrainRequest, +) -> Result<(), Error> { + let local_var_configuration = configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!( + "{}/pegboard/client/{client_id}/toggle-drain", + local_var_configuration.base_path, + client_id = crate::apis::urlencode(client_id) + ); + let mut local_var_req_builder = + local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = + local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + local_var_req_builder = + local_var_req_builder.json(&edge_intercom_pegboard_toggle_client_drain_request); + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + Ok(()) + } else { + let local_var_entity: Option = + serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { + status: local_var_status, + content: local_var_content, + entity: local_var_entity, + }; + Err(Error::ResponseError(local_var_error)) + } +} diff --git a/sdks/api/full/rust/src/apis/mod.rs b/sdks/api/full/rust/src/apis/mod.rs index 6136df0cb0..8f37c16417 100644 --- a/sdks/api/full/rust/src/apis/mod.rs +++ b/sdks/api/full/rust/src/apis/mod.rs @@ -135,6 +135,8 @@ pub mod cloud_groups_api; pub mod cloud_logs_api; pub mod cloud_tiers_api; pub mod cloud_uploads_api; +pub mod core_intercom_pegboard_api; +pub mod edge_intercom_pegboard_api; pub mod games_environments_tokens_api; pub mod group_api; pub mod group_invites_api; diff --git a/sdks/api/full/rust/src/models/edge_intercom_pegboard_prewarm_image_request.rs b/sdks/api/full/rust/src/models/edge_intercom_pegboard_prewarm_image_request.rs new file mode 100644 index 0000000000..1de13fec1d --- /dev/null +++ b/sdks/api/full/rust/src/models/edge_intercom_pegboard_prewarm_image_request.rs @@ -0,0 +1,23 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct EdgeIntercomPegboardPrewarmImageRequest { + #[serde(rename = "image_artifact_url_stub")] + pub image_artifact_url_stub: String, +} + +impl EdgeIntercomPegboardPrewarmImageRequest { + pub fn new(image_artifact_url_stub: String) -> EdgeIntercomPegboardPrewarmImageRequest { + EdgeIntercomPegboardPrewarmImageRequest { + image_artifact_url_stub, + } + } +} diff --git a/sdks/api/full/rust/src/models/edge_intercom_pegboard_toggle_client_drain_request.rs b/sdks/api/full/rust/src/models/edge_intercom_pegboard_toggle_client_drain_request.rs new file mode 100644 index 0000000000..ec719826be --- /dev/null +++ b/sdks/api/full/rust/src/models/edge_intercom_pegboard_toggle_client_drain_request.rs @@ -0,0 +1,27 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct EdgeIntercomPegboardToggleClientDrainRequest { + #[serde(rename = "draining")] + pub draining: bool, + /// RFC3339 timestamp + #[serde(rename = "drain_complete_ts", skip_serializing_if = "Option::is_none")] + pub drain_complete_ts: Option, +} + +impl EdgeIntercomPegboardToggleClientDrainRequest { + pub fn new(draining: bool) -> EdgeIntercomPegboardToggleClientDrainRequest { + EdgeIntercomPegboardToggleClientDrainRequest { + draining, + drain_complete_ts: None, + } + } +} diff --git a/sdks/api/full/rust/src/models/mod.rs b/sdks/api/full/rust/src/models/mod.rs index 5b72eb89d6..0ee73a4efe 100644 --- a/sdks/api/full/rust/src/models/mod.rs +++ b/sdks/api/full/rust/src/models/mod.rs @@ -382,6 +382,10 @@ pub mod cloud_version_matchmaker_proxy_kind; pub use self::cloud_version_matchmaker_proxy_kind::CloudVersionMatchmakerProxyKind; pub mod cloud_version_summary; pub use self::cloud_version_summary::CloudVersionSummary; +pub mod edge_intercom_pegboard_prewarm_image_request; +pub use self::edge_intercom_pegboard_prewarm_image_request::EdgeIntercomPegboardPrewarmImageRequest; +pub mod edge_intercom_pegboard_toggle_client_drain_request; +pub use self::edge_intercom_pegboard_toggle_client_drain_request::EdgeIntercomPegboardToggleClientDrainRequest; pub mod error_body; pub use self::error_body::ErrorBody; pub mod game_game_summary; diff --git a/sdks/api/full/typescript/.gitignore b/sdks/api/full/typescript/.gitignore deleted file mode 100644 index 169a00539f..0000000000 --- a/sdks/api/full/typescript/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -node_modules -.DS_Store -*.d.ts -dist/ -types/ - -# yarn berry -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions diff --git a/sdks/api/full/typescript/.prettierrc.yml b/sdks/api/full/typescript/.prettierrc.yml deleted file mode 100644 index 0c06786bf5..0000000000 --- a/sdks/api/full/typescript/.prettierrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -tabWidth: 4 -printWidth: 120 diff --git a/sdks/api/full/typescript/archive.tgz b/sdks/api/full/typescript/archive.tgz deleted file mode 100644 index ee8a3bcea2..0000000000 --- a/sdks/api/full/typescript/archive.tgz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b16eb054e82b60cb6a8a8e0cdbf5ec75a74e8fd876f7cb036d758171a99d6fa9 -size 543153 diff --git a/sdks/api/full/typescript/build.js b/sdks/api/full/typescript/build.js deleted file mode 100644 index ea2d841bbe..0000000000 --- a/sdks/api/full/typescript/build.js +++ /dev/null @@ -1,62 +0,0 @@ -const { build } = require("esbuild"); - -void main(); - -async function main() { - await bundle({ - platform: "node", - target: "node14", - format: "cjs", - outdir: "node", - }); - await bundle({ - platform: "browser", - format: "esm", - outdir: "browser/esm", - }); - await bundle({ - platform: "browser", - format: "cjs", - outdir: "browser/cjs", - }); -} - -async function bundle({ platform, target, format, outdir }) { - await runEsbuild({ - platform, - target, - format, - entryPoint: "./src/index.ts", - outfile: `./dist/${outdir}/index.js`, - }); - await runEsbuild({ - platform, - target, - format, - entryPoint: "./src/core/index.ts", - outfile: `./dist/${outdir}/core.js`, - }); - await runEsbuild({ - platform, - target, - format, - entryPoint: "./src/serialization/index.ts", - outfile: `./dist/${outdir}/serialization.js`, - }); -} - -async function runEsbuild({ platform, target, format, entryPoint, outfile }) { - await build({ - platform, - target, - format, - entryPoints: [entryPoint], - outfile, - bundle: true, - alias: { - // matches up with tsconfig paths - "@rivet-gg/api": "./src", - }, - external: ['node-fetch'], - }).catch(() => process.exit(1)); -} diff --git a/sdks/api/full/typescript/src/Client.ts b/sdks/api/full/typescript/src/Client.ts index f8b0b7863b..cdf144d8ea 100644 --- a/sdks/api/full/typescript/src/Client.ts +++ b/sdks/api/full/typescript/src/Client.ts @@ -6,6 +6,8 @@ import * as environments from "./environments"; import * as core from "./core"; import { Actor } from "./api/resources/actor/client/Client"; import { Cloud } from "./api/resources/cloud/client/Client"; +import { CoreIntercom } from "./api/resources/coreIntercom/client/Client"; +import { EdgeIntercom } from "./api/resources/edgeIntercom/client/Client"; import { Group } from "./api/resources/group/client/Client"; import { Identity } from "./api/resources/identity/client/Client"; import { Provision } from "./api/resources/provision/client/Client"; @@ -54,6 +56,18 @@ export class RivetClient { return (this._cloud ??= new Cloud(this._options)); } + protected _coreIntercom: CoreIntercom | undefined; + + public get coreIntercom(): CoreIntercom { + return (this._coreIntercom ??= new CoreIntercom(this._options)); + } + + protected _edgeIntercom: EdgeIntercom | undefined; + + public get edgeIntercom(): EdgeIntercom { + return (this._edgeIntercom ??= new EdgeIntercom(this._options)); + } + protected _group: Group | undefined; public get group(): Group { diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/BuildCompression.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..df210e01c1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildCompression = + /** + * None compression. */ + | "none" + /** + * LZ4 compression. Use the minimum compression level. */ + | "lz4"; + +export const BuildCompression = { + None: "none", + Lz4: "lz4", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/BuildKind.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..2331b5be94 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/BuildKind.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildKind = + /** + * Docker image archive generated by `docker save`. */ + | "docker_image" + /** + * OCI-compliant bundle. */ + | "oci_bundle" + /** + * A JavaScript file. */ + | "javascript"; + +export const BuildKind = { + DockerImage: "docker_image", + OciBundle: "oci_bundle", + Javascript: "javascript", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/GetBuildResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/GetBuildResponse.ts new file mode 100644 index 0000000000..c4dcbb9d5e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/GetBuildResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetBuildResponse { + build: Rivet.actor.Build; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/ListBuildsResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/ListBuildsResponse.ts new file mode 100644 index 0000000000..172af9a0e2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/ListBuildsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListBuildsResponse { + /** A list of builds for the project associated with the token. */ + builds: Rivet.actor.Build[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts new file mode 100644 index 0000000000..48390f6ee6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PatchBuildTagsRequest { + tags?: unknown; + /** Removes the given tag keys from all other builds. */ + exclusiveTags?: string[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts new file mode 100644 index 0000000000..3b884f6442 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PatchBuildTagsResponse {} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildRequest.ts new file mode 100644 index 0000000000..75343b37d0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildRequest.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface PrepareBuildRequest { + /** A tag given to the project build. */ + imageTag?: string; + imageFile: Rivet.upload.PrepareFile; + kind?: Rivet.actor.BuildKind; + compression?: Rivet.actor.BuildCompression; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildResponse.ts new file mode 100644 index 0000000000..6148071aea --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface PrepareBuildResponse { + build: string; + presignedRequests: Rivet.upload.PresignedRequest[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/index.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/index.ts new file mode 100644 index 0000000000..07f139fd9e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/builds/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetBuildResponse"; +export * from "./ListBuildsResponse"; +export * from "./PatchBuildTagsRequest"; +export * from "./PatchBuildTagsResponse"; +export * from "./PrepareBuildRequest"; +export * from "./PrepareBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Actor.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Actor.ts new file mode 100644 index 0000000000..73c277247a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Actor.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Actor { + id: string; + region: string; + tags?: unknown; + runtime: Rivet.actor.Runtime; + network: Rivet.actor.Network; + resources: Rivet.actor.Resources; + lifecycle: Rivet.actor.Lifecycle; + createdAt: Rivet.Timestamp; + startedAt?: Rivet.Timestamp; + destroyedAt?: Rivet.Timestamp; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Build.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Build.ts new file mode 100644 index 0000000000..eb4cdcc752 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Build.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Build { + id: string; + name: string; + createdAt: Rivet.Timestamp; + /** Unsigned 64 bit integer. */ + contentLength: number; + /** Tags of this build */ + tags: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/EndpointType.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/EndpointType.ts new file mode 100644 index 0000000000..81a3761c43 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/EndpointType.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type EndpointType = "hostname" | "path"; + +export const EndpointType = { + Hostname: "hostname", + Path: "path", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/GuardRouting.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/GuardRouting.ts new file mode 100644 index 0000000000..039f163247 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/GuardRouting.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GuardRouting {} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/HostRouting.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/HostRouting.ts new file mode 100644 index 0000000000..cdd2164517 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/HostRouting.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface HostRouting {} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Lifecycle.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Lifecycle.ts new file mode 100644 index 0000000000..c6c949e83f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Lifecycle.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Lifecycle { + /** 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. */ + killTimeout?: number; + /** 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. */ + durable?: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Network.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Network.ts new file mode 100644 index 0000000000..3cbb50f8ad --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Network.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Network { + mode: Rivet.actor.NetworkMode; + ports: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/NetworkMode.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..692083122e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/NetworkMode.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type NetworkMode = "bridge" | "host"; + +export const NetworkMode = { + Bridge: "bridge", + Host: "host", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Port.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Port.ts new file mode 100644 index 0000000000..40a134e092 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Port.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Port { + protocol: Rivet.actor.PortProtocol; + internalPort?: number; + hostname?: string; + port?: number; + path?: string; + /** Fully formed connection URL including protocol, hostname, port, and path, if applicable. */ + url?: string; + routing: Rivet.actor.PortRouting; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/PortProtocol.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..cafdb2e4de --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/PortProtocol.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type PortProtocol = "http" | "https" | "tcp" | "tcp_tls" | "udp"; + +export const PortProtocol = { + Http: "http", + Https: "https", + Tcp: "tcp", + TcpTls: "tcp_tls", + Udp: "udp", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/PortRouting.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/PortRouting.ts new file mode 100644 index 0000000000..24e3b2c807 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/PortRouting.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface PortRouting { + guard?: Rivet.actor.GuardRouting; + host?: Rivet.actor.HostRouting; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Region.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Region.ts new file mode 100644 index 0000000000..79a8512096 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Region.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Region { + id: string; + name: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Resources.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Resources.ts new file mode 100644 index 0000000000..8255dc6705 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Resources.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Resources { + /** + * The number of CPU cores in millicores, or 1/1000 of a core. For example, + * 1/8 of a core would be 125 millicores, and 1 core would be 1000 + * millicores. + */ + cpu: number; + /** The amount of memory in megabytes */ + memory: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Runtime.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Runtime.ts new file mode 100644 index 0000000000..a918ef8387 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/Runtime.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Runtime { + build: string; + arguments?: string[]; + environment?: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/index.ts new file mode 100644 index 0000000000..71748c7636 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/common/types/index.ts @@ -0,0 +1,14 @@ +export * from "./Actor"; +export * from "./Runtime"; +export * from "./Lifecycle"; +export * from "./Resources"; +export * from "./Network"; +export * from "./NetworkMode"; +export * from "./Port"; +export * from "./PortProtocol"; +export * from "./PortRouting"; +export * from "./GuardRouting"; +export * from "./HostRouting"; +export * from "./EndpointType"; +export * from "./Build"; +export * from "./Region"; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/GetActorLogsResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/GetActorLogsResponse.ts new file mode 100644 index 0000000000..0982d890db --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/GetActorLogsResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetActorLogsResponse { + /** Sorted old to new. */ + lines: string[]; + /** Sorted old to new. */ + timestamps: Rivet.Timestamp[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/LogStream.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/LogStream.ts new file mode 100644 index 0000000000..c8dd8fc0ad --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/LogStream.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type LogStream = "std_out" | "std_err"; + +export const LogStream = { + StdOut: "std_out", + StdErr: "std_err", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/index.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/index.ts new file mode 100644 index 0000000000..b7d3ce1ba2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetActorLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/ListRegionsResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/ListRegionsResponse.ts new file mode 100644 index 0000000000..8e6f6cbf51 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/ListRegionsResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListRegionsResponse { + regions: Rivet.actor.Region[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/ResolveRegionResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/ResolveRegionResponse.ts new file mode 100644 index 0000000000..8eb3ee22c3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/ResolveRegionResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ResolveRegionResponse { + region: Rivet.actor.Region; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/index.ts b/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/index.ts new file mode 100644 index 0000000000..603d3091aa --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/resources/regions/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ListRegionsResponse"; +export * from "./ResolveRegionResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorNetworkRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorNetworkRequest.ts new file mode 100644 index 0000000000..a8675a97c1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorNetworkRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorNetworkRequest { + mode?: Rivet.actor.NetworkMode; + ports?: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorPortRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorPortRequest.ts new file mode 100644 index 0000000000..53fc5e8649 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorPortRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorPortRequest { + protocol: Rivet.actor.PortProtocol; + internalPort?: number; + routing?: Rivet.actor.PortRouting; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorRequest.ts new file mode 100644 index 0000000000..f2267d5c3b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorRequest.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorRequest { + region?: string; + tags?: unknown; + build?: string; + buildTags?: unknown; + runtime?: Rivet.actor.CreateActorRuntimeRequest; + network?: Rivet.actor.CreateActorNetworkRequest; + resources?: Rivet.actor.Resources; + lifecycle?: Rivet.actor.Lifecycle; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorResponse.ts new file mode 100644 index 0000000000..ddceda5117 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorResponse { + /** The actor that was created */ + actor: Rivet.actor.Actor; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorRuntimeRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorRuntimeRequest.ts new file mode 100644 index 0000000000..4c3fbde102 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/CreateActorRuntimeRequest.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateActorRuntimeRequest { + environment?: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/DestroyActorResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/types/DestroyActorResponse.ts new file mode 100644 index 0000000000..6656d4884f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/DestroyActorResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DestroyActorResponse {} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/GetActorResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/types/GetActorResponse.ts new file mode 100644 index 0000000000..1266ace808 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/GetActorResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetActorResponse { + actor: Rivet.actor.Actor; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/ListActorsResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/types/ListActorsResponse.ts new file mode 100644 index 0000000000..b8b08c8c15 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/ListActorsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ListActorsResponse { + /** A list of actors for the project associated with the token. */ + actors: Rivet.actor.Actor[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeActorRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeActorRequest.ts new file mode 100644 index 0000000000..d559a790a1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeActorRequest.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeActorRequest { + build?: string; + buildTags?: unknown; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeActorResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeActorResponse.ts new file mode 100644 index 0000000000..6afcca95ec --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeActorResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeActorResponse {} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeAllActorsRequest.ts b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeAllActorsRequest.ts new file mode 100644 index 0000000000..0b6e4311c8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeAllActorsRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeAllActorsRequest { + tags?: unknown; + build?: string; + buildTags?: unknown; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeAllActorsResponse.ts b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeAllActorsResponse.ts new file mode 100644 index 0000000000..a1a71d02f8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/UpgradeAllActorsResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeAllActorsResponse { + count: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/actor/types/index.ts b/sdks/api/full/typescript/src/api/resources/actor/types/index.ts new file mode 100644 index 0000000000..d84d6cbd8b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/actor/types/index.ts @@ -0,0 +1,12 @@ +export * from "./GetActorResponse"; +export * from "./CreateActorRequest"; +export * from "./CreateActorRuntimeRequest"; +export * from "./CreateActorNetworkRequest"; +export * from "./CreateActorPortRequest"; +export * from "./CreateActorResponse"; +export * from "./DestroyActorResponse"; +export * from "./UpgradeActorRequest"; +export * from "./UpgradeActorResponse"; +export * from "./UpgradeAllActorsRequest"; +export * from "./UpgradeAllActorsResponse"; +export * from "./ListActorsResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/common/types/CompleteStatus.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/common/types/CompleteStatus.ts new file mode 100644 index 0000000000..46b8491c8f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/common/types/CompleteStatus.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Represents the state of an external account linking process. + */ +export type CompleteStatus = + /** + * The linking process succeeded and will now switch identities. */ + | "switch_identity" + /** + * The linking process succeeded and the new account is now added. */ + | "linked_account_added" + /** + * The current linking process has already completed. */ + | "already_complete" + /** + * The current linking process has expired. */ + | "expired" + /** + * The current linking process has been tried too many times. */ + | "too_many_attempts" + /** + * The code given to the current linking process is incorrect. */ + | "incorrect"; + +export const CompleteStatus = { + SwitchIdentity: "switch_identity", + LinkedAccountAdded: "linked_account_added", + AlreadyComplete: "already_complete", + Expired: "expired", + TooManyAttempts: "too_many_attempts", + Incorrect: "incorrect", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/common/types/index.ts new file mode 100644 index 0000000000..1bee0a7444 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/common/types/index.ts @@ -0,0 +1 @@ +export * from "./CompleteStatus"; diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationRequest.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationRequest.ts new file mode 100644 index 0000000000..7a3f639110 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CompleteEmailVerificationRequest { + verificationId: string; + /** The code sent to the requestee's email. */ + code: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationResponse.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationResponse.ts new file mode 100644 index 0000000000..c0d499368f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CompleteEmailVerificationResponse { + status: Rivet.auth.CompleteStatus; +} diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/StartEmailVerificationRequest.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/StartEmailVerificationRequest.ts new file mode 100644 index 0000000000..fb6c685b1f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/StartEmailVerificationRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface StartEmailVerificationRequest { + email: string; + captcha?: Rivet.captcha.Config; + gameId?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/StartEmailVerificationResponse.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/StartEmailVerificationResponse.ts new file mode 100644 index 0000000000..9c87e3e5d9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/StartEmailVerificationResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface StartEmailVerificationResponse { + verificationId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/index.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/index.ts new file mode 100644 index 0000000000..6db43a8e3b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/identity/resources/email/types/index.ts @@ -0,0 +1,4 @@ +export * from "./StartEmailVerificationRequest"; +export * from "./StartEmailVerificationResponse"; +export * from "./CompleteEmailVerificationRequest"; +export * from "./CompleteEmailVerificationResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/RefreshIdentityTokenRequest.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/RefreshIdentityTokenRequest.ts new file mode 100644 index 0000000000..d1c8bb4b6e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/RefreshIdentityTokenRequest.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface RefreshIdentityTokenRequest { + /** When `true`, the current identity for the provided cookie will be logged out and a new identity will be returned. */ + logout?: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/RefreshIdentityTokenResponse.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/RefreshIdentityTokenResponse.ts new file mode 100644 index 0000000000..a67fcf0552 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/RefreshIdentityTokenResponse.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface RefreshIdentityTokenResponse { + /** + * A JSON Web Token. + * Slightly modified to include a description prefix and use Protobufs of + * JSON. + */ + token: string; + /** Token expiration time (in milliseconds). */ + exp: string; + identityId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/index.ts b/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/index.ts new file mode 100644 index 0000000000..2e82e57714 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/auth/resources/tokens/types/index.ts @@ -0,0 +1,2 @@ +export * from "./RefreshIdentityTokenRequest"; +export * from "./RefreshIdentityTokenResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/Config.ts b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/Config.ts new file mode 100644 index 0000000000..a51a51aee9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/Config.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * Methods to verify a captcha + */ +export interface Config { + hcaptcha?: Rivet.captcha.ConfigHcaptcha; + turnstile?: Rivet.captcha.ConfigTurnstile; +} diff --git a/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/ConfigHcaptcha.ts b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/ConfigHcaptcha.ts new file mode 100644 index 0000000000..d0b57ca2f2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/ConfigHcaptcha.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Captcha configuration. + */ +export interface ConfigHcaptcha { + clientResponse: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/ConfigTurnstile.ts b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/ConfigTurnstile.ts new file mode 100644 index 0000000000..2a55d75c5d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/ConfigTurnstile.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Captcha configuration. + */ +export interface ConfigTurnstile { + clientResponse: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/index.ts b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/index.ts new file mode 100644 index 0000000000..e3d7f9330e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/captcha/resources/config/types/index.ts @@ -0,0 +1,3 @@ +export * from "./Config"; +export * from "./ConfigHcaptcha"; +export * from "./ConfigTurnstile"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/auth/types/InspectResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/auth/types/InspectResponse.ts new file mode 100644 index 0000000000..0bb8589297 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/auth/types/InspectResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface InspectResponse { + agent: Rivet.cloud.AuthAgent; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/auth/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/auth/types/index.ts new file mode 100644 index 0000000000..5f6b317b1f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/auth/types/index.ts @@ -0,0 +1 @@ +export * from "./InspectResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgent.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgent.ts new file mode 100644 index 0000000000..e3d0d8b67d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgent.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * The current authenticated agent. + */ +export interface AuthAgent { + identity?: Rivet.cloud.AuthAgentIdentity; + gameCloud?: Rivet.cloud.AuthAgentGameCloud; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgentGameCloud.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgentGameCloud.ts new file mode 100644 index 0000000000..a91ddf48fb --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgentGameCloud.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * The current authenticated game cloud. + */ +export interface AuthAgentGameCloud { + gameId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgentIdentity.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgentIdentity.ts new file mode 100644 index 0000000000..42298c5ec5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/AuthAgentIdentity.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * The current authenticated identity. + */ +export interface AuthAgentIdentity { + identityId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/BuildSummary.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/BuildSummary.ts new file mode 100644 index 0000000000..f3a1f32c4a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/BuildSummary.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A build summary. + */ +export interface BuildSummary { + buildId: string; + uploadId: string; + displayName: Rivet.DisplayName; + createTs: Rivet.Timestamp; + /** Unsigned 64 bit integer. */ + contentLength: number; + /** Whether or not this build has completely been uploaded. */ + complete: boolean; + /** Tags of this build */ + tags: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnAuthType.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnAuthType.ts new file mode 100644 index 0000000000..6874634ed4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnAuthType.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A value denoting what type of authentication to use for a game namespace's CDN. + */ +export type CdnAuthType = "none" | "basic"; + +export const CdnAuthType = { + None: "none", + Basic: "basic", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceAuthUser.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceAuthUser.ts new file mode 100644 index 0000000000..ce3d54aa3a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceAuthUser.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * An authenticated CDN user for a given namespace. + */ +export interface CdnNamespaceAuthUser { + /** A user name. */ + user: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceConfig.ts new file mode 100644 index 0000000000..321be272aa --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceConfig.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * CDN configuration for a given namespace. + */ +export interface CdnNamespaceConfig { + /** Whether or not to allow users to connect to the given namespace via domain name. */ + enableDomainPublicAuth: boolean; + /** A list of CDN domains for a given namespace. */ + domains: Rivet.cloud.CdnNamespaceDomain[]; + authType: Rivet.cloud.CdnAuthType; + /** A list of CDN authenticated users for a given namespace. */ + authUserList: Rivet.cloud.CdnNamespaceAuthUser[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomain.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomain.ts new file mode 100644 index 0000000000..3a40ed6a14 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomain.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A CDN domain for a given namespace. + */ +export interface CdnNamespaceDomain { + /** A valid domain name (no protocol). */ + domain: string; + createTs: Rivet.Timestamp; + verificationStatus: Rivet.cloud.CdnNamespaceDomainVerificationStatus; + verificationMethod: Rivet.cloud.CdnNamespaceDomainVerificationMethod; + verificationErrors: string[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethod.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethod.ts new file mode 100644 index 0000000000..84fa3555cb --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethod.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A union representing the verification method used for this CDN domain. + */ +export interface CdnNamespaceDomainVerificationMethod { + invalid?: Rivet.EmptyObject; + http?: Rivet.cloud.CdnNamespaceDomainVerificationMethodHttp; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethodHttp.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethodHttp.ts new file mode 100644 index 0000000000..0d45f8210f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethodHttp.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CdnNamespaceDomainVerificationMethodHttp { + cnameRecord: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationStatus.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationStatus.ts new file mode 100644 index 0000000000..724fae5dae --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationStatus.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A value denoting the status of a CDN domain's verification status. + */ +export type CdnNamespaceDomainVerificationStatus = "active" | "pending" | "failed"; + +export const CdnNamespaceDomainVerificationStatus = { + Active: "active", + Pending: "pending", + Failed: "failed", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnSiteSummary.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnSiteSummary.ts new file mode 100644 index 0000000000..ce96194e09 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CdnSiteSummary.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A CDN site summary. + */ +export interface CdnSiteSummary { + siteId: string; + uploadId: string; + displayName: Rivet.DisplayName; + createTs: Rivet.Timestamp; + /** Unsigned 64 bit integer. */ + contentLength: number; + /** Whether or not this site has completely been uploaded. */ + complete: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CustomAvatarSummary.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CustomAvatarSummary.ts new file mode 100644 index 0000000000..92791214b6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/CustomAvatarSummary.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A custom avatar summary. + */ +export interface CustomAvatarSummary { + uploadId: string; + displayName: Rivet.DisplayName; + createTs: Rivet.Timestamp; + /** The URL of this custom avatar image. Only present if upload is complete. */ + url?: string; + /** Unsigned 64 bit integer. */ + contentLength: number; + /** Whether or not this custom avatar has completely been uploaded. */ + complete: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GameFull.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GameFull.ts new file mode 100644 index 0000000000..37bf709a4a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GameFull.ts @@ -0,0 +1,29 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A full game. + */ +export interface GameFull { + gameId: string; + createTs: Rivet.Timestamp; + /** 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. */ + nameId: string; + displayName: Rivet.DisplayName; + developerGroupId: string; + /** Unsigned 32 bit integer. */ + totalPlayerCount: number; + /** The URL of this game's logo image. */ + logoUrl?: string; + /** The URL of this game's banner image. */ + bannerUrl?: string; + /** A list of namespace summaries. */ + namespaces: Rivet.cloud.NamespaceSummary[]; + /** A list of version summaries. */ + versions: Rivet.cloud.version.Summary[]; + /** A list of region summaries. */ + availableRegions: Rivet.cloud.RegionSummary[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GameLobbyExpenses.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GameLobbyExpenses.ts new file mode 100644 index 0000000000..3efd250b3f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GameLobbyExpenses.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * Game lobby expenses. + */ +export interface GameLobbyExpenses { + game: Rivet.game.Handle; + /** A list of namespace summaries. */ + namespaces: Rivet.cloud.NamespaceSummary[]; + /** A list of multiple region tier expenses. */ + expenses: Rivet.cloud.RegionTierExpenses[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GroupBankSource.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GroupBankSource.ts new file mode 100644 index 0000000000..9c55648cc2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/GroupBankSource.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GroupBankSource { + /** The bank account number of this group's bank source. */ + accountNumber: string; + /** The bank routing number of this group's bank source. */ + routingNumber: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/IdentityNamespaceConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/IdentityNamespaceConfig.ts new file mode 100644 index 0000000000..5f52881d9a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/IdentityNamespaceConfig.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Identity configuration for a given namespace. + */ +export interface IdentityNamespaceConfig {} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/KvNamespaceConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/KvNamespaceConfig.ts new file mode 100644 index 0000000000..18ed06267c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/KvNamespaceConfig.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * KV configuration for a given namespace. + */ +export interface KvNamespaceConfig {} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LobbySummaryAnalytics.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LobbySummaryAnalytics.ts new file mode 100644 index 0000000000..cd6860a07a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LobbySummaryAnalytics.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * Analytical information about a lobby. + */ +export interface LobbySummaryAnalytics { + lobbyId: string; + lobbyGroupId: string; + /** 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. */ + lobbyGroupNameId: string; + regionId: string; + createTs: Rivet.Timestamp; + /** Whether or not this lobby is ready. */ + isReady: boolean; + /** Whether or not this lobby is idle. */ + isIdle: boolean; + /** Whether or not this lobby is in a closed state. */ + isClosed: boolean; + /** Whether or not this lobby is outdated. */ + isOutdated: boolean; + /** Unsigned 32 bit integer. */ + maxPlayersNormal: number; + /** Unsigned 32 bit integer. */ + maxPlayersDirect: number; + /** Unsigned 32 bit integer. */ + maxPlayersParty: number; + /** Unsigned 32 bit integer. */ + totalPlayerCount: number; + /** Unsigned 32 bit integer. */ + registeredPlayerCount: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbyStatus.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbyStatus.ts new file mode 100644 index 0000000000..ff7c7e98da --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbyStatus.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A union representing the state of a lobby. + */ +export interface LogsLobbyStatus { + running: Rivet.EmptyObject; + stopped?: Rivet.cloud.LogsLobbyStatusStopped; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbyStatusStopped.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbyStatusStopped.ts new file mode 100644 index 0000000000..3f230d975d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbyStatusStopped.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * The status of a stopped lobby. + */ +export interface LogsLobbyStatusStopped { + stopTs: Rivet.Timestamp; + /** Whether or not the lobby failed or stopped successfully. */ + failed: boolean; + /** The exit code returned by the lobby's main process when stopped. */ + exitCode: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbySummary.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbySummary.ts new file mode 100644 index 0000000000..02d229e6d3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsLobbySummary.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A logs summary for a lobby. + */ +export interface LogsLobbySummary { + lobbyId: string; + namespaceId: string; + /** 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. */ + lobbyGroupNameId: string; + regionId: string; + createTs: Rivet.Timestamp; + startTs?: Rivet.Timestamp; + readyTs?: Rivet.Timestamp; + status: Rivet.cloud.LogsLobbyStatus; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsPerfMark.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsPerfMark.ts new file mode 100644 index 0000000000..5d11ae1d97 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsPerfMark.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A performance mark. + */ +export interface LogsPerfMark { + /** The label given to this performance mark. */ + label: string; + ts: Rivet.Timestamp; + rayId?: string; + reqId?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsPerfSpan.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsPerfSpan.ts new file mode 100644 index 0000000000..d32eb028a4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/LogsPerfSpan.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A performance span. + */ +export interface LogsPerfSpan { + /** The label given to this performance span. */ + label: string; + startTs: Rivet.Timestamp; + finishTs?: Rivet.Timestamp; + reqId?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/MatchmakerDevelopmentPort.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/MatchmakerDevelopmentPort.ts new file mode 100644 index 0000000000..57bb12218c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/MatchmakerDevelopmentPort.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A port configuration used to create development tokens. + */ +export interface MatchmakerDevelopmentPort { + port?: number; + portRange?: Rivet.cloud.version.matchmaker.PortRange; + protocol: Rivet.cloud.version.matchmaker.PortProtocol; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/MatchmakerNamespaceConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/MatchmakerNamespaceConfig.ts new file mode 100644 index 0000000000..a62640c3ce --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/MatchmakerNamespaceConfig.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Matchmaker configuration for a given namespace. + */ +export interface MatchmakerNamespaceConfig { + /** Unsigned 32 bit integer. */ + lobbyCountMax: number; + /** Unsigned 32 bit integer. */ + maxPlayersPerClient: number; + /** Unsigned 32 bit integer. */ + maxPlayersPerClientVpn: number; + /** Unsigned 32 bit integer. */ + maxPlayersPerClientProxy: number; + /** Unsigned 32 bit integer. */ + maxPlayersPerClientTor: number; + /** Unsigned 32 bit integer. */ + maxPlayersPerClientHosting: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceConfig.ts new file mode 100644 index 0000000000..d3aaf6c826 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceConfig.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * Cloud configuration for a given namespace. + */ +export interface NamespaceConfig { + cdn: Rivet.cloud.CdnNamespaceConfig; + matchmaker: Rivet.cloud.MatchmakerNamespaceConfig; + kv: Rivet.cloud.KvNamespaceConfig; + identity: Rivet.cloud.IdentityNamespaceConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceFull.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceFull.ts new file mode 100644 index 0000000000..b0f9a9ca9b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceFull.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A full namespace. + */ +export interface NamespaceFull { + namespaceId: string; + createTs: Rivet.Timestamp; + displayName: Rivet.DisplayName; + versionId: string; + /** 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. */ + nameId: string; + config: Rivet.cloud.NamespaceConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceSummary.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceSummary.ts new file mode 100644 index 0000000000..70058885df --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceSummary.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A namespace summary. + */ +export interface NamespaceSummary { + namespaceId: string; + createTs: Rivet.Timestamp; + displayName: Rivet.DisplayName; + versionId: string; + /** 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. */ + nameId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceVersion.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceVersion.ts new file mode 100644 index 0000000000..53d643097f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/NamespaceVersion.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A previously deployed namespace version. + */ +export interface NamespaceVersion { + /** A universally unique identifier. */ + namespaceId: string; + /** A universally unique identifier. */ + versionId: string; + deployTs: Rivet.Timestamp; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionSummary.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionSummary.ts new file mode 100644 index 0000000000..1eeaab6820 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionSummary.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A region summary. + */ +export interface RegionSummary { + regionId: string; + /** 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. */ + regionNameId: string; + /** The server provider of this region. */ + provider: string; + /** + * **Deprecated** + * A universal region label given to this region. + */ + universalRegion: Rivet.cloud.UniversalRegion; + providerDisplayName: Rivet.DisplayName; + regionDisplayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionTier.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionTier.ts new file mode 100644 index 0000000000..f0a56ed30a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionTier.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A region server tier. + */ +export interface RegionTier { + /** 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. */ + tierNameId: string; + /** Together with the denominator, denotes the portion of the CPU a given server uses. */ + rivetCoresNumerator: number; + /** Together with the numerator, denotes the portion of the CPU a given server uses. */ + rivetCoresDenominator: number; + /** CPU frequency (MHz). */ + cpu: number; + /** Allocated memory (MB). */ + memory: number; + /** Allocated disk space (MB). */ + disk: number; + /** Internet bandwidth (MB). */ + bandwidth: number; + /** + * **Deprecated** + * Price billed for every second this server is running (in quadrillionth USD, 1,000,000,000,000 = $1.00). + */ + pricePerSecond: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionTierExpenses.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionTierExpenses.ts new file mode 100644 index 0000000000..7dc43011b7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/RegionTierExpenses.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Region tier expenses. + */ +export interface RegionTierExpenses { + namespaceId: string; + regionId: string; + /** 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. */ + tierNameId: string; + /** 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. */ + lobbyGroupNameId: string; + /** How long a region tier has been active (in milliseconds). */ + uptime: number; + /** Amount of expenses for this region tier (in hundred-thousandths USD, 100,000 = $1.00). */ + expenses: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/SvcMetrics.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/SvcMetrics.ts new file mode 100644 index 0000000000..eb03fd557d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/SvcMetrics.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Metrics relating to a job service. + */ +export interface SvcMetrics { + /** The job name. */ + job: string; + /** CPU metrics. */ + cpu: number[]; + /** Memory metrics. */ + memory: number[]; + /** Total allocated memory (MB). */ + allocatedMemory?: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/SvcPerf.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/SvcPerf.ts new file mode 100644 index 0000000000..0bb0d4d5c8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/SvcPerf.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A service performance summary. + */ +export interface SvcPerf { + /** The name of the service. */ + svcName: string; + ts: Rivet.Timestamp; + /** Unsigned 64 bit integer. */ + duration: number; + reqId?: string; + /** A list of performance spans. */ + spans: Rivet.cloud.LogsPerfSpan[]; + /** A list of performance marks. */ + marks: Rivet.cloud.LogsPerfMark[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/UniversalRegion.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/UniversalRegion.ts new file mode 100644 index 0000000000..3e11fd2adc --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/UniversalRegion.ts @@ -0,0 +1,67 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * **Deprecated** + */ +export type UniversalRegion = + | "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"; + +export const UniversalRegion = { + Unknown: "unknown", + Local: "local", + Amsterdam: "amsterdam", + Atlanta: "atlanta", + Bangalore: "bangalore", + Dallas: "dallas", + Frankfurt: "frankfurt", + London: "london", + Mumbai: "mumbai", + Newark: "newark", + NewYorkCity: "new_york_city", + SanFrancisco: "san_francisco", + Singapore: "singapore", + Sydney: "sydney", + Tokyo: "tokyo", + Toronto: "toronto", + WashingtonDc: "washington_dc", + Chicago: "chicago", + Paris: "paris", + Seattle: "seattle", + SaoPaulo: "sao_paulo", + Stockholm: "stockholm", + Chennai: "chennai", + Osaka: "osaka", + Milan: "milan", + Miami: "miami", + Jakarta: "jakarta", + LosAngeles: "los_angeles", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/index.ts new file mode 100644 index 0000000000..ba71c55632 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/common/types/index.ts @@ -0,0 +1,36 @@ +export * from "./SvcPerf"; +export * from "./LogsPerfSpan"; +export * from "./LogsPerfMark"; +export * from "./LobbySummaryAnalytics"; +export * from "./LogsLobbySummary"; +export * from "./LogsLobbyStatus"; +export * from "./LogsLobbyStatusStopped"; +export * from "./SvcMetrics"; +export * from "./AuthAgent"; +export * from "./AuthAgentIdentity"; +export * from "./AuthAgentGameCloud"; +export * from "./CustomAvatarSummary"; +export * from "./BuildSummary"; +export * from "./CdnSiteSummary"; +export * from "./GameFull"; +export * from "./NamespaceSummary"; +export * from "./RegionSummary"; +export * from "./GameLobbyExpenses"; +export * from "./RegionTierExpenses"; +export * from "./GroupBankSource"; +export * from "./RegionTier"; +export * from "./UniversalRegion"; +export * from "./NamespaceFull"; +export * from "./NamespaceConfig"; +export * from "./CdnNamespaceConfig"; +export * from "./MatchmakerNamespaceConfig"; +export * from "./KvNamespaceConfig"; +export * from "./IdentityNamespaceConfig"; +export * from "./CdnAuthType"; +export * from "./CdnNamespaceDomain"; +export * from "./CdnNamespaceDomainVerificationMethod"; +export * from "./CdnNamespaceDomainVerificationMethodHttp"; +export * from "./CdnNamespaceDomainVerificationStatus"; +export * from "./CdnNamespaceAuthUser"; +export * from "./MatchmakerDevelopmentPort"; +export * from "./NamespaceVersion"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/CompleteDeviceLinkRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/CompleteDeviceLinkRequest.ts new file mode 100644 index 0000000000..91a32d1195 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/CompleteDeviceLinkRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CompleteDeviceLinkRequest { + deviceLinkToken: Rivet.Jwt; + gameId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/GetDeviceLinkResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/GetDeviceLinkResponse.ts new file mode 100644 index 0000000000..e1045475cf --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/GetDeviceLinkResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface GetDeviceLinkResponse { + cloudToken?: string; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/PrepareDeviceLinkResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/PrepareDeviceLinkResponse.ts new file mode 100644 index 0000000000..61d18eb891 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/PrepareDeviceLinkResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PrepareDeviceLinkResponse { + deviceLinkId: string; + deviceLinkToken: string; + deviceLinkUrl: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/index.ts new file mode 100644 index 0000000000..908200d8cc --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/devices/resources/links/types/index.ts @@ -0,0 +1,3 @@ +export * from "./PrepareDeviceLinkResponse"; +export * from "./GetDeviceLinkResponse"; +export * from "./CompleteDeviceLinkRequest"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/ListGameCustomAvatarsResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/ListGameCustomAvatarsResponse.ts new file mode 100644 index 0000000000..5ffa9357c0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/ListGameCustomAvatarsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ListGameCustomAvatarsResponse { + /** A list of custom avatar summaries. */ + customAvatars: Rivet.cloud.CustomAvatarSummary[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadRequest.ts new file mode 100644 index 0000000000..26ed987e43 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PrepareCustomAvatarUploadRequest { + /** The path/filename of the custom avatar. */ + path: string; + /** The MIME type of the custom avatar. */ + mime?: string; + /** Unsigned 64 bit integer. */ + contentLength: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadResponse.ts new file mode 100644 index 0000000000..bc3e0149f8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface PrepareCustomAvatarUploadResponse { + uploadId: string; + presignedRequest: Rivet.upload.PresignedRequest; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/index.ts new file mode 100644 index 0000000000..a69f21b5fd --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/avatars/types/index.ts @@ -0,0 +1,3 @@ +export * from "./ListGameCustomAvatarsResponse"; +export * from "./PrepareCustomAvatarUploadRequest"; +export * from "./PrepareCustomAvatarUploadResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/BuildCompression.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..df210e01c1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildCompression = + /** + * None compression. */ + | "none" + /** + * LZ4 compression. Use the minimum compression level. */ + | "lz4"; + +export const BuildCompression = { + None: "none", + Lz4: "lz4", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/BuildKind.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..ffa3b3387e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/BuildKind.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildKind = + /** + * Docker image archive generated by `docker save`. */ + | "docker_image" + /** + * OCI-compliant bundle. */ + | "oci_bundle"; + +export const BuildKind = { + DockerImage: "docker_image", + OciBundle: "oci_bundle", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/CreateGameBuildRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/CreateGameBuildRequest.ts new file mode 100644 index 0000000000..2701ae1953 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/CreateGameBuildRequest.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CreateGameBuildRequest { + displayName: Rivet.DisplayName; + /** A tag given to the game build. */ + imageTag: string; + imageFile: Rivet.upload.PrepareFile; + multipartUpload?: boolean; + kind?: Rivet.cloud.games.BuildKind; + compression?: Rivet.cloud.games.BuildCompression; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/CreateGameBuildResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/CreateGameBuildResponse.ts new file mode 100644 index 0000000000..e200f86cdf --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/CreateGameBuildResponse.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CreateGameBuildResponse { + buildId: string; + uploadId: string; + imagePresignedRequest?: Rivet.upload.PresignedRequest; + imagePresignedRequests?: Rivet.upload.PresignedRequest[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/ListGameBuildsResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/ListGameBuildsResponse.ts new file mode 100644 index 0000000000..2fb0fb7070 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/ListGameBuildsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ListGameBuildsResponse { + /** A list of build summaries. */ + builds: Rivet.cloud.BuildSummary[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/index.ts new file mode 100644 index 0000000000..62026df1e5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/builds/types/index.ts @@ -0,0 +1,5 @@ +export * from "./ListGameBuildsResponse"; +export * from "./CreateGameBuildRequest"; +export * from "./CreateGameBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteRequest.ts new file mode 100644 index 0000000000..82aa30bf40 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CreateGameCdnSiteRequest { + displayName: Rivet.DisplayName; + /** A list of files preparing to upload. */ + files: Rivet.upload.PrepareFile[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteResponse.ts new file mode 100644 index 0000000000..5ee41abb10 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CreateGameCdnSiteResponse { + siteId: string; + uploadId: string; + presignedRequests: Rivet.upload.PresignedRequest[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/ListGameCdnSitesResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/ListGameCdnSitesResponse.ts new file mode 100644 index 0000000000..233243a61b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/ListGameCdnSitesResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ListGameCdnSitesResponse { + /** A list of CDN site summaries. */ + sites: Rivet.cloud.CdnSiteSummary[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/index.ts new file mode 100644 index 0000000000..e6b92eb59c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/cdn/types/index.ts @@ -0,0 +1,3 @@ +export * from "./ListGameCdnSitesResponse"; +export * from "./CreateGameCdnSiteRequest"; +export * from "./CreateGameCdnSiteResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/DeleteMatchmakerLobbyResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/DeleteMatchmakerLobbyResponse.ts new file mode 100644 index 0000000000..d26f921ca5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/DeleteMatchmakerLobbyResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DeleteMatchmakerLobbyResponse { + /** Whether or not the lobby was successfully stopped. */ + didRemove: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsRequest.ts new file mode 100644 index 0000000000..7c0fae17dc --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ExportLobbyLogsRequest { + stream: Rivet.cloud.games.LogStream; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsResponse.ts new file mode 100644 index 0000000000..32b47ed16a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ExportLobbyLogsResponse { + /** The URL to a CSV file for the given lobby history. */ + url: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryRequest.ts new file mode 100644 index 0000000000..c7669df6d6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ExportMatchmakerLobbyHistoryRequest { + /** Unsigned 64 bit integer. */ + queryStart: number; + /** Unsigned 64 bit integer. */ + queryEnd: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryResponse.ts new file mode 100644 index 0000000000..fb3aba2749 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ExportMatchmakerLobbyHistoryResponse { + /** The URL to a CSV file for the given lobby history. */ + url: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/GetLobbyLogsResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/GetLobbyLogsResponse.ts new file mode 100644 index 0000000000..4c303abcac --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/GetLobbyLogsResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface GetLobbyLogsResponse { + /** Sorted old to new. */ + lines: string[]; + /** Sorted old to new. */ + timestamps: string[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/LogStream.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/LogStream.ts new file mode 100644 index 0000000000..c8dd8fc0ad --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/LogStream.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type LogStream = "std_out" | "std_err"; + +export const LogStream = { + StdOut: "std_out", + StdErr: "std_err", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/index.ts new file mode 100644 index 0000000000..bb788951aa --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/matchmaker/types/index.ts @@ -0,0 +1,7 @@ +export * from "./ExportMatchmakerLobbyHistoryRequest"; +export * from "./ExportMatchmakerLobbyHistoryResponse"; +export * from "./DeleteMatchmakerLobbyResponse"; +export * from "./GetLobbyLogsResponse"; +export * from "./ExportLobbyLogsRequest"; +export * from "./ExportLobbyLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/GetAnalyticsMatchmakerLiveResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/GetAnalyticsMatchmakerLiveResponse.ts new file mode 100644 index 0000000000..e5072d1c21 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/GetAnalyticsMatchmakerLiveResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +export interface GetAnalyticsMatchmakerLiveResponse { + /** A list of analytics lobby summaries. */ + lobbies: Rivet.cloud.LobbySummaryAnalytics[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/index.ts new file mode 100644 index 0000000000..d177fbed1a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/index.ts @@ -0,0 +1 @@ +export * from "./GetAnalyticsMatchmakerLiveResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/GetNamespaceLobbyResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/GetNamespaceLobbyResponse.ts new file mode 100644 index 0000000000..f45c6c7550 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/GetNamespaceLobbyResponse.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +export interface GetNamespaceLobbyResponse { + lobby: Rivet.cloud.LogsLobbySummary; + metrics?: Rivet.cloud.SvcMetrics; + /** + * **Deprecated** + * A list of URLs. + */ + stdoutPresignedUrls: string[]; + /** + * **Deprecated** + * A list of URLs. + */ + stderrPresignedUrls: string[]; + /** + * **Deprecated** + * A list of service performance summaries. + */ + perfLists: Rivet.cloud.SvcPerf[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/ListNamespaceLobbiesResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/ListNamespaceLobbiesResponse.ts new file mode 100644 index 0000000000..cc69dba96f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/ListNamespaceLobbiesResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +export interface ListNamespaceLobbiesResponse { + /** A list of lobby log summaries. */ + lobbies: Rivet.cloud.LogsLobbySummary[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/index.ts new file mode 100644 index 0000000000..1bcc1b77ac --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ListNamespaceLobbiesResponse"; +export * from "./GetNamespaceLobbyResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/AddNamespaceDomainRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/AddNamespaceDomainRequest.ts new file mode 100644 index 0000000000..9f8e579664 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/AddNamespaceDomainRequest.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface AddNamespaceDomainRequest { + /** A valid domain name (no protocol). */ + domain: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceRequest.ts new file mode 100644 index 0000000000..cd67c00414 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CreateGameNamespaceRequest { + displayName: Rivet.DisplayName; + versionId: string; + /** 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. */ + nameId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceResponse.ts new file mode 100644 index 0000000000..f1a9c1568e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateGameNamespaceResponse { + namespaceId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentRequest.ts new file mode 100644 index 0000000000..e535c48f67 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentRequest.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CreateGameNamespaceTokenDevelopmentRequest { + /** The hostname used for the token. */ + hostname: string; + ports?: Record; + /** + * **Deprecated** + * A list of docker ports. + */ + lobbyPorts?: Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDockerPort[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentResponse.ts new file mode 100644 index 0000000000..1e3a4ec5c3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentResponse.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateGameNamespaceTokenDevelopmentResponse { + /** + * A JSON Web Token. + * Slightly modified to include a description prefix and use Protobufs of + * JSON. + */ + token: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenPublicResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenPublicResponse.ts new file mode 100644 index 0000000000..4674682c8a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenPublicResponse.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateGameNamespaceTokenPublicResponse { + /** + * A JSON Web Token. + * Slightly modified to include a description prefix and use Protobufs of + * JSON. + */ + token: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceByIdResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceByIdResponse.ts new file mode 100644 index 0000000000..6bc7866af7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceByIdResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface GetGameNamespaceByIdResponse { + namespace: Rivet.cloud.NamespaceFull; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceVersionHistoryResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceVersionHistoryResponse.ts new file mode 100644 index 0000000000..afc68ed32d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceVersionHistoryResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface GetGameNamespaceVersionHistoryResponse { + /** A list of previously deployed namespace versions. */ + versions: Rivet.cloud.NamespaceVersion[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/InspectResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/InspectResponse.ts new file mode 100644 index 0000000000..d1a0e54e4e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/InspectResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface InspectResponse { + agent: Rivet.cloud.AuthAgent; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/SetNamespaceCdnAuthTypeRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/SetNamespaceCdnAuthTypeRequest.ts new file mode 100644 index 0000000000..f43e6bd78e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/SetNamespaceCdnAuthTypeRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface SetNamespaceCdnAuthTypeRequest { + authType: Rivet.cloud.CdnAuthType; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ToggleNamespaceDomainPublicAuthRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ToggleNamespaceDomainPublicAuthRequest.ts new file mode 100644 index 0000000000..c55aba5d1d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ToggleNamespaceDomainPublicAuthRequest.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ToggleNamespaceDomainPublicAuthRequest { + /** Whether or not to enable authentication based on domain. */ + enabled: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceMatchmakerConfigRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceMatchmakerConfigRequest.ts new file mode 100644 index 0000000000..389579e055 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceMatchmakerConfigRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpdateGameNamespaceMatchmakerConfigRequest { + /** Unsigned 32 bit integer. */ + lobbyCountMax: number; + /** Unsigned 32 bit integer. */ + maxPlayers: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceVersionRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceVersionRequest.ts new file mode 100644 index 0000000000..197695abb3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceVersionRequest.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpdateGameNamespaceVersionRequest { + versionId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateNamespaceCdnAuthUserRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateNamespaceCdnAuthUserRequest.ts new file mode 100644 index 0000000000..d57bbe9233 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/UpdateNamespaceCdnAuthUserRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpdateNamespaceCdnAuthUserRequest { + /** A user name. */ + user: string; + /** A bcrypt encrypted password. An error is returned if the given string is not properly encrypted. */ + password: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigRequest.ts new file mode 100644 index 0000000000..ee1bf30c23 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ValidateGameNamespaceMatchmakerConfigRequest { + /** Unsigned 32 bit integer. */ + lobbyCountMax: number; + /** Unsigned 32 bit integer. */ + maxPlayers: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigResponse.ts new file mode 100644 index 0000000000..e8c4cb3635 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ValidateGameNamespaceMatchmakerConfigResponse { + /** A list of validation errors. */ + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceRequest.ts new file mode 100644 index 0000000000..dfa38b0dbd --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ValidateGameNamespaceRequest { + displayName: Rivet.DisplayName; + /** 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. */ + nameId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceResponse.ts new file mode 100644 index 0000000000..d0742e0130 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ValidateGameNamespaceResponse { + /** A list of validation errors. */ + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentRequest.ts new file mode 100644 index 0000000000..2765f05893 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ValidateGameNamespaceTokenDevelopmentRequest { + hostname: string; + /** A list of docker ports. */ + lobbyPorts: Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDockerPort[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentResponse.ts new file mode 100644 index 0000000000..a511c2ba58 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ValidateGameNamespaceTokenDevelopmentResponse { + /** A list of validation errors. */ + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/index.ts new file mode 100644 index 0000000000..7fa5c9329d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/namespaces/types/index.ts @@ -0,0 +1,20 @@ +export * from "./InspectResponse"; +export * from "./CreateGameNamespaceRequest"; +export * from "./CreateGameNamespaceResponse"; +export * from "./ValidateGameNamespaceRequest"; +export * from "./ValidateGameNamespaceResponse"; +export * from "./GetGameNamespaceByIdResponse"; +export * from "./UpdateNamespaceCdnAuthUserRequest"; +export * from "./SetNamespaceCdnAuthTypeRequest"; +export * from "./ToggleNamespaceDomainPublicAuthRequest"; +export * from "./AddNamespaceDomainRequest"; +export * from "./UpdateGameNamespaceMatchmakerConfigRequest"; +export * from "./GetGameNamespaceVersionHistoryResponse"; +export * from "./ValidateGameNamespaceMatchmakerConfigRequest"; +export * from "./ValidateGameNamespaceMatchmakerConfigResponse"; +export * from "./CreateGameNamespaceTokenDevelopmentRequest"; +export * from "./CreateGameNamespaceTokenDevelopmentResponse"; +export * from "./ValidateGameNamespaceTokenDevelopmentRequest"; +export * from "./ValidateGameNamespaceTokenDevelopmentResponse"; +export * from "./CreateGameNamespaceTokenPublicResponse"; +export * from "./UpdateGameNamespaceVersionRequest"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/tokens/types/CreateCloudTokenResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/tokens/types/CreateCloudTokenResponse.ts new file mode 100644 index 0000000000..a2e80446fb --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/tokens/types/CreateCloudTokenResponse.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateCloudTokenResponse { + /** + * A JSON Web Token. + * Slightly modified to include a description prefix and use Protobufs of + * JSON. + */ + token: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/tokens/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/tokens/types/index.ts new file mode 100644 index 0000000000..c6eb67fbbe --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/tokens/types/index.ts @@ -0,0 +1 @@ +export * from "./CreateCloudTokenResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/CreateGameVersionRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/CreateGameVersionRequest.ts new file mode 100644 index 0000000000..0dadc7fb72 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/CreateGameVersionRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CreateGameVersionRequest { + displayName: Rivet.DisplayName; + config: Rivet.cloud.version.Config; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/CreateGameVersionResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/CreateGameVersionResponse.ts new file mode 100644 index 0000000000..e5062b35f9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/CreateGameVersionResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateGameVersionResponse { + versionId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/GetGameVersionByIdResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/GetGameVersionByIdResponse.ts new file mode 100644 index 0000000000..930c5f13c9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/GetGameVersionByIdResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface GetGameVersionByIdResponse { + version: Rivet.cloud.version.Full; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ReserveVersionNameResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ReserveVersionNameResponse.ts new file mode 100644 index 0000000000..0a26e024e6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ReserveVersionNameResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ReserveVersionNameResponse { + versionDisplayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionRequest.ts new file mode 100644 index 0000000000..f0de299773 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ValidateGameVersionRequest { + displayName: Rivet.DisplayName; + config: Rivet.cloud.version.Config; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionResponse.ts new file mode 100644 index 0000000000..6bdaf90893 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface ValidateGameVersionResponse { + /** A list of validation errors. */ + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/index.ts new file mode 100644 index 0000000000..893aa27b04 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/resources/versions/types/index.ts @@ -0,0 +1,6 @@ +export * from "./CreateGameVersionRequest"; +export * from "./CreateGameVersionResponse"; +export * from "./ReserveVersionNameResponse"; +export * from "./ValidateGameVersionRequest"; +export * from "./ValidateGameVersionResponse"; +export * from "./GetGameVersionByIdResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/CreateGameRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/CreateGameRequest.ts new file mode 100644 index 0000000000..d6e183a6aa --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/CreateGameRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface CreateGameRequest { + /** **Deprecated** */ + nameId?: Rivet.Identifier; + displayName: Rivet.DisplayName; + developerGroupId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/CreateGameResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/CreateGameResponse.ts new file mode 100644 index 0000000000..58f87048cc --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/CreateGameResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateGameResponse { + gameId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameBannerUploadPrepareRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameBannerUploadPrepareRequest.ts new file mode 100644 index 0000000000..c726e9626c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameBannerUploadPrepareRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GameBannerUploadPrepareRequest { + /** The path/filename of the game banner. */ + path: string; + /** The MIME type of the game banner. */ + mime?: string; + /** Unsigned 64 bit integer. */ + contentLength: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameBannerUploadPrepareResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameBannerUploadPrepareResponse.ts new file mode 100644 index 0000000000..82c10937f7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameBannerUploadPrepareResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GameBannerUploadPrepareResponse { + uploadId: string; + presignedRequest: Rivet.upload.PresignedRequest; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameLogoUploadPrepareRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameLogoUploadPrepareRequest.ts new file mode 100644 index 0000000000..f98052effd --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameLogoUploadPrepareRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GameLogoUploadPrepareRequest { + /** The path/filename of the game logo. */ + path: string; + /** The MIME type of the game logo. */ + mime?: string; + /** Unsigned 64 bit integer. */ + contentLength: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameLogoUploadPrepareResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameLogoUploadPrepareResponse.ts new file mode 100644 index 0000000000..60cbc693d9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GameLogoUploadPrepareResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GameLogoUploadPrepareResponse { + uploadId: string; + presignedRequest: Rivet.upload.PresignedRequest; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GetGameByIdResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GetGameByIdResponse.ts new file mode 100644 index 0000000000..d55c41bc68 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GetGameByIdResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetGameByIdResponse { + game: Rivet.cloud.GameFull; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GetGamesResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GetGamesResponse.ts new file mode 100644 index 0000000000..a49b127c5d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/GetGamesResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetGamesResponse { + /** A list of game summaries. */ + games: Rivet.game.GameSummary[]; + /** A list of group summaries. */ + groups: Rivet.group.GroupSummary[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/ValidateGameRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/ValidateGameRequest.ts new file mode 100644 index 0000000000..72ad6df8d0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/ValidateGameRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ValidateGameRequest { + displayName: Rivet.DisplayName; + /** **Deprecated** */ + nameId?: Rivet.Identifier; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/ValidateGameResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/ValidateGameResponse.ts new file mode 100644 index 0000000000..b824935591 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/ValidateGameResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ValidateGameResponse { + /** A list of validation errors. */ + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/index.ts new file mode 100644 index 0000000000..4ee3f44932 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/games/types/index.ts @@ -0,0 +1,10 @@ +export * from "./GetGamesResponse"; +export * from "./CreateGameRequest"; +export * from "./CreateGameResponse"; +export * from "./ValidateGameRequest"; +export * from "./ValidateGameResponse"; +export * from "./GetGameByIdResponse"; +export * from "./GameBannerUploadPrepareRequest"; +export * from "./GameBannerUploadPrepareResponse"; +export * from "./GameLogoUploadPrepareRequest"; +export * from "./GameLogoUploadPrepareResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/ValidateGroupRequest.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/ValidateGroupRequest.ts new file mode 100644 index 0000000000..ec0e2a4661 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/ValidateGroupRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ValidateGroupRequest { + displayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/ValidateGroupResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/ValidateGroupResponse.ts new file mode 100644 index 0000000000..f02f17de8e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/ValidateGroupResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ValidateGroupResponse { + /** A list of validation errors. */ + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/index.ts new file mode 100644 index 0000000000..4f4b12381a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/groups/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ValidateGroupRequest"; +export * from "./ValidateGroupResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/logs/types/GetRayPerfLogsResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/logs/types/GetRayPerfLogsResponse.ts new file mode 100644 index 0000000000..b68843b6d5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/logs/types/GetRayPerfLogsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetRayPerfLogsResponse { + /** A list of service performance summaries. */ + perfLists: Rivet.cloud.SvcPerf[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/logs/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/logs/types/index.ts new file mode 100644 index 0000000000..3e48b7404b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/logs/types/index.ts @@ -0,0 +1 @@ +export * from "./GetRayPerfLogsResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/tiers/types/GetRegionTiersResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/tiers/types/GetRegionTiersResponse.ts new file mode 100644 index 0000000000..35032c1e34 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/tiers/types/GetRegionTiersResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetRegionTiersResponse { + /** A list of region server tiers. */ + tiers: Rivet.cloud.RegionTier[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/tiers/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/tiers/types/index.ts new file mode 100644 index 0000000000..93a8b71ceb --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/tiers/types/index.ts @@ -0,0 +1 @@ +export * from "./GetRegionTiersResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/CdnConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/CdnConfig.ts new file mode 100644 index 0000000000..fdfc800818 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/CdnConfig.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +/** + * CDN configuration for a given version. + */ +export interface CdnConfig { + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + buildCommand?: string; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + buildOutput?: string; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + buildEnv?: Record; + siteId?: string; + /** Multiple CDN version routes. */ + routes?: Rivet.cloud.version.cdn.Route[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/CustomHeadersMiddleware.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/CustomHeadersMiddleware.ts new file mode 100644 index 0000000000..2a478be9de --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/CustomHeadersMiddleware.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CustomHeadersMiddleware { + headers: Rivet.cloud.version.cdn.Header[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Header.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Header.ts new file mode 100644 index 0000000000..e169010984 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Header.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Header { + name: string; + value: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Middleware.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Middleware.ts new file mode 100644 index 0000000000..3ffb62c1f3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Middleware.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface Middleware { + kind: Rivet.cloud.version.cdn.MiddlewareKind; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/MiddlewareKind.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/MiddlewareKind.ts new file mode 100644 index 0000000000..50a7ea7dba --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/MiddlewareKind.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface MiddlewareKind { + customHeaders?: Rivet.cloud.version.cdn.CustomHeadersMiddleware; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Route.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Route.ts new file mode 100644 index 0000000000..63f5660840 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/Route.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface Route { + glob: string; + /** Unsigned 32 bit integer. */ + priority: number; + /** Multiple CDN version middleware. */ + middlewares: Rivet.cloud.version.cdn.Middleware[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/index.ts new file mode 100644 index 0000000000..0068675e78 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/cdn/types/index.ts @@ -0,0 +1,6 @@ +export * from "./CdnConfig"; +export * from "./Route"; +export * from "./Middleware"; +export * from "./MiddlewareKind"; +export * from "./CustomHeadersMiddleware"; +export * from "./Header"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/custom/types/CustomConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/custom/types/CustomConfig.ts new file mode 100644 index 0000000000..46222e746e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/custom/types/CustomConfig.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CustomConfig {} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/custom/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/custom/types/index.ts new file mode 100644 index 0000000000..381f2b6981 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/custom/types/index.ts @@ -0,0 +1 @@ +export * from "./CustomConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/godot/types/GodotConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/godot/types/GodotConfig.ts new file mode 100644 index 0000000000..deb1d0602a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/godot/types/GodotConfig.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GodotConfig {} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/godot/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/godot/types/index.ts new file mode 100644 index 0000000000..7cea9775b4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/godot/types/index.ts @@ -0,0 +1 @@ +export * from "./GodotConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/html5/types/Html5Config.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/html5/types/Html5Config.ts new file mode 100644 index 0000000000..870c76d038 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/html5/types/Html5Config.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Html5Config {} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/html5/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/html5/types/index.ts new file mode 100644 index 0000000000..654a44c8f9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/html5/types/index.ts @@ -0,0 +1 @@ +export * from "./Html5Config"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unity/types/UnityConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unity/types/UnityConfig.ts new file mode 100644 index 0000000000..92376f8ba8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unity/types/UnityConfig.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UnityConfig {} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unity/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unity/types/index.ts new file mode 100644 index 0000000000..1c90b32602 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unity/types/index.ts @@ -0,0 +1 @@ +export * from "./UnityConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unreal/types/UnrealConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unreal/types/UnrealConfig.ts new file mode 100644 index 0000000000..d20aa709c6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unreal/types/UnrealConfig.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UnrealConfig { + /** + * Name of the Unreal module that holds the game code. + * This is usually the value of `$.Modules[0].Name` in the file `MyProject.unproject`. + * _Configures Rivet CLI behavior. Has no effect on server behavior._ + */ + gameModule: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unreal/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unreal/types/index.ts new file mode 100644 index 0000000000..3f35012393 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/resources/unreal/types/index.ts @@ -0,0 +1 @@ +export * from "./UnrealConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/types/EngineConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/types/EngineConfig.ts new file mode 100644 index 0000000000..5f6e9843e6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/types/EngineConfig.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface EngineConfig { + unity?: Rivet.cloud.version.engine.UnityConfig; + unreal?: Rivet.cloud.version.engine.UnrealConfig; + godot?: Rivet.cloud.version.engine.GodotConfig; + html5?: Rivet.cloud.version.engine.Html5Config; + custom?: Rivet.cloud.version.engine.CustomConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/types/index.ts new file mode 100644 index 0000000000..d60e08547f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/engine/types/index.ts @@ -0,0 +1 @@ +export * from "./EngineConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/CustomAvatar.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/CustomAvatar.ts new file mode 100644 index 0000000000..19ed5ebab3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/CustomAvatar.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CustomAvatar { + uploadId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/CustomDisplayName.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/CustomDisplayName.ts new file mode 100644 index 0000000000..6d7d2b929f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/CustomDisplayName.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +export interface CustomDisplayName { + displayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/IdentityConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/IdentityConfig.ts new file mode 100644 index 0000000000..3ee8de8787 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/IdentityConfig.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +/** + * **Deprecated** + * Identity configuration for a given version. + */ +export interface IdentityConfig { + /** **Deprecated** */ + displayNames?: string[]; + /** **Deprecated** */ + avatars?: string[]; + /** **Deprecated** */ + customDisplayNames?: Rivet.cloud.version.identity.CustomDisplayName[]; + /** **Deprecated** */ + customAvatars?: Rivet.cloud.version.identity.CustomAvatar[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/index.ts new file mode 100644 index 0000000000..9c8f2e22b8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/identity/types/index.ts @@ -0,0 +1,3 @@ +export * from "./IdentityConfig"; +export * from "./CustomDisplayName"; +export * from "./CustomAvatar"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/kv/types/KvConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/kv/types/KvConfig.ts new file mode 100644 index 0000000000..3a3ac06f80 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/kv/types/KvConfig.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * KV configuration for a given version. + */ +export interface KvConfig {} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/kv/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/kv/types/index.ts new file mode 100644 index 0000000000..80bbe1357d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/kv/types/index.ts @@ -0,0 +1 @@ +export * from "./KvConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/Captcha.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/Captcha.ts new file mode 100644 index 0000000000..fbd28e293c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/Captcha.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * Matchmaker captcha configuration. + */ +export interface Captcha { + /** Denotes how many requests a connection can make before it is required to reverify a captcha. */ + requestsBeforeReverify: number; + /** Denotes how long a connection can continue to reconnect without having to reverify a captcha (in milliseconds). */ + verificationTtl: number; + hcaptcha?: Rivet.cloud.version.matchmaker.CaptchaHcaptcha; + turnstile?: Rivet.cloud.version.matchmaker.CaptchaTurnstile; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptcha.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptcha.ts new file mode 100644 index 0000000000..b26df3a8d6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptcha.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * hCpatcha configuration. + */ +export interface CaptchaHcaptcha { + /** **Deprecated** */ + level?: Rivet.cloud.version.matchmaker.CaptchaHcaptchaLevel; + /** Site key for your hCaptcha application. Must be set. */ + siteKey?: string; + /** Secret key for your hCaptcha application. Must be set. */ + secretKey?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptchaLevel.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptchaLevel.ts new file mode 100644 index 0000000000..2dac3fe4f3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptchaLevel.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * **Deprecated** + * How hard a captcha should be. + */ +export type CaptchaHcaptchaLevel = "easy" | "moderate" | "difficult" | "always_on"; + +export const CaptchaHcaptchaLevel = { + Easy: "easy", + Moderate: "moderate", + Difficult: "difficult", + AlwaysOn: "always_on", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaTurnstile.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaTurnstile.ts new file mode 100644 index 0000000000..3e0a735516 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaTurnstile.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Turnstile captcha configuration. + */ +export interface CaptchaTurnstile { + siteKey: string; + secretKey: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/NetworkMode.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..a3542dfc4e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/NetworkMode.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Configures how the container's network is isolated from the host. + * `bridge` (default) networking isolates the container's network from the host & other containers. + * `host` networking removes isolation between the container and the host. Only available in Rivet Open Source & Enterprise. + * Read more about bridge vs host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). + */ +export type NetworkMode = "bridge" | "host"; + +export const NetworkMode = { + Bridge: "bridge", + Host: "host", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortProtocol.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..965c74c6ed --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortProtocol.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Signifies the protocol of the port. + * Note 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: + * + * - With HTTP, the port will always be 80. The hostname of the port correctly routes the incoming + * connection to the correct port being used by the game server. + * - With HTTPS, the port will always be 443. The hostname of the port correctly routes the incoming + * connection to the correct port being used by the game server. + * - Using TCP/UDP, the port will be a random number between 26000 and 31999. This gets automatically + * routed to the correct port being used by the game server. + * + * ### Related - cloud.version.matchmaker.GameModeRuntimeDockerPort - cloud.version.matchmaker.ProxyKind - /docs/dynamic-servers/concepts/game-guard - matchmaker.lobbies.find + */ +export type PortProtocol = "http" | "https" | "tcp" | "tcp_tls" | "udp"; + +export const PortProtocol = { + Http: "http", + Https: "https", + Tcp: "tcp", + TcpTls: "tcp_tls", + Udp: "udp", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortRange.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortRange.ts new file mode 100644 index 0000000000..3b2fe90d4c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortRange.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Range of ports that can be connected to. + * If configured, `network_mode` must equal `host`. + * Port ranges may overlap between containers, it is the responsibility of the developer to ensure ports are available before using. + * Read more about host networking [here](https://rivet.gg/docs/dynamic-servers/concepts/host-bridge-networking). + * Only available on Rivet Open Source & Enterprise. + * + * ### Related + * + * - cloud.version.matchmaker.PortProtocol + * - cloud.version.matchmaker.ProxyKind + */ +export interface PortRange { + /** Unsigned 32 bit integer. */ + min: number; + /** Unsigned 32 bit integer. */ + max: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/ProxyKind.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/ProxyKind.ts new file mode 100644 index 0000000000..82f31a07cd --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/ProxyKind.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Range of ports that can be connected to. + * `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. + * `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. + * + * ### Related - /docs/dynamic-servers/concepts/game-guard - cloud.version.matchmaker.PortProtocol + */ +export type ProxyKind = "none" | "game_guard"; + +export const ProxyKind = { + None: "none", + GameGuard: "game_guard", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/index.ts new file mode 100644 index 0000000000..de5db03527 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/common/types/index.ts @@ -0,0 +1,8 @@ +export * from "./PortRange"; +export * from "./PortProtocol"; +export * from "./ProxyKind"; +export * from "./Captcha"; +export * from "./CaptchaHcaptcha"; +export * from "./CaptchaHcaptchaLevel"; +export * from "./CaptchaTurnstile"; +export * from "./NetworkMode"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameMode.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameMode.ts new file mode 100644 index 0000000000..9d2f9482c2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameMode.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * A game mode. + */ +export interface GameMode { + regions?: Record; + maxPlayers?: number; + maxPlayersDirect?: number; + maxPlayersParty?: number; + docker?: Rivet.cloud.version.matchmaker.GameModeRuntimeDocker; + listable?: boolean; + taggable?: boolean; + allowDynamicMaxPlayers?: boolean; + actions?: Rivet.cloud.version.matchmaker.GameModeActions; + tier?: string; + idleLobbies?: Rivet.cloud.version.matchmaker.GameModeIdleLobbiesConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeActions.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeActions.ts new file mode 100644 index 0000000000..c2efec9a0d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeActions.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * Configuration for the connection types allowed for a game mode. + */ +export interface GameModeActions { + find?: Rivet.cloud.version.matchmaker.GameModeFindConfig; + join?: Rivet.cloud.version.matchmaker.GameModeJoinConfig; + create?: Rivet.cloud.version.matchmaker.GameModeCreateConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeCreateConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeCreateConfig.ts new file mode 100644 index 0000000000..58d567573d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeCreateConfig.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * Configures the requirements and authentication for the /create endpoint. If this value is not set in the config, the /create endpoint is NOT enabled. + */ +export interface GameModeCreateConfig { + /** Sets whether or not the /create endpoint is enabled. */ + enabled: boolean; + identityRequirement?: Rivet.cloud.version.matchmaker.GameModeIdentityRequirement; + verification?: Rivet.cloud.version.matchmaker.GameModeVerificationConfig; + /** Defaults to false when unset. */ + enablePublic?: boolean; + /** Defaults to true when unset. */ + enablePrivate?: boolean; + /** **Deprecated** */ + maxLobbiesPerIdentity?: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeFindConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeFindConfig.ts new file mode 100644 index 0000000000..2baabd7d2c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeFindConfig.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * Configures the requirements and authentication for the /find endpoint. If this value is not set in the config, the /find endpoint is still enabled. + */ +export interface GameModeFindConfig { + /** Sets whether or not the /find endpoint is enabled. */ + enabled: boolean; + identityRequirement?: Rivet.cloud.version.matchmaker.GameModeIdentityRequirement; + verification?: Rivet.cloud.version.matchmaker.GameModeVerificationConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdentityRequirement.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdentityRequirement.ts new file mode 100644 index 0000000000..7b006ad9b3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdentityRequirement.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * **Deprecated** + * The registration requirement for a user when joining/finding/creating a lobby. "None" allows for connections without an identity. + */ +export type GameModeIdentityRequirement = "none" | "guest" | "registered"; + +export const GameModeIdentityRequirement = { + None: "none", + Guest: "guest", + Registered: "registered", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdleLobbiesConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdleLobbiesConfig.ts new file mode 100644 index 0000000000..3b867de8f9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdleLobbiesConfig.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Configuration for how many idle lobbies a game version should have. + */ +export interface GameModeIdleLobbiesConfig { + min: number; + max: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeJoinConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeJoinConfig.ts new file mode 100644 index 0000000000..c50d3bfa2b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeJoinConfig.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * Configures the requirements and authentication for the /join endpoint. If this value is not set in the config, the /join endpoint is still enabled. + */ +export interface GameModeJoinConfig { + /** Sets whether or not the /join endpoint is enabled. */ + enabled: boolean; + identityRequirement?: Rivet.cloud.version.matchmaker.GameModeIdentityRequirement; + verification?: Rivet.cloud.version.matchmaker.GameModeVerificationConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRegion.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRegion.ts new file mode 100644 index 0000000000..c099a53565 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRegion.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * A game mode region. + */ +export interface GameModeRegion { + tier?: string; + idleLobbies?: Rivet.cloud.version.matchmaker.GameModeIdleLobbiesConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDocker.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDocker.ts new file mode 100644 index 0000000000..dd4717afdc --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDocker.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * A game mode runtime running through Docker. + */ +export interface GameModeRuntimeDocker { + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + dockerfile?: string; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + buildArgs?: Record; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + image?: string; + imageId?: string; + args?: string[]; + env?: Record; + networkMode?: Rivet.cloud.version.matchmaker.NetworkMode; + ports?: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDockerPort.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDockerPort.ts new file mode 100644 index 0000000000..2f43129766 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDockerPort.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * Port config for a docker build. + */ +export interface GameModeRuntimeDockerPort { + /** + * The port number to connect to. + * + * ### Related - cloud.version.matchmaker.PortProtocol - cloud.version.matchmaker.ProxyKind + */ + port?: number; + portRange?: Rivet.cloud.version.matchmaker.PortRange; + protocol?: Rivet.cloud.version.matchmaker.PortProtocol; + /** How this port should be proxied. Defaults to 'game-guard`. */ + proxy?: Rivet.cloud.version.matchmaker.ProxyKind; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + devPort?: number; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + devPortRange?: Rivet.cloud.version.matchmaker.PortRange; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + devProtocol?: Rivet.cloud.version.matchmaker.PortProtocol; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeVerificationConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeVerificationConfig.ts new file mode 100644 index 0000000000..3407b1a1a6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeVerificationConfig.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * 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. + */ +export interface GameModeVerificationConfig { + url: string; + headers: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/index.ts new file mode 100644 index 0000000000..724ddf9090 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/index.ts @@ -0,0 +1,11 @@ +export * from "./GameMode"; +export * from "./GameModeRegion"; +export * from "./GameModeRuntimeDocker"; +export * from "./GameModeRuntimeDockerPort"; +export * from "./GameModeIdleLobbiesConfig"; +export * from "./GameModeActions"; +export * from "./GameModeIdentityRequirement"; +export * from "./GameModeVerificationConfig"; +export * from "./GameModeFindConfig"; +export * from "./GameModeJoinConfig"; +export * from "./GameModeCreateConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroup.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroup.ts new file mode 100644 index 0000000000..9d0268a2f8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroup.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * A game mode. + */ +export interface LobbyGroup { + /** + * **Deprecated: use GameMode instead** + * 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. + */ + nameId: string; + /** A list of game mode regions. */ + regions: Rivet.cloud.version.matchmaker.LobbyGroupRegion[]; + /** Unsigned 32 bit integer. */ + maxPlayersNormal: number; + /** Unsigned 32 bit integer. */ + maxPlayersDirect: number; + /** Unsigned 32 bit integer. */ + maxPlayersParty: number; + runtime: Rivet.cloud.version.matchmaker.LobbyGroupRuntime; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupIdleLobbiesConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupIdleLobbiesConfig.ts new file mode 100644 index 0000000000..364fb464a6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupIdleLobbiesConfig.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * **Deprecated: use GameMode instead** + * Configuration for how many idle lobbies a game version should have. + */ +export interface LobbyGroupIdleLobbiesConfig { + /** Unsigned 32 bit integer. */ + minIdleLobbies: number; + /** Unsigned 32 bit integer. */ + maxIdleLobbies: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRegion.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRegion.ts new file mode 100644 index 0000000000..b014573de9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRegion.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * **Deprecated: use GameMode instead** + * A game mode region. + */ +export interface LobbyGroupRegion { + regionId: string; + /** 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. */ + tierNameId: string; + idleLobbies?: Rivet.cloud.version.matchmaker.LobbyGroupIdleLobbiesConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntime.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntime.ts new file mode 100644 index 0000000000..4770be0fa9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntime.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * **Deprecated: use GameMode instead** + * A union representing the runtime a game mode runs on. + */ +export interface LobbyGroupRuntime { + docker?: Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDocker; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDocker.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDocker.ts new file mode 100644 index 0000000000..524c4646c9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDocker.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * **Deprecated: use GameMode instead** + * A game mode runtime running through Docker. + */ +export interface LobbyGroupRuntimeDocker { + buildId?: string; + args: string[]; + envVars: Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDockerEnvVar[]; + networkMode?: Rivet.cloud.version.matchmaker.NetworkMode; + ports: Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDockerPort[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerEnvVar.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerEnvVar.ts new file mode 100644 index 0000000000..43613ddebe --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerEnvVar.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * **Deprecated: use GameMode instead** + * A docker environment variable. + */ +export interface LobbyGroupRuntimeDockerEnvVar { + key: string; + value: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort.ts new file mode 100644 index 0000000000..8b578d4cb7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../../../index"; + +/** + * **Deprecated: use GameMode instead** + * A docker port. + */ +export interface LobbyGroupRuntimeDockerPort { + /** The label of this docker port. */ + label: string; + /** The port number to connect to. */ + targetPort?: number; + portRange?: Rivet.cloud.version.matchmaker.PortRange; + proxyProtocol: Rivet.cloud.version.matchmaker.PortProtocol; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/index.ts new file mode 100644 index 0000000000..ced14a2af5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/index.ts @@ -0,0 +1,7 @@ +export * from "./LobbyGroup"; +export * from "./LobbyGroupRuntime"; +export * from "./LobbyGroupRegion"; +export * from "./LobbyGroupRuntimeDocker"; +export * from "./LobbyGroupRuntimeDockerEnvVar"; +export * from "./LobbyGroupRuntimeDockerPort"; +export * from "./LobbyGroupIdleLobbiesConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/types/MatchmakerConfig.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/types/MatchmakerConfig.ts new file mode 100644 index 0000000000..69a286da9c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/types/MatchmakerConfig.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../../../index"; + +/** + * Matchmaker configuration for a given version. + */ +export interface MatchmakerConfig { + /** A list of game modes. */ + gameModes?: Record; + captcha?: Rivet.cloud.version.matchmaker.Captcha; + /** _Configures Rivet CLI behavior. Has no effect on server behavior._ */ + devHostname?: string; + regions?: Record; + maxPlayers?: number; + maxPlayersDirect?: number; + maxPlayersParty?: number; + docker?: Rivet.cloud.version.matchmaker.GameModeRuntimeDocker; + tier?: string; + idleLobbies?: Rivet.cloud.version.matchmaker.GameModeIdleLobbiesConfig; + /** + * **Deprecated: use `game_modes` instead** + * A list of game modes. + */ + lobbyGroups?: Rivet.cloud.version.matchmaker.LobbyGroup[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/types/index.ts new file mode 100644 index 0000000000..51fa298c3c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/resources/matchmaker/types/index.ts @@ -0,0 +1 @@ +export * from "./MatchmakerConfig"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Config.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Config.ts new file mode 100644 index 0000000000..e99582a480 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Config.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * Cloud configuration for a given version. + */ +export interface Config { + scripts?: Record; + engine?: Rivet.cloud.version.engine.EngineConfig; + cdn?: Rivet.cloud.version.cdn.CdnConfig; + matchmaker?: Rivet.cloud.version.matchmaker.MatchmakerConfig; + kv?: Rivet.cloud.version.kv.KvConfig; + identity?: Rivet.cloud.version.identity.IdentityConfig; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Full.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Full.ts new file mode 100644 index 0000000000..ce38083741 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Full.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A full version. + */ +export interface Full { + versionId: string; + createTs: Rivet.Timestamp; + displayName: Rivet.DisplayName; + config: Rivet.cloud.version.Config; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Summary.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Summary.ts new file mode 100644 index 0000000000..876774d916 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/Summary.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A version summary. + */ +export interface Summary { + versionId: string; + createTs: Rivet.Timestamp; + displayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/index.ts new file mode 100644 index 0000000000..ab57cdad09 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/resources/version/types/index.ts @@ -0,0 +1,3 @@ +export * from "./Config"; +export * from "./Full"; +export * from "./Summary"; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapAccess.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapAccess.ts new file mode 100644 index 0000000000..d50137bdb3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapAccess.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BootstrapAccess = "public" | "private" | "development"; + +export const BootstrapAccess = { + Public: "public", + Private: "private", + Development: "development", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCaptcha.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCaptcha.ts new file mode 100644 index 0000000000..8dc5a026c4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCaptcha.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface BootstrapCaptcha { + turnstile?: Rivet.cloud.BootstrapCaptchaTurnstile; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCaptchaTurnstile.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCaptchaTurnstile.ts new file mode 100644 index 0000000000..14682dcb2f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCaptchaTurnstile.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface BootstrapCaptchaTurnstile { + siteKey: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCluster.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCluster.ts new file mode 100644 index 0000000000..07d449e737 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapCluster.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * The type of cluster that the backend is currently running. + */ +export type BootstrapCluster = "enterprise" | "oss"; + +export const BootstrapCluster = { + Enterprise: "enterprise", + Oss: "oss", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapDomains.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapDomains.ts new file mode 100644 index 0000000000..9f53606d0b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapDomains.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Domains that host parts of Rivet + */ +export interface BootstrapDomains { + cdn?: string; + job?: string; + main?: string; + opengb?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapLoginMethods.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapLoginMethods.ts new file mode 100644 index 0000000000..1917716f11 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapLoginMethods.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface BootstrapLoginMethods { + email: boolean; + accessToken?: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapOrigins.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapOrigins.ts new file mode 100644 index 0000000000..70b960d42a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapOrigins.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Origins used to build URLs from + */ +export interface BootstrapOrigins { + hub: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapResponse.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapResponse.ts new file mode 100644 index 0000000000..aecfbfd064 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/BootstrapResponse.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface BootstrapResponse { + cluster: Rivet.cloud.BootstrapCluster; + access: Rivet.cloud.BootstrapAccess; + domains: Rivet.cloud.BootstrapDomains; + origins: Rivet.cloud.BootstrapOrigins; + captcha: Rivet.cloud.BootstrapCaptcha; + loginMethods: Rivet.cloud.BootstrapLoginMethods; + deployHash: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/cloud/types/index.ts b/sdks/api/full/typescript/src/api/resources/cloud/types/index.ts new file mode 100644 index 0000000000..73c144b622 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/cloud/types/index.ts @@ -0,0 +1,8 @@ +export * from "./BootstrapResponse"; +export * from "./BootstrapCluster"; +export * from "./BootstrapAccess"; +export * from "./BootstrapDomains"; +export * from "./BootstrapOrigins"; +export * from "./BootstrapCaptcha"; +export * from "./BootstrapCaptchaTurnstile"; +export * from "./BootstrapLoginMethods"; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/AccountNumber.ts b/sdks/api/full/typescript/src/api/resources/common/types/AccountNumber.ts new file mode 100644 index 0000000000..d2d1f255b5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/AccountNumber.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AccountNumber = number; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/Bio.ts b/sdks/api/full/typescript/src/api/resources/common/types/Bio.ts new file mode 100644 index 0000000000..06a38f872e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/Bio.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Follows regex ^(?:[^\n\r]+\n?|\n){1,5}$ + */ +export type Bio = string; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/DisplayName.ts b/sdks/api/full/typescript/src/api/resources/common/types/DisplayName.ts new file mode 100644 index 0000000000..1baa23f256 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/DisplayName.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Represent a resource's readable display name. + */ +export type DisplayName = string; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/Email.ts b/sdks/api/full/typescript/src/api/resources/common/types/Email.ts new file mode 100644 index 0000000000..a8de243f34 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/Email.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A valid email address + */ +export type Email = string; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/EmptyObject.ts b/sdks/api/full/typescript/src/api/resources/common/types/EmptyObject.ts new file mode 100644 index 0000000000..f2cffa648e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/EmptyObject.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface EmptyObject {} diff --git a/sdks/api/full/typescript/src/api/resources/common/types/ErrorBody.ts b/sdks/api/full/typescript/src/api/resources/common/types/ErrorBody.ts new file mode 100644 index 0000000000..dd97458572 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/ErrorBody.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ErrorBody { + code: string; + message: string; + rayId: string; + documentation?: string; + metadata?: Rivet.ErrorMetadata | undefined; +} diff --git a/sdks/api/full/typescript/src/api/resources/common/types/ErrorMetadata.ts b/sdks/api/full/typescript/src/api/resources/common/types/ErrorMetadata.ts new file mode 100644 index 0000000000..d236d1f19d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/ErrorMetadata.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Unstructured metadata relating to an error. Must be manually parsed. + */ +export type ErrorMetadata = unknown; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/GlobalEventNotification.ts b/sdks/api/full/typescript/src/api/resources/common/types/GlobalEventNotification.ts new file mode 100644 index 0000000000..d598c4612b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/GlobalEventNotification.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GlobalEventNotification { + title: string; + description: string; + thumbnailUrl: string; + url: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/common/types/Identifier.ts b/sdks/api/full/typescript/src/api/resources/common/types/Identifier.ts new file mode 100644 index 0000000000..616b2523d0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/Identifier.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * 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. + */ +export type Identifier = string; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/Jwt.ts b/sdks/api/full/typescript/src/api/resources/common/types/Jwt.ts new file mode 100644 index 0000000000..f2ef4c535d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/Jwt.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Documentation at https://jwt.io/ + */ +export type Jwt = string; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/Timestamp.ts b/sdks/api/full/typescript/src/api/resources/common/types/Timestamp.ts new file mode 100644 index 0000000000..44f4eb6858 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/Timestamp.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * RFC3339 timestamp + */ +export type Timestamp = Date; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/ValidationError.ts b/sdks/api/full/typescript/src/api/resources/common/types/ValidationError.ts new file mode 100644 index 0000000000..a63ada56f0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/ValidationError.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * An error given by failed content validation. + */ +export interface ValidationError { + /** A list of strings denoting the origin of a validation error. */ + path: string[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/common/types/WatchQuery.ts b/sdks/api/full/typescript/src/api/resources/common/types/WatchQuery.ts new file mode 100644 index 0000000000..bc04c4b7ed --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/WatchQuery.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A query parameter denoting the requests watch index. + */ +export type WatchQuery = string | undefined; diff --git a/sdks/api/full/typescript/src/api/resources/common/types/WatchResponse.ts b/sdks/api/full/typescript/src/api/resources/common/types/WatchResponse.ts new file mode 100644 index 0000000000..9b74a009b3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/WatchResponse.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Provided by watchable endpoints used in blocking loops. + */ +export interface WatchResponse { + /** + * Index indicating the version of the data responded. + * Pass this to `WatchQuery` to block and wait for the next response. + */ + index: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/common/types/index.ts new file mode 100644 index 0000000000..2247fadcf1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/common/types/index.ts @@ -0,0 +1,14 @@ +export * from "./Identifier"; +export * from "./Bio"; +export * from "./Email"; +export * from "./Jwt"; +export * from "./WatchQuery"; +export * from "./WatchResponse"; +export * from "./DisplayName"; +export * from "./AccountNumber"; +export * from "./Timestamp"; +export * from "./GlobalEventNotification"; +export * from "./ValidationError"; +export * from "./EmptyObject"; +export * from "./ErrorMetadata"; +export * from "./ErrorBody"; diff --git a/sdks/api/full/typescript/src/api/resources/coreIntercom/client/Client.ts b/sdks/api/full/typescript/src/api/resources/coreIntercom/client/Client.ts new file mode 100644 index 0000000000..7bdac13cf0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/coreIntercom/client/Client.ts @@ -0,0 +1,40 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import { Pegboard } from "../resources/pegboard/client/Client"; + +export declare namespace CoreIntercom { + interface Options { + environment?: core.Supplier; + token?: core.Supplier; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + fetcher?: core.FetchFunction; + } + + interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + } +} + +export class CoreIntercom { + constructor(protected readonly _options: CoreIntercom.Options = {}) {} + + protected _pegboard: Pegboard | undefined; + + public get pegboard(): Pegboard { + return (this._pegboard ??= new Pegboard(this._options)); + } +} diff --git a/sdks/api/full/typescript/src/api/resources/coreIntercom/client/index.ts b/sdks/api/full/typescript/src/api/resources/coreIntercom/client/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/coreIntercom/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/sdks/api/full/typescript/src/api/resources/coreIntercom/index.ts b/sdks/api/full/typescript/src/api/resources/coreIntercom/index.ts new file mode 100644 index 0000000000..33a87f1001 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/coreIntercom/index.ts @@ -0,0 +1,2 @@ +export * from "./client"; +export * from "./resources"; diff --git a/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/index.ts b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/index.ts new file mode 100644 index 0000000000..ff1f1c5be9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/index.ts @@ -0,0 +1 @@ +export * as pegboard from "./pegboard"; diff --git a/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/client/Client.ts b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/client/Client.ts new file mode 100644 index 0000000000..4162e590be --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/client/Client.ts @@ -0,0 +1,172 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../../../environments"; +import * as core from "../../../../../../core"; +import * as Rivet from "../../../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../../../errors/index"; +import * as serializers from "../../../../../../serialization/index"; + +export declare namespace Pegboard { + interface Options { + environment?: core.Supplier; + token?: core.Supplier; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + fetcher?: core.FetchFunction; + } + + interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + } +} + +export class Pegboard { + constructor(protected readonly _options: Pegboard.Options = {}) {} + + /** + * @param {string} clientId + * @param {Pegboard.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Rivet.InternalError} + * @throws {@link Rivet.RateLimitError} + * @throws {@link Rivet.ForbiddenError} + * @throws {@link Rivet.UnauthorizedError} + * @throws {@link Rivet.NotFoundError} + * @throws {@link Rivet.BadRequestError} + * + * @example + * await client.coreIntercom.pegboard.markClientRegistered("d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32") + */ + public async markClientRegistered(clientId: string, requestOptions?: Pegboard.RequestOptions): Promise { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.environment)) ?? environments.RivetEnvironment.Production, + `/pegboard/client/${encodeURIComponent(clientId)}/registered` + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-API-Version": requestOptions?.xApiVersion ?? this._options?.xApiVersion ?? "25.1.0-rc.1", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 180000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 500: + throw new Rivet.InternalError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 429: + throw new Rivet.RateLimitError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 403: + throw new Rivet.ForbiddenError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 408: + throw new Rivet.UnauthorizedError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 404: + throw new Rivet.NotFoundError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 400: + throw new Rivet.BadRequestError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + default: + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + }); + case "timeout": + throw new errors.RivetTimeoutError( + "Timeout exceeded when calling POST /pegboard/client/{client_id}/registered." + ); + case "unknown": + throw new errors.RivetError({ + message: _response.error.errorMessage, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + const bearer = await core.Supplier.get(this._options.token); + if (bearer != null) { + return `Bearer ${bearer}`; + } + + return undefined; + } +} diff --git a/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/client/index.ts b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/client/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/index.ts b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/index.ts new file mode 100644 index 0000000000..5ec76921e1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/coreIntercom/resources/pegboard/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/client/Client.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/client/Client.ts new file mode 100644 index 0000000000..8177290354 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/client/Client.ts @@ -0,0 +1,40 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import { Pegboard } from "../resources/pegboard/client/Client"; + +export declare namespace EdgeIntercom { + interface Options { + environment?: core.Supplier; + token?: core.Supplier; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + fetcher?: core.FetchFunction; + } + + interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + } +} + +export class EdgeIntercom { + constructor(protected readonly _options: EdgeIntercom.Options = {}) {} + + protected _pegboard: Pegboard | undefined; + + public get pegboard(): Pegboard { + return (this._pegboard ??= new Pegboard(this._options)); + } +} diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/client/index.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/client/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/index.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/index.ts new file mode 100644 index 0000000000..4ce0f39077 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/index.ts @@ -0,0 +1,2 @@ +export * from "./resources"; +export * from "./client"; diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/index.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/index.ts new file mode 100644 index 0000000000..ff1f1c5be9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/index.ts @@ -0,0 +1 @@ +export * as pegboard from "./pegboard"; diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/client/Client.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/client/Client.ts new file mode 100644 index 0000000000..538e303e0c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/client/Client.ts @@ -0,0 +1,319 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../../../environments"; +import * as core from "../../../../../../core"; +import * as Rivet from "../../../../../index"; +import * as serializers from "../../../../../../serialization/index"; +import urlJoin from "url-join"; +import * as errors from "../../../../../../errors/index"; + +export declare namespace Pegboard { + interface Options { + environment?: core.Supplier; + token?: core.Supplier; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + fetcher?: core.FetchFunction; + } + + interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + /** Override the X-API-Version header */ + xApiVersion?: "25.1.0-rc.1"; + } +} + +export class Pegboard { + constructor(protected readonly _options: Pegboard.Options = {}) {} + + /** + * @param {string} imageId + * @param {Rivet.edgeIntercom.pegboard.PrewarmImageRequest} request + * @param {Pegboard.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Rivet.InternalError} + * @throws {@link Rivet.RateLimitError} + * @throws {@link Rivet.ForbiddenError} + * @throws {@link Rivet.UnauthorizedError} + * @throws {@link Rivet.NotFoundError} + * @throws {@link Rivet.BadRequestError} + * + * @example + * await client.edgeIntercom.pegboard.prewarmImage("d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", { + * imageArtifactUrlStub: "string" + * }) + */ + public async prewarmImage( + imageId: string, + request: Rivet.edgeIntercom.pegboard.PrewarmImageRequest, + requestOptions?: Pegboard.RequestOptions + ): Promise { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.environment)) ?? environments.RivetEnvironment.Production, + `/pegboard/image/${encodeURIComponent(imageId)}/prewarm` + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-API-Version": requestOptions?.xApiVersion ?? this._options?.xApiVersion ?? "25.1.0-rc.1", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: serializers.edgeIntercom.pegboard.PrewarmImageRequest.jsonOrThrow(request, { + unrecognizedObjectKeys: "strip", + }), + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 180000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 500: + throw new Rivet.InternalError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 429: + throw new Rivet.RateLimitError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 403: + throw new Rivet.ForbiddenError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 408: + throw new Rivet.UnauthorizedError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 404: + throw new Rivet.NotFoundError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 400: + throw new Rivet.BadRequestError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + default: + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + }); + case "timeout": + throw new errors.RivetTimeoutError( + "Timeout exceeded when calling POST /pegboard/image/{image_id}/prewarm." + ); + case "unknown": + throw new errors.RivetError({ + message: _response.error.errorMessage, + }); + } + } + + /** + * @param {string} clientId + * @param {Rivet.edgeIntercom.pegboard.ToggleClientDrainRequest} request + * @param {Pegboard.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Rivet.InternalError} + * @throws {@link Rivet.RateLimitError} + * @throws {@link Rivet.ForbiddenError} + * @throws {@link Rivet.UnauthorizedError} + * @throws {@link Rivet.NotFoundError} + * @throws {@link Rivet.BadRequestError} + * + * @example + * await client.edgeIntercom.pegboard.toggleClientDrain("d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", { + * draining: true, + * drainCompleteTs: "2024-01-15T09:30:00Z" + * }) + */ + public async toggleClientDrain( + clientId: string, + request: Rivet.edgeIntercom.pegboard.ToggleClientDrainRequest, + requestOptions?: Pegboard.RequestOptions + ): Promise { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.environment)) ?? environments.RivetEnvironment.Production, + `/pegboard/client/${encodeURIComponent(clientId)}/toggle-drain` + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-API-Version": requestOptions?.xApiVersion ?? this._options?.xApiVersion ?? "25.1.0-rc.1", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: serializers.edgeIntercom.pegboard.ToggleClientDrainRequest.jsonOrThrow(request, { + unrecognizedObjectKeys: "strip", + }), + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 180000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 500: + throw new Rivet.InternalError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 429: + throw new Rivet.RateLimitError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 403: + throw new Rivet.ForbiddenError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 408: + throw new Rivet.UnauthorizedError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 404: + throw new Rivet.NotFoundError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 400: + throw new Rivet.BadRequestError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + default: + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + }); + case "timeout": + throw new errors.RivetTimeoutError( + "Timeout exceeded when calling POST /pegboard/client/{client_id}/toggle-drain." + ); + case "unknown": + throw new errors.RivetError({ + message: _response.error.errorMessage, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + const bearer = await core.Supplier.get(this._options.token); + if (bearer != null) { + return `Bearer ${bearer}`; + } + + return undefined; + } +} diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/client/index.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/client/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/index.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/index.ts new file mode 100644 index 0000000000..c9240f83b4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/PrewarmImageRequest.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/PrewarmImageRequest.ts new file mode 100644 index 0000000000..2ed27ceac5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/PrewarmImageRequest.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PrewarmImageRequest { + imageArtifactUrlStub: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/ToggleClientDrainRequest.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/ToggleClientDrainRequest.ts new file mode 100644 index 0000000000..2680d9c5cb --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/ToggleClientDrainRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ToggleClientDrainRequest { + draining: boolean; + drainCompleteTs?: Rivet.Timestamp; +} diff --git a/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/index.ts b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/index.ts new file mode 100644 index 0000000000..15de136ddb --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/edgeIntercom/resources/pegboard/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PrewarmImageRequest"; +export * from "./ToggleClientDrainRequest"; diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/GameSummary.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/GameSummary.ts new file mode 100644 index 0000000000..7498a2a39c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/GameSummary.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GameSummary { + gameId: string; + nameId: Rivet.Identifier; + displayName: Rivet.DisplayName; + /** The URL of this game's logo image. */ + logoUrl?: string; + /** The URL of this game's banner image. */ + bannerUrl?: string; + url: string; + developer: Rivet.group.Handle; + /** Unsigned 32 bit integer. */ + totalPlayerCount: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Handle.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Handle.ts new file mode 100644 index 0000000000..290a1806c1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Handle.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Handle { + gameId: string; + nameId: Rivet.Identifier; + displayName: Rivet.DisplayName; + /** The URL of this game's logo image. */ + logoUrl?: string; + /** The URL of this game's banner image. */ + bannerUrl?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/LeaderboardCategory.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/LeaderboardCategory.ts new file mode 100644 index 0000000000..6ec1169f0a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/LeaderboardCategory.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A game leaderboard category. + */ +export interface LeaderboardCategory { + displayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/PlatformLink.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/PlatformLink.ts new file mode 100644 index 0000000000..9e4da18048 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/PlatformLink.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A platform link denoting a supported platform. + */ +export interface PlatformLink { + displayName: Rivet.DisplayName; + /** The URL to the given game's method of distribution on this platform. */ + url: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Profile.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Profile.ts new file mode 100644 index 0000000000..d6f5801aae --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Profile.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A game profile. + */ +export interface Profile { + gameId: string; + /** 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. */ + nameId: string; + displayName: Rivet.DisplayName; + /** The URL of this game's logo image. */ + logoUrl?: string; + /** The URL of this game's banner image. */ + bannerUrl?: string; + /** The URL to this game's website. */ + url: string; + developer: Rivet.group.GroupSummary; + /** A list of game tags. */ + tags: string[]; + /** A description of the given game. */ + description: string; + /** A list of platform links. */ + platforms: Rivet.game.PlatformLink[]; + /** A list of group summaries. */ + recommendedGroups: Rivet.group.GroupSummary[]; + /** A list of game leaderboard categories. */ + identityLeaderboardCategories: Rivet.game.LeaderboardCategory[]; + /** A list of game leaderboard categories. */ + groupLeaderboardCategories: Rivet.game.LeaderboardCategory[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Stat.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Stat.ts new file mode 100644 index 0000000000..c0adf9d0c2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/Stat.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A game statistic. + */ +export interface Stat { + config: Rivet.game.StatConfig; + /** A single overall value of the given statistic. */ + overallValue: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatAggregationMethod.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatAggregationMethod.ts new file mode 100644 index 0000000000..32d322d617 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatAggregationMethod.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A value denoting the aggregation method of a game statistic. + */ +export type StatAggregationMethod = + /** + * Summation aggregation. */ + | "sum" + /** + * Average aggregation. */ + | "average" + /** + * Minimum value aggregation. */ + | "min" + /** + * Maximum value aggregation. */ + | "max"; + +export const StatAggregationMethod = { + Sum: "sum", + Average: "average", + Min: "min", + Max: "max", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatConfig.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatConfig.ts new file mode 100644 index 0000000000..06034f0a46 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatConfig.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A game statistic config. + */ +export interface StatConfig { + recordId: string; + iconId: string; + format: Rivet.game.StatFormatMethod; + aggregation: Rivet.game.StatAggregationMethod; + sorting: Rivet.game.StatSortingMethod; + priority: number; + displayName: Rivet.DisplayName; + /** A string appended to the end of a singular game statistic's value. Example: 1 **dollar**. */ + postfixSingular?: string; + /** A string appended to the end of a game statistic's value that is not exactly 1. Example: 45 **dollars**. */ + postfixPlural?: string; + /** A string appended to the beginning of a singular game statistic's value. Example: **value** 1. */ + prefixSingular?: string; + /** A string prepended to the beginning of a game statistic's value that is not exactly 1. Example: **values** 45. */ + prefixPlural?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatFormatMethod.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatFormatMethod.ts new file mode 100644 index 0000000000..db7dbb6587 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatFormatMethod.ts @@ -0,0 +1,39 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A value denoting the format method of a game statistic. + */ +export type StatFormatMethod = + /** + * An integer with no decimals (1,234). */ + | "integer" + /** + * A float with 1 decimal (1,234.5). */ + | "float_1" + /** + * A float with 2 decimals (1,234.56). */ + | "float_2" + /** + * A float with 3 decimals (1,234.567). */ + | "float_3" + /** + * A duration with minute precision (1d 2h 45m). */ + | "duration_minute" + /** + * A duration with second precision (1d 2h 45m 21s). */ + | "duration_second" + /** + * A duration with hundredth-second precision (1d 2h 45m 21.46s). It is important to notice that this custom format is not a standard way to define Enums in OpenAPI and it will be not understood by the majority of tools that parse OpenAPI files. It is important to check with the tools or libraries that you are using to make sure they support this custom format. */ + | "duration_hundredth_second"; + +export const StatFormatMethod = { + Integer: "integer", + Float1: "float_1", + Float2: "float_2", + Float3: "float_3", + DurationMinute: "duration_minute", + DurationSecond: "duration_second", + DurationHundredthSecond: "duration_hundredth_second", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatSortingMethod.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatSortingMethod.ts new file mode 100644 index 0000000000..98627ab83b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatSortingMethod.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A value denoting the sorting method of a game statistic. + */ +export type StatSortingMethod = + /** + * Descending sorting. */ + | "desc" + /** + * Ascending sorting. */ + | "asc"; + +export const StatSortingMethod = { + Desc: "desc", + Asc: "asc", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatSummary.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatSummary.ts new file mode 100644 index 0000000000..ebbc1d00c7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/StatSummary.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A game statistic summary. + */ +export interface StatSummary { + game: Rivet.game.Handle; + stats: Rivet.game.Stat[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/game/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/index.ts new file mode 100644 index 0000000000..0041c79492 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/game/resources/common/types/index.ts @@ -0,0 +1,11 @@ +export * from "./Handle"; +export * from "./GameSummary"; +export * from "./Profile"; +export * from "./PlatformLink"; +export * from "./LeaderboardCategory"; +export * from "./StatSummary"; +export * from "./Stat"; +export * from "./StatConfig"; +export * from "./StatFormatMethod"; +export * from "./StatAggregationMethod"; +export * from "./StatSortingMethod"; diff --git a/sdks/api/full/typescript/src/api/resources/games/resources/environments/resources/tokens/types/CreateServiceTokenResponse.ts b/sdks/api/full/typescript/src/api/resources/games/resources/environments/resources/tokens/types/CreateServiceTokenResponse.ts new file mode 100644 index 0000000000..c513b103a6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/games/resources/environments/resources/tokens/types/CreateServiceTokenResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateServiceTokenResponse { + /** A JSON Web Token. */ + token: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/games/resources/environments/resources/tokens/types/index.ts b/sdks/api/full/typescript/src/api/resources/games/resources/environments/resources/tokens/types/index.ts new file mode 100644 index 0000000000..9c6f5a3f0f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/games/resources/environments/resources/tokens/types/index.ts @@ -0,0 +1 @@ +export * from "./CreateServiceTokenResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/Coord.ts b/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/Coord.ts new file mode 100644 index 0000000000..30efaf6eb9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/Coord.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Geographical coordinates for a location on Planet Earth. + */ +export interface Coord { + latitude: number; + longitude: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/Distance.ts b/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/Distance.ts new file mode 100644 index 0000000000..2775c9cc42 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/Distance.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Distance available in multiple units. + */ +export interface Distance { + kilometers: number; + miles: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/index.ts new file mode 100644 index 0000000000..9bedc827df --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/geo/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./Coord"; +export * from "./Distance"; diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/BannedIdentity.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/BannedIdentity.ts new file mode 100644 index 0000000000..914bec756c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/BannedIdentity.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A banned identity. + */ +export interface BannedIdentity { + identity: Rivet.identity.Handle; + banTs: Rivet.Timestamp; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/ExternalLinks.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/ExternalLinks.ts new file mode 100644 index 0000000000..77aab4b39d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/ExternalLinks.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * External links for this group. + */ +export interface ExternalLinks { + /** A link to this group's profile page. */ + profile: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/GroupSummary.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/GroupSummary.ts new file mode 100644 index 0000000000..0b3bcad850 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/GroupSummary.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GroupSummary { + groupId: string; + displayName: Rivet.DisplayName; + /** The URL of this group's avatar image. */ + avatarUrl?: string; + external: Rivet.group.ExternalLinks; + /** + * **Deprecated** + * Whether or not this group is a developer. + */ + isDeveloper: boolean; + bio: Rivet.Bio; + /** Whether or not the current identity is a member of this group. */ + isCurrentIdentityMember: boolean; + publicity: Rivet.group.Publicity; + memberCount: number; + ownerIdentityId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Handle.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Handle.ts new file mode 100644 index 0000000000..3cd012146f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Handle.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A group handle. + */ +export interface Handle { + groupId: string; + displayName: Rivet.DisplayName; + /** The URL of this group's avatar image */ + avatarUrl?: string; + external: Rivet.group.ExternalLinks; + /** Whether or not this group is a developer group. */ + isDeveloper?: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/JoinRequest.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/JoinRequest.ts new file mode 100644 index 0000000000..d3aeff851b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/JoinRequest.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A group join request. + */ +export interface JoinRequest { + identity: Rivet.identity.Handle; + ts: Rivet.Timestamp; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Member.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Member.ts new file mode 100644 index 0000000000..ab99678cab --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Member.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A group member. + */ +export interface Member { + identity: Rivet.identity.Handle; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Profile.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Profile.ts new file mode 100644 index 0000000000..aa495a72d6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Profile.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A list of group profiles. + */ +export interface Profile { + groupId: string; + displayName: Rivet.DisplayName; + /** The URL of this group's avatar image. */ + avatarUrl?: string; + external: Rivet.group.ExternalLinks; + /** Whether or not this group is a developer. */ + isDeveloper?: boolean; + /** Detailed information about a profile. */ + bio: string; + /** Whether or not the current identity is a member of this group. */ + isCurrentIdentityMember?: boolean; + publicity: Rivet.group.Publicity; + /** Unsigned 32 bit integer. */ + memberCount?: number; + /** A list of group members. */ + members: Rivet.group.Member[]; + /** A list of group join requests. */ + joinRequests: Rivet.group.JoinRequest[]; + /** Whether or not the current identity is currently requesting to join this group. */ + isCurrentIdentityRequestingJoin?: boolean; + ownerIdentityId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Publicity.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Publicity.ts new file mode 100644 index 0000000000..d218ed823b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/Publicity.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * The current publicity value for the given group. + */ +export type Publicity = "open" | "closed"; + +export const Publicity = { + Open: "open", + Closed: "closed", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/index.ts new file mode 100644 index 0000000000..1973d736c4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/common/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GroupSummary"; +export * from "./Publicity"; +export * from "./Handle"; +export * from "./ExternalLinks"; +export * from "./JoinRequest"; +export * from "./Member"; +export * from "./Profile"; +export * from "./BannedIdentity"; diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/ConsumeInviteResponse.ts b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/ConsumeInviteResponse.ts new file mode 100644 index 0000000000..c1b91c79f2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/ConsumeInviteResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ConsumeInviteResponse { + groupId?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/CreateInviteRequest.ts b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/CreateInviteRequest.ts new file mode 100644 index 0000000000..ac016726d5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/CreateInviteRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateInviteRequest { + /** How long until the group invite expires (in milliseconds). */ + ttl?: number; + /** How many times the group invite can be used. */ + useCount?: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/CreateInviteResponse.ts b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/CreateInviteResponse.ts new file mode 100644 index 0000000000..24d74c310b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/CreateInviteResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateInviteResponse { + /** The code that will be passed to `rivet.api.group#ConsumeInvite` to join a group. */ + code: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/GetInviteResponse.ts b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/GetInviteResponse.ts new file mode 100644 index 0000000000..c182b6d209 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/GetInviteResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetInviteResponse { + group: Rivet.group.Handle; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/index.ts b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/index.ts new file mode 100644 index 0000000000..f8a24bc37f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/invites/types/index.ts @@ -0,0 +1,4 @@ +export * from "./GetInviteResponse"; +export * from "./ConsumeInviteResponse"; +export * from "./CreateInviteRequest"; +export * from "./CreateInviteResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/joinRequests/types/ResolveJoinRequestRequest.ts b/sdks/api/full/typescript/src/api/resources/group/resources/joinRequests/types/ResolveJoinRequestRequest.ts new file mode 100644 index 0000000000..c9ce9e72fa --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/joinRequests/types/ResolveJoinRequestRequest.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ResolveJoinRequestRequest { + resolution?: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/resources/joinRequests/types/index.ts b/sdks/api/full/typescript/src/api/resources/group/resources/joinRequests/types/index.ts new file mode 100644 index 0000000000..1bb524e650 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/resources/joinRequests/types/index.ts @@ -0,0 +1 @@ +export * from "./ResolveJoinRequestRequest"; diff --git a/sdks/api/full/typescript/src/api/resources/group/types/CreateRequest.ts b/sdks/api/full/typescript/src/api/resources/group/types/CreateRequest.ts new file mode 100644 index 0000000000..cdfa3e0024 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/CreateRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateRequest { + displayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/CreateResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/CreateResponse.ts new file mode 100644 index 0000000000..f6347a548e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/CreateResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateResponse { + groupId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/GetBansResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/GetBansResponse.ts new file mode 100644 index 0000000000..e9264de0c0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/GetBansResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetBansResponse { + /** A list of banned group members. */ + bannedIdentities: Rivet.group.BannedIdentity[]; + /** The pagination anchor. */ + anchor?: string; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/GetJoinRequestsResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/GetJoinRequestsResponse.ts new file mode 100644 index 0000000000..ff93fa5a5c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/GetJoinRequestsResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetJoinRequestsResponse { + /** A list of group join requests. */ + joinRequests: Rivet.group.JoinRequest[]; + /** The pagination anchor. */ + anchor?: string; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/GetMembersResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/GetMembersResponse.ts new file mode 100644 index 0000000000..3015846962 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/GetMembersResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetMembersResponse { + /** A list of group members. */ + members: Rivet.group.Member[]; + /** The pagination anchor. */ + anchor?: string; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/GetProfileResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/GetProfileResponse.ts new file mode 100644 index 0000000000..889bf8ed2c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/GetProfileResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetProfileResponse { + group: Rivet.group.Profile; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/GetSummaryResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/GetSummaryResponse.ts new file mode 100644 index 0000000000..1b626a7682 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/GetSummaryResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetSummaryResponse { + group: Rivet.group.GroupSummary; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/ListSuggestedResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/ListSuggestedResponse.ts new file mode 100644 index 0000000000..0902f598d4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/ListSuggestedResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ListSuggestedResponse { + /** A list of group summaries. */ + groups: Rivet.group.GroupSummary[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/PrepareAvatarUploadRequest.ts b/sdks/api/full/typescript/src/api/resources/group/types/PrepareAvatarUploadRequest.ts new file mode 100644 index 0000000000..b54a6bf5fb --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/PrepareAvatarUploadRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PrepareAvatarUploadRequest { + /** The path/filename of the group avatar. */ + path: string; + /** The MIME type of the group avatar. */ + mime?: string; + /** Unsigned 64 bit integer. */ + contentLength: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/PrepareAvatarUploadResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/PrepareAvatarUploadResponse.ts new file mode 100644 index 0000000000..f70f01c918 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/PrepareAvatarUploadResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface PrepareAvatarUploadResponse { + uploadId: string; + presignedRequest: Rivet.upload.PresignedRequest; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/TransferOwnershipRequest.ts b/sdks/api/full/typescript/src/api/resources/group/types/TransferOwnershipRequest.ts new file mode 100644 index 0000000000..15a5e1b744 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/TransferOwnershipRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface TransferOwnershipRequest { + /** + * Identity to transfer the group to. + * Must be a member of the group. + */ + newOwnerIdentityId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/UpdateProfileRequest.ts b/sdks/api/full/typescript/src/api/resources/group/types/UpdateProfileRequest.ts new file mode 100644 index 0000000000..1bb7ff7d13 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/UpdateProfileRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface UpdateProfileRequest { + displayName?: Rivet.DisplayName; + /** Detailed information about a profile. */ + bio?: string; + publicity?: Rivet.group.Publicity; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/ValidateProfileRequest.ts b/sdks/api/full/typescript/src/api/resources/group/types/ValidateProfileRequest.ts new file mode 100644 index 0000000000..1989645707 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/ValidateProfileRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ValidateProfileRequest { + displayName?: Rivet.DisplayName; + bio?: Rivet.DisplayName; + publicity?: Rivet.group.Publicity; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/ValidateProfileResponse.ts b/sdks/api/full/typescript/src/api/resources/group/types/ValidateProfileResponse.ts new file mode 100644 index 0000000000..1fbe5f6b4d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/ValidateProfileResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ValidateProfileResponse { + /** A list of validation errors. */ + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/group/types/index.ts b/sdks/api/full/typescript/src/api/resources/group/types/index.ts new file mode 100644 index 0000000000..bbb5c4b821 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/group/types/index.ts @@ -0,0 +1,14 @@ +export * from "./ListSuggestedResponse"; +export * from "./CreateRequest"; +export * from "./CreateResponse"; +export * from "./PrepareAvatarUploadRequest"; +export * from "./PrepareAvatarUploadResponse"; +export * from "./ValidateProfileRequest"; +export * from "./ValidateProfileResponse"; +export * from "./GetBansResponse"; +export * from "./GetJoinRequestsResponse"; +export * from "./GetMembersResponse"; +export * from "./GetProfileResponse"; +export * from "./UpdateProfileRequest"; +export * from "./GetSummaryResponse"; +export * from "./TransferOwnershipRequest"; diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/activities/types/ListActivitiesResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/activities/types/ListActivitiesResponse.ts new file mode 100644 index 0000000000..78ca4c80e5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/activities/types/ListActivitiesResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListActivitiesResponse { + identities: Rivet.identity.Handle[]; + games: Rivet.game.GameSummary[]; + suggestedGroups: Rivet.group.GroupSummary[]; + suggestedPlayers: Rivet.identity.Handle[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/activities/types/index.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/activities/types/index.ts new file mode 100644 index 0000000000..9f3dd3a19e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/activities/types/index.ts @@ -0,0 +1 @@ +export * from "./ListActivitiesResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/DevState.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/DevState.ts new file mode 100644 index 0000000000..a0fb9c554b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/DevState.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * The state of the given identity's developer status. + */ +export type DevState = "inactive" | "pending" | "accepted"; + +export const DevState = { + Inactive: "inactive", + Pending: "pending", + Accepted: "accepted", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/EmailLinkedAccount.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/EmailLinkedAccount.ts new file mode 100644 index 0000000000..7c3b036c6d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/EmailLinkedAccount.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * An identity's linked email. + */ +export interface EmailLinkedAccount { + email: Rivet.Email; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/ExternalLinks.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/ExternalLinks.ts new file mode 100644 index 0000000000..323bd826b8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/ExternalLinks.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * External links for an identity. + */ +export interface ExternalLinks { + /** A link to this identity's profile page. */ + profile: string; + /** A link to the Rivet settings page. */ + settings?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GameActivity.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GameActivity.ts new file mode 100644 index 0000000000..59817c71af --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GameActivity.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * The game an identity is currently participating in. + */ +export interface GameActivity { + game: Rivet.game.Handle; + /** A short activity message about the current game activity. */ + message: string; + /** JSON data seen by anyone. */ + publicMetadata?: unknown; + /** JSON data seen only by the given identity and their mutual followers. */ + mutualMetadata?: unknown; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GameLinkStatus.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GameLinkStatus.ts new file mode 100644 index 0000000000..82e1a97216 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GameLinkStatus.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type GameLinkStatus = "incomplete" | "complete" | "cancelled"; + +export const GameLinkStatus = { + Incomplete: "incomplete", + Complete: "complete", + Cancelled: "cancelled", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEvent.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEvent.ts new file mode 100644 index 0000000000..d6efb35ec3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEvent.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * An event relevant to the current identity. + */ +export interface GlobalEvent { + ts: Rivet.Timestamp; + kind: Rivet.identity.GlobalEventKind; + notification?: Rivet.identity.GlobalEventNotification; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventIdentityUpdate.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventIdentityUpdate.ts new file mode 100644 index 0000000000..ace8d189ee --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventIdentityUpdate.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GlobalEventIdentityUpdate { + identity: Rivet.identity.Profile; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventKind.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventKind.ts new file mode 100644 index 0000000000..3d08bc15b4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventKind.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GlobalEventKind { + identityUpdate?: Rivet.identity.GlobalEventIdentityUpdate; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventNotification.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventNotification.ts new file mode 100644 index 0000000000..ef46168e77 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/GlobalEventNotification.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Notifications represent information that should be presented to the user + * immediately. + * At the moment, only chat message events have associated notifications. + * + * # Display + * + * Notifications should be displayed in an unobtrusive manner throughout the + * entire game. Notifications should disappear after a few seconds if not + * interacted with. + * + * # Interactions + * + * If your platform supports it, notifications should be able to be clicked or + * tapped in order to open the relevant context for the event. + * For a simple implementation of notification interactions, open `url` in a + * web browser to present the relevant context. For example, a chat message + * notification will open the thread the chat message was sent in. + * For advanced implementations that implement a custom chat UI, use + * `GlobalEvent.kind` to determine what action to take when the notification is interacted with. + * For example, if the global event kind is `GlobalEventChatMessage`, then open + * the chat UI for the given thread. + */ +export interface GlobalEventNotification { + title: string; + description: string; + /** URL to an image thumbnail that should be shown for this notification. */ + thumbnailUrl: string; + /** Rivet Hub URL that holds the relevant context for this notification. */ + url: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Group.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Group.ts new file mode 100644 index 0000000000..2c3bf84886 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Group.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A group that the given identity. + */ +export interface Group { + group: Rivet.group.Handle; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Handle.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Handle.ts new file mode 100644 index 0000000000..1c90232b0d --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Handle.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * An identity handle. + */ +export interface Handle { + identityId: string; + displayName: Rivet.DisplayName; + accountNumber: Rivet.AccountNumber; + /** The URL of this identity's avatar image. */ + avatarUrl: string; + /** Whether or not this identity is registered with a linked account. */ + isRegistered: boolean; + external: Rivet.identity.ExternalLinks; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/LinkedAccount.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/LinkedAccount.ts new file mode 100644 index 0000000000..441bd7cf93 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/LinkedAccount.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A union representing an identity's linked accounts. + */ +export interface LinkedAccount { + email?: Rivet.identity.EmailLinkedAccount; + defaultUser?: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Profile.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Profile.ts new file mode 100644 index 0000000000..2119ff50fa --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Profile.ts @@ -0,0 +1,42 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * An identity profile. + */ +export interface Profile { + identityId: string; + displayName: Rivet.DisplayName; + accountNumber: Rivet.AccountNumber; + /** The URL of this identity's avatar image. */ + avatarUrl: string; + /** Whether or not this identity is registered with a linked account. */ + isRegistered: boolean; + external: Rivet.identity.ExternalLinks; + /** Whether or not this identity is an admin. */ + isAdmin: boolean; + /** Whether or not this game user has been linked through the Rivet dashboard. */ + isGameLinked?: boolean; + /** **Deprecated** */ + devState?: Rivet.identity.DevState; + followerCount: number; + followingCount: number; + /** Whether or not the requestee's identity is following this identity. */ + following: boolean; + /** Whether or not this identity is both following and is followed by the requestee's identity. */ + isFollowingMe: boolean; + isMutualFollowing: boolean; + joinTs: Rivet.Timestamp; + bio: Rivet.Bio; + linkedAccounts: Rivet.identity.LinkedAccount[]; + groups: Rivet.identity.Group[]; + games: Rivet.game.StatSummary[]; + /** + * Whether or not this identity is awaiting account deletion. Only visible to when the requestee is + * this identity. + */ + awaitingDeletion?: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Status.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Status.ts new file mode 100644 index 0000000000..f14d664d42 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Status.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * The current status of an identity. This helps players understand if another player is currently playing or has their game in the background. + */ +export type Status = "online" | "away" | "offline"; + +export const Status = { + Online: "online", + Away: "away", + Offline: "offline", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Summary.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Summary.ts new file mode 100644 index 0000000000..77c50ee443 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/Summary.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * An identity summary. + */ +export interface Summary { + identityId: string; + displayName: Rivet.DisplayName; + accountNumber: Rivet.AccountNumber; + /** The URL of this identity's avatar image. */ + avatarUrl: string; + /** Whether or not this identity is registered with a linked account. */ + isRegistered: boolean; + external: Rivet.identity.ExternalLinks; + /** Whether or not the requestee's identity is following this identity. */ + following: boolean; + /** Whether or not this identity is both following and is followed by the requestee's identity. */ + isFollowingMe: boolean; + isMutualFollowing: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/UpdateGameActivity.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/UpdateGameActivity.ts new file mode 100644 index 0000000000..5b099bc820 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/UpdateGameActivity.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Information about the identity's current game. This is information that all other identities can see about what the current identity is doing. + */ +export interface UpdateGameActivity { + /** A short message about the current game activity. */ + message?: string; + /** JSON data seen by anyone. */ + publicMetadata?: unknown; + /** JSON data seen only by the given identity and their mutual followers. */ + mutualMetadata?: unknown; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/index.ts new file mode 100644 index 0000000000..cc2fa3d534 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/common/types/index.ts @@ -0,0 +1,16 @@ +export * from "./GlobalEvent"; +export * from "./GlobalEventKind"; +export * from "./GlobalEventNotification"; +export * from "./GlobalEventIdentityUpdate"; +export * from "./UpdateGameActivity"; +export * from "./Handle"; +export * from "./Summary"; +export * from "./Profile"; +export * from "./ExternalLinks"; +export * from "./Status"; +export * from "./GameActivity"; +export * from "./Group"; +export * from "./LinkedAccount"; +export * from "./EmailLinkedAccount"; +export * from "./DevState"; +export * from "./GameLinkStatus"; diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/events/types/WatchEventsResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/events/types/WatchEventsResponse.ts new file mode 100644 index 0000000000..623a47a5ce --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/events/types/WatchEventsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface WatchEventsResponse { + events: Rivet.identity.GlobalEvent[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/resources/events/types/index.ts b/sdks/api/full/typescript/src/api/resources/identity/resources/events/types/index.ts new file mode 100644 index 0000000000..85124e8f72 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/resources/events/types/index.ts @@ -0,0 +1 @@ +export * from "./WatchEventsResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/identity/types/GetHandlesResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/types/GetHandlesResponse.ts new file mode 100644 index 0000000000..587544cbae --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/types/GetHandlesResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetHandlesResponse { + identities: Rivet.identity.Handle[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/types/GetProfileResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/types/GetProfileResponse.ts new file mode 100644 index 0000000000..cfc43a0016 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/types/GetProfileResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetProfileResponse { + identity: Rivet.identity.Profile; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/types/GetSummariesResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/types/GetSummariesResponse.ts new file mode 100644 index 0000000000..72c599d114 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/types/GetSummariesResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetSummariesResponse { + identities: Rivet.identity.Summary[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/types/PrepareAvatarUploadResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/types/PrepareAvatarUploadResponse.ts new file mode 100644 index 0000000000..f70f01c918 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/types/PrepareAvatarUploadResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface PrepareAvatarUploadResponse { + uploadId: string; + presignedRequest: Rivet.upload.PresignedRequest; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/types/SetupResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/types/SetupResponse.ts new file mode 100644 index 0000000000..6de20de582 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/types/SetupResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface SetupResponse { + /** + * Token used to authenticate the identity. + * Should be stored somewhere permanent. + * Pass this to `rivet.api.identity#Setup$existing_identity_token` next time `rivet.api.identity#Setup` is called. + * Token has a 90 day TTL. + * This means that if `rivet.api.identity#Setup` is not called again within 90 days, the token will no longer be valid. + * If this happens, the user can recover their account through the linking process (see `rivet.api.identity#PrepareGameLink`). + * This token should be stored locally and never sent to a server or another device. + * If this token is compromised, anyone with access to this token has control of the identity. + */ + identityToken: Rivet.Jwt; + identityTokenExpireTs: Rivet.Timestamp; + /** Information about the identity that was just authenticated. */ + identity: Rivet.identity.Profile; + gameId: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/types/ValidateProfileResponse.ts b/sdks/api/full/typescript/src/api/resources/identity/types/ValidateProfileResponse.ts new file mode 100644 index 0000000000..7938071be8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/types/ValidateProfileResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ValidateProfileResponse { + errors: Rivet.ValidationError[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/identity/types/index.ts b/sdks/api/full/typescript/src/api/resources/identity/types/index.ts new file mode 100644 index 0000000000..3a4306097a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/identity/types/index.ts @@ -0,0 +1,6 @@ +export * from "./SetupResponse"; +export * from "./GetProfileResponse"; +export * from "./GetHandlesResponse"; +export * from "./GetSummariesResponse"; +export * from "./ValidateProfileResponse"; +export * from "./PrepareAvatarUploadResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/index.ts b/sdks/api/full/typescript/src/api/resources/index.ts index 592ae70535..66ae86c999 100644 --- a/sdks/api/full/typescript/src/api/resources/index.ts +++ b/sdks/api/full/typescript/src/api/resources/index.ts @@ -1,5 +1,6 @@ export * as actor from "./actor"; export * as cloud from "./cloud"; +export * as edgeIntercom from "./edgeIntercom"; export * as group from "./group"; export * as identity from "./identity"; export * as provision from "./provision"; @@ -15,4 +16,5 @@ export * as matchmaker from "./matchmaker"; export * as portal from "./portal"; export * as upload from "./upload"; export * from "./common/errors"; +export * as coreIntercom from "./coreIntercom"; export * as job from "./job"; diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/CustomLobbyPublicity.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/CustomLobbyPublicity.ts new file mode 100644 index 0000000000..bc4b6f7af0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/CustomLobbyPublicity.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type CustomLobbyPublicity = "public" | "private"; + +export const CustomLobbyPublicity = { + Public: "public", + Private: "private", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/GameModeInfo.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/GameModeInfo.ts new file mode 100644 index 0000000000..6995a490ec --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/GameModeInfo.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A game mode that the player can join. + */ +export interface GameModeInfo { + gameModeId: Rivet.Identifier; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinLobby.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinLobby.ts new file mode 100644 index 0000000000..bf253efda7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinLobby.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A matchmaker lobby. + */ +export interface JoinLobby { + lobbyId: string; + region: Rivet.matchmaker.JoinRegion; + /** **Deprecated** */ + ports: Record; + /** **Deprecated** */ + player: Rivet.matchmaker.JoinPlayer; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPlayer.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPlayer.ts new file mode 100644 index 0000000000..f640d289ae --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPlayer.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A matchmaker lobby player. + */ +export interface JoinPlayer { + /** Pass this token through the socket to the lobby server. The lobby server will validate this token with `PlayerConnected.player_token` */ + token: Rivet.Jwt; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPort.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPort.ts new file mode 100644 index 0000000000..17a8dbdb4b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPort.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface JoinPort { + /** The host for the given port. Will be null if using a port range. */ + host?: string; + hostname: string; + /** The port number for this lobby. Will be null if using a port range. */ + port?: number; + portRange?: Rivet.matchmaker.JoinPortRange; + /** Whether or not this lobby port uses TLS. You cannot mix a non-TLS and TLS ports. */ + isTls: boolean; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPortRange.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPortRange.ts new file mode 100644 index 0000000000..ecb7e81ba2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinPortRange.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Inclusive range of ports that can be connected to. + */ +export interface JoinPortRange { + /** Minimum port that can be connected to. Inclusive range. */ + min: number; + /** Maximum port that can be connected to. Inclusive range. */ + max: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinRegion.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinRegion.ts new file mode 100644 index 0000000000..b4070ecfa4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/JoinRegion.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A matchmaker lobby region. + */ +export interface JoinRegion { + regionId: Rivet.Identifier; + displayName: Rivet.DisplayName; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/LobbyInfo.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/LobbyInfo.ts new file mode 100644 index 0000000000..31018c92d8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/LobbyInfo.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A public lobby in the lobby list. + */ +export interface LobbyInfo { + regionId: string; + gameModeId: string; + lobbyId: string; + maxPlayersNormal: number; + maxPlayersDirect: number; + maxPlayersParty: number; + totalPlayerCount: number; + state?: unknown; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/RegionInfo.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/RegionInfo.ts new file mode 100644 index 0000000000..8ed9a3cb6e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/RegionInfo.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +/** + * A region that the player can connect to. + */ +export interface RegionInfo { + regionId: Rivet.Identifier; + providerDisplayName: Rivet.DisplayName; + regionDisplayName: Rivet.DisplayName; + datacenterCoord: Rivet.geo.Coord; + datacenterDistanceFromClient: Rivet.geo.Distance; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/index.ts new file mode 100644 index 0000000000..5519ce0ef7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/common/types/index.ts @@ -0,0 +1,9 @@ +export * from "./LobbyInfo"; +export * from "./GameModeInfo"; +export * from "./RegionInfo"; +export * from "./JoinLobby"; +export * from "./JoinRegion"; +export * from "./JoinPort"; +export * from "./JoinPortRange"; +export * from "./JoinPlayer"; +export * from "./CustomLobbyPublicity"; diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/CreateLobbyResponse.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/CreateLobbyResponse.ts new file mode 100644 index 0000000000..9ec13da24f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/CreateLobbyResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface CreateLobbyResponse { + lobby: Rivet.matchmaker.JoinLobby; + ports: Record; + player: Rivet.matchmaker.JoinPlayer; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/FindLobbyResponse.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/FindLobbyResponse.ts new file mode 100644 index 0000000000..e32b79cae3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/FindLobbyResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface FindLobbyResponse { + lobby: Rivet.matchmaker.JoinLobby; + ports: Record; + player: Rivet.matchmaker.JoinPlayer; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/JoinLobbyResponse.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/JoinLobbyResponse.ts new file mode 100644 index 0000000000..06ec55d55b --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/JoinLobbyResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface JoinLobbyResponse { + lobby: Rivet.matchmaker.JoinLobby; + ports: Record; + player: Rivet.matchmaker.JoinPlayer; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/ListLobbiesResponse.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/ListLobbiesResponse.ts new file mode 100644 index 0000000000..fa234058bc --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/ListLobbiesResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListLobbiesResponse { + gameModes: Rivet.matchmaker.GameModeInfo[]; + regions: Rivet.matchmaker.RegionInfo[]; + lobbies: Rivet.matchmaker.LobbyInfo[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/index.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/index.ts new file mode 100644 index 0000000000..13491dd556 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/lobbies/types/index.ts @@ -0,0 +1,4 @@ +export * from "./FindLobbyResponse"; +export * from "./JoinLobbyResponse"; +export * from "./CreateLobbyResponse"; +export * from "./ListLobbiesResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/GameModeStatistics.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/GameModeStatistics.ts new file mode 100644 index 0000000000..42c7eef739 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/GameModeStatistics.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GameModeStatistics { + playerCount: number; + regions: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/GetStatisticsResponse.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/GetStatisticsResponse.ts new file mode 100644 index 0000000000..c14c2208fe --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/GetStatisticsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetStatisticsResponse { + playerCount: number; + gameModes: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/RegionStatistics.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/RegionStatistics.ts new file mode 100644 index 0000000000..bf547e60c4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/RegionStatistics.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface RegionStatistics { + playerCount: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/index.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/index.ts new file mode 100644 index 0000000000..e6a2666580 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/players/types/index.ts @@ -0,0 +1,3 @@ +export * from "./GetStatisticsResponse"; +export * from "./GameModeStatistics"; +export * from "./RegionStatistics"; diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/regions/types/ListRegionsResponse.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/regions/types/ListRegionsResponse.ts new file mode 100644 index 0000000000..f31f4c32f5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/regions/types/ListRegionsResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListRegionsResponse { + regions: Rivet.matchmaker.RegionInfo[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/matchmaker/resources/regions/types/index.ts b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/regions/types/index.ts new file mode 100644 index 0000000000..dd60cc81be --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/matchmaker/resources/regions/types/index.ts @@ -0,0 +1 @@ +export * from "./ListRegionsResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationRegisterFirebaseService.ts b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationRegisterFirebaseService.ts new file mode 100644 index 0000000000..244f239215 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationRegisterFirebaseService.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface NotificationRegisterFirebaseService { + accessKey: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationRegisterService.ts b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationRegisterService.ts new file mode 100644 index 0000000000..cd667b33a7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationRegisterService.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface NotificationRegisterService { + firebase?: Rivet.portal.NotificationRegisterFirebaseService; +} diff --git a/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationUnregisterService.ts b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationUnregisterService.ts new file mode 100644 index 0000000000..844ac8ad41 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/NotificationUnregisterService.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type NotificationUnregisterService = "firebase"; + +export const NotificationUnregisterService = { + Firebase: "firebase", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/index.ts new file mode 100644 index 0000000000..af64098ef7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/portal/resources/common/types/index.ts @@ -0,0 +1,3 @@ +export * from "./NotificationRegisterService"; +export * from "./NotificationRegisterFirebaseService"; +export * from "./NotificationUnregisterService"; diff --git a/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/GetGameProfileResponse.ts b/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/GetGameProfileResponse.ts new file mode 100644 index 0000000000..6f3b4e6ac4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/GetGameProfileResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetGameProfileResponse { + game: Rivet.game.Profile; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/GetSuggestedGamesResponse.ts b/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/GetSuggestedGamesResponse.ts new file mode 100644 index 0000000000..5ba828f010 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/GetSuggestedGamesResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetSuggestedGamesResponse { + /** A list of game summaries. */ + games: Rivet.game.GameSummary[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/index.ts b/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/index.ts new file mode 100644 index 0000000000..ffac3322f5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/portal/resources/games/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetSuggestedGamesResponse"; +export * from "./GetGameProfileResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/PoolType.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/PoolType.ts new file mode 100644 index 0000000000..dcc95850fa --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/PoolType.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type PoolType = "job" | "gg" | "ats" | "pegboard" | "pegboard_isolate" | "fdb"; + +export const PoolType = { + Job: "job", + Gg: "gg", + Ats: "ats", + Pegboard: "pegboard", + PegboardIsolate: "pegboard_isolate", + Fdb: "fdb", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/Server.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/Server.ts new file mode 100644 index 0000000000..42a0694432 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/Server.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Server { + serverId: string; + datacenterId: string; + poolType: Rivet.provision.PoolType; + lanIp?: string; + wanIp?: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/index.ts new file mode 100644 index 0000000000..a8fa543428 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PoolType"; +export * from "./Server"; diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/GetServersResponse.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/GetServersResponse.ts new file mode 100644 index 0000000000..0fabcc88c0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/GetServersResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetServersResponse { + servers: Rivet.provision.Server[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/GetTlsResponse.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/GetTlsResponse.ts new file mode 100644 index 0000000000..17095e5ba9 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/GetTlsResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GetTlsResponse { + jobCertPem: string; + jobPrivateKeyPem: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/index.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/index.ts new file mode 100644 index 0000000000..00625bc437 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/datacenters/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetTlsResponse"; +export * from "./GetServersResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/servers/types/GetInfoResponse.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/servers/types/GetInfoResponse.ts new file mode 100644 index 0000000000..759b5ad6e4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/servers/types/GetInfoResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GetInfoResponse { + name: string; + serverId: string; + datacenterId: string; + clusterId: string; + lanIp: string; + wanIp: string; + /** **Deprecated**: Use lan_ip */ + vlanIp: string; + /** **Deprecated**: Use wan_ip */ + publicIp: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/servers/types/index.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/servers/types/index.ts new file mode 100644 index 0000000000..f9b6ce198e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/servers/types/index.ts @@ -0,0 +1 @@ +export * from "./GetInfoResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/tunnel/types/GetTlsResponse.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/tunnel/types/GetTlsResponse.ts new file mode 100644 index 0000000000..9df508275e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/tunnel/types/GetTlsResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GetTlsResponse { + certPem: string; + rootCaCertPem: string; + privateKeyPem: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/provision/resources/tunnel/types/index.ts b/sdks/api/full/typescript/src/api/resources/provision/resources/tunnel/types/index.ts new file mode 100644 index 0000000000..19c6f682d2 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/provision/resources/tunnel/types/index.ts @@ -0,0 +1 @@ +export * from "./GetTlsResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/BuildCompression.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..df210e01c1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildCompression = + /** + * None compression. */ + | "none" + /** + * LZ4 compression. Use the minimum compression level. */ + | "lz4"; + +export const BuildCompression = { + None: "none", + Lz4: "lz4", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/BuildKind.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..ffa3b3387e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/BuildKind.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildKind = + /** + * Docker image archive generated by `docker save`. */ + | "docker_image" + /** + * OCI-compliant bundle. */ + | "oci_bundle"; + +export const BuildKind = { + DockerImage: "docker_image", + OciBundle: "oci_bundle", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/CreateBuildRequest.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/CreateBuildRequest.ts new file mode 100644 index 0000000000..399c579ed0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/CreateBuildRequest.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface CreateBuildRequest { + name: string; + /** A tag given to the game build. */ + imageTag: string; + imageFile: Rivet.upload.PrepareFile; + multipartUpload?: boolean; + kind?: Rivet.servers.BuildKind; + compression?: Rivet.servers.BuildCompression; + prewarmDatacenters?: string[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/CreateBuildResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/CreateBuildResponse.ts new file mode 100644 index 0000000000..ae23ab0df1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/CreateBuildResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface CreateBuildResponse { + build: string; + imagePresignedRequest?: Rivet.upload.PresignedRequest; + imagePresignedRequests?: Rivet.upload.PresignedRequest[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/GetBuildResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/GetBuildResponse.ts new file mode 100644 index 0000000000..d2032b5be3 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/GetBuildResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetBuildResponse { + build: Rivet.servers.Build; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/ListBuildsResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/ListBuildsResponse.ts new file mode 100644 index 0000000000..f6720f9ae1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/ListBuildsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListBuildsResponse { + /** A list of builds for the game associated with the token. */ + builds: Rivet.servers.Build[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/PatchBuildTagsRequest.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/PatchBuildTagsRequest.ts new file mode 100644 index 0000000000..48390f6ee6 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/PatchBuildTagsRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PatchBuildTagsRequest { + tags?: unknown; + /** Removes the given tag keys from all other builds. */ + exclusiveTags?: string[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/PatchBuildTagsResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/PatchBuildTagsResponse.ts new file mode 100644 index 0000000000..3b884f6442 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/PatchBuildTagsResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PatchBuildTagsResponse {} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/index.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/index.ts new file mode 100644 index 0000000000..41b8855737 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/builds/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetBuildResponse"; +export * from "./ListBuildsResponse"; +export * from "./PatchBuildTagsRequest"; +export * from "./PatchBuildTagsResponse"; +export * from "./CreateBuildRequest"; +export * from "./CreateBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Build.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Build.ts new file mode 100644 index 0000000000..eb4cdcc752 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Build.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Build { + id: string; + name: string; + createdAt: Rivet.Timestamp; + /** Unsigned 64 bit integer. */ + contentLength: number; + /** Tags of this build */ + tags: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Datacenter.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Datacenter.ts new file mode 100644 index 0000000000..c2e87d09a0 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Datacenter.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Datacenter { + id: string; + slug: string; + name: string; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/GameGuardRouting.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/GameGuardRouting.ts new file mode 100644 index 0000000000..7c0dd5eba1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/GameGuardRouting.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GameGuardRouting {} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/HostRouting.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/HostRouting.ts new file mode 100644 index 0000000000..cdd2164517 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/HostRouting.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface HostRouting {} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Lifecycle.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Lifecycle.ts new file mode 100644 index 0000000000..9dc5d7d76c --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Lifecycle.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Lifecycle { + /** 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. */ + killTimeout?: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Network.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Network.ts new file mode 100644 index 0000000000..2b301e9c4f --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Network.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Network { + mode?: Rivet.servers.NetworkMode; + ports: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/NetworkMode.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..692083122e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/NetworkMode.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type NetworkMode = "bridge" | "host"; + +export const NetworkMode = { + Bridge: "bridge", + Host: "host", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Port.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Port.ts new file mode 100644 index 0000000000..29ae32d847 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Port.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Port { + protocol: Rivet.servers.PortProtocol; + internalPort?: number; + publicHostname?: string; + publicPort?: number; + routing: Rivet.servers.PortRouting; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/PortProtocol.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..cafdb2e4de --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/PortProtocol.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type PortProtocol = "http" | "https" | "tcp" | "tcp_tls" | "udp"; + +export const PortProtocol = { + Http: "http", + Https: "https", + Tcp: "tcp", + TcpTls: "tcp_tls", + Udp: "udp", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/PortRouting.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/PortRouting.ts new file mode 100644 index 0000000000..a5bc2b903a --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/PortRouting.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface PortRouting { + gameGuard?: Rivet.servers.GameGuardRouting; + host?: Rivet.servers.HostRouting; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Resources.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Resources.ts new file mode 100644 index 0000000000..8255dc6705 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Resources.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Resources { + /** + * The number of CPU cores in millicores, or 1/1000 of a core. For example, + * 1/8 of a core would be 125 millicores, and 1 core would be 1000 + * millicores. + */ + cpu: number; + /** The amount of memory in megabytes */ + memory: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Runtime.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Runtime.ts new file mode 100644 index 0000000000..a918ef8387 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Runtime.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Runtime { + build: string; + arguments?: string[]; + environment?: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Server.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Server.ts new file mode 100644 index 0000000000..5c96a11568 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/Server.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Server { + id: string; + environment: string; + datacenter: string; + tags?: unknown; + runtime: Rivet.servers.Runtime; + network: Rivet.servers.Network; + resources: Rivet.servers.Resources; + lifecycle: Rivet.servers.Lifecycle; + createdAt: number; + startedAt?: number; + destroyedAt?: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/index.ts new file mode 100644 index 0000000000..22b3ebd8b8 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/common/types/index.ts @@ -0,0 +1,13 @@ +export * from "./Server"; +export * from "./Runtime"; +export * from "./Lifecycle"; +export * from "./Resources"; +export * from "./Network"; +export * from "./NetworkMode"; +export * from "./Port"; +export * from "./PortProtocol"; +export * from "./PortRouting"; +export * from "./GameGuardRouting"; +export * from "./HostRouting"; +export * from "./Build"; +export * from "./Datacenter"; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/datacenters/types/ListDatacentersResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/datacenters/types/ListDatacentersResponse.ts new file mode 100644 index 0000000000..6ff368d0cc --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/datacenters/types/ListDatacentersResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListDatacentersResponse { + datacenters: Rivet.servers.Datacenter[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/datacenters/types/index.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/datacenters/types/index.ts new file mode 100644 index 0000000000..ccc68f7435 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/datacenters/types/index.ts @@ -0,0 +1 @@ +export * from "./ListDatacentersResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/GetServerLogsResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/GetServerLogsResponse.ts new file mode 100644 index 0000000000..48a281d605 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/GetServerLogsResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetServerLogsResponse { + /** Sorted old to new. */ + lines: string[]; + /** Sorted old to new. */ + timestamps: string[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/LogStream.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/LogStream.ts new file mode 100644 index 0000000000..c8dd8fc0ad --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/LogStream.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type LogStream = "std_out" | "std_err"; + +export const LogStream = { + StdOut: "std_out", + StdErr: "std_err", +} as const; diff --git a/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/index.ts b/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/index.ts new file mode 100644 index 0000000000..9fbd91049e --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetServerLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerNetworkRequest.ts b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerNetworkRequest.ts new file mode 100644 index 0000000000..a806070fbd --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerNetworkRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateServerNetworkRequest { + mode?: Rivet.servers.NetworkMode; + ports: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerPortRequest.ts b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerPortRequest.ts new file mode 100644 index 0000000000..4b32a0dbc7 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerPortRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateServerPortRequest { + protocol: Rivet.servers.PortProtocol; + internalPort?: number; + routing?: Rivet.servers.PortRouting; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerRequest.ts b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerRequest.ts new file mode 100644 index 0000000000..36b84180d5 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerRequest.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateServerRequest { + datacenter: string; + tags?: unknown; + runtime: Rivet.servers.CreateServerRuntimeRequest; + network: Rivet.servers.CreateServerNetworkRequest; + resources: Rivet.servers.Resources; + lifecycle?: Rivet.servers.Lifecycle; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerResponse.ts new file mode 100644 index 0000000000..a5d131f3db --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateServerResponse { + /** The server that was created */ + server: Rivet.servers.Server; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerRuntimeRequest.ts b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerRuntimeRequest.ts new file mode 100644 index 0000000000..b5914337d1 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/CreateServerRuntimeRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateServerRuntimeRequest { + build: string; + arguments?: string[]; + environment?: Record; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/DestroyServerResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/types/DestroyServerResponse.ts new file mode 100644 index 0000000000..d1ce5711fe --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/DestroyServerResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DestroyServerResponse {} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/GetServerResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/types/GetServerResponse.ts new file mode 100644 index 0000000000..b516faf720 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/GetServerResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetServerResponse { + server: Rivet.servers.Server; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/ListServersResponse.ts b/sdks/api/full/typescript/src/api/resources/servers/types/ListServersResponse.ts new file mode 100644 index 0000000000..684acd3889 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/ListServersResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ListServersResponse { + /** A list of servers for the game associated with the token. */ + servers: Rivet.servers.Server[]; +} diff --git a/sdks/api/full/typescript/src/api/resources/servers/types/index.ts b/sdks/api/full/typescript/src/api/resources/servers/types/index.ts new file mode 100644 index 0000000000..f414130acd --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/servers/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetServerResponse"; +export * from "./CreateServerRequest"; +export * from "./CreateServerRuntimeRequest"; +export * from "./CreateServerNetworkRequest"; +export * from "./CreateServerPortRequest"; +export * from "./CreateServerResponse"; +export * from "./DestroyServerResponse"; +export * from "./ListServersResponse"; diff --git a/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/PrepareFile.ts b/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/PrepareFile.ts new file mode 100644 index 0000000000..8e048600ee --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/PrepareFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A file being prepared to upload. + */ +export interface PrepareFile { + /** The path/filename of the file. */ + path: string; + /** The MIME type of the file. */ + contentType?: string; + /** Unsigned 64 bit integer. */ + contentLength: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/PresignedRequest.ts b/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/PresignedRequest.ts new file mode 100644 index 0000000000..542bc3c5a4 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/PresignedRequest.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A presigned request used to upload files. Upload your file to the given URL via a PUT request. + */ +export interface PresignedRequest { + /** The name of the file to upload. This is the same as the one given in the upload prepare file. */ + path: string; + /** The URL of the presigned request for which to upload your file to. */ + url: string; + /** The byte offset for this multipart chunk. Always 0 if not a multipart upload. */ + byteOffset: number; + /** Expected size of this upload. */ + contentLength: number; +} diff --git a/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/index.ts b/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/index.ts new file mode 100644 index 0000000000..c950bbac53 --- /dev/null +++ b/sdks/api/full/typescript/src/api/resources/upload/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PresignedRequest"; +export * from "./PrepareFile"; diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/BuildCompression.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..d7295dd506 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const BuildCompression: core.serialization.Schema< + serializers.actor.BuildCompression.Raw, + Rivet.actor.BuildCompression +> = core.serialization.enum_(["none", "lz4"]); + +export declare namespace BuildCompression { + type Raw = "none" | "lz4"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/BuildKind.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..e92bedb40c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/BuildKind.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const BuildKind: core.serialization.Schema = + core.serialization.enum_(["docker_image", "oci_bundle", "javascript"]); + +export declare namespace BuildKind { + type Raw = "docker_image" | "oci_bundle" | "javascript"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/GetBuildResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/GetBuildResponse.ts new file mode 100644 index 0000000000..ad0991b6a9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/GetBuildResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Build } from "../../common/types/Build"; + +export const GetBuildResponse: core.serialization.ObjectSchema< + serializers.actor.GetBuildResponse.Raw, + Rivet.actor.GetBuildResponse +> = core.serialization.object({ + build: Build, +}); + +export declare namespace GetBuildResponse { + interface Raw { + build: Build.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/ListBuildsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/ListBuildsResponse.ts new file mode 100644 index 0000000000..6bf90e4c05 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/ListBuildsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Build } from "../../common/types/Build"; + +export const ListBuildsResponse: core.serialization.ObjectSchema< + serializers.actor.ListBuildsResponse.Raw, + Rivet.actor.ListBuildsResponse +> = core.serialization.object({ + builds: core.serialization.list(Build), +}); + +export declare namespace ListBuildsResponse { + interface Raw { + builds: Build.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts new file mode 100644 index 0000000000..7eb991101a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PatchBuildTagsRequest: core.serialization.ObjectSchema< + serializers.actor.PatchBuildTagsRequest.Raw, + Rivet.actor.PatchBuildTagsRequest +> = core.serialization.object({ + tags: core.serialization.unknown(), + exclusiveTags: core.serialization.property( + "exclusive_tags", + core.serialization.list(core.serialization.string()).optional() + ), +}); + +export declare namespace PatchBuildTagsRequest { + interface Raw { + tags?: unknown; + exclusive_tags?: string[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts new file mode 100644 index 0000000000..8310eab7f1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PatchBuildTagsResponse: core.serialization.ObjectSchema< + serializers.actor.PatchBuildTagsResponse.Raw, + Rivet.actor.PatchBuildTagsResponse +> = core.serialization.object({}); + +export declare namespace PatchBuildTagsResponse { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildRequest.ts new file mode 100644 index 0000000000..cc9f86ffa0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildRequest.ts @@ -0,0 +1,29 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PrepareFile } from "../../../../upload/resources/common/types/PrepareFile"; +import { BuildKind } from "./BuildKind"; +import { BuildCompression } from "./BuildCompression"; + +export const PrepareBuildRequest: core.serialization.ObjectSchema< + serializers.actor.PrepareBuildRequest.Raw, + Rivet.actor.PrepareBuildRequest +> = core.serialization.object({ + imageTag: core.serialization.property("image_tag", core.serialization.string().optional()), + imageFile: core.serialization.property("image_file", PrepareFile), + kind: BuildKind.optional(), + compression: BuildCompression.optional(), +}); + +export declare namespace PrepareBuildRequest { + interface Raw { + image_tag?: string | null; + image_file: PrepareFile.Raw; + kind?: BuildKind.Raw | null; + compression?: BuildCompression.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildResponse.ts new file mode 100644 index 0000000000..e6af29637c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PresignedRequest } from "../../../../upload/resources/common/types/PresignedRequest"; + +export const PrepareBuildResponse: core.serialization.ObjectSchema< + serializers.actor.PrepareBuildResponse.Raw, + Rivet.actor.PrepareBuildResponse +> = core.serialization.object({ + build: core.serialization.string(), + presignedRequests: core.serialization.property("presigned_requests", core.serialization.list(PresignedRequest)), +}); + +export declare namespace PrepareBuildResponse { + interface Raw { + build: string; + presigned_requests: PresignedRequest.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/index.ts new file mode 100644 index 0000000000..07f139fd9e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/builds/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetBuildResponse"; +export * from "./ListBuildsResponse"; +export * from "./PatchBuildTagsRequest"; +export * from "./PatchBuildTagsResponse"; +export * from "./PrepareBuildRequest"; +export * from "./PrepareBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Actor.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Actor.ts new file mode 100644 index 0000000000..3679eda7e5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Actor.ts @@ -0,0 +1,41 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Runtime } from "./Runtime"; +import { Network } from "./Network"; +import { Resources } from "./Resources"; +import { Lifecycle } from "./Lifecycle"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const Actor: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + region: core.serialization.string(), + tags: core.serialization.unknown(), + runtime: Runtime, + network: Network, + resources: Resources, + lifecycle: Lifecycle, + createdAt: core.serialization.property("created_at", Timestamp), + startedAt: core.serialization.property("started_at", Timestamp.optional()), + destroyedAt: core.serialization.property("destroyed_at", Timestamp.optional()), + }); + +export declare namespace Actor { + interface Raw { + id: string; + region: string; + tags?: unknown; + runtime: Runtime.Raw; + network: Network.Raw; + resources: Resources.Raw; + lifecycle: Lifecycle.Raw; + created_at: Timestamp.Raw; + started_at?: Timestamp.Raw | null; + destroyed_at?: Timestamp.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Build.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Build.ts new file mode 100644 index 0000000000..f7b1bf9a0e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Build.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const Build: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + name: core.serialization.string(), + createdAt: core.serialization.property("created_at", Timestamp), + contentLength: core.serialization.property("content_length", core.serialization.number()), + tags: core.serialization.record(core.serialization.string(), core.serialization.string()), + }); + +export declare namespace Build { + interface Raw { + id: string; + name: string; + created_at: Timestamp.Raw; + content_length: number; + tags: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/EndpointType.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/EndpointType.ts new file mode 100644 index 0000000000..76f1ea738d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/EndpointType.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const EndpointType: core.serialization.Schema = + core.serialization.enum_(["hostname", "path"]); + +export declare namespace EndpointType { + type Raw = "hostname" | "path"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/GuardRouting.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/GuardRouting.ts new file mode 100644 index 0000000000..9957acedb0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/GuardRouting.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GuardRouting: core.serialization.ObjectSchema< + serializers.actor.GuardRouting.Raw, + Rivet.actor.GuardRouting +> = core.serialization.object({}); + +export declare namespace GuardRouting { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/HostRouting.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/HostRouting.ts new file mode 100644 index 0000000000..560b74d780 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/HostRouting.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const HostRouting: core.serialization.ObjectSchema = + core.serialization.object({}); + +export declare namespace HostRouting { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Lifecycle.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Lifecycle.ts new file mode 100644 index 0000000000..25ba1c364d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Lifecycle.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Lifecycle: core.serialization.ObjectSchema = + core.serialization.object({ + killTimeout: core.serialization.property("kill_timeout", core.serialization.number().optional()), + durable: core.serialization.boolean().optional(), + }); + +export declare namespace Lifecycle { + interface Raw { + kill_timeout?: number | null; + durable?: boolean | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Network.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Network.ts new file mode 100644 index 0000000000..a6eb07afa1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Network.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { NetworkMode } from "./NetworkMode"; +import { Port } from "./Port"; + +export const Network: core.serialization.ObjectSchema = + core.serialization.object({ + mode: NetworkMode, + ports: core.serialization.record(core.serialization.string(), Port), + }); + +export declare namespace Network { + interface Raw { + mode: NetworkMode.Raw; + ports: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/NetworkMode.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..533c79ed44 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/NetworkMode.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const NetworkMode: core.serialization.Schema = + core.serialization.enum_(["bridge", "host"]); + +export declare namespace NetworkMode { + type Raw = "bridge" | "host"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Port.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Port.ts new file mode 100644 index 0000000000..e84caa6da0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Port.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PortProtocol } from "./PortProtocol"; +import { PortRouting } from "./PortRouting"; + +export const Port: core.serialization.ObjectSchema = + core.serialization.object({ + protocol: PortProtocol, + internalPort: core.serialization.property("internal_port", core.serialization.number().optional()), + hostname: core.serialization.string().optional(), + port: core.serialization.number().optional(), + path: core.serialization.string().optional(), + url: core.serialization.string().optional(), + routing: PortRouting, + }); + +export declare namespace Port { + interface Raw { + protocol: PortProtocol.Raw; + internal_port?: number | null; + hostname?: string | null; + port?: number | null; + path?: string | null; + url?: string | null; + routing: PortRouting.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/PortProtocol.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..9bfccdb03e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/PortProtocol.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PortProtocol: core.serialization.Schema = + core.serialization.enum_(["http", "https", "tcp", "tcp_tls", "udp"]); + +export declare namespace PortProtocol { + type Raw = "http" | "https" | "tcp" | "tcp_tls" | "udp"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/PortRouting.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/PortRouting.ts new file mode 100644 index 0000000000..1dfd5201c0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/PortRouting.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GuardRouting } from "./GuardRouting"; +import { HostRouting } from "./HostRouting"; + +export const PortRouting: core.serialization.ObjectSchema = + core.serialization.object({ + guard: GuardRouting.optional(), + host: HostRouting.optional(), + }); + +export declare namespace PortRouting { + interface Raw { + guard?: GuardRouting.Raw | null; + host?: HostRouting.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Region.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Region.ts new file mode 100644 index 0000000000..a319f0ee69 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Region.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Region: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + name: core.serialization.string(), + }); + +export declare namespace Region { + interface Raw { + id: string; + name: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Resources.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Resources.ts new file mode 100644 index 0000000000..01e66ee919 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Resources.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Resources: core.serialization.ObjectSchema = + core.serialization.object({ + cpu: core.serialization.number(), + memory: core.serialization.number(), + }); + +export declare namespace Resources { + interface Raw { + cpu: number; + memory: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Runtime.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Runtime.ts new file mode 100644 index 0000000000..4c05945029 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/Runtime.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Runtime: core.serialization.ObjectSchema = + core.serialization.object({ + build: core.serialization.string(), + arguments: core.serialization.list(core.serialization.string()).optional(), + environment: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), + }); + +export declare namespace Runtime { + interface Raw { + build: string; + arguments?: string[] | null; + environment?: Record | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/index.ts new file mode 100644 index 0000000000..71748c7636 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/common/types/index.ts @@ -0,0 +1,14 @@ +export * from "./Actor"; +export * from "./Runtime"; +export * from "./Lifecycle"; +export * from "./Resources"; +export * from "./Network"; +export * from "./NetworkMode"; +export * from "./Port"; +export * from "./PortProtocol"; +export * from "./PortRouting"; +export * from "./GuardRouting"; +export * from "./HostRouting"; +export * from "./EndpointType"; +export * from "./Build"; +export * from "./Region"; diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/GetActorLogsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/GetActorLogsResponse.ts new file mode 100644 index 0000000000..35562c96f7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/GetActorLogsResponse.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const GetActorLogsResponse: core.serialization.ObjectSchema< + serializers.actor.GetActorLogsResponse.Raw, + Rivet.actor.GetActorLogsResponse +> = core.serialization.object({ + lines: core.serialization.list(core.serialization.string()), + timestamps: core.serialization.list(Timestamp), + watch: WatchResponse, +}); + +export declare namespace GetActorLogsResponse { + interface Raw { + lines: string[]; + timestamps: Timestamp.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/LogStream.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/LogStream.ts new file mode 100644 index 0000000000..7676081e33 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/LogStream.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const LogStream: core.serialization.Schema = + core.serialization.enum_(["std_out", "std_err"]); + +export declare namespace LogStream { + type Raw = "std_out" | "std_err"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/index.ts new file mode 100644 index 0000000000..b7d3ce1ba2 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetActorLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/ListRegionsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/ListRegionsResponse.ts new file mode 100644 index 0000000000..63f4ea693c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/ListRegionsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Region } from "../../common/types/Region"; + +export const ListRegionsResponse: core.serialization.ObjectSchema< + serializers.actor.ListRegionsResponse.Raw, + Rivet.actor.ListRegionsResponse +> = core.serialization.object({ + regions: core.serialization.list(Region), +}); + +export declare namespace ListRegionsResponse { + interface Raw { + regions: Region.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/ResolveRegionResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/ResolveRegionResponse.ts new file mode 100644 index 0000000000..efcebd4407 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/ResolveRegionResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Region } from "../../common/types/Region"; + +export const ResolveRegionResponse: core.serialization.ObjectSchema< + serializers.actor.ResolveRegionResponse.Raw, + Rivet.actor.ResolveRegionResponse +> = core.serialization.object({ + region: Region, +}); + +export declare namespace ResolveRegionResponse { + interface Raw { + region: Region.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/index.ts new file mode 100644 index 0000000000..603d3091aa --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/resources/regions/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ListRegionsResponse"; +export * from "./ResolveRegionResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorNetworkRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorNetworkRequest.ts new file mode 100644 index 0000000000..b77b9391a3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorNetworkRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { NetworkMode } from "../resources/common/types/NetworkMode"; +import { CreateActorPortRequest } from "./CreateActorPortRequest"; + +export const CreateActorNetworkRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorNetworkRequest.Raw, + Rivet.actor.CreateActorNetworkRequest +> = core.serialization.object({ + mode: NetworkMode.optional(), + ports: core.serialization.record(core.serialization.string(), CreateActorPortRequest).optional(), +}); + +export declare namespace CreateActorNetworkRequest { + interface Raw { + mode?: NetworkMode.Raw | null; + ports?: Record | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorPortRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorPortRequest.ts new file mode 100644 index 0000000000..6fe88c3776 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorPortRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { PortProtocol } from "../resources/common/types/PortProtocol"; +import { PortRouting } from "../resources/common/types/PortRouting"; + +export const CreateActorPortRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorPortRequest.Raw, + Rivet.actor.CreateActorPortRequest +> = core.serialization.object({ + protocol: PortProtocol, + internalPort: core.serialization.property("internal_port", core.serialization.number().optional()), + routing: PortRouting.optional(), +}); + +export declare namespace CreateActorPortRequest { + interface Raw { + protocol: PortProtocol.Raw; + internal_port?: number | null; + routing?: PortRouting.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorRequest.ts new file mode 100644 index 0000000000..a8b7873c1b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorRequest.ts @@ -0,0 +1,38 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { CreateActorRuntimeRequest } from "./CreateActorRuntimeRequest"; +import { CreateActorNetworkRequest } from "./CreateActorNetworkRequest"; +import { Resources } from "../resources/common/types/Resources"; +import { Lifecycle } from "../resources/common/types/Lifecycle"; + +export const CreateActorRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorRequest.Raw, + Rivet.actor.CreateActorRequest +> = core.serialization.object({ + region: core.serialization.string().optional(), + tags: core.serialization.unknown(), + build: core.serialization.string().optional(), + buildTags: core.serialization.property("build_tags", core.serialization.unknown().optional()), + runtime: CreateActorRuntimeRequest.optional(), + network: CreateActorNetworkRequest.optional(), + resources: Resources.optional(), + lifecycle: Lifecycle.optional(), +}); + +export declare namespace CreateActorRequest { + interface Raw { + region?: string | null; + tags?: unknown; + build?: string | null; + build_tags?: unknown | null; + runtime?: CreateActorRuntimeRequest.Raw | null; + network?: CreateActorNetworkRequest.Raw | null; + resources?: Resources.Raw | null; + lifecycle?: Lifecycle.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorResponse.ts new file mode 100644 index 0000000000..0b460b8388 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Actor } from "../resources/common/types/Actor"; + +export const CreateActorResponse: core.serialization.ObjectSchema< + serializers.actor.CreateActorResponse.Raw, + Rivet.actor.CreateActorResponse +> = core.serialization.object({ + actor: Actor, +}); + +export declare namespace CreateActorResponse { + interface Raw { + actor: Actor.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorRuntimeRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorRuntimeRequest.ts new file mode 100644 index 0000000000..7d119db035 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/CreateActorRuntimeRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const CreateActorRuntimeRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorRuntimeRequest.Raw, + Rivet.actor.CreateActorRuntimeRequest +> = core.serialization.object({ + environment: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), +}); + +export declare namespace CreateActorRuntimeRequest { + interface Raw { + environment?: Record | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/DestroyActorResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/DestroyActorResponse.ts new file mode 100644 index 0000000000..f3d099b9c3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/DestroyActorResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const DestroyActorResponse: core.serialization.ObjectSchema< + serializers.actor.DestroyActorResponse.Raw, + Rivet.actor.DestroyActorResponse +> = core.serialization.object({}); + +export declare namespace DestroyActorResponse { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/GetActorResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/GetActorResponse.ts new file mode 100644 index 0000000000..2aff4a4676 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/GetActorResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Actor } from "../resources/common/types/Actor"; + +export const GetActorResponse: core.serialization.ObjectSchema< + serializers.actor.GetActorResponse.Raw, + Rivet.actor.GetActorResponse +> = core.serialization.object({ + actor: Actor, +}); + +export declare namespace GetActorResponse { + interface Raw { + actor: Actor.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/ListActorsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/ListActorsResponse.ts new file mode 100644 index 0000000000..93b573d618 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/ListActorsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Actor } from "../resources/common/types/Actor"; + +export const ListActorsResponse: core.serialization.ObjectSchema< + serializers.actor.ListActorsResponse.Raw, + Rivet.actor.ListActorsResponse +> = core.serialization.object({ + actors: core.serialization.list(Actor), +}); + +export declare namespace ListActorsResponse { + interface Raw { + actors: Actor.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeActorRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeActorRequest.ts new file mode 100644 index 0000000000..b443f01945 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeActorRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeActorRequest: core.serialization.ObjectSchema< + serializers.actor.UpgradeActorRequest.Raw, + Rivet.actor.UpgradeActorRequest +> = core.serialization.object({ + build: core.serialization.string().optional(), + buildTags: core.serialization.property("build_tags", core.serialization.unknown().optional()), +}); + +export declare namespace UpgradeActorRequest { + interface Raw { + build?: string | null; + build_tags?: unknown | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeActorResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeActorResponse.ts new file mode 100644 index 0000000000..13b1259e1d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeActorResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeActorResponse: core.serialization.ObjectSchema< + serializers.actor.UpgradeActorResponse.Raw, + Rivet.actor.UpgradeActorResponse +> = core.serialization.object({}); + +export declare namespace UpgradeActorResponse { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeAllActorsRequest.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeAllActorsRequest.ts new file mode 100644 index 0000000000..a074a1fa73 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeAllActorsRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeAllActorsRequest: core.serialization.ObjectSchema< + serializers.actor.UpgradeAllActorsRequest.Raw, + Rivet.actor.UpgradeAllActorsRequest +> = core.serialization.object({ + tags: core.serialization.unknown(), + build: core.serialization.string().optional(), + buildTags: core.serialization.property("build_tags", core.serialization.unknown().optional()), +}); + +export declare namespace UpgradeAllActorsRequest { + interface Raw { + tags?: unknown; + build?: string | null; + build_tags?: unknown | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeAllActorsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeAllActorsResponse.ts new file mode 100644 index 0000000000..0c9a015b3a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/UpgradeAllActorsResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeAllActorsResponse: core.serialization.ObjectSchema< + serializers.actor.UpgradeAllActorsResponse.Raw, + Rivet.actor.UpgradeAllActorsResponse +> = core.serialization.object({ + count: core.serialization.number(), +}); + +export declare namespace UpgradeAllActorsResponse { + interface Raw { + count: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/actor/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/actor/types/index.ts new file mode 100644 index 0000000000..d84d6cbd8b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/actor/types/index.ts @@ -0,0 +1,12 @@ +export * from "./GetActorResponse"; +export * from "./CreateActorRequest"; +export * from "./CreateActorRuntimeRequest"; +export * from "./CreateActorNetworkRequest"; +export * from "./CreateActorPortRequest"; +export * from "./CreateActorResponse"; +export * from "./DestroyActorResponse"; +export * from "./UpgradeActorRequest"; +export * from "./UpgradeActorResponse"; +export * from "./UpgradeAllActorsRequest"; +export * from "./UpgradeAllActorsResponse"; +export * from "./ListActorsResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/common/types/CompleteStatus.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/common/types/CompleteStatus.ts new file mode 100644 index 0000000000..0249a36603 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/common/types/CompleteStatus.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CompleteStatus: core.serialization.Schema = + core.serialization.enum_([ + "switch_identity", + "linked_account_added", + "already_complete", + "expired", + "too_many_attempts", + "incorrect", + ]); + +export declare namespace CompleteStatus { + type Raw = + | "switch_identity" + | "linked_account_added" + | "already_complete" + | "expired" + | "too_many_attempts" + | "incorrect"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/common/types/index.ts new file mode 100644 index 0000000000..1bee0a7444 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/common/types/index.ts @@ -0,0 +1 @@ +export * from "./CompleteStatus"; diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationRequest.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationRequest.ts new file mode 100644 index 0000000000..537c27a57d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CompleteEmailVerificationRequest: core.serialization.ObjectSchema< + serializers.auth.identity.CompleteEmailVerificationRequest.Raw, + Rivet.auth.identity.CompleteEmailVerificationRequest +> = core.serialization.object({ + verificationId: core.serialization.property("verification_id", core.serialization.string()), + code: core.serialization.string(), +}); + +export declare namespace CompleteEmailVerificationRequest { + interface Raw { + verification_id: string; + code: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationResponse.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationResponse.ts new file mode 100644 index 0000000000..aa6aa090ca --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/CompleteEmailVerificationResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { CompleteStatus } from "../../../../common/types/CompleteStatus"; + +export const CompleteEmailVerificationResponse: core.serialization.ObjectSchema< + serializers.auth.identity.CompleteEmailVerificationResponse.Raw, + Rivet.auth.identity.CompleteEmailVerificationResponse +> = core.serialization.object({ + status: CompleteStatus, +}); + +export declare namespace CompleteEmailVerificationResponse { + interface Raw { + status: CompleteStatus.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/StartEmailVerificationRequest.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/StartEmailVerificationRequest.ts new file mode 100644 index 0000000000..1def034429 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/StartEmailVerificationRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { Config } from "../../../../../../captcha/resources/config/types/Config"; + +export const StartEmailVerificationRequest: core.serialization.ObjectSchema< + serializers.auth.identity.StartEmailVerificationRequest.Raw, + Rivet.auth.identity.StartEmailVerificationRequest +> = core.serialization.object({ + email: core.serialization.string(), + captcha: Config.optional(), + gameId: core.serialization.property("game_id", core.serialization.string().optional()), +}); + +export declare namespace StartEmailVerificationRequest { + interface Raw { + email: string; + captcha?: Config.Raw | null; + game_id?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/StartEmailVerificationResponse.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/StartEmailVerificationResponse.ts new file mode 100644 index 0000000000..6dd6aa9c64 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/StartEmailVerificationResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const StartEmailVerificationResponse: core.serialization.ObjectSchema< + serializers.auth.identity.StartEmailVerificationResponse.Raw, + Rivet.auth.identity.StartEmailVerificationResponse +> = core.serialization.object({ + verificationId: core.serialization.property("verification_id", core.serialization.string()), +}); + +export declare namespace StartEmailVerificationResponse { + interface Raw { + verification_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/index.ts new file mode 100644 index 0000000000..6db43a8e3b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/identity/resources/email/types/index.ts @@ -0,0 +1,4 @@ +export * from "./StartEmailVerificationRequest"; +export * from "./StartEmailVerificationResponse"; +export * from "./CompleteEmailVerificationRequest"; +export * from "./CompleteEmailVerificationResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/RefreshIdentityTokenRequest.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/RefreshIdentityTokenRequest.ts new file mode 100644 index 0000000000..6462e1e4e0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/RefreshIdentityTokenRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const RefreshIdentityTokenRequest: core.serialization.ObjectSchema< + serializers.auth.RefreshIdentityTokenRequest.Raw, + Rivet.auth.RefreshIdentityTokenRequest +> = core.serialization.object({ + logout: core.serialization.boolean().optional(), +}); + +export declare namespace RefreshIdentityTokenRequest { + interface Raw { + logout?: boolean | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/RefreshIdentityTokenResponse.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/RefreshIdentityTokenResponse.ts new file mode 100644 index 0000000000..b365c53508 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/RefreshIdentityTokenResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const RefreshIdentityTokenResponse: core.serialization.ObjectSchema< + serializers.auth.RefreshIdentityTokenResponse.Raw, + Rivet.auth.RefreshIdentityTokenResponse +> = core.serialization.object({ + token: core.serialization.string(), + exp: core.serialization.string(), + identityId: core.serialization.property("identity_id", core.serialization.string()), +}); + +export declare namespace RefreshIdentityTokenResponse { + interface Raw { + token: string; + exp: string; + identity_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/index.ts new file mode 100644 index 0000000000..2e82e57714 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/auth/resources/tokens/types/index.ts @@ -0,0 +1,2 @@ +export * from "./RefreshIdentityTokenRequest"; +export * from "./RefreshIdentityTokenResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/Config.ts b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/Config.ts new file mode 100644 index 0000000000..19f2c18d11 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/Config.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { ConfigHcaptcha } from "./ConfigHcaptcha"; +import { ConfigTurnstile } from "./ConfigTurnstile"; + +export const Config: core.serialization.ObjectSchema = + core.serialization.object({ + hcaptcha: ConfigHcaptcha.optional(), + turnstile: ConfigTurnstile.optional(), + }); + +export declare namespace Config { + interface Raw { + hcaptcha?: ConfigHcaptcha.Raw | null; + turnstile?: ConfigTurnstile.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/ConfigHcaptcha.ts b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/ConfigHcaptcha.ts new file mode 100644 index 0000000000..9f82e146f6 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/ConfigHcaptcha.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const ConfigHcaptcha: core.serialization.ObjectSchema< + serializers.captcha.ConfigHcaptcha.Raw, + Rivet.captcha.ConfigHcaptcha +> = core.serialization.object({ + clientResponse: core.serialization.property("client_response", core.serialization.string()), +}); + +export declare namespace ConfigHcaptcha { + interface Raw { + client_response: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/ConfigTurnstile.ts b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/ConfigTurnstile.ts new file mode 100644 index 0000000000..fdb270007e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/ConfigTurnstile.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const ConfigTurnstile: core.serialization.ObjectSchema< + serializers.captcha.ConfigTurnstile.Raw, + Rivet.captcha.ConfigTurnstile +> = core.serialization.object({ + clientResponse: core.serialization.property("client_response", core.serialization.string()), +}); + +export declare namespace ConfigTurnstile { + interface Raw { + client_response: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/index.ts new file mode 100644 index 0000000000..e3d7f9330e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/captcha/resources/config/types/index.ts @@ -0,0 +1,3 @@ +export * from "./Config"; +export * from "./ConfigHcaptcha"; +export * from "./ConfigTurnstile"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/auth/types/InspectResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/auth/types/InspectResponse.ts new file mode 100644 index 0000000000..93ca2e5bf9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/auth/types/InspectResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { AuthAgent } from "../../common/types/AuthAgent"; + +export const InspectResponse: core.serialization.ObjectSchema< + serializers.cloud.InspectResponse.Raw, + Rivet.cloud.InspectResponse +> = core.serialization.object({ + agent: AuthAgent, +}); + +export declare namespace InspectResponse { + interface Raw { + agent: AuthAgent.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/auth/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/auth/types/index.ts new file mode 100644 index 0000000000..5f6b317b1f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/auth/types/index.ts @@ -0,0 +1 @@ +export * from "./InspectResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgent.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgent.ts new file mode 100644 index 0000000000..7e5670156a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgent.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { AuthAgentIdentity } from "./AuthAgentIdentity"; +import { AuthAgentGameCloud } from "./AuthAgentGameCloud"; + +export const AuthAgent: core.serialization.ObjectSchema = + core.serialization.object({ + identity: AuthAgentIdentity.optional(), + gameCloud: core.serialization.property("game_cloud", AuthAgentGameCloud.optional()), + }); + +export declare namespace AuthAgent { + interface Raw { + identity?: AuthAgentIdentity.Raw | null; + game_cloud?: AuthAgentGameCloud.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgentGameCloud.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgentGameCloud.ts new file mode 100644 index 0000000000..a31309587d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgentGameCloud.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const AuthAgentGameCloud: core.serialization.ObjectSchema< + serializers.cloud.AuthAgentGameCloud.Raw, + Rivet.cloud.AuthAgentGameCloud +> = core.serialization.object({ + gameId: core.serialization.property("game_id", core.serialization.string()), +}); + +export declare namespace AuthAgentGameCloud { + interface Raw { + game_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgentIdentity.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgentIdentity.ts new file mode 100644 index 0000000000..6139cb78ed --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/AuthAgentIdentity.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const AuthAgentIdentity: core.serialization.ObjectSchema< + serializers.cloud.AuthAgentIdentity.Raw, + Rivet.cloud.AuthAgentIdentity +> = core.serialization.object({ + identityId: core.serialization.property("identity_id", core.serialization.string()), +}); + +export declare namespace AuthAgentIdentity { + interface Raw { + identity_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/BuildSummary.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/BuildSummary.ts new file mode 100644 index 0000000000..d9986e8d36 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/BuildSummary.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const BuildSummary: core.serialization.ObjectSchema< + serializers.cloud.BuildSummary.Raw, + Rivet.cloud.BuildSummary +> = core.serialization.object({ + buildId: core.serialization.property("build_id", core.serialization.string()), + uploadId: core.serialization.property("upload_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + createTs: core.serialization.property("create_ts", Timestamp), + contentLength: core.serialization.property("content_length", core.serialization.number()), + complete: core.serialization.boolean(), + tags: core.serialization.record(core.serialization.string(), core.serialization.string()), +}); + +export declare namespace BuildSummary { + interface Raw { + build_id: string; + upload_id: string; + display_name: DisplayName.Raw; + create_ts: Timestamp.Raw; + content_length: number; + complete: boolean; + tags: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnAuthType.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnAuthType.ts new file mode 100644 index 0000000000..f0e398440c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnAuthType.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CdnAuthType: core.serialization.Schema = + core.serialization.enum_(["none", "basic"]); + +export declare namespace CdnAuthType { + type Raw = "none" | "basic"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceAuthUser.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceAuthUser.ts new file mode 100644 index 0000000000..ed610b4d44 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceAuthUser.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CdnNamespaceAuthUser: core.serialization.ObjectSchema< + serializers.cloud.CdnNamespaceAuthUser.Raw, + Rivet.cloud.CdnNamespaceAuthUser +> = core.serialization.object({ + user: core.serialization.string(), +}); + +export declare namespace CdnNamespaceAuthUser { + interface Raw { + user: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceConfig.ts new file mode 100644 index 0000000000..9d1afbd452 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceConfig.ts @@ -0,0 +1,29 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { CdnNamespaceDomain } from "./CdnNamespaceDomain"; +import { CdnAuthType } from "./CdnAuthType"; +import { CdnNamespaceAuthUser } from "./CdnNamespaceAuthUser"; + +export const CdnNamespaceConfig: core.serialization.ObjectSchema< + serializers.cloud.CdnNamespaceConfig.Raw, + Rivet.cloud.CdnNamespaceConfig +> = core.serialization.object({ + enableDomainPublicAuth: core.serialization.property("enable_domain_public_auth", core.serialization.boolean()), + domains: core.serialization.list(CdnNamespaceDomain), + authType: core.serialization.property("auth_type", CdnAuthType), + authUserList: core.serialization.property("auth_user_list", core.serialization.list(CdnNamespaceAuthUser)), +}); + +export declare namespace CdnNamespaceConfig { + interface Raw { + enable_domain_public_auth: boolean; + domains: CdnNamespaceDomain.Raw[]; + auth_type: CdnAuthType.Raw; + auth_user_list: CdnNamespaceAuthUser.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomain.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomain.ts new file mode 100644 index 0000000000..8be5e1a926 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomain.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { CdnNamespaceDomainVerificationStatus } from "./CdnNamespaceDomainVerificationStatus"; +import { CdnNamespaceDomainVerificationMethod } from "./CdnNamespaceDomainVerificationMethod"; + +export const CdnNamespaceDomain: core.serialization.ObjectSchema< + serializers.cloud.CdnNamespaceDomain.Raw, + Rivet.cloud.CdnNamespaceDomain +> = core.serialization.object({ + domain: core.serialization.string(), + createTs: core.serialization.property("create_ts", Timestamp), + verificationStatus: core.serialization.property("verification_status", CdnNamespaceDomainVerificationStatus), + verificationMethod: core.serialization.property("verification_method", CdnNamespaceDomainVerificationMethod), + verificationErrors: core.serialization.property( + "verification_errors", + core.serialization.list(core.serialization.string()) + ), +}); + +export declare namespace CdnNamespaceDomain { + interface Raw { + domain: string; + create_ts: Timestamp.Raw; + verification_status: CdnNamespaceDomainVerificationStatus.Raw; + verification_method: CdnNamespaceDomainVerificationMethod.Raw; + verification_errors: string[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethod.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethod.ts new file mode 100644 index 0000000000..3990328344 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethod.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { EmptyObject } from "../../../../common/types/EmptyObject"; +import { CdnNamespaceDomainVerificationMethodHttp } from "./CdnNamespaceDomainVerificationMethodHttp"; + +export const CdnNamespaceDomainVerificationMethod: core.serialization.ObjectSchema< + serializers.cloud.CdnNamespaceDomainVerificationMethod.Raw, + Rivet.cloud.CdnNamespaceDomainVerificationMethod +> = core.serialization.object({ + invalid: EmptyObject.optional(), + http: CdnNamespaceDomainVerificationMethodHttp.optional(), +}); + +export declare namespace CdnNamespaceDomainVerificationMethod { + interface Raw { + invalid?: EmptyObject.Raw | null; + http?: CdnNamespaceDomainVerificationMethodHttp.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethodHttp.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethodHttp.ts new file mode 100644 index 0000000000..4cb9093c30 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationMethodHttp.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CdnNamespaceDomainVerificationMethodHttp: core.serialization.ObjectSchema< + serializers.cloud.CdnNamespaceDomainVerificationMethodHttp.Raw, + Rivet.cloud.CdnNamespaceDomainVerificationMethodHttp +> = core.serialization.object({ + cnameRecord: core.serialization.property("cname_record", core.serialization.string()), +}); + +export declare namespace CdnNamespaceDomainVerificationMethodHttp { + interface Raw { + cname_record: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationStatus.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationStatus.ts new file mode 100644 index 0000000000..23f4cebe5c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnNamespaceDomainVerificationStatus.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CdnNamespaceDomainVerificationStatus: core.serialization.Schema< + serializers.cloud.CdnNamespaceDomainVerificationStatus.Raw, + Rivet.cloud.CdnNamespaceDomainVerificationStatus +> = core.serialization.enum_(["active", "pending", "failed"]); + +export declare namespace CdnNamespaceDomainVerificationStatus { + type Raw = "active" | "pending" | "failed"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnSiteSummary.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnSiteSummary.ts new file mode 100644 index 0000000000..1ab60c57fc --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CdnSiteSummary.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const CdnSiteSummary: core.serialization.ObjectSchema< + serializers.cloud.CdnSiteSummary.Raw, + Rivet.cloud.CdnSiteSummary +> = core.serialization.object({ + siteId: core.serialization.property("site_id", core.serialization.string()), + uploadId: core.serialization.property("upload_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + createTs: core.serialization.property("create_ts", Timestamp), + contentLength: core.serialization.property("content_length", core.serialization.number()), + complete: core.serialization.boolean(), +}); + +export declare namespace CdnSiteSummary { + interface Raw { + site_id: string; + upload_id: string; + display_name: DisplayName.Raw; + create_ts: Timestamp.Raw; + content_length: number; + complete: boolean; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CustomAvatarSummary.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CustomAvatarSummary.ts new file mode 100644 index 0000000000..f89fafa081 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/CustomAvatarSummary.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const CustomAvatarSummary: core.serialization.ObjectSchema< + serializers.cloud.CustomAvatarSummary.Raw, + Rivet.cloud.CustomAvatarSummary +> = core.serialization.object({ + uploadId: core.serialization.property("upload_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + createTs: core.serialization.property("create_ts", Timestamp), + url: core.serialization.string().optional(), + contentLength: core.serialization.property("content_length", core.serialization.number()), + complete: core.serialization.boolean(), +}); + +export declare namespace CustomAvatarSummary { + interface Raw { + upload_id: string; + display_name: DisplayName.Raw; + create_ts: Timestamp.Raw; + url?: string | null; + content_length: number; + complete: boolean; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GameFull.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GameFull.ts new file mode 100644 index 0000000000..f412217913 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GameFull.ts @@ -0,0 +1,43 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { NamespaceSummary } from "./NamespaceSummary"; +import { Summary } from "../../version/types/Summary"; +import { RegionSummary } from "./RegionSummary"; + +export const GameFull: core.serialization.ObjectSchema = + core.serialization.object({ + gameId: core.serialization.property("game_id", core.serialization.string()), + createTs: core.serialization.property("create_ts", Timestamp), + nameId: core.serialization.property("name_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + developerGroupId: core.serialization.property("developer_group_id", core.serialization.string()), + totalPlayerCount: core.serialization.property("total_player_count", core.serialization.number()), + logoUrl: core.serialization.property("logo_url", core.serialization.string().optional()), + bannerUrl: core.serialization.property("banner_url", core.serialization.string().optional()), + namespaces: core.serialization.list(NamespaceSummary), + versions: core.serialization.list(Summary), + availableRegions: core.serialization.property("available_regions", core.serialization.list(RegionSummary)), + }); + +export declare namespace GameFull { + interface Raw { + game_id: string; + create_ts: Timestamp.Raw; + name_id: string; + display_name: DisplayName.Raw; + developer_group_id: string; + total_player_count: number; + logo_url?: string | null; + banner_url?: string | null; + namespaces: NamespaceSummary.Raw[]; + versions: Summary.Raw[]; + available_regions: RegionSummary.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GameLobbyExpenses.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GameLobbyExpenses.ts new file mode 100644 index 0000000000..bf20c872a2 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GameLobbyExpenses.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../../../game/resources/common/types/Handle"; +import { NamespaceSummary } from "./NamespaceSummary"; +import { RegionTierExpenses } from "./RegionTierExpenses"; + +export const GameLobbyExpenses: core.serialization.ObjectSchema< + serializers.cloud.GameLobbyExpenses.Raw, + Rivet.cloud.GameLobbyExpenses +> = core.serialization.object({ + game: Handle, + namespaces: core.serialization.list(NamespaceSummary), + expenses: core.serialization.list(RegionTierExpenses), +}); + +export declare namespace GameLobbyExpenses { + interface Raw { + game: Handle.Raw; + namespaces: NamespaceSummary.Raw[]; + expenses: RegionTierExpenses.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GroupBankSource.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GroupBankSource.ts new file mode 100644 index 0000000000..67c641841d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/GroupBankSource.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GroupBankSource: core.serialization.ObjectSchema< + serializers.cloud.GroupBankSource.Raw, + Rivet.cloud.GroupBankSource +> = core.serialization.object({ + accountNumber: core.serialization.property("account_number", core.serialization.string()), + routingNumber: core.serialization.property("routing_number", core.serialization.string()), +}); + +export declare namespace GroupBankSource { + interface Raw { + account_number: string; + routing_number: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/IdentityNamespaceConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/IdentityNamespaceConfig.ts new file mode 100644 index 0000000000..2ba619063e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/IdentityNamespaceConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const IdentityNamespaceConfig: core.serialization.ObjectSchema< + serializers.cloud.IdentityNamespaceConfig.Raw, + Rivet.cloud.IdentityNamespaceConfig +> = core.serialization.object({}); + +export declare namespace IdentityNamespaceConfig { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/KvNamespaceConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/KvNamespaceConfig.ts new file mode 100644 index 0000000000..06b476b7f1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/KvNamespaceConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const KvNamespaceConfig: core.serialization.ObjectSchema< + serializers.cloud.KvNamespaceConfig.Raw, + Rivet.cloud.KvNamespaceConfig +> = core.serialization.object({}); + +export declare namespace KvNamespaceConfig { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LobbySummaryAnalytics.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LobbySummaryAnalytics.ts new file mode 100644 index 0000000000..63ba05b9b0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LobbySummaryAnalytics.ts @@ -0,0 +1,47 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const LobbySummaryAnalytics: core.serialization.ObjectSchema< + serializers.cloud.LobbySummaryAnalytics.Raw, + Rivet.cloud.LobbySummaryAnalytics +> = core.serialization.object({ + lobbyId: core.serialization.property("lobby_id", core.serialization.string()), + lobbyGroupId: core.serialization.property("lobby_group_id", core.serialization.string()), + lobbyGroupNameId: core.serialization.property("lobby_group_name_id", core.serialization.string()), + regionId: core.serialization.property("region_id", core.serialization.string()), + createTs: core.serialization.property("create_ts", Timestamp), + isReady: core.serialization.property("is_ready", core.serialization.boolean()), + isIdle: core.serialization.property("is_idle", core.serialization.boolean()), + isClosed: core.serialization.property("is_closed", core.serialization.boolean()), + isOutdated: core.serialization.property("is_outdated", core.serialization.boolean()), + maxPlayersNormal: core.serialization.property("max_players_normal", core.serialization.number()), + maxPlayersDirect: core.serialization.property("max_players_direct", core.serialization.number()), + maxPlayersParty: core.serialization.property("max_players_party", core.serialization.number()), + totalPlayerCount: core.serialization.property("total_player_count", core.serialization.number()), + registeredPlayerCount: core.serialization.property("registered_player_count", core.serialization.number()), +}); + +export declare namespace LobbySummaryAnalytics { + interface Raw { + lobby_id: string; + lobby_group_id: string; + lobby_group_name_id: string; + region_id: string; + create_ts: Timestamp.Raw; + is_ready: boolean; + is_idle: boolean; + is_closed: boolean; + is_outdated: boolean; + max_players_normal: number; + max_players_direct: number; + max_players_party: number; + total_player_count: number; + registered_player_count: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbyStatus.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbyStatus.ts new file mode 100644 index 0000000000..cf1237da7b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbyStatus.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { EmptyObject } from "../../../../common/types/EmptyObject"; +import { LogsLobbyStatusStopped } from "./LogsLobbyStatusStopped"; + +export const LogsLobbyStatus: core.serialization.ObjectSchema< + serializers.cloud.LogsLobbyStatus.Raw, + Rivet.cloud.LogsLobbyStatus +> = core.serialization.object({ + running: EmptyObject, + stopped: LogsLobbyStatusStopped.optional(), +}); + +export declare namespace LogsLobbyStatus { + interface Raw { + running: EmptyObject.Raw; + stopped?: LogsLobbyStatusStopped.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbyStatusStopped.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbyStatusStopped.ts new file mode 100644 index 0000000000..82f772e943 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbyStatusStopped.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const LogsLobbyStatusStopped: core.serialization.ObjectSchema< + serializers.cloud.LogsLobbyStatusStopped.Raw, + Rivet.cloud.LogsLobbyStatusStopped +> = core.serialization.object({ + stopTs: core.serialization.property("stop_ts", Timestamp), + failed: core.serialization.boolean(), + exitCode: core.serialization.property("exit_code", core.serialization.number()), +}); + +export declare namespace LogsLobbyStatusStopped { + interface Raw { + stop_ts: Timestamp.Raw; + failed: boolean; + exit_code: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbySummary.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbySummary.ts new file mode 100644 index 0000000000..fda44b22d1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsLobbySummary.ts @@ -0,0 +1,36 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { LogsLobbyStatus } from "./LogsLobbyStatus"; + +export const LogsLobbySummary: core.serialization.ObjectSchema< + serializers.cloud.LogsLobbySummary.Raw, + Rivet.cloud.LogsLobbySummary +> = core.serialization.object({ + lobbyId: core.serialization.property("lobby_id", core.serialization.string()), + namespaceId: core.serialization.property("namespace_id", core.serialization.string()), + lobbyGroupNameId: core.serialization.property("lobby_group_name_id", core.serialization.string()), + regionId: core.serialization.property("region_id", core.serialization.string()), + createTs: core.serialization.property("create_ts", Timestamp), + startTs: core.serialization.property("start_ts", Timestamp.optional()), + readyTs: core.serialization.property("ready_ts", Timestamp.optional()), + status: LogsLobbyStatus, +}); + +export declare namespace LogsLobbySummary { + interface Raw { + lobby_id: string; + namespace_id: string; + lobby_group_name_id: string; + region_id: string; + create_ts: Timestamp.Raw; + start_ts?: Timestamp.Raw | null; + ready_ts?: Timestamp.Raw | null; + status: LogsLobbyStatus.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsPerfMark.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsPerfMark.ts new file mode 100644 index 0000000000..0539f26045 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsPerfMark.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const LogsPerfMark: core.serialization.ObjectSchema< + serializers.cloud.LogsPerfMark.Raw, + Rivet.cloud.LogsPerfMark +> = core.serialization.object({ + label: core.serialization.string(), + ts: Timestamp, + rayId: core.serialization.property("ray_id", core.serialization.string().optional()), + reqId: core.serialization.property("req_id", core.serialization.string().optional()), +}); + +export declare namespace LogsPerfMark { + interface Raw { + label: string; + ts: Timestamp.Raw; + ray_id?: string | null; + req_id?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsPerfSpan.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsPerfSpan.ts new file mode 100644 index 0000000000..f2e5758765 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/LogsPerfSpan.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const LogsPerfSpan: core.serialization.ObjectSchema< + serializers.cloud.LogsPerfSpan.Raw, + Rivet.cloud.LogsPerfSpan +> = core.serialization.object({ + label: core.serialization.string(), + startTs: core.serialization.property("start_ts", Timestamp), + finishTs: core.serialization.property("finish_ts", Timestamp.optional()), + reqId: core.serialization.property("req_id", core.serialization.string().optional()), +}); + +export declare namespace LogsPerfSpan { + interface Raw { + label: string; + start_ts: Timestamp.Raw; + finish_ts?: Timestamp.Raw | null; + req_id?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/MatchmakerDevelopmentPort.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/MatchmakerDevelopmentPort.ts new file mode 100644 index 0000000000..717dda33fe --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/MatchmakerDevelopmentPort.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PortRange } from "../../version/resources/matchmaker/resources/common/types/PortRange"; +import { PortProtocol } from "../../version/resources/matchmaker/resources/common/types/PortProtocol"; + +export const MatchmakerDevelopmentPort: core.serialization.ObjectSchema< + serializers.cloud.MatchmakerDevelopmentPort.Raw, + Rivet.cloud.MatchmakerDevelopmentPort +> = core.serialization.object({ + port: core.serialization.number().optional(), + portRange: core.serialization.property("port_range", PortRange.optional()), + protocol: PortProtocol, +}); + +export declare namespace MatchmakerDevelopmentPort { + interface Raw { + port?: number | null; + port_range?: PortRange.Raw | null; + protocol: PortProtocol.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/MatchmakerNamespaceConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/MatchmakerNamespaceConfig.ts new file mode 100644 index 0000000000..8cfd4139be --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/MatchmakerNamespaceConfig.ts @@ -0,0 +1,33 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const MatchmakerNamespaceConfig: core.serialization.ObjectSchema< + serializers.cloud.MatchmakerNamespaceConfig.Raw, + Rivet.cloud.MatchmakerNamespaceConfig +> = core.serialization.object({ + lobbyCountMax: core.serialization.property("lobby_count_max", core.serialization.number()), + maxPlayersPerClient: core.serialization.property("max_players_per_client", core.serialization.number()), + maxPlayersPerClientVpn: core.serialization.property("max_players_per_client_vpn", core.serialization.number()), + maxPlayersPerClientProxy: core.serialization.property("max_players_per_client_proxy", core.serialization.number()), + maxPlayersPerClientTor: core.serialization.property("max_players_per_client_tor", core.serialization.number()), + maxPlayersPerClientHosting: core.serialization.property( + "max_players_per_client_hosting", + core.serialization.number() + ), +}); + +export declare namespace MatchmakerNamespaceConfig { + interface Raw { + lobby_count_max: number; + max_players_per_client: number; + max_players_per_client_vpn: number; + max_players_per_client_proxy: number; + max_players_per_client_tor: number; + max_players_per_client_hosting: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceConfig.ts new file mode 100644 index 0000000000..aa68829946 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceConfig.ts @@ -0,0 +1,30 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { CdnNamespaceConfig } from "./CdnNamespaceConfig"; +import { MatchmakerNamespaceConfig } from "./MatchmakerNamespaceConfig"; +import { KvNamespaceConfig } from "./KvNamespaceConfig"; +import { IdentityNamespaceConfig } from "./IdentityNamespaceConfig"; + +export const NamespaceConfig: core.serialization.ObjectSchema< + serializers.cloud.NamespaceConfig.Raw, + Rivet.cloud.NamespaceConfig +> = core.serialization.object({ + cdn: CdnNamespaceConfig, + matchmaker: MatchmakerNamespaceConfig, + kv: KvNamespaceConfig, + identity: IdentityNamespaceConfig, +}); + +export declare namespace NamespaceConfig { + interface Raw { + cdn: CdnNamespaceConfig.Raw; + matchmaker: MatchmakerNamespaceConfig.Raw; + kv: KvNamespaceConfig.Raw; + identity: IdentityNamespaceConfig.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceFull.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceFull.ts new file mode 100644 index 0000000000..1f02fe707f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceFull.ts @@ -0,0 +1,33 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { NamespaceConfig } from "./NamespaceConfig"; + +export const NamespaceFull: core.serialization.ObjectSchema< + serializers.cloud.NamespaceFull.Raw, + Rivet.cloud.NamespaceFull +> = core.serialization.object({ + namespaceId: core.serialization.property("namespace_id", core.serialization.string()), + createTs: core.serialization.property("create_ts", Timestamp), + displayName: core.serialization.property("display_name", DisplayName), + versionId: core.serialization.property("version_id", core.serialization.string()), + nameId: core.serialization.property("name_id", core.serialization.string()), + config: NamespaceConfig, +}); + +export declare namespace NamespaceFull { + interface Raw { + namespace_id: string; + create_ts: Timestamp.Raw; + display_name: DisplayName.Raw; + version_id: string; + name_id: string; + config: NamespaceConfig.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceSummary.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceSummary.ts new file mode 100644 index 0000000000..7b2d7c2ce3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceSummary.ts @@ -0,0 +1,30 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const NamespaceSummary: core.serialization.ObjectSchema< + serializers.cloud.NamespaceSummary.Raw, + Rivet.cloud.NamespaceSummary +> = core.serialization.object({ + namespaceId: core.serialization.property("namespace_id", core.serialization.string()), + createTs: core.serialization.property("create_ts", Timestamp), + displayName: core.serialization.property("display_name", DisplayName), + versionId: core.serialization.property("version_id", core.serialization.string()), + nameId: core.serialization.property("name_id", core.serialization.string()), +}); + +export declare namespace NamespaceSummary { + interface Raw { + namespace_id: string; + create_ts: Timestamp.Raw; + display_name: DisplayName.Raw; + version_id: string; + name_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceVersion.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceVersion.ts new file mode 100644 index 0000000000..9c72b1412b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/NamespaceVersion.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const NamespaceVersion: core.serialization.ObjectSchema< + serializers.cloud.NamespaceVersion.Raw, + Rivet.cloud.NamespaceVersion +> = core.serialization.object({ + namespaceId: core.serialization.property("namespace_id", core.serialization.string()), + versionId: core.serialization.property("version_id", core.serialization.string()), + deployTs: core.serialization.property("deploy_ts", Timestamp), +}); + +export declare namespace NamespaceVersion { + interface Raw { + namespace_id: string; + version_id: string; + deploy_ts: Timestamp.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionSummary.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionSummary.ts new file mode 100644 index 0000000000..ffd2613322 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionSummary.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { UniversalRegion } from "./UniversalRegion"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const RegionSummary: core.serialization.ObjectSchema< + serializers.cloud.RegionSummary.Raw, + Rivet.cloud.RegionSummary +> = core.serialization.object({ + regionId: core.serialization.property("region_id", core.serialization.string()), + regionNameId: core.serialization.property("region_name_id", core.serialization.string()), + provider: core.serialization.string(), + universalRegion: core.serialization.property("universal_region", UniversalRegion), + providerDisplayName: core.serialization.property("provider_display_name", DisplayName), + regionDisplayName: core.serialization.property("region_display_name", DisplayName), +}); + +export declare namespace RegionSummary { + interface Raw { + region_id: string; + region_name_id: string; + provider: string; + universal_region: UniversalRegion.Raw; + provider_display_name: DisplayName.Raw; + region_display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionTier.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionTier.ts new file mode 100644 index 0000000000..a81606ef3d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionTier.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const RegionTier: core.serialization.ObjectSchema = + core.serialization.object({ + tierNameId: core.serialization.property("tier_name_id", core.serialization.string()), + rivetCoresNumerator: core.serialization.property("rivet_cores_numerator", core.serialization.number()), + rivetCoresDenominator: core.serialization.property("rivet_cores_denominator", core.serialization.number()), + cpu: core.serialization.number(), + memory: core.serialization.number(), + disk: core.serialization.number(), + bandwidth: core.serialization.number(), + pricePerSecond: core.serialization.property("price_per_second", core.serialization.number()), + }); + +export declare namespace RegionTier { + interface Raw { + tier_name_id: string; + rivet_cores_numerator: number; + rivet_cores_denominator: number; + cpu: number; + memory: number; + disk: number; + bandwidth: number; + price_per_second: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionTierExpenses.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionTierExpenses.ts new file mode 100644 index 0000000000..7fe89ebaa1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/RegionTierExpenses.ts @@ -0,0 +1,30 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const RegionTierExpenses: core.serialization.ObjectSchema< + serializers.cloud.RegionTierExpenses.Raw, + Rivet.cloud.RegionTierExpenses +> = core.serialization.object({ + namespaceId: core.serialization.property("namespace_id", core.serialization.string()), + regionId: core.serialization.property("region_id", core.serialization.string()), + tierNameId: core.serialization.property("tier_name_id", core.serialization.string()), + lobbyGroupNameId: core.serialization.property("lobby_group_name_id", core.serialization.string()), + uptime: core.serialization.number(), + expenses: core.serialization.number(), +}); + +export declare namespace RegionTierExpenses { + interface Raw { + namespace_id: string; + region_id: string; + tier_name_id: string; + lobby_group_name_id: string; + uptime: number; + expenses: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/SvcMetrics.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/SvcMetrics.ts new file mode 100644 index 0000000000..9938e6b2b4 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/SvcMetrics.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const SvcMetrics: core.serialization.ObjectSchema = + core.serialization.object({ + job: core.serialization.string(), + cpu: core.serialization.list(core.serialization.number()), + memory: core.serialization.list(core.serialization.number()), + allocatedMemory: core.serialization.property("allocated_memory", core.serialization.number().optional()), + }); + +export declare namespace SvcMetrics { + interface Raw { + job: string; + cpu: number[]; + memory: number[]; + allocated_memory?: number | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/SvcPerf.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/SvcPerf.ts new file mode 100644 index 0000000000..bea37129a9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/SvcPerf.ts @@ -0,0 +1,31 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { LogsPerfSpan } from "./LogsPerfSpan"; +import { LogsPerfMark } from "./LogsPerfMark"; + +export const SvcPerf: core.serialization.ObjectSchema = + core.serialization.object({ + svcName: core.serialization.property("svc_name", core.serialization.string()), + ts: Timestamp, + duration: core.serialization.number(), + reqId: core.serialization.property("req_id", core.serialization.string().optional()), + spans: core.serialization.list(LogsPerfSpan), + marks: core.serialization.list(LogsPerfMark), + }); + +export declare namespace SvcPerf { + interface Raw { + svc_name: string; + ts: Timestamp.Raw; + duration: number; + req_id?: string | null; + spans: LogsPerfSpan.Raw[]; + marks: LogsPerfMark.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/UniversalRegion.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/UniversalRegion.ts new file mode 100644 index 0000000000..e6defd3c38 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/UniversalRegion.ts @@ -0,0 +1,73 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const UniversalRegion: core.serialization.Schema< + serializers.cloud.UniversalRegion.Raw, + Rivet.cloud.UniversalRegion +> = core.serialization.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", +]); + +export declare namespace UniversalRegion { + type Raw = + | "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"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/index.ts new file mode 100644 index 0000000000..ba71c55632 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/common/types/index.ts @@ -0,0 +1,36 @@ +export * from "./SvcPerf"; +export * from "./LogsPerfSpan"; +export * from "./LogsPerfMark"; +export * from "./LobbySummaryAnalytics"; +export * from "./LogsLobbySummary"; +export * from "./LogsLobbyStatus"; +export * from "./LogsLobbyStatusStopped"; +export * from "./SvcMetrics"; +export * from "./AuthAgent"; +export * from "./AuthAgentIdentity"; +export * from "./AuthAgentGameCloud"; +export * from "./CustomAvatarSummary"; +export * from "./BuildSummary"; +export * from "./CdnSiteSummary"; +export * from "./GameFull"; +export * from "./NamespaceSummary"; +export * from "./RegionSummary"; +export * from "./GameLobbyExpenses"; +export * from "./RegionTierExpenses"; +export * from "./GroupBankSource"; +export * from "./RegionTier"; +export * from "./UniversalRegion"; +export * from "./NamespaceFull"; +export * from "./NamespaceConfig"; +export * from "./CdnNamespaceConfig"; +export * from "./MatchmakerNamespaceConfig"; +export * from "./KvNamespaceConfig"; +export * from "./IdentityNamespaceConfig"; +export * from "./CdnAuthType"; +export * from "./CdnNamespaceDomain"; +export * from "./CdnNamespaceDomainVerificationMethod"; +export * from "./CdnNamespaceDomainVerificationMethodHttp"; +export * from "./CdnNamespaceDomainVerificationStatus"; +export * from "./CdnNamespaceAuthUser"; +export * from "./MatchmakerDevelopmentPort"; +export * from "./NamespaceVersion"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/CompleteDeviceLinkRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/CompleteDeviceLinkRequest.ts new file mode 100644 index 0000000000..cb1f577d1d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/CompleteDeviceLinkRequest.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { Jwt } from "../../../../../../common/types/Jwt"; + +export const CompleteDeviceLinkRequest: core.serialization.ObjectSchema< + serializers.cloud.devices.CompleteDeviceLinkRequest.Raw, + Rivet.cloud.devices.CompleteDeviceLinkRequest +> = core.serialization.object({ + deviceLinkToken: core.serialization.property("device_link_token", Jwt), + gameId: core.serialization.property("game_id", core.serialization.string()), +}); + +export declare namespace CompleteDeviceLinkRequest { + interface Raw { + device_link_token: Jwt.Raw; + game_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/GetDeviceLinkResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/GetDeviceLinkResponse.ts new file mode 100644 index 0000000000..ec9ad91a76 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/GetDeviceLinkResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { WatchResponse } from "../../../../../../common/types/WatchResponse"; + +export const GetDeviceLinkResponse: core.serialization.ObjectSchema< + serializers.cloud.devices.GetDeviceLinkResponse.Raw, + Rivet.cloud.devices.GetDeviceLinkResponse +> = core.serialization.object({ + cloudToken: core.serialization.property("cloud_token", core.serialization.string().optional()), + watch: WatchResponse, +}); + +export declare namespace GetDeviceLinkResponse { + interface Raw { + cloud_token?: string | null; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/PrepareDeviceLinkResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/PrepareDeviceLinkResponse.ts new file mode 100644 index 0000000000..404f1f539c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/PrepareDeviceLinkResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const PrepareDeviceLinkResponse: core.serialization.ObjectSchema< + serializers.cloud.devices.PrepareDeviceLinkResponse.Raw, + Rivet.cloud.devices.PrepareDeviceLinkResponse +> = core.serialization.object({ + deviceLinkId: core.serialization.property("device_link_id", core.serialization.string()), + deviceLinkToken: core.serialization.property("device_link_token", core.serialization.string()), + deviceLinkUrl: core.serialization.property("device_link_url", core.serialization.string()), +}); + +export declare namespace PrepareDeviceLinkResponse { + interface Raw { + device_link_id: string; + device_link_token: string; + device_link_url: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/index.ts new file mode 100644 index 0000000000..908200d8cc --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/devices/resources/links/types/index.ts @@ -0,0 +1,3 @@ +export * from "./PrepareDeviceLinkResponse"; +export * from "./GetDeviceLinkResponse"; +export * from "./CompleteDeviceLinkRequest"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/ListGameCustomAvatarsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/ListGameCustomAvatarsResponse.ts new file mode 100644 index 0000000000..78b8bd9860 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/ListGameCustomAvatarsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { CustomAvatarSummary } from "../../../../common/types/CustomAvatarSummary"; + +export const ListGameCustomAvatarsResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ListGameCustomAvatarsResponse.Raw, + Rivet.cloud.games.ListGameCustomAvatarsResponse +> = core.serialization.object({ + customAvatars: core.serialization.property("custom_avatars", core.serialization.list(CustomAvatarSummary)), +}); + +export declare namespace ListGameCustomAvatarsResponse { + interface Raw { + custom_avatars: CustomAvatarSummary.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadRequest.ts new file mode 100644 index 0000000000..90f8146c49 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const PrepareCustomAvatarUploadRequest: core.serialization.ObjectSchema< + serializers.cloud.games.PrepareCustomAvatarUploadRequest.Raw, + Rivet.cloud.games.PrepareCustomAvatarUploadRequest +> = core.serialization.object({ + path: core.serialization.string(), + mime: core.serialization.string().optional(), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace PrepareCustomAvatarUploadRequest { + interface Raw { + path: string; + mime?: string | null; + content_length: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadResponse.ts new file mode 100644 index 0000000000..6d38ee9747 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/PrepareCustomAvatarUploadResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { PresignedRequest } from "../../../../../../upload/resources/common/types/PresignedRequest"; + +export const PrepareCustomAvatarUploadResponse: core.serialization.ObjectSchema< + serializers.cloud.games.PrepareCustomAvatarUploadResponse.Raw, + Rivet.cloud.games.PrepareCustomAvatarUploadResponse +> = core.serialization.object({ + uploadId: core.serialization.property("upload_id", core.serialization.string()), + presignedRequest: core.serialization.property("presigned_request", PresignedRequest), +}); + +export declare namespace PrepareCustomAvatarUploadResponse { + interface Raw { + upload_id: string; + presigned_request: PresignedRequest.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/index.ts new file mode 100644 index 0000000000..a69f21b5fd --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/avatars/types/index.ts @@ -0,0 +1,3 @@ +export * from "./ListGameCustomAvatarsResponse"; +export * from "./PrepareCustomAvatarUploadRequest"; +export * from "./PrepareCustomAvatarUploadResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/BuildCompression.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..ffef0c73ad --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const BuildCompression: core.serialization.Schema< + serializers.cloud.games.BuildCompression.Raw, + Rivet.cloud.games.BuildCompression +> = core.serialization.enum_(["none", "lz4"]); + +export declare namespace BuildCompression { + type Raw = "none" | "lz4"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/BuildKind.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..d6f05895c8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/BuildKind.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const BuildKind: core.serialization.Schema = + core.serialization.enum_(["docker_image", "oci_bundle"]); + +export declare namespace BuildKind { + type Raw = "docker_image" | "oci_bundle"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/CreateGameBuildRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/CreateGameBuildRequest.ts new file mode 100644 index 0000000000..aa5747909e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/CreateGameBuildRequest.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; +import { PrepareFile } from "../../../../../../upload/resources/common/types/PrepareFile"; +import { BuildKind } from "./BuildKind"; +import { BuildCompression } from "./BuildCompression"; + +export const CreateGameBuildRequest: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameBuildRequest.Raw, + Rivet.cloud.games.CreateGameBuildRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + imageTag: core.serialization.property("image_tag", core.serialization.string()), + imageFile: core.serialization.property("image_file", PrepareFile), + multipartUpload: core.serialization.property("multipart_upload", core.serialization.boolean().optional()), + kind: BuildKind.optional(), + compression: BuildCompression.optional(), +}); + +export declare namespace CreateGameBuildRequest { + interface Raw { + display_name: DisplayName.Raw; + image_tag: string; + image_file: PrepareFile.Raw; + multipart_upload?: boolean | null; + kind?: BuildKind.Raw | null; + compression?: BuildCompression.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/CreateGameBuildResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/CreateGameBuildResponse.ts new file mode 100644 index 0000000000..f8f1e3c6b7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/CreateGameBuildResponse.ts @@ -0,0 +1,30 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { PresignedRequest } from "../../../../../../upload/resources/common/types/PresignedRequest"; + +export const CreateGameBuildResponse: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameBuildResponse.Raw, + Rivet.cloud.games.CreateGameBuildResponse +> = core.serialization.object({ + buildId: core.serialization.property("build_id", core.serialization.string()), + uploadId: core.serialization.property("upload_id", core.serialization.string()), + imagePresignedRequest: core.serialization.property("image_presigned_request", PresignedRequest.optional()), + imagePresignedRequests: core.serialization.property( + "image_presigned_requests", + core.serialization.list(PresignedRequest).optional() + ), +}); + +export declare namespace CreateGameBuildResponse { + interface Raw { + build_id: string; + upload_id: string; + image_presigned_request?: PresignedRequest.Raw | null; + image_presigned_requests?: PresignedRequest.Raw[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/ListGameBuildsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/ListGameBuildsResponse.ts new file mode 100644 index 0000000000..edb1c944ba --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/ListGameBuildsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { BuildSummary } from "../../../../common/types/BuildSummary"; + +export const ListGameBuildsResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ListGameBuildsResponse.Raw, + Rivet.cloud.games.ListGameBuildsResponse +> = core.serialization.object({ + builds: core.serialization.list(BuildSummary), +}); + +export declare namespace ListGameBuildsResponse { + interface Raw { + builds: BuildSummary.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/index.ts new file mode 100644 index 0000000000..62026df1e5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/builds/types/index.ts @@ -0,0 +1,5 @@ +export * from "./ListGameBuildsResponse"; +export * from "./CreateGameBuildRequest"; +export * from "./CreateGameBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteRequest.ts new file mode 100644 index 0000000000..3d550f19c5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; +import { PrepareFile } from "../../../../../../upload/resources/common/types/PrepareFile"; + +export const CreateGameCdnSiteRequest: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameCdnSiteRequest.Raw, + Rivet.cloud.games.CreateGameCdnSiteRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + files: core.serialization.list(PrepareFile), +}); + +export declare namespace CreateGameCdnSiteRequest { + interface Raw { + display_name: DisplayName.Raw; + files: PrepareFile.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteResponse.ts new file mode 100644 index 0000000000..97a7915405 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/CreateGameCdnSiteResponse.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { PresignedRequest } from "../../../../../../upload/resources/common/types/PresignedRequest"; + +export const CreateGameCdnSiteResponse: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameCdnSiteResponse.Raw, + Rivet.cloud.games.CreateGameCdnSiteResponse +> = core.serialization.object({ + siteId: core.serialization.property("site_id", core.serialization.string()), + uploadId: core.serialization.property("upload_id", core.serialization.string()), + presignedRequests: core.serialization.property("presigned_requests", core.serialization.list(PresignedRequest)), +}); + +export declare namespace CreateGameCdnSiteResponse { + interface Raw { + site_id: string; + upload_id: string; + presigned_requests: PresignedRequest.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/ListGameCdnSitesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/ListGameCdnSitesResponse.ts new file mode 100644 index 0000000000..a21ff0ca43 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/ListGameCdnSitesResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { CdnSiteSummary } from "../../../../common/types/CdnSiteSummary"; + +export const ListGameCdnSitesResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ListGameCdnSitesResponse.Raw, + Rivet.cloud.games.ListGameCdnSitesResponse +> = core.serialization.object({ + sites: core.serialization.list(CdnSiteSummary), +}); + +export declare namespace ListGameCdnSitesResponse { + interface Raw { + sites: CdnSiteSummary.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/index.ts new file mode 100644 index 0000000000..e6b92eb59c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/cdn/types/index.ts @@ -0,0 +1,3 @@ +export * from "./ListGameCdnSitesResponse"; +export * from "./CreateGameCdnSiteRequest"; +export * from "./CreateGameCdnSiteResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/DeleteMatchmakerLobbyResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/DeleteMatchmakerLobbyResponse.ts new file mode 100644 index 0000000000..c45e1cc4a7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/DeleteMatchmakerLobbyResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const DeleteMatchmakerLobbyResponse: core.serialization.ObjectSchema< + serializers.cloud.games.DeleteMatchmakerLobbyResponse.Raw, + Rivet.cloud.games.DeleteMatchmakerLobbyResponse +> = core.serialization.object({ + didRemove: core.serialization.property("did_remove", core.serialization.boolean()), +}); + +export declare namespace DeleteMatchmakerLobbyResponse { + interface Raw { + did_remove: boolean; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsRequest.ts new file mode 100644 index 0000000000..edd1f85fed --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsRequest.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { LogStream } from "./LogStream"; + +export const ExportLobbyLogsRequest: core.serialization.ObjectSchema< + serializers.cloud.games.ExportLobbyLogsRequest.Raw, + Rivet.cloud.games.ExportLobbyLogsRequest +> = core.serialization.object({ + stream: LogStream, +}); + +export declare namespace ExportLobbyLogsRequest { + interface Raw { + stream: LogStream.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsResponse.ts new file mode 100644 index 0000000000..13b2f3ea4e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportLobbyLogsResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const ExportLobbyLogsResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ExportLobbyLogsResponse.Raw, + Rivet.cloud.games.ExportLobbyLogsResponse +> = core.serialization.object({ + url: core.serialization.string(), +}); + +export declare namespace ExportLobbyLogsResponse { + interface Raw { + url: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryRequest.ts new file mode 100644 index 0000000000..f638b731a4 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const ExportMatchmakerLobbyHistoryRequest: core.serialization.ObjectSchema< + serializers.cloud.games.ExportMatchmakerLobbyHistoryRequest.Raw, + Rivet.cloud.games.ExportMatchmakerLobbyHistoryRequest +> = core.serialization.object({ + queryStart: core.serialization.property("query_start", core.serialization.number()), + queryEnd: core.serialization.property("query_end", core.serialization.number()), +}); + +export declare namespace ExportMatchmakerLobbyHistoryRequest { + interface Raw { + query_start: number; + query_end: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryResponse.ts new file mode 100644 index 0000000000..063e7bb4b8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/ExportMatchmakerLobbyHistoryResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const ExportMatchmakerLobbyHistoryResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ExportMatchmakerLobbyHistoryResponse.Raw, + Rivet.cloud.games.ExportMatchmakerLobbyHistoryResponse +> = core.serialization.object({ + url: core.serialization.string(), +}); + +export declare namespace ExportMatchmakerLobbyHistoryResponse { + interface Raw { + url: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/GetLobbyLogsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/GetLobbyLogsResponse.ts new file mode 100644 index 0000000000..46dc5e0e92 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/GetLobbyLogsResponse.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { WatchResponse } from "../../../../../../common/types/WatchResponse"; + +export const GetLobbyLogsResponse: core.serialization.ObjectSchema< + serializers.cloud.games.GetLobbyLogsResponse.Raw, + Rivet.cloud.games.GetLobbyLogsResponse +> = core.serialization.object({ + lines: core.serialization.list(core.serialization.string()), + timestamps: core.serialization.list(core.serialization.string()), + watch: WatchResponse, +}); + +export declare namespace GetLobbyLogsResponse { + interface Raw { + lines: string[]; + timestamps: string[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/LogStream.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/LogStream.ts new file mode 100644 index 0000000000..720ddc3985 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/LogStream.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const LogStream: core.serialization.Schema = + core.serialization.enum_(["std_out", "std_err"]); + +export declare namespace LogStream { + type Raw = "std_out" | "std_err"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/index.ts new file mode 100644 index 0000000000..bb788951aa --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/matchmaker/types/index.ts @@ -0,0 +1,7 @@ +export * from "./ExportMatchmakerLobbyHistoryRequest"; +export * from "./ExportMatchmakerLobbyHistoryResponse"; +export * from "./DeleteMatchmakerLobbyResponse"; +export * from "./GetLobbyLogsResponse"; +export * from "./ExportLobbyLogsRequest"; +export * from "./ExportLobbyLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/GetAnalyticsMatchmakerLiveResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/GetAnalyticsMatchmakerLiveResponse.ts new file mode 100644 index 0000000000..80e54f1fc1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/GetAnalyticsMatchmakerLiveResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { LobbySummaryAnalytics } from "../../../../../../common/types/LobbySummaryAnalytics"; + +export const GetAnalyticsMatchmakerLiveResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.GetAnalyticsMatchmakerLiveResponse.Raw, + Rivet.cloud.games.namespaces.GetAnalyticsMatchmakerLiveResponse +> = core.serialization.object({ + lobbies: core.serialization.list(LobbySummaryAnalytics), +}); + +export declare namespace GetAnalyticsMatchmakerLiveResponse { + interface Raw { + lobbies: LobbySummaryAnalytics.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/index.ts new file mode 100644 index 0000000000..d177fbed1a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/analytics/types/index.ts @@ -0,0 +1 @@ +export * from "./GetAnalyticsMatchmakerLiveResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/GetNamespaceLobbyResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/GetNamespaceLobbyResponse.ts new file mode 100644 index 0000000000..50d4ef38eb --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/GetNamespaceLobbyResponse.ts @@ -0,0 +1,37 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { LogsLobbySummary } from "../../../../../../common/types/LogsLobbySummary"; +import { SvcMetrics } from "../../../../../../common/types/SvcMetrics"; +import { SvcPerf } from "../../../../../../common/types/SvcPerf"; + +export const GetNamespaceLobbyResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.GetNamespaceLobbyResponse.Raw, + Rivet.cloud.games.namespaces.GetNamespaceLobbyResponse +> = core.serialization.object({ + lobby: LogsLobbySummary, + metrics: SvcMetrics.optional(), + stdoutPresignedUrls: core.serialization.property( + "stdout_presigned_urls", + core.serialization.list(core.serialization.string()) + ), + stderrPresignedUrls: core.serialization.property( + "stderr_presigned_urls", + core.serialization.list(core.serialization.string()) + ), + perfLists: core.serialization.property("perf_lists", core.serialization.list(SvcPerf)), +}); + +export declare namespace GetNamespaceLobbyResponse { + interface Raw { + lobby: LogsLobbySummary.Raw; + metrics?: SvcMetrics.Raw | null; + stdout_presigned_urls: string[]; + stderr_presigned_urls: string[]; + perf_lists: SvcPerf.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/ListNamespaceLobbiesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/ListNamespaceLobbiesResponse.ts new file mode 100644 index 0000000000..951b4997fc --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/ListNamespaceLobbiesResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { LogsLobbySummary } from "../../../../../../common/types/LogsLobbySummary"; + +export const ListNamespaceLobbiesResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ListNamespaceLobbiesResponse.Raw, + Rivet.cloud.games.namespaces.ListNamespaceLobbiesResponse +> = core.serialization.object({ + lobbies: core.serialization.list(LogsLobbySummary), +}); + +export declare namespace ListNamespaceLobbiesResponse { + interface Raw { + lobbies: LogsLobbySummary.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/index.ts new file mode 100644 index 0000000000..1bcc1b77ac --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ListNamespaceLobbiesResponse"; +export * from "./GetNamespaceLobbyResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/AddNamespaceDomainRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/AddNamespaceDomainRequest.ts new file mode 100644 index 0000000000..478afaa54a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/AddNamespaceDomainRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const AddNamespaceDomainRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.AddNamespaceDomainRequest.Raw, + Rivet.cloud.games.namespaces.AddNamespaceDomainRequest +> = core.serialization.object({ + domain: core.serialization.string(), +}); + +export declare namespace AddNamespaceDomainRequest { + interface Raw { + domain: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceRequest.ts new file mode 100644 index 0000000000..86bcb2269a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; + +export const CreateGameNamespaceRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.CreateGameNamespaceRequest.Raw, + Rivet.cloud.games.namespaces.CreateGameNamespaceRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + versionId: core.serialization.property("version_id", core.serialization.string()), + nameId: core.serialization.property("name_id", core.serialization.string()), +}); + +export declare namespace CreateGameNamespaceRequest { + interface Raw { + display_name: DisplayName.Raw; + version_id: string; + name_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceResponse.ts new file mode 100644 index 0000000000..2d7e9d033c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CreateGameNamespaceResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.CreateGameNamespaceResponse.Raw, + Rivet.cloud.games.namespaces.CreateGameNamespaceResponse +> = core.serialization.object({ + namespaceId: core.serialization.property("namespace_id", core.serialization.string()), +}); + +export declare namespace CreateGameNamespaceResponse { + interface Raw { + namespace_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentRequest.ts new file mode 100644 index 0000000000..dae13b152a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentRequest.ts @@ -0,0 +1,29 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { MatchmakerDevelopmentPort } from "../../../../common/types/MatchmakerDevelopmentPort"; +import { LobbyGroupRuntimeDockerPort } from "../../../../version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort"; + +export const CreateGameNamespaceTokenDevelopmentRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.CreateGameNamespaceTokenDevelopmentRequest.Raw, + Rivet.cloud.games.namespaces.CreateGameNamespaceTokenDevelopmentRequest +> = core.serialization.object({ + hostname: core.serialization.string(), + ports: core.serialization.record(core.serialization.string(), MatchmakerDevelopmentPort).optional(), + lobbyPorts: core.serialization.property( + "lobby_ports", + core.serialization.list(LobbyGroupRuntimeDockerPort).optional() + ), +}); + +export declare namespace CreateGameNamespaceTokenDevelopmentRequest { + interface Raw { + hostname: string; + ports?: Record | null; + lobby_ports?: LobbyGroupRuntimeDockerPort.Raw[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentResponse.ts new file mode 100644 index 0000000000..a69f1536bd --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenDevelopmentResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CreateGameNamespaceTokenDevelopmentResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.CreateGameNamespaceTokenDevelopmentResponse.Raw, + Rivet.cloud.games.namespaces.CreateGameNamespaceTokenDevelopmentResponse +> = core.serialization.object({ + token: core.serialization.string(), +}); + +export declare namespace CreateGameNamespaceTokenDevelopmentResponse { + interface Raw { + token: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenPublicResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenPublicResponse.ts new file mode 100644 index 0000000000..ec81bfb5e6 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/CreateGameNamespaceTokenPublicResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CreateGameNamespaceTokenPublicResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.CreateGameNamespaceTokenPublicResponse.Raw, + Rivet.cloud.games.namespaces.CreateGameNamespaceTokenPublicResponse +> = core.serialization.object({ + token: core.serialization.string(), +}); + +export declare namespace CreateGameNamespaceTokenPublicResponse { + interface Raw { + token: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceByIdResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceByIdResponse.ts new file mode 100644 index 0000000000..1843cff8ba --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceByIdResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { NamespaceFull } from "../../../../common/types/NamespaceFull"; + +export const GetGameNamespaceByIdResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.GetGameNamespaceByIdResponse.Raw, + Rivet.cloud.games.namespaces.GetGameNamespaceByIdResponse +> = core.serialization.object({ + namespace: NamespaceFull, +}); + +export declare namespace GetGameNamespaceByIdResponse { + interface Raw { + namespace: NamespaceFull.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceVersionHistoryResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceVersionHistoryResponse.ts new file mode 100644 index 0000000000..f61ccd3bb9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/GetGameNamespaceVersionHistoryResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { NamespaceVersion } from "../../../../common/types/NamespaceVersion"; + +export const GetGameNamespaceVersionHistoryResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.GetGameNamespaceVersionHistoryResponse.Raw, + Rivet.cloud.games.namespaces.GetGameNamespaceVersionHistoryResponse +> = core.serialization.object({ + versions: core.serialization.list(NamespaceVersion), +}); + +export declare namespace GetGameNamespaceVersionHistoryResponse { + interface Raw { + versions: NamespaceVersion.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/InspectResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/InspectResponse.ts new file mode 100644 index 0000000000..530b7f1deb --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/InspectResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { AuthAgent } from "../../../../common/types/AuthAgent"; + +export const InspectResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.InspectResponse.Raw, + Rivet.cloud.games.namespaces.InspectResponse +> = core.serialization.object({ + agent: AuthAgent, +}); + +export declare namespace InspectResponse { + interface Raw { + agent: AuthAgent.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/SetNamespaceCdnAuthTypeRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/SetNamespaceCdnAuthTypeRequest.ts new file mode 100644 index 0000000000..ec95ce49b8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/SetNamespaceCdnAuthTypeRequest.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { CdnAuthType } from "../../../../common/types/CdnAuthType"; + +export const SetNamespaceCdnAuthTypeRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.SetNamespaceCdnAuthTypeRequest.Raw, + Rivet.cloud.games.namespaces.SetNamespaceCdnAuthTypeRequest +> = core.serialization.object({ + authType: core.serialization.property("auth_type", CdnAuthType), +}); + +export declare namespace SetNamespaceCdnAuthTypeRequest { + interface Raw { + auth_type: CdnAuthType.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ToggleNamespaceDomainPublicAuthRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ToggleNamespaceDomainPublicAuthRequest.ts new file mode 100644 index 0000000000..3c87e9050a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ToggleNamespaceDomainPublicAuthRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const ToggleNamespaceDomainPublicAuthRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ToggleNamespaceDomainPublicAuthRequest.Raw, + Rivet.cloud.games.namespaces.ToggleNamespaceDomainPublicAuthRequest +> = core.serialization.object({ + enabled: core.serialization.boolean(), +}); + +export declare namespace ToggleNamespaceDomainPublicAuthRequest { + interface Raw { + enabled: boolean; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceMatchmakerConfigRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceMatchmakerConfigRequest.ts new file mode 100644 index 0000000000..ec97ef9925 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceMatchmakerConfigRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const UpdateGameNamespaceMatchmakerConfigRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.UpdateGameNamespaceMatchmakerConfigRequest.Raw, + Rivet.cloud.games.namespaces.UpdateGameNamespaceMatchmakerConfigRequest +> = core.serialization.object({ + lobbyCountMax: core.serialization.property("lobby_count_max", core.serialization.number()), + maxPlayers: core.serialization.property("max_players", core.serialization.number()), +}); + +export declare namespace UpdateGameNamespaceMatchmakerConfigRequest { + interface Raw { + lobby_count_max: number; + max_players: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceVersionRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceVersionRequest.ts new file mode 100644 index 0000000000..7d2fd8cdf3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateGameNamespaceVersionRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const UpdateGameNamespaceVersionRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.UpdateGameNamespaceVersionRequest.Raw, + Rivet.cloud.games.namespaces.UpdateGameNamespaceVersionRequest +> = core.serialization.object({ + versionId: core.serialization.property("version_id", core.serialization.string()), +}); + +export declare namespace UpdateGameNamespaceVersionRequest { + interface Raw { + version_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateNamespaceCdnAuthUserRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateNamespaceCdnAuthUserRequest.ts new file mode 100644 index 0000000000..09364003a4 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/UpdateNamespaceCdnAuthUserRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const UpdateNamespaceCdnAuthUserRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.UpdateNamespaceCdnAuthUserRequest.Raw, + Rivet.cloud.games.namespaces.UpdateNamespaceCdnAuthUserRequest +> = core.serialization.object({ + user: core.serialization.string(), + password: core.serialization.string(), +}); + +export declare namespace UpdateNamespaceCdnAuthUserRequest { + interface Raw { + user: string; + password: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigRequest.ts new file mode 100644 index 0000000000..c192083cc5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const ValidateGameNamespaceMatchmakerConfigRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ValidateGameNamespaceMatchmakerConfigRequest.Raw, + Rivet.cloud.games.namespaces.ValidateGameNamespaceMatchmakerConfigRequest +> = core.serialization.object({ + lobbyCountMax: core.serialization.property("lobby_count_max", core.serialization.number()), + maxPlayers: core.serialization.property("max_players", core.serialization.number()), +}); + +export declare namespace ValidateGameNamespaceMatchmakerConfigRequest { + interface Raw { + lobby_count_max: number; + max_players: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigResponse.ts new file mode 100644 index 0000000000..2d7ac0d1fe --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceMatchmakerConfigResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { ValidationError } from "../../../../../../common/types/ValidationError"; + +export const ValidateGameNamespaceMatchmakerConfigResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ValidateGameNamespaceMatchmakerConfigResponse.Raw, + Rivet.cloud.games.namespaces.ValidateGameNamespaceMatchmakerConfigResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateGameNamespaceMatchmakerConfigResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceRequest.ts new file mode 100644 index 0000000000..c21c0802ac --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceRequest.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; + +export const ValidateGameNamespaceRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ValidateGameNamespaceRequest.Raw, + Rivet.cloud.games.namespaces.ValidateGameNamespaceRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + nameId: core.serialization.property("name_id", core.serialization.string()), +}); + +export declare namespace ValidateGameNamespaceRequest { + interface Raw { + display_name: DisplayName.Raw; + name_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceResponse.ts new file mode 100644 index 0000000000..7821bab230 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { ValidationError } from "../../../../../../common/types/ValidationError"; + +export const ValidateGameNamespaceResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ValidateGameNamespaceResponse.Raw, + Rivet.cloud.games.namespaces.ValidateGameNamespaceResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateGameNamespaceResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentRequest.ts new file mode 100644 index 0000000000..4a78f4fd53 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentRequest.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { LobbyGroupRuntimeDockerPort } from "../../../../version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort"; + +export const ValidateGameNamespaceTokenDevelopmentRequest: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ValidateGameNamespaceTokenDevelopmentRequest.Raw, + Rivet.cloud.games.namespaces.ValidateGameNamespaceTokenDevelopmentRequest +> = core.serialization.object({ + hostname: core.serialization.string(), + lobbyPorts: core.serialization.property("lobby_ports", core.serialization.list(LobbyGroupRuntimeDockerPort)), +}); + +export declare namespace ValidateGameNamespaceTokenDevelopmentRequest { + interface Raw { + hostname: string; + lobby_ports: LobbyGroupRuntimeDockerPort.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentResponse.ts new file mode 100644 index 0000000000..3d32304552 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/ValidateGameNamespaceTokenDevelopmentResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { ValidationError } from "../../../../../../common/types/ValidationError"; + +export const ValidateGameNamespaceTokenDevelopmentResponse: core.serialization.ObjectSchema< + serializers.cloud.games.namespaces.ValidateGameNamespaceTokenDevelopmentResponse.Raw, + Rivet.cloud.games.namespaces.ValidateGameNamespaceTokenDevelopmentResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateGameNamespaceTokenDevelopmentResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/index.ts new file mode 100644 index 0000000000..7fa5c9329d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/namespaces/types/index.ts @@ -0,0 +1,20 @@ +export * from "./InspectResponse"; +export * from "./CreateGameNamespaceRequest"; +export * from "./CreateGameNamespaceResponse"; +export * from "./ValidateGameNamespaceRequest"; +export * from "./ValidateGameNamespaceResponse"; +export * from "./GetGameNamespaceByIdResponse"; +export * from "./UpdateNamespaceCdnAuthUserRequest"; +export * from "./SetNamespaceCdnAuthTypeRequest"; +export * from "./ToggleNamespaceDomainPublicAuthRequest"; +export * from "./AddNamespaceDomainRequest"; +export * from "./UpdateGameNamespaceMatchmakerConfigRequest"; +export * from "./GetGameNamespaceVersionHistoryResponse"; +export * from "./ValidateGameNamespaceMatchmakerConfigRequest"; +export * from "./ValidateGameNamespaceMatchmakerConfigResponse"; +export * from "./CreateGameNamespaceTokenDevelopmentRequest"; +export * from "./CreateGameNamespaceTokenDevelopmentResponse"; +export * from "./ValidateGameNamespaceTokenDevelopmentRequest"; +export * from "./ValidateGameNamespaceTokenDevelopmentResponse"; +export * from "./CreateGameNamespaceTokenPublicResponse"; +export * from "./UpdateGameNamespaceVersionRequest"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/tokens/types/CreateCloudTokenResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/tokens/types/CreateCloudTokenResponse.ts new file mode 100644 index 0000000000..dd7d90d09c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/tokens/types/CreateCloudTokenResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CreateCloudTokenResponse: core.serialization.ObjectSchema< + serializers.cloud.games.CreateCloudTokenResponse.Raw, + Rivet.cloud.games.CreateCloudTokenResponse +> = core.serialization.object({ + token: core.serialization.string(), +}); + +export declare namespace CreateCloudTokenResponse { + interface Raw { + token: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/tokens/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/tokens/types/index.ts new file mode 100644 index 0000000000..c6eb67fbbe --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/tokens/types/index.ts @@ -0,0 +1 @@ +export * from "./CreateCloudTokenResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/CreateGameVersionRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/CreateGameVersionRequest.ts new file mode 100644 index 0000000000..f69894a31a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/CreateGameVersionRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; +import { Config } from "../../../../version/types/Config"; + +export const CreateGameVersionRequest: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameVersionRequest.Raw, + Rivet.cloud.games.CreateGameVersionRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + config: Config, +}); + +export declare namespace CreateGameVersionRequest { + interface Raw { + display_name: DisplayName.Raw; + config: Config.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/CreateGameVersionResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/CreateGameVersionResponse.ts new file mode 100644 index 0000000000..e8b1f7708c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/CreateGameVersionResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CreateGameVersionResponse: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameVersionResponse.Raw, + Rivet.cloud.games.CreateGameVersionResponse +> = core.serialization.object({ + versionId: core.serialization.property("version_id", core.serialization.string()), +}); + +export declare namespace CreateGameVersionResponse { + interface Raw { + version_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/GetGameVersionByIdResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/GetGameVersionByIdResponse.ts new file mode 100644 index 0000000000..7510411e32 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/GetGameVersionByIdResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { Full } from "../../../../version/types/Full"; + +export const GetGameVersionByIdResponse: core.serialization.ObjectSchema< + serializers.cloud.games.GetGameVersionByIdResponse.Raw, + Rivet.cloud.games.GetGameVersionByIdResponse +> = core.serialization.object({ + version: Full, +}); + +export declare namespace GetGameVersionByIdResponse { + interface Raw { + version: Full.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ReserveVersionNameResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ReserveVersionNameResponse.ts new file mode 100644 index 0000000000..2544a3f7c1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ReserveVersionNameResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; + +export const ReserveVersionNameResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ReserveVersionNameResponse.Raw, + Rivet.cloud.games.ReserveVersionNameResponse +> = core.serialization.object({ + versionDisplayName: core.serialization.property("version_display_name", DisplayName), +}); + +export declare namespace ReserveVersionNameResponse { + interface Raw { + version_display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionRequest.ts new file mode 100644 index 0000000000..a5fa50d8f9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; +import { Config } from "../../../../version/types/Config"; + +export const ValidateGameVersionRequest: core.serialization.ObjectSchema< + serializers.cloud.games.ValidateGameVersionRequest.Raw, + Rivet.cloud.games.ValidateGameVersionRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + config: Config, +}); + +export declare namespace ValidateGameVersionRequest { + interface Raw { + display_name: DisplayName.Raw; + config: Config.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionResponse.ts new file mode 100644 index 0000000000..9c46948b38 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/ValidateGameVersionResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { ValidationError } from "../../../../../../common/types/ValidationError"; + +export const ValidateGameVersionResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ValidateGameVersionResponse.Raw, + Rivet.cloud.games.ValidateGameVersionResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateGameVersionResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/index.ts new file mode 100644 index 0000000000..893aa27b04 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/resources/versions/types/index.ts @@ -0,0 +1,6 @@ +export * from "./CreateGameVersionRequest"; +export * from "./CreateGameVersionResponse"; +export * from "./ReserveVersionNameResponse"; +export * from "./ValidateGameVersionRequest"; +export * from "./ValidateGameVersionResponse"; +export * from "./GetGameVersionByIdResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/CreateGameRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/CreateGameRequest.ts new file mode 100644 index 0000000000..7c2690861e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/CreateGameRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const CreateGameRequest: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameRequest.Raw, + Rivet.cloud.games.CreateGameRequest +> = core.serialization.object({ + nameId: core.serialization.property("name_id", Identifier.optional()), + displayName: core.serialization.property("display_name", DisplayName), + developerGroupId: core.serialization.property("developer_group_id", core.serialization.string()), +}); + +export declare namespace CreateGameRequest { + interface Raw { + name_id?: Identifier.Raw | null; + display_name: DisplayName.Raw; + developer_group_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/CreateGameResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/CreateGameResponse.ts new file mode 100644 index 0000000000..fb23c4c328 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/CreateGameResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CreateGameResponse: core.serialization.ObjectSchema< + serializers.cloud.games.CreateGameResponse.Raw, + Rivet.cloud.games.CreateGameResponse +> = core.serialization.object({ + gameId: core.serialization.property("game_id", core.serialization.string()), +}); + +export declare namespace CreateGameResponse { + interface Raw { + game_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameBannerUploadPrepareRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameBannerUploadPrepareRequest.ts new file mode 100644 index 0000000000..83be01d90b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameBannerUploadPrepareRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GameBannerUploadPrepareRequest: core.serialization.ObjectSchema< + serializers.cloud.games.GameBannerUploadPrepareRequest.Raw, + Rivet.cloud.games.GameBannerUploadPrepareRequest +> = core.serialization.object({ + path: core.serialization.string(), + mime: core.serialization.string().optional(), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace GameBannerUploadPrepareRequest { + interface Raw { + path: string; + mime?: string | null; + content_length: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameBannerUploadPrepareResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameBannerUploadPrepareResponse.ts new file mode 100644 index 0000000000..5e4f42268a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameBannerUploadPrepareResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PresignedRequest } from "../../../../upload/resources/common/types/PresignedRequest"; + +export const GameBannerUploadPrepareResponse: core.serialization.ObjectSchema< + serializers.cloud.games.GameBannerUploadPrepareResponse.Raw, + Rivet.cloud.games.GameBannerUploadPrepareResponse +> = core.serialization.object({ + uploadId: core.serialization.property("upload_id", core.serialization.string()), + presignedRequest: core.serialization.property("presigned_request", PresignedRequest), +}); + +export declare namespace GameBannerUploadPrepareResponse { + interface Raw { + upload_id: string; + presigned_request: PresignedRequest.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameLogoUploadPrepareRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameLogoUploadPrepareRequest.ts new file mode 100644 index 0000000000..b7af09d457 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameLogoUploadPrepareRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GameLogoUploadPrepareRequest: core.serialization.ObjectSchema< + serializers.cloud.games.GameLogoUploadPrepareRequest.Raw, + Rivet.cloud.games.GameLogoUploadPrepareRequest +> = core.serialization.object({ + path: core.serialization.string(), + mime: core.serialization.string().optional(), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace GameLogoUploadPrepareRequest { + interface Raw { + path: string; + mime?: string | null; + content_length: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameLogoUploadPrepareResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameLogoUploadPrepareResponse.ts new file mode 100644 index 0000000000..5a0cbda777 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GameLogoUploadPrepareResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PresignedRequest } from "../../../../upload/resources/common/types/PresignedRequest"; + +export const GameLogoUploadPrepareResponse: core.serialization.ObjectSchema< + serializers.cloud.games.GameLogoUploadPrepareResponse.Raw, + Rivet.cloud.games.GameLogoUploadPrepareResponse +> = core.serialization.object({ + uploadId: core.serialization.property("upload_id", core.serialization.string()), + presignedRequest: core.serialization.property("presigned_request", PresignedRequest), +}); + +export declare namespace GameLogoUploadPrepareResponse { + interface Raw { + upload_id: string; + presigned_request: PresignedRequest.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GetGameByIdResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GetGameByIdResponse.ts new file mode 100644 index 0000000000..6c408a06e1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GetGameByIdResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GameFull } from "../../common/types/GameFull"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const GetGameByIdResponse: core.serialization.ObjectSchema< + serializers.cloud.games.GetGameByIdResponse.Raw, + Rivet.cloud.games.GetGameByIdResponse +> = core.serialization.object({ + game: GameFull, + watch: WatchResponse, +}); + +export declare namespace GetGameByIdResponse { + interface Raw { + game: GameFull.Raw; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GetGamesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GetGamesResponse.ts new file mode 100644 index 0000000000..1259001eb7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/GetGamesResponse.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GameSummary } from "../../../../game/resources/common/types/GameSummary"; +import { GroupSummary } from "../../../../group/resources/common/types/GroupSummary"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const GetGamesResponse: core.serialization.ObjectSchema< + serializers.cloud.games.GetGamesResponse.Raw, + Rivet.cloud.games.GetGamesResponse +> = core.serialization.object({ + games: core.serialization.list(GameSummary), + groups: core.serialization.list(GroupSummary), + watch: WatchResponse, +}); + +export declare namespace GetGamesResponse { + interface Raw { + games: GameSummary.Raw[]; + groups: GroupSummary.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/ValidateGameRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/ValidateGameRequest.ts new file mode 100644 index 0000000000..d34e6a8ee3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/ValidateGameRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { Identifier } from "../../../../common/types/Identifier"; + +export const ValidateGameRequest: core.serialization.ObjectSchema< + serializers.cloud.games.ValidateGameRequest.Raw, + Rivet.cloud.games.ValidateGameRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + nameId: core.serialization.property("name_id", Identifier.optional()), +}); + +export declare namespace ValidateGameRequest { + interface Raw { + display_name: DisplayName.Raw; + name_id?: Identifier.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/ValidateGameResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/ValidateGameResponse.ts new file mode 100644 index 0000000000..5ab9f5f908 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/ValidateGameResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { ValidationError } from "../../../../common/types/ValidationError"; + +export const ValidateGameResponse: core.serialization.ObjectSchema< + serializers.cloud.games.ValidateGameResponse.Raw, + Rivet.cloud.games.ValidateGameResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateGameResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/index.ts new file mode 100644 index 0000000000..4ee3f44932 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/games/types/index.ts @@ -0,0 +1,10 @@ +export * from "./GetGamesResponse"; +export * from "./CreateGameRequest"; +export * from "./CreateGameResponse"; +export * from "./ValidateGameRequest"; +export * from "./ValidateGameResponse"; +export * from "./GetGameByIdResponse"; +export * from "./GameBannerUploadPrepareRequest"; +export * from "./GameBannerUploadPrepareResponse"; +export * from "./GameLogoUploadPrepareRequest"; +export * from "./GameLogoUploadPrepareResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/ValidateGroupRequest.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/ValidateGroupRequest.ts new file mode 100644 index 0000000000..32d63b54e6 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/ValidateGroupRequest.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const ValidateGroupRequest: core.serialization.ObjectSchema< + serializers.cloud.ValidateGroupRequest.Raw, + Rivet.cloud.ValidateGroupRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), +}); + +export declare namespace ValidateGroupRequest { + interface Raw { + display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/ValidateGroupResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/ValidateGroupResponse.ts new file mode 100644 index 0000000000..21304434d7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/ValidateGroupResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { ValidationError } from "../../../../common/types/ValidationError"; + +export const ValidateGroupResponse: core.serialization.ObjectSchema< + serializers.cloud.ValidateGroupResponse.Raw, + Rivet.cloud.ValidateGroupResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateGroupResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/index.ts new file mode 100644 index 0000000000..4f4b12381a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/groups/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ValidateGroupRequest"; +export * from "./ValidateGroupResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/logs/types/GetRayPerfLogsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/logs/types/GetRayPerfLogsResponse.ts new file mode 100644 index 0000000000..a5ce7b5e6b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/logs/types/GetRayPerfLogsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { SvcPerf } from "../../common/types/SvcPerf"; + +export const GetRayPerfLogsResponse: core.serialization.ObjectSchema< + serializers.cloud.GetRayPerfLogsResponse.Raw, + Rivet.cloud.GetRayPerfLogsResponse +> = core.serialization.object({ + perfLists: core.serialization.property("perf_lists", core.serialization.list(SvcPerf)), +}); + +export declare namespace GetRayPerfLogsResponse { + interface Raw { + perf_lists: SvcPerf.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/logs/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/logs/types/index.ts new file mode 100644 index 0000000000..3e48b7404b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/logs/types/index.ts @@ -0,0 +1 @@ +export * from "./GetRayPerfLogsResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/tiers/types/GetRegionTiersResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/tiers/types/GetRegionTiersResponse.ts new file mode 100644 index 0000000000..5067f1bc8d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/tiers/types/GetRegionTiersResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { RegionTier } from "../../common/types/RegionTier"; + +export const GetRegionTiersResponse: core.serialization.ObjectSchema< + serializers.cloud.GetRegionTiersResponse.Raw, + Rivet.cloud.GetRegionTiersResponse +> = core.serialization.object({ + tiers: core.serialization.list(RegionTier), +}); + +export declare namespace GetRegionTiersResponse { + interface Raw { + tiers: RegionTier.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/tiers/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/tiers/types/index.ts new file mode 100644 index 0000000000..93a8b71ceb --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/tiers/types/index.ts @@ -0,0 +1 @@ +export * from "./GetRegionTiersResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/CdnConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/CdnConfig.ts new file mode 100644 index 0000000000..1f74b4cab5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/CdnConfig.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { Route } from "./Route"; + +export const CdnConfig: core.serialization.ObjectSchema< + serializers.cloud.version.cdn.CdnConfig.Raw, + Rivet.cloud.version.cdn.CdnConfig +> = core.serialization.object({ + buildCommand: core.serialization.property("build_command", core.serialization.string().optional()), + buildOutput: core.serialization.property("build_output", core.serialization.string().optional()), + buildEnv: core.serialization.property( + "build_env", + core.serialization.record(core.serialization.string(), core.serialization.string()).optional() + ), + siteId: core.serialization.property("site_id", core.serialization.string().optional()), + routes: core.serialization.list(Route).optional(), +}); + +export declare namespace CdnConfig { + interface Raw { + build_command?: string | null; + build_output?: string | null; + build_env?: Record | null; + site_id?: string | null; + routes?: Route.Raw[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/CustomHeadersMiddleware.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/CustomHeadersMiddleware.ts new file mode 100644 index 0000000000..e7b6e01407 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/CustomHeadersMiddleware.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { Header } from "./Header"; + +export const CustomHeadersMiddleware: core.serialization.ObjectSchema< + serializers.cloud.version.cdn.CustomHeadersMiddleware.Raw, + Rivet.cloud.version.cdn.CustomHeadersMiddleware +> = core.serialization.object({ + headers: core.serialization.list(Header), +}); + +export declare namespace CustomHeadersMiddleware { + interface Raw { + headers: Header.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Header.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Header.ts new file mode 100644 index 0000000000..8feedcbc42 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Header.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const Header: core.serialization.ObjectSchema< + serializers.cloud.version.cdn.Header.Raw, + Rivet.cloud.version.cdn.Header +> = core.serialization.object({ + name: core.serialization.string(), + value: core.serialization.string(), +}); + +export declare namespace Header { + interface Raw { + name: string; + value: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Middleware.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Middleware.ts new file mode 100644 index 0000000000..126d18a4b2 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Middleware.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { MiddlewareKind } from "./MiddlewareKind"; + +export const Middleware: core.serialization.ObjectSchema< + serializers.cloud.version.cdn.Middleware.Raw, + Rivet.cloud.version.cdn.Middleware +> = core.serialization.object({ + kind: MiddlewareKind, +}); + +export declare namespace Middleware { + interface Raw { + kind: MiddlewareKind.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/MiddlewareKind.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/MiddlewareKind.ts new file mode 100644 index 0000000000..0488abaf6b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/MiddlewareKind.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { CustomHeadersMiddleware } from "./CustomHeadersMiddleware"; + +export const MiddlewareKind: core.serialization.ObjectSchema< + serializers.cloud.version.cdn.MiddlewareKind.Raw, + Rivet.cloud.version.cdn.MiddlewareKind +> = core.serialization.object({ + customHeaders: core.serialization.property("custom_headers", CustomHeadersMiddleware.optional()), +}); + +export declare namespace MiddlewareKind { + interface Raw { + custom_headers?: CustomHeadersMiddleware.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Route.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Route.ts new file mode 100644 index 0000000000..b6c1c4dca7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/Route.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { Middleware } from "./Middleware"; + +export const Route: core.serialization.ObjectSchema< + serializers.cloud.version.cdn.Route.Raw, + Rivet.cloud.version.cdn.Route +> = core.serialization.object({ + glob: core.serialization.string(), + priority: core.serialization.number(), + middlewares: core.serialization.list(Middleware), +}); + +export declare namespace Route { + interface Raw { + glob: string; + priority: number; + middlewares: Middleware.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/index.ts new file mode 100644 index 0000000000..0068675e78 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/cdn/types/index.ts @@ -0,0 +1,6 @@ +export * from "./CdnConfig"; +export * from "./Route"; +export * from "./Middleware"; +export * from "./MiddlewareKind"; +export * from "./CustomHeadersMiddleware"; +export * from "./Header"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/custom/types/CustomConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/custom/types/CustomConfig.ts new file mode 100644 index 0000000000..1b68794525 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/custom/types/CustomConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const CustomConfig: core.serialization.ObjectSchema< + serializers.cloud.version.engine.CustomConfig.Raw, + Rivet.cloud.version.engine.CustomConfig +> = core.serialization.object({}); + +export declare namespace CustomConfig { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/custom/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/custom/types/index.ts new file mode 100644 index 0000000000..381f2b6981 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/custom/types/index.ts @@ -0,0 +1 @@ +export * from "./CustomConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/godot/types/GodotConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/godot/types/GodotConfig.ts new file mode 100644 index 0000000000..71da391b33 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/godot/types/GodotConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const GodotConfig: core.serialization.ObjectSchema< + serializers.cloud.version.engine.GodotConfig.Raw, + Rivet.cloud.version.engine.GodotConfig +> = core.serialization.object({}); + +export declare namespace GodotConfig { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/godot/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/godot/types/index.ts new file mode 100644 index 0000000000..7cea9775b4 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/godot/types/index.ts @@ -0,0 +1 @@ +export * from "./GodotConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/html5/types/Html5Config.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/html5/types/Html5Config.ts new file mode 100644 index 0000000000..dbf832c38e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/html5/types/Html5Config.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const Html5Config: core.serialization.ObjectSchema< + serializers.cloud.version.engine.Html5Config.Raw, + Rivet.cloud.version.engine.Html5Config +> = core.serialization.object({}); + +export declare namespace Html5Config { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/html5/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/html5/types/index.ts new file mode 100644 index 0000000000..654a44c8f9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/html5/types/index.ts @@ -0,0 +1 @@ +export * from "./Html5Config"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unity/types/UnityConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unity/types/UnityConfig.ts new file mode 100644 index 0000000000..76f5ee189d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unity/types/UnityConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const UnityConfig: core.serialization.ObjectSchema< + serializers.cloud.version.engine.UnityConfig.Raw, + Rivet.cloud.version.engine.UnityConfig +> = core.serialization.object({}); + +export declare namespace UnityConfig { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unity/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unity/types/index.ts new file mode 100644 index 0000000000..1c90b32602 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unity/types/index.ts @@ -0,0 +1 @@ +export * from "./UnityConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unreal/types/UnrealConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unreal/types/UnrealConfig.ts new file mode 100644 index 0000000000..15e3f50da7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unreal/types/UnrealConfig.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const UnrealConfig: core.serialization.ObjectSchema< + serializers.cloud.version.engine.UnrealConfig.Raw, + Rivet.cloud.version.engine.UnrealConfig +> = core.serialization.object({ + gameModule: core.serialization.property("game_module", core.serialization.string()), +}); + +export declare namespace UnrealConfig { + interface Raw { + game_module: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unreal/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unreal/types/index.ts new file mode 100644 index 0000000000..3f35012393 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/resources/unreal/types/index.ts @@ -0,0 +1 @@ +export * from "./UnrealConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/types/EngineConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/types/EngineConfig.ts new file mode 100644 index 0000000000..c34acfedef --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/types/EngineConfig.ts @@ -0,0 +1,33 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { UnityConfig } from "../resources/unity/types/UnityConfig"; +import { UnrealConfig } from "../resources/unreal/types/UnrealConfig"; +import { GodotConfig } from "../resources/godot/types/GodotConfig"; +import { Html5Config } from "../resources/html5/types/Html5Config"; +import { CustomConfig } from "../resources/custom/types/CustomConfig"; + +export const EngineConfig: core.serialization.ObjectSchema< + serializers.cloud.version.engine.EngineConfig.Raw, + Rivet.cloud.version.engine.EngineConfig +> = core.serialization.object({ + unity: UnityConfig.optional(), + unreal: UnrealConfig.optional(), + godot: GodotConfig.optional(), + html5: Html5Config.optional(), + custom: CustomConfig.optional(), +}); + +export declare namespace EngineConfig { + interface Raw { + unity?: UnityConfig.Raw | null; + unreal?: UnrealConfig.Raw | null; + godot?: GodotConfig.Raw | null; + html5?: Html5Config.Raw | null; + custom?: CustomConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/types/index.ts new file mode 100644 index 0000000000..d60e08547f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/engine/types/index.ts @@ -0,0 +1 @@ +export * from "./EngineConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/CustomAvatar.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/CustomAvatar.ts new file mode 100644 index 0000000000..72dd6aff33 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/CustomAvatar.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CustomAvatar: core.serialization.ObjectSchema< + serializers.cloud.version.identity.CustomAvatar.Raw, + Rivet.cloud.version.identity.CustomAvatar +> = core.serialization.object({ + uploadId: core.serialization.property("upload_id", core.serialization.string()), +}); + +export declare namespace CustomAvatar { + interface Raw { + upload_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/CustomDisplayName.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/CustomDisplayName.ts new file mode 100644 index 0000000000..a3c48dd6b1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/CustomDisplayName.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { DisplayName } from "../../../../../../common/types/DisplayName"; + +export const CustomDisplayName: core.serialization.ObjectSchema< + serializers.cloud.version.identity.CustomDisplayName.Raw, + Rivet.cloud.version.identity.CustomDisplayName +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), +}); + +export declare namespace CustomDisplayName { + interface Raw { + display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/IdentityConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/IdentityConfig.ts new file mode 100644 index 0000000000..67913f6394 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/IdentityConfig.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { CustomDisplayName } from "./CustomDisplayName"; +import { CustomAvatar } from "./CustomAvatar"; + +export const IdentityConfig: core.serialization.ObjectSchema< + serializers.cloud.version.identity.IdentityConfig.Raw, + Rivet.cloud.version.identity.IdentityConfig +> = core.serialization.object({ + displayNames: core.serialization.property( + "display_names", + core.serialization.list(core.serialization.string()).optional() + ), + avatars: core.serialization.list(core.serialization.string()).optional(), + customDisplayNames: core.serialization.property( + "custom_display_names", + core.serialization.list(CustomDisplayName).optional() + ), + customAvatars: core.serialization.property("custom_avatars", core.serialization.list(CustomAvatar).optional()), +}); + +export declare namespace IdentityConfig { + interface Raw { + display_names?: string[] | null; + avatars?: string[] | null; + custom_display_names?: CustomDisplayName.Raw[] | null; + custom_avatars?: CustomAvatar.Raw[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/index.ts new file mode 100644 index 0000000000..9c8f2e22b8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/identity/types/index.ts @@ -0,0 +1,3 @@ +export * from "./IdentityConfig"; +export * from "./CustomDisplayName"; +export * from "./CustomAvatar"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/kv/types/KvConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/kv/types/KvConfig.ts new file mode 100644 index 0000000000..181cb89227 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/kv/types/KvConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const KvConfig: core.serialization.ObjectSchema< + serializers.cloud.version.kv.KvConfig.Raw, + Rivet.cloud.version.kv.KvConfig +> = core.serialization.object({}); + +export declare namespace KvConfig { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/kv/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/kv/types/index.ts new file mode 100644 index 0000000000..80bbe1357d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/kv/types/index.ts @@ -0,0 +1 @@ +export * from "./KvConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/Captcha.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/Captcha.ts new file mode 100644 index 0000000000..c95581fcb8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/Captcha.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { CaptchaHcaptcha } from "./CaptchaHcaptcha"; +import { CaptchaTurnstile } from "./CaptchaTurnstile"; + +export const Captcha: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.Captcha.Raw, + Rivet.cloud.version.matchmaker.Captcha +> = core.serialization.object({ + requestsBeforeReverify: core.serialization.property("requests_before_reverify", core.serialization.number()), + verificationTtl: core.serialization.property("verification_ttl", core.serialization.number()), + hcaptcha: CaptchaHcaptcha.optional(), + turnstile: CaptchaTurnstile.optional(), +}); + +export declare namespace Captcha { + interface Raw { + requests_before_reverify: number; + verification_ttl: number; + hcaptcha?: CaptchaHcaptcha.Raw | null; + turnstile?: CaptchaTurnstile.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptcha.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptcha.ts new file mode 100644 index 0000000000..1138e02cde --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptcha.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { CaptchaHcaptchaLevel } from "./CaptchaHcaptchaLevel"; + +export const CaptchaHcaptcha: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.CaptchaHcaptcha.Raw, + Rivet.cloud.version.matchmaker.CaptchaHcaptcha +> = core.serialization.object({ + level: CaptchaHcaptchaLevel.optional(), + siteKey: core.serialization.property("site_key", core.serialization.string().optional()), + secretKey: core.serialization.property("secret_key", core.serialization.string().optional()), +}); + +export declare namespace CaptchaHcaptcha { + interface Raw { + level?: CaptchaHcaptchaLevel.Raw | null; + site_key?: string | null; + secret_key?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptchaLevel.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptchaLevel.ts new file mode 100644 index 0000000000..d555e1ad85 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaHcaptchaLevel.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const CaptchaHcaptchaLevel: core.serialization.Schema< + serializers.cloud.version.matchmaker.CaptchaHcaptchaLevel.Raw, + Rivet.cloud.version.matchmaker.CaptchaHcaptchaLevel +> = core.serialization.enum_(["easy", "moderate", "difficult", "always_on"]); + +export declare namespace CaptchaHcaptchaLevel { + type Raw = "easy" | "moderate" | "difficult" | "always_on"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaTurnstile.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaTurnstile.ts new file mode 100644 index 0000000000..e2c3a01077 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/CaptchaTurnstile.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const CaptchaTurnstile: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.CaptchaTurnstile.Raw, + Rivet.cloud.version.matchmaker.CaptchaTurnstile +> = core.serialization.object({ + siteKey: core.serialization.property("site_key", core.serialization.string()), + secretKey: core.serialization.property("secret_key", core.serialization.string()), +}); + +export declare namespace CaptchaTurnstile { + interface Raw { + site_key: string; + secret_key: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/NetworkMode.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..3b98ae2778 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/NetworkMode.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const NetworkMode: core.serialization.Schema< + serializers.cloud.version.matchmaker.NetworkMode.Raw, + Rivet.cloud.version.matchmaker.NetworkMode +> = core.serialization.enum_(["bridge", "host"]); + +export declare namespace NetworkMode { + type Raw = "bridge" | "host"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortProtocol.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..e0263e07c3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortProtocol.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const PortProtocol: core.serialization.Schema< + serializers.cloud.version.matchmaker.PortProtocol.Raw, + Rivet.cloud.version.matchmaker.PortProtocol +> = core.serialization.enum_(["http", "https", "tcp", "tcp_tls", "udp"]); + +export declare namespace PortProtocol { + type Raw = "http" | "https" | "tcp" | "tcp_tls" | "udp"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortRange.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortRange.ts new file mode 100644 index 0000000000..3c0ce875a1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/PortRange.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const PortRange: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.PortRange.Raw, + Rivet.cloud.version.matchmaker.PortRange +> = core.serialization.object({ + min: core.serialization.number(), + max: core.serialization.number(), +}); + +export declare namespace PortRange { + interface Raw { + min: number; + max: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/ProxyKind.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/ProxyKind.ts new file mode 100644 index 0000000000..4230ed6f37 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/ProxyKind.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const ProxyKind: core.serialization.Schema< + serializers.cloud.version.matchmaker.ProxyKind.Raw, + Rivet.cloud.version.matchmaker.ProxyKind +> = core.serialization.enum_(["none", "game_guard"]); + +export declare namespace ProxyKind { + type Raw = "none" | "game_guard"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/index.ts new file mode 100644 index 0000000000..de5db03527 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/common/types/index.ts @@ -0,0 +1,8 @@ +export * from "./PortRange"; +export * from "./PortProtocol"; +export * from "./ProxyKind"; +export * from "./Captcha"; +export * from "./CaptchaHcaptcha"; +export * from "./CaptchaHcaptchaLevel"; +export * from "./CaptchaTurnstile"; +export * from "./NetworkMode"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameMode.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameMode.ts new file mode 100644 index 0000000000..e1d356a4c8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameMode.ts @@ -0,0 +1,47 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { GameModeRegion } from "./GameModeRegion"; +import { GameModeRuntimeDocker } from "./GameModeRuntimeDocker"; +import { GameModeActions } from "./GameModeActions"; +import { GameModeIdleLobbiesConfig } from "./GameModeIdleLobbiesConfig"; + +export const GameMode: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameMode.Raw, + Rivet.cloud.version.matchmaker.GameMode +> = core.serialization.object({ + regions: core.serialization.record(core.serialization.string(), GameModeRegion).optional(), + maxPlayers: core.serialization.property("max_players", core.serialization.number().optional()), + maxPlayersDirect: core.serialization.property("max_players_direct", core.serialization.number().optional()), + maxPlayersParty: core.serialization.property("max_players_party", core.serialization.number().optional()), + docker: GameModeRuntimeDocker.optional(), + listable: core.serialization.boolean().optional(), + taggable: core.serialization.boolean().optional(), + allowDynamicMaxPlayers: core.serialization.property( + "allow_dynamic_max_players", + core.serialization.boolean().optional() + ), + actions: GameModeActions.optional(), + tier: core.serialization.string().optional(), + idleLobbies: core.serialization.property("idle_lobbies", GameModeIdleLobbiesConfig.optional()), +}); + +export declare namespace GameMode { + interface Raw { + regions?: Record | null; + max_players?: number | null; + max_players_direct?: number | null; + max_players_party?: number | null; + docker?: GameModeRuntimeDocker.Raw | null; + listable?: boolean | null; + taggable?: boolean | null; + allow_dynamic_max_players?: boolean | null; + actions?: GameModeActions.Raw | null; + tier?: string | null; + idle_lobbies?: GameModeIdleLobbiesConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeActions.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeActions.ts new file mode 100644 index 0000000000..f189a2873e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeActions.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { GameModeFindConfig } from "./GameModeFindConfig"; +import { GameModeJoinConfig } from "./GameModeJoinConfig"; +import { GameModeCreateConfig } from "./GameModeCreateConfig"; + +export const GameModeActions: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeActions.Raw, + Rivet.cloud.version.matchmaker.GameModeActions +> = core.serialization.object({ + find: GameModeFindConfig.optional(), + join: GameModeJoinConfig.optional(), + create: GameModeCreateConfig.optional(), +}); + +export declare namespace GameModeActions { + interface Raw { + find?: GameModeFindConfig.Raw | null; + join?: GameModeJoinConfig.Raw | null; + create?: GameModeCreateConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeCreateConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeCreateConfig.ts new file mode 100644 index 0000000000..1b95cfa6d0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeCreateConfig.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { GameModeIdentityRequirement } from "./GameModeIdentityRequirement"; +import { GameModeVerificationConfig } from "./GameModeVerificationConfig"; + +export const GameModeCreateConfig: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeCreateConfig.Raw, + Rivet.cloud.version.matchmaker.GameModeCreateConfig +> = core.serialization.object({ + enabled: core.serialization.boolean(), + identityRequirement: core.serialization.property("identity_requirement", GameModeIdentityRequirement.optional()), + verification: GameModeVerificationConfig.optional(), + enablePublic: core.serialization.property("enable_public", core.serialization.boolean().optional()), + enablePrivate: core.serialization.property("enable_private", core.serialization.boolean().optional()), + maxLobbiesPerIdentity: core.serialization.property( + "max_lobbies_per_identity", + core.serialization.number().optional() + ), +}); + +export declare namespace GameModeCreateConfig { + interface Raw { + enabled: boolean; + identity_requirement?: GameModeIdentityRequirement.Raw | null; + verification?: GameModeVerificationConfig.Raw | null; + enable_public?: boolean | null; + enable_private?: boolean | null; + max_lobbies_per_identity?: number | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeFindConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeFindConfig.ts new file mode 100644 index 0000000000..ed0ddd6112 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeFindConfig.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { GameModeIdentityRequirement } from "./GameModeIdentityRequirement"; +import { GameModeVerificationConfig } from "./GameModeVerificationConfig"; + +export const GameModeFindConfig: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeFindConfig.Raw, + Rivet.cloud.version.matchmaker.GameModeFindConfig +> = core.serialization.object({ + enabled: core.serialization.boolean(), + identityRequirement: core.serialization.property("identity_requirement", GameModeIdentityRequirement.optional()), + verification: GameModeVerificationConfig.optional(), +}); + +export declare namespace GameModeFindConfig { + interface Raw { + enabled: boolean; + identity_requirement?: GameModeIdentityRequirement.Raw | null; + verification?: GameModeVerificationConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdentityRequirement.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdentityRequirement.ts new file mode 100644 index 0000000000..f049ccab05 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdentityRequirement.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const GameModeIdentityRequirement: core.serialization.Schema< + serializers.cloud.version.matchmaker.GameModeIdentityRequirement.Raw, + Rivet.cloud.version.matchmaker.GameModeIdentityRequirement +> = core.serialization.enum_(["none", "guest", "registered"]); + +export declare namespace GameModeIdentityRequirement { + type Raw = "none" | "guest" | "registered"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdleLobbiesConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdleLobbiesConfig.ts new file mode 100644 index 0000000000..02623ea99d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeIdleLobbiesConfig.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const GameModeIdleLobbiesConfig: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeIdleLobbiesConfig.Raw, + Rivet.cloud.version.matchmaker.GameModeIdleLobbiesConfig +> = core.serialization.object({ + min: core.serialization.number(), + max: core.serialization.number(), +}); + +export declare namespace GameModeIdleLobbiesConfig { + interface Raw { + min: number; + max: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeJoinConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeJoinConfig.ts new file mode 100644 index 0000000000..23980ee0bf --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeJoinConfig.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { GameModeIdentityRequirement } from "./GameModeIdentityRequirement"; +import { GameModeVerificationConfig } from "./GameModeVerificationConfig"; + +export const GameModeJoinConfig: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeJoinConfig.Raw, + Rivet.cloud.version.matchmaker.GameModeJoinConfig +> = core.serialization.object({ + enabled: core.serialization.boolean(), + identityRequirement: core.serialization.property("identity_requirement", GameModeIdentityRequirement.optional()), + verification: GameModeVerificationConfig.optional(), +}); + +export declare namespace GameModeJoinConfig { + interface Raw { + enabled: boolean; + identity_requirement?: GameModeIdentityRequirement.Raw | null; + verification?: GameModeVerificationConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRegion.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRegion.ts new file mode 100644 index 0000000000..f7bf171258 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRegion.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { GameModeIdleLobbiesConfig } from "./GameModeIdleLobbiesConfig"; + +export const GameModeRegion: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeRegion.Raw, + Rivet.cloud.version.matchmaker.GameModeRegion +> = core.serialization.object({ + tier: core.serialization.string().optional(), + idleLobbies: core.serialization.property("idle_lobbies", GameModeIdleLobbiesConfig.optional()), +}); + +export declare namespace GameModeRegion { + interface Raw { + tier?: string | null; + idle_lobbies?: GameModeIdleLobbiesConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDocker.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDocker.ts new file mode 100644 index 0000000000..fc56f9ce50 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDocker.ts @@ -0,0 +1,39 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { NetworkMode } from "../../common/types/NetworkMode"; +import { GameModeRuntimeDockerPort } from "./GameModeRuntimeDockerPort"; + +export const GameModeRuntimeDocker: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeRuntimeDocker.Raw, + Rivet.cloud.version.matchmaker.GameModeRuntimeDocker +> = core.serialization.object({ + dockerfile: core.serialization.string().optional(), + buildArgs: core.serialization.property( + "build_args", + core.serialization.record(core.serialization.string(), core.serialization.string()).optional() + ), + image: core.serialization.string().optional(), + imageId: core.serialization.property("image_id", core.serialization.string().optional()), + args: core.serialization.list(core.serialization.string()).optional(), + env: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), + networkMode: core.serialization.property("network_mode", NetworkMode.optional()), + ports: core.serialization.record(core.serialization.string(), GameModeRuntimeDockerPort).optional(), +}); + +export declare namespace GameModeRuntimeDocker { + interface Raw { + dockerfile?: string | null; + build_args?: Record | null; + image?: string | null; + image_id?: string | null; + args?: string[] | null; + env?: Record | null; + network_mode?: NetworkMode.Raw | null; + ports?: Record | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDockerPort.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDockerPort.ts new file mode 100644 index 0000000000..73ee77fb4d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeRuntimeDockerPort.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { PortRange } from "../../common/types/PortRange"; +import { PortProtocol } from "../../common/types/PortProtocol"; +import { ProxyKind } from "../../common/types/ProxyKind"; + +export const GameModeRuntimeDockerPort: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeRuntimeDockerPort.Raw, + Rivet.cloud.version.matchmaker.GameModeRuntimeDockerPort +> = core.serialization.object({ + port: core.serialization.number().optional(), + portRange: core.serialization.property("port_range", PortRange.optional()), + protocol: PortProtocol.optional(), + proxy: ProxyKind.optional(), + devPort: core.serialization.property("dev_port", core.serialization.number().optional()), + devPortRange: core.serialization.property("dev_port_range", PortRange.optional()), + devProtocol: core.serialization.property("dev_protocol", PortProtocol.optional()), +}); + +export declare namespace GameModeRuntimeDockerPort { + interface Raw { + port?: number | null; + port_range?: PortRange.Raw | null; + protocol?: PortProtocol.Raw | null; + proxy?: ProxyKind.Raw | null; + dev_port?: number | null; + dev_port_range?: PortRange.Raw | null; + dev_protocol?: PortProtocol.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeVerificationConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeVerificationConfig.ts new file mode 100644 index 0000000000..21be3978e3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/GameModeVerificationConfig.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const GameModeVerificationConfig: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.GameModeVerificationConfig.Raw, + Rivet.cloud.version.matchmaker.GameModeVerificationConfig +> = core.serialization.object({ + url: core.serialization.string(), + headers: core.serialization.record(core.serialization.string(), core.serialization.string()), +}); + +export declare namespace GameModeVerificationConfig { + interface Raw { + url: string; + headers: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/index.ts new file mode 100644 index 0000000000..724ddf9090 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/gameMode/types/index.ts @@ -0,0 +1,11 @@ +export * from "./GameMode"; +export * from "./GameModeRegion"; +export * from "./GameModeRuntimeDocker"; +export * from "./GameModeRuntimeDockerPort"; +export * from "./GameModeIdleLobbiesConfig"; +export * from "./GameModeActions"; +export * from "./GameModeIdentityRequirement"; +export * from "./GameModeVerificationConfig"; +export * from "./GameModeFindConfig"; +export * from "./GameModeJoinConfig"; +export * from "./GameModeCreateConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroup.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroup.ts new file mode 100644 index 0000000000..cd4ec8ed47 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroup.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { LobbyGroupRegion } from "./LobbyGroupRegion"; +import { LobbyGroupRuntime } from "./LobbyGroupRuntime"; + +export const LobbyGroup: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.LobbyGroup.Raw, + Rivet.cloud.version.matchmaker.LobbyGroup +> = core.serialization.object({ + nameId: core.serialization.property("name_id", core.serialization.string()), + regions: core.serialization.list(LobbyGroupRegion), + maxPlayersNormal: core.serialization.property("max_players_normal", core.serialization.number()), + maxPlayersDirect: core.serialization.property("max_players_direct", core.serialization.number()), + maxPlayersParty: core.serialization.property("max_players_party", core.serialization.number()), + runtime: LobbyGroupRuntime, +}); + +export declare namespace LobbyGroup { + interface Raw { + name_id: string; + regions: LobbyGroupRegion.Raw[]; + max_players_normal: number; + max_players_direct: number; + max_players_party: number; + runtime: LobbyGroupRuntime.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupIdleLobbiesConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupIdleLobbiesConfig.ts new file mode 100644 index 0000000000..35c01536b6 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupIdleLobbiesConfig.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const LobbyGroupIdleLobbiesConfig: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.LobbyGroupIdleLobbiesConfig.Raw, + Rivet.cloud.version.matchmaker.LobbyGroupIdleLobbiesConfig +> = core.serialization.object({ + minIdleLobbies: core.serialization.property("min_idle_lobbies", core.serialization.number()), + maxIdleLobbies: core.serialization.property("max_idle_lobbies", core.serialization.number()), +}); + +export declare namespace LobbyGroupIdleLobbiesConfig { + interface Raw { + min_idle_lobbies: number; + max_idle_lobbies: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRegion.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRegion.ts new file mode 100644 index 0000000000..9c87a5e205 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRegion.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { LobbyGroupIdleLobbiesConfig } from "./LobbyGroupIdleLobbiesConfig"; + +export const LobbyGroupRegion: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.LobbyGroupRegion.Raw, + Rivet.cloud.version.matchmaker.LobbyGroupRegion +> = core.serialization.object({ + regionId: core.serialization.property("region_id", core.serialization.string()), + tierNameId: core.serialization.property("tier_name_id", core.serialization.string()), + idleLobbies: core.serialization.property("idle_lobbies", LobbyGroupIdleLobbiesConfig.optional()), +}); + +export declare namespace LobbyGroupRegion { + interface Raw { + region_id: string; + tier_name_id: string; + idle_lobbies?: LobbyGroupIdleLobbiesConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntime.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntime.ts new file mode 100644 index 0000000000..3f9a167b92 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntime.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { LobbyGroupRuntimeDocker } from "./LobbyGroupRuntimeDocker"; + +export const LobbyGroupRuntime: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.LobbyGroupRuntime.Raw, + Rivet.cloud.version.matchmaker.LobbyGroupRuntime +> = core.serialization.object({ + docker: LobbyGroupRuntimeDocker.optional(), +}); + +export declare namespace LobbyGroupRuntime { + interface Raw { + docker?: LobbyGroupRuntimeDocker.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDocker.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDocker.ts new file mode 100644 index 0000000000..3448308246 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDocker.ts @@ -0,0 +1,31 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { LobbyGroupRuntimeDockerEnvVar } from "./LobbyGroupRuntimeDockerEnvVar"; +import { NetworkMode } from "../../common/types/NetworkMode"; +import { LobbyGroupRuntimeDockerPort } from "./LobbyGroupRuntimeDockerPort"; + +export const LobbyGroupRuntimeDocker: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.LobbyGroupRuntimeDocker.Raw, + Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDocker +> = core.serialization.object({ + buildId: core.serialization.property("build_id", core.serialization.string().optional()), + args: core.serialization.list(core.serialization.string()), + envVars: core.serialization.property("env_vars", core.serialization.list(LobbyGroupRuntimeDockerEnvVar)), + networkMode: core.serialization.property("network_mode", NetworkMode.optional()), + ports: core.serialization.list(LobbyGroupRuntimeDockerPort), +}); + +export declare namespace LobbyGroupRuntimeDocker { + interface Raw { + build_id?: string | null; + args: string[]; + env_vars: LobbyGroupRuntimeDockerEnvVar.Raw[]; + network_mode?: NetworkMode.Raw | null; + ports: LobbyGroupRuntimeDockerPort.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerEnvVar.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerEnvVar.ts new file mode 100644 index 0000000000..e5832a1914 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerEnvVar.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; + +export const LobbyGroupRuntimeDockerEnvVar: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.LobbyGroupRuntimeDockerEnvVar.Raw, + Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDockerEnvVar +> = core.serialization.object({ + key: core.serialization.string(), + value: core.serialization.string(), +}); + +export declare namespace LobbyGroupRuntimeDockerEnvVar { + interface Raw { + key: string; + value: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort.ts new file mode 100644 index 0000000000..d35efab367 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/LobbyGroupRuntimeDockerPort.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../../../index"; +import * as Rivet from "../../../../../../../../../../api/index"; +import * as core from "../../../../../../../../../../core"; +import { PortRange } from "../../common/types/PortRange"; +import { PortProtocol } from "../../common/types/PortProtocol"; + +export const LobbyGroupRuntimeDockerPort: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.LobbyGroupRuntimeDockerPort.Raw, + Rivet.cloud.version.matchmaker.LobbyGroupRuntimeDockerPort +> = core.serialization.object({ + label: core.serialization.string(), + targetPort: core.serialization.property("target_port", core.serialization.number().optional()), + portRange: core.serialization.property("port_range", PortRange.optional()), + proxyProtocol: core.serialization.property("proxy_protocol", PortProtocol), +}); + +export declare namespace LobbyGroupRuntimeDockerPort { + interface Raw { + label: string; + target_port?: number | null; + port_range?: PortRange.Raw | null; + proxy_protocol: PortProtocol.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/index.ts new file mode 100644 index 0000000000..ced14a2af5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/resources/lobbyGroup/types/index.ts @@ -0,0 +1,7 @@ +export * from "./LobbyGroup"; +export * from "./LobbyGroupRuntime"; +export * from "./LobbyGroupRegion"; +export * from "./LobbyGroupRuntimeDocker"; +export * from "./LobbyGroupRuntimeDockerEnvVar"; +export * from "./LobbyGroupRuntimeDockerPort"; +export * from "./LobbyGroupIdleLobbiesConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/types/MatchmakerConfig.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/types/MatchmakerConfig.ts new file mode 100644 index 0000000000..d9e3f284d7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/types/MatchmakerConfig.ts @@ -0,0 +1,49 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; +import { GameMode } from "../resources/gameMode/types/GameMode"; +import { Captcha } from "../resources/common/types/Captcha"; +import { GameModeRegion } from "../resources/gameMode/types/GameModeRegion"; +import { GameModeRuntimeDocker } from "../resources/gameMode/types/GameModeRuntimeDocker"; +import { GameModeIdleLobbiesConfig } from "../resources/gameMode/types/GameModeIdleLobbiesConfig"; +import { LobbyGroup } from "../resources/lobbyGroup/types/LobbyGroup"; + +export const MatchmakerConfig: core.serialization.ObjectSchema< + serializers.cloud.version.matchmaker.MatchmakerConfig.Raw, + Rivet.cloud.version.matchmaker.MatchmakerConfig +> = core.serialization.object({ + gameModes: core.serialization.property( + "game_modes", + core.serialization.record(core.serialization.string(), GameMode).optional() + ), + captcha: Captcha.optional(), + devHostname: core.serialization.property("dev_hostname", core.serialization.string().optional()), + regions: core.serialization.record(core.serialization.string(), GameModeRegion).optional(), + maxPlayers: core.serialization.property("max_players", core.serialization.number().optional()), + maxPlayersDirect: core.serialization.property("max_players_direct", core.serialization.number().optional()), + maxPlayersParty: core.serialization.property("max_players_party", core.serialization.number().optional()), + docker: GameModeRuntimeDocker.optional(), + tier: core.serialization.string().optional(), + idleLobbies: core.serialization.property("idle_lobbies", GameModeIdleLobbiesConfig.optional()), + lobbyGroups: core.serialization.property("lobby_groups", core.serialization.list(LobbyGroup).optional()), +}); + +export declare namespace MatchmakerConfig { + interface Raw { + game_modes?: Record | null; + captcha?: Captcha.Raw | null; + dev_hostname?: string | null; + regions?: Record | null; + max_players?: number | null; + max_players_direct?: number | null; + max_players_party?: number | null; + docker?: GameModeRuntimeDocker.Raw | null; + tier?: string | null; + idle_lobbies?: GameModeIdleLobbiesConfig.Raw | null; + lobby_groups?: LobbyGroup.Raw[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/types/index.ts new file mode 100644 index 0000000000..51fa298c3c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/resources/matchmaker/types/index.ts @@ -0,0 +1 @@ +export * from "./MatchmakerConfig"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Config.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Config.ts new file mode 100644 index 0000000000..3bd2170f7c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Config.ts @@ -0,0 +1,33 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { EngineConfig } from "../resources/engine/types/EngineConfig"; +import { CdnConfig } from "../resources/cdn/types/CdnConfig"; +import { MatchmakerConfig } from "../resources/matchmaker/types/MatchmakerConfig"; +import { KvConfig } from "../resources/kv/types/KvConfig"; +import { IdentityConfig } from "../resources/identity/types/IdentityConfig"; + +export const Config: core.serialization.ObjectSchema = + core.serialization.object({ + scripts: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), + engine: EngineConfig.optional(), + cdn: CdnConfig.optional(), + matchmaker: MatchmakerConfig.optional(), + kv: KvConfig.optional(), + identity: IdentityConfig.optional(), + }); + +export declare namespace Config { + interface Raw { + scripts?: Record | null; + engine?: EngineConfig.Raw | null; + cdn?: CdnConfig.Raw | null; + matchmaker?: MatchmakerConfig.Raw | null; + kv?: KvConfig.Raw | null; + identity?: IdentityConfig.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Full.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Full.ts new file mode 100644 index 0000000000..a182f4847b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Full.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { Config } from "./Config"; + +export const Full: core.serialization.ObjectSchema = + core.serialization.object({ + versionId: core.serialization.property("version_id", core.serialization.string()), + createTs: core.serialization.property("create_ts", Timestamp), + displayName: core.serialization.property("display_name", DisplayName), + config: Config, + }); + +export declare namespace Full { + interface Raw { + version_id: string; + create_ts: Timestamp.Raw; + display_name: DisplayName.Raw; + config: Config.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Summary.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Summary.ts new file mode 100644 index 0000000000..2603115fe0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/Summary.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const Summary: core.serialization.ObjectSchema< + serializers.cloud.version.Summary.Raw, + Rivet.cloud.version.Summary +> = core.serialization.object({ + versionId: core.serialization.property("version_id", core.serialization.string()), + createTs: core.serialization.property("create_ts", Timestamp), + displayName: core.serialization.property("display_name", DisplayName), +}); + +export declare namespace Summary { + interface Raw { + version_id: string; + create_ts: Timestamp.Raw; + display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/index.ts new file mode 100644 index 0000000000..ab57cdad09 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/resources/version/types/index.ts @@ -0,0 +1,3 @@ +export * from "./Config"; +export * from "./Full"; +export * from "./Summary"; diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapAccess.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapAccess.ts new file mode 100644 index 0000000000..fe99100e72 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapAccess.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const BootstrapAccess: core.serialization.Schema< + serializers.cloud.BootstrapAccess.Raw, + Rivet.cloud.BootstrapAccess +> = core.serialization.enum_(["public", "private", "development"]); + +export declare namespace BootstrapAccess { + type Raw = "public" | "private" | "development"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCaptcha.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCaptcha.ts new file mode 100644 index 0000000000..a4ef591401 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCaptcha.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { BootstrapCaptchaTurnstile } from "./BootstrapCaptchaTurnstile"; + +export const BootstrapCaptcha: core.serialization.ObjectSchema< + serializers.cloud.BootstrapCaptcha.Raw, + Rivet.cloud.BootstrapCaptcha +> = core.serialization.object({ + turnstile: BootstrapCaptchaTurnstile.optional(), +}); + +export declare namespace BootstrapCaptcha { + interface Raw { + turnstile?: BootstrapCaptchaTurnstile.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCaptchaTurnstile.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCaptchaTurnstile.ts new file mode 100644 index 0000000000..994b9afeca --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCaptchaTurnstile.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const BootstrapCaptchaTurnstile: core.serialization.ObjectSchema< + serializers.cloud.BootstrapCaptchaTurnstile.Raw, + Rivet.cloud.BootstrapCaptchaTurnstile +> = core.serialization.object({ + siteKey: core.serialization.property("site_key", core.serialization.string()), +}); + +export declare namespace BootstrapCaptchaTurnstile { + interface Raw { + site_key: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCluster.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCluster.ts new file mode 100644 index 0000000000..2fb5e2077f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapCluster.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const BootstrapCluster: core.serialization.Schema< + serializers.cloud.BootstrapCluster.Raw, + Rivet.cloud.BootstrapCluster +> = core.serialization.enum_(["enterprise", "oss"]); + +export declare namespace BootstrapCluster { + type Raw = "enterprise" | "oss"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapDomains.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapDomains.ts new file mode 100644 index 0000000000..2c2d984f9f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapDomains.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const BootstrapDomains: core.serialization.ObjectSchema< + serializers.cloud.BootstrapDomains.Raw, + Rivet.cloud.BootstrapDomains +> = core.serialization.object({ + cdn: core.serialization.string().optional(), + job: core.serialization.string().optional(), + main: core.serialization.string().optional(), + opengb: core.serialization.string().optional(), +}); + +export declare namespace BootstrapDomains { + interface Raw { + cdn?: string | null; + job?: string | null; + main?: string | null; + opengb?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapLoginMethods.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapLoginMethods.ts new file mode 100644 index 0000000000..3027833da7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapLoginMethods.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const BootstrapLoginMethods: core.serialization.ObjectSchema< + serializers.cloud.BootstrapLoginMethods.Raw, + Rivet.cloud.BootstrapLoginMethods +> = core.serialization.object({ + email: core.serialization.boolean(), + accessToken: core.serialization.property("access_token", core.serialization.boolean().optional()), +}); + +export declare namespace BootstrapLoginMethods { + interface Raw { + email: boolean; + access_token?: boolean | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapOrigins.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapOrigins.ts new file mode 100644 index 0000000000..bc5727b92c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapOrigins.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const BootstrapOrigins: core.serialization.ObjectSchema< + serializers.cloud.BootstrapOrigins.Raw, + Rivet.cloud.BootstrapOrigins +> = core.serialization.object({ + hub: core.serialization.string(), +}); + +export declare namespace BootstrapOrigins { + interface Raw { + hub: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapResponse.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapResponse.ts new file mode 100644 index 0000000000..fc7d876bea --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/BootstrapResponse.ts @@ -0,0 +1,38 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { BootstrapCluster } from "./BootstrapCluster"; +import { BootstrapAccess } from "./BootstrapAccess"; +import { BootstrapDomains } from "./BootstrapDomains"; +import { BootstrapOrigins } from "./BootstrapOrigins"; +import { BootstrapCaptcha } from "./BootstrapCaptcha"; +import { BootstrapLoginMethods } from "./BootstrapLoginMethods"; + +export const BootstrapResponse: core.serialization.ObjectSchema< + serializers.cloud.BootstrapResponse.Raw, + Rivet.cloud.BootstrapResponse +> = core.serialization.object({ + cluster: BootstrapCluster, + access: BootstrapAccess, + domains: BootstrapDomains, + origins: BootstrapOrigins, + captcha: BootstrapCaptcha, + loginMethods: core.serialization.property("login_methods", BootstrapLoginMethods), + deployHash: core.serialization.property("deploy_hash", core.serialization.string()), +}); + +export declare namespace BootstrapResponse { + interface Raw { + cluster: BootstrapCluster.Raw; + access: BootstrapAccess.Raw; + domains: BootstrapDomains.Raw; + origins: BootstrapOrigins.Raw; + captcha: BootstrapCaptcha.Raw; + login_methods: BootstrapLoginMethods.Raw; + deploy_hash: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/cloud/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/cloud/types/index.ts new file mode 100644 index 0000000000..73c144b622 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/cloud/types/index.ts @@ -0,0 +1,8 @@ +export * from "./BootstrapResponse"; +export * from "./BootstrapCluster"; +export * from "./BootstrapAccess"; +export * from "./BootstrapDomains"; +export * from "./BootstrapOrigins"; +export * from "./BootstrapCaptcha"; +export * from "./BootstrapCaptchaTurnstile"; +export * from "./BootstrapLoginMethods"; diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/AccountNumber.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/AccountNumber.ts new file mode 100644 index 0000000000..3cf8a4de6c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/AccountNumber.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const AccountNumber: core.serialization.Schema = + core.serialization.number(); + +export declare namespace AccountNumber { + type Raw = number; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/Bio.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/Bio.ts new file mode 100644 index 0000000000..a791f395ff --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/Bio.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const Bio: core.serialization.Schema = core.serialization.string(); + +export declare namespace Bio { + type Raw = string; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/DisplayName.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/DisplayName.ts new file mode 100644 index 0000000000..e9852bbde3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/DisplayName.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const DisplayName: core.serialization.Schema = + core.serialization.string(); + +export declare namespace DisplayName { + type Raw = string; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/Email.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/Email.ts new file mode 100644 index 0000000000..a790c2c5c3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/Email.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const Email: core.serialization.Schema = core.serialization.string(); + +export declare namespace Email { + type Raw = string; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/EmptyObject.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/EmptyObject.ts new file mode 100644 index 0000000000..b6657cd174 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/EmptyObject.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const EmptyObject: core.serialization.ObjectSchema = + core.serialization.object({}); + +export declare namespace EmptyObject { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/ErrorBody.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/ErrorBody.ts new file mode 100644 index 0000000000..8f81f08206 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/ErrorBody.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { ErrorMetadata } from "./ErrorMetadata"; + +export const ErrorBody: core.serialization.ObjectSchema = + core.serialization.object({ + code: core.serialization.string(), + message: core.serialization.string(), + rayId: core.serialization.property("ray_id", core.serialization.string()), + documentation: core.serialization.string().optional(), + metadata: ErrorMetadata.optional(), + }); + +export declare namespace ErrorBody { + interface Raw { + code: string; + message: string; + ray_id: string; + documentation?: string | null; + metadata?: (ErrorMetadata.Raw | undefined) | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/ErrorMetadata.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/ErrorMetadata.ts new file mode 100644 index 0000000000..df2633a06a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/ErrorMetadata.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const ErrorMetadata: core.serialization.Schema = + core.serialization.unknown(); + +export declare namespace ErrorMetadata { + type Raw = unknown; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/GlobalEventNotification.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/GlobalEventNotification.ts new file mode 100644 index 0000000000..f551214041 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/GlobalEventNotification.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const GlobalEventNotification: core.serialization.ObjectSchema< + serializers.GlobalEventNotification.Raw, + Rivet.GlobalEventNotification +> = core.serialization.object({ + title: core.serialization.string(), + description: core.serialization.string(), + thumbnailUrl: core.serialization.property("thumbnail_url", core.serialization.string()), + url: core.serialization.string(), +}); + +export declare namespace GlobalEventNotification { + interface Raw { + title: string; + description: string; + thumbnail_url: string; + url: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/Identifier.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/Identifier.ts new file mode 100644 index 0000000000..d214516c24 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/Identifier.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const Identifier: core.serialization.Schema = + core.serialization.string(); + +export declare namespace Identifier { + type Raw = string; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/Jwt.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/Jwt.ts new file mode 100644 index 0000000000..0527bf6e24 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/Jwt.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const Jwt: core.serialization.Schema = core.serialization.string(); + +export declare namespace Jwt { + type Raw = string; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/Timestamp.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/Timestamp.ts new file mode 100644 index 0000000000..683755ac05 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/Timestamp.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const Timestamp: core.serialization.Schema = + core.serialization.date(); + +export declare namespace Timestamp { + type Raw = string; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/ValidationError.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/ValidationError.ts new file mode 100644 index 0000000000..0a779d0429 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/ValidationError.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const ValidationError: core.serialization.ObjectSchema = + core.serialization.object({ + path: core.serialization.list(core.serialization.string()), + }); + +export declare namespace ValidationError { + interface Raw { + path: string[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/WatchQuery.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/WatchQuery.ts new file mode 100644 index 0000000000..36b6bbbba5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/WatchQuery.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const WatchQuery: core.serialization.Schema = core.serialization + .string() + .optional(); + +export declare namespace WatchQuery { + type Raw = string | null | undefined; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/WatchResponse.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/WatchResponse.ts new file mode 100644 index 0000000000..9180fc3b44 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/WatchResponse.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const WatchResponse: core.serialization.ObjectSchema = + core.serialization.object({ + index: core.serialization.string(), + }); + +export declare namespace WatchResponse { + interface Raw { + index: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/common/types/index.ts new file mode 100644 index 0000000000..2247fadcf1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/common/types/index.ts @@ -0,0 +1,14 @@ +export * from "./Identifier"; +export * from "./Bio"; +export * from "./Email"; +export * from "./Jwt"; +export * from "./WatchQuery"; +export * from "./WatchResponse"; +export * from "./DisplayName"; +export * from "./AccountNumber"; +export * from "./Timestamp"; +export * from "./GlobalEventNotification"; +export * from "./ValidationError"; +export * from "./EmptyObject"; +export * from "./ErrorMetadata"; +export * from "./ErrorBody"; diff --git a/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/index.ts b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/index.ts new file mode 100644 index 0000000000..3e5335fe42 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/index.ts @@ -0,0 +1 @@ +export * from "./resources"; diff --git a/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/index.ts b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/index.ts new file mode 100644 index 0000000000..ff1f1c5be9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/index.ts @@ -0,0 +1 @@ +export * as pegboard from "./pegboard"; diff --git a/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/index.ts b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/index.ts new file mode 100644 index 0000000000..eea524d655 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/index.ts @@ -0,0 +1 @@ +export * from "./types"; diff --git a/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/PrewarmImageRequest.ts b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/PrewarmImageRequest.ts new file mode 100644 index 0000000000..77bc3ef412 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/PrewarmImageRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PrewarmImageRequest: core.serialization.ObjectSchema< + serializers.edgeIntercom.pegboard.PrewarmImageRequest.Raw, + Rivet.edgeIntercom.pegboard.PrewarmImageRequest +> = core.serialization.object({ + imageArtifactUrlStub: core.serialization.property("image_artifact_url_stub", core.serialization.string()), +}); + +export declare namespace PrewarmImageRequest { + interface Raw { + image_artifact_url_stub: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/ToggleClientDrainRequest.ts b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/ToggleClientDrainRequest.ts new file mode 100644 index 0000000000..bc52eac757 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/ToggleClientDrainRequest.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const ToggleClientDrainRequest: core.serialization.ObjectSchema< + serializers.edgeIntercom.pegboard.ToggleClientDrainRequest.Raw, + Rivet.edgeIntercom.pegboard.ToggleClientDrainRequest +> = core.serialization.object({ + draining: core.serialization.boolean(), + drainCompleteTs: core.serialization.property("drain_complete_ts", Timestamp.optional()), +}); + +export declare namespace ToggleClientDrainRequest { + interface Raw { + draining: boolean; + drain_complete_ts?: Timestamp.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/index.ts new file mode 100644 index 0000000000..15de136ddb --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/edgeIntercom/resources/pegboard/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PrewarmImageRequest"; +export * from "./ToggleClientDrainRequest"; diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/GameSummary.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/GameSummary.ts new file mode 100644 index 0000000000..58aac6da44 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/GameSummary.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { Handle } from "../../../../group/resources/common/types/Handle"; + +export const GameSummary: core.serialization.ObjectSchema = + core.serialization.object({ + gameId: core.serialization.property("game_id", core.serialization.string()), + nameId: core.serialization.property("name_id", Identifier), + displayName: core.serialization.property("display_name", DisplayName), + logoUrl: core.serialization.property("logo_url", core.serialization.string().optional()), + bannerUrl: core.serialization.property("banner_url", core.serialization.string().optional()), + url: core.serialization.string(), + developer: Handle, + totalPlayerCount: core.serialization.property("total_player_count", core.serialization.number()), + }); + +export declare namespace GameSummary { + interface Raw { + game_id: string; + name_id: Identifier.Raw; + display_name: DisplayName.Raw; + logo_url?: string | null; + banner_url?: string | null; + url: string; + developer: Handle.Raw; + total_player_count: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Handle.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Handle.ts new file mode 100644 index 0000000000..2cafe2de8c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Handle.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const Handle: core.serialization.ObjectSchema = + core.serialization.object({ + gameId: core.serialization.property("game_id", core.serialization.string()), + nameId: core.serialization.property("name_id", Identifier), + displayName: core.serialization.property("display_name", DisplayName), + logoUrl: core.serialization.property("logo_url", core.serialization.string().optional()), + bannerUrl: core.serialization.property("banner_url", core.serialization.string().optional()), + }); + +export declare namespace Handle { + interface Raw { + game_id: string; + name_id: Identifier.Raw; + display_name: DisplayName.Raw; + logo_url?: string | null; + banner_url?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/LeaderboardCategory.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/LeaderboardCategory.ts new file mode 100644 index 0000000000..50998493c9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/LeaderboardCategory.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const LeaderboardCategory: core.serialization.ObjectSchema< + serializers.game.LeaderboardCategory.Raw, + Rivet.game.LeaderboardCategory +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), +}); + +export declare namespace LeaderboardCategory { + interface Raw { + display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/PlatformLink.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/PlatformLink.ts new file mode 100644 index 0000000000..89802745db --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/PlatformLink.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const PlatformLink: core.serialization.ObjectSchema = + core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), + url: core.serialization.string(), + }); + +export declare namespace PlatformLink { + interface Raw { + display_name: DisplayName.Raw; + url: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Profile.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Profile.ts new file mode 100644 index 0000000000..bd19ed66cc --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Profile.ts @@ -0,0 +1,52 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { GroupSummary } from "../../../../group/resources/common/types/GroupSummary"; +import { PlatformLink } from "./PlatformLink"; +import { LeaderboardCategory } from "./LeaderboardCategory"; + +export const Profile: core.serialization.ObjectSchema = + core.serialization.object({ + gameId: core.serialization.property("game_id", core.serialization.string()), + nameId: core.serialization.property("name_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + logoUrl: core.serialization.property("logo_url", core.serialization.string().optional()), + bannerUrl: core.serialization.property("banner_url", core.serialization.string().optional()), + url: core.serialization.string(), + developer: GroupSummary, + tags: core.serialization.list(core.serialization.string()), + description: core.serialization.string(), + platforms: core.serialization.list(PlatformLink), + recommendedGroups: core.serialization.property("recommended_groups", core.serialization.list(GroupSummary)), + identityLeaderboardCategories: core.serialization.property( + "identity_leaderboard_categories", + core.serialization.list(LeaderboardCategory) + ), + groupLeaderboardCategories: core.serialization.property( + "group_leaderboard_categories", + core.serialization.list(LeaderboardCategory) + ), + }); + +export declare namespace Profile { + interface Raw { + game_id: string; + name_id: string; + display_name: DisplayName.Raw; + logo_url?: string | null; + banner_url?: string | null; + url: string; + developer: GroupSummary.Raw; + tags: string[]; + description: string; + platforms: PlatformLink.Raw[]; + recommended_groups: GroupSummary.Raw[]; + identity_leaderboard_categories: LeaderboardCategory.Raw[]; + group_leaderboard_categories: LeaderboardCategory.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Stat.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Stat.ts new file mode 100644 index 0000000000..226dc554d0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/Stat.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { StatConfig } from "./StatConfig"; + +export const Stat: core.serialization.ObjectSchema = + core.serialization.object({ + config: StatConfig, + overallValue: core.serialization.property("overall_value", core.serialization.number()), + }); + +export declare namespace Stat { + interface Raw { + config: StatConfig.Raw; + overall_value: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatAggregationMethod.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatAggregationMethod.ts new file mode 100644 index 0000000000..11f159258f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatAggregationMethod.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const StatAggregationMethod: core.serialization.Schema< + serializers.game.StatAggregationMethod.Raw, + Rivet.game.StatAggregationMethod +> = core.serialization.enum_(["sum", "average", "min", "max"]); + +export declare namespace StatAggregationMethod { + type Raw = "sum" | "average" | "min" | "max"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatConfig.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatConfig.ts new file mode 100644 index 0000000000..81269f5d3d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatConfig.ts @@ -0,0 +1,42 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { StatFormatMethod } from "./StatFormatMethod"; +import { StatAggregationMethod } from "./StatAggregationMethod"; +import { StatSortingMethod } from "./StatSortingMethod"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const StatConfig: core.serialization.ObjectSchema = + core.serialization.object({ + recordId: core.serialization.property("record_id", core.serialization.string()), + iconId: core.serialization.property("icon_id", core.serialization.string()), + format: StatFormatMethod, + aggregation: StatAggregationMethod, + sorting: StatSortingMethod, + priority: core.serialization.number(), + displayName: core.serialization.property("display_name", DisplayName), + postfixSingular: core.serialization.property("postfix_singular", core.serialization.string().optional()), + postfixPlural: core.serialization.property("postfix_plural", core.serialization.string().optional()), + prefixSingular: core.serialization.property("prefix_singular", core.serialization.string().optional()), + prefixPlural: core.serialization.property("prefix_plural", core.serialization.string().optional()), + }); + +export declare namespace StatConfig { + interface Raw { + record_id: string; + icon_id: string; + format: StatFormatMethod.Raw; + aggregation: StatAggregationMethod.Raw; + sorting: StatSortingMethod.Raw; + priority: number; + display_name: DisplayName.Raw; + postfix_singular?: string | null; + postfix_plural?: string | null; + prefix_singular?: string | null; + prefix_plural?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatFormatMethod.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatFormatMethod.ts new file mode 100644 index 0000000000..858e57f87f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatFormatMethod.ts @@ -0,0 +1,31 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const StatFormatMethod: core.serialization.Schema< + serializers.game.StatFormatMethod.Raw, + Rivet.game.StatFormatMethod +> = core.serialization.enum_([ + "integer", + "float_1", + "float_2", + "float_3", + "duration_minute", + "duration_second", + "duration_hundredth_second", +]); + +export declare namespace StatFormatMethod { + type Raw = + | "integer" + | "float_1" + | "float_2" + | "float_3" + | "duration_minute" + | "duration_second" + | "duration_hundredth_second"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatSortingMethod.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatSortingMethod.ts new file mode 100644 index 0000000000..83b2ad0612 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatSortingMethod.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const StatSortingMethod: core.serialization.Schema< + serializers.game.StatSortingMethod.Raw, + Rivet.game.StatSortingMethod +> = core.serialization.enum_(["desc", "asc"]); + +export declare namespace StatSortingMethod { + type Raw = "desc" | "asc"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatSummary.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatSummary.ts new file mode 100644 index 0000000000..a61a7f40c0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/StatSummary.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "./Handle"; +import { Stat } from "./Stat"; + +export const StatSummary: core.serialization.ObjectSchema = + core.serialization.object({ + game: Handle, + stats: core.serialization.list(Stat), + }); + +export declare namespace StatSummary { + interface Raw { + game: Handle.Raw; + stats: Stat.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/index.ts new file mode 100644 index 0000000000..0041c79492 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/game/resources/common/types/index.ts @@ -0,0 +1,11 @@ +export * from "./Handle"; +export * from "./GameSummary"; +export * from "./Profile"; +export * from "./PlatformLink"; +export * from "./LeaderboardCategory"; +export * from "./StatSummary"; +export * from "./Stat"; +export * from "./StatConfig"; +export * from "./StatFormatMethod"; +export * from "./StatAggregationMethod"; +export * from "./StatSortingMethod"; diff --git a/sdks/api/full/typescript/src/serialization/resources/games/resources/environments/resources/tokens/types/CreateServiceTokenResponse.ts b/sdks/api/full/typescript/src/serialization/resources/games/resources/environments/resources/tokens/types/CreateServiceTokenResponse.ts new file mode 100644 index 0000000000..6d1b9d545a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/games/resources/environments/resources/tokens/types/CreateServiceTokenResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../../../index"; +import * as Rivet from "../../../../../../../../api/index"; +import * as core from "../../../../../../../../core"; + +export const CreateServiceTokenResponse: core.serialization.ObjectSchema< + serializers.games.environments.CreateServiceTokenResponse.Raw, + Rivet.games.environments.CreateServiceTokenResponse +> = core.serialization.object({ + token: core.serialization.string(), +}); + +export declare namespace CreateServiceTokenResponse { + interface Raw { + token: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/games/resources/environments/resources/tokens/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/games/resources/environments/resources/tokens/types/index.ts new file mode 100644 index 0000000000..9c6f5a3f0f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/games/resources/environments/resources/tokens/types/index.ts @@ -0,0 +1 @@ +export * from "./CreateServiceTokenResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/Coord.ts b/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/Coord.ts new file mode 100644 index 0000000000..7d74fc7318 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/Coord.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Coord: core.serialization.ObjectSchema = + core.serialization.object({ + latitude: core.serialization.number(), + longitude: core.serialization.number(), + }); + +export declare namespace Coord { + interface Raw { + latitude: number; + longitude: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/Distance.ts b/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/Distance.ts new file mode 100644 index 0000000000..4e3185c4df --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/Distance.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Distance: core.serialization.ObjectSchema = + core.serialization.object({ + kilometers: core.serialization.number(), + miles: core.serialization.number(), + }); + +export declare namespace Distance { + interface Raw { + kilometers: number; + miles: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/index.ts new file mode 100644 index 0000000000..9bedc827df --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/geo/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./Coord"; +export * from "./Distance"; diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/BannedIdentity.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/BannedIdentity.ts new file mode 100644 index 0000000000..089aac4abd --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/BannedIdentity.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../../../identity/resources/common/types/Handle"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const BannedIdentity: core.serialization.ObjectSchema< + serializers.group.BannedIdentity.Raw, + Rivet.group.BannedIdentity +> = core.serialization.object({ + identity: Handle, + banTs: core.serialization.property("ban_ts", Timestamp), +}); + +export declare namespace BannedIdentity { + interface Raw { + identity: Handle.Raw; + ban_ts: Timestamp.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/ExternalLinks.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/ExternalLinks.ts new file mode 100644 index 0000000000..a39ac2525b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/ExternalLinks.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const ExternalLinks: core.serialization.ObjectSchema< + serializers.group.ExternalLinks.Raw, + Rivet.group.ExternalLinks +> = core.serialization.object({ + profile: core.serialization.string(), +}); + +export declare namespace ExternalLinks { + interface Raw { + profile: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/GroupSummary.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/GroupSummary.ts new file mode 100644 index 0000000000..f87d5c3de0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/GroupSummary.ts @@ -0,0 +1,42 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { ExternalLinks } from "./ExternalLinks"; +import { Bio } from "../../../../common/types/Bio"; +import { Publicity } from "./Publicity"; + +export const GroupSummary: core.serialization.ObjectSchema< + serializers.group.GroupSummary.Raw, + Rivet.group.GroupSummary +> = core.serialization.object({ + groupId: core.serialization.property("group_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + avatarUrl: core.serialization.property("avatar_url", core.serialization.string().optional()), + external: ExternalLinks, + isDeveloper: core.serialization.property("is_developer", core.serialization.boolean()), + bio: Bio, + isCurrentIdentityMember: core.serialization.property("is_current_identity_member", core.serialization.boolean()), + publicity: Publicity, + memberCount: core.serialization.property("member_count", core.serialization.number()), + ownerIdentityId: core.serialization.property("owner_identity_id", core.serialization.string()), +}); + +export declare namespace GroupSummary { + interface Raw { + group_id: string; + display_name: DisplayName.Raw; + avatar_url?: string | null; + external: ExternalLinks.Raw; + is_developer: boolean; + bio: Bio.Raw; + is_current_identity_member: boolean; + publicity: Publicity.Raw; + member_count: number; + owner_identity_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Handle.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Handle.ts new file mode 100644 index 0000000000..222932c6cf --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Handle.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { ExternalLinks } from "./ExternalLinks"; + +export const Handle: core.serialization.ObjectSchema = + core.serialization.object({ + groupId: core.serialization.property("group_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + avatarUrl: core.serialization.property("avatar_url", core.serialization.string().optional()), + external: ExternalLinks, + isDeveloper: core.serialization.property("is_developer", core.serialization.boolean().optional()), + }); + +export declare namespace Handle { + interface Raw { + group_id: string; + display_name: DisplayName.Raw; + avatar_url?: string | null; + external: ExternalLinks.Raw; + is_developer?: boolean | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/JoinRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/JoinRequest.ts new file mode 100644 index 0000000000..59e6efae06 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/JoinRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../../../identity/resources/common/types/Handle"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const JoinRequest: core.serialization.ObjectSchema = + core.serialization.object({ + identity: Handle, + ts: Timestamp, + }); + +export declare namespace JoinRequest { + interface Raw { + identity: Handle.Raw; + ts: Timestamp.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Member.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Member.ts new file mode 100644 index 0000000000..e0ef873442 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Member.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../../../identity/resources/common/types/Handle"; + +export const Member: core.serialization.ObjectSchema = + core.serialization.object({ + identity: Handle, + }); + +export declare namespace Member { + interface Raw { + identity: Handle.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Profile.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Profile.ts new file mode 100644 index 0000000000..557cf7b11e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Profile.ts @@ -0,0 +1,53 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { ExternalLinks } from "./ExternalLinks"; +import { Publicity } from "./Publicity"; +import { Member } from "./Member"; +import { JoinRequest } from "./JoinRequest"; + +export const Profile: core.serialization.ObjectSchema = + core.serialization.object({ + groupId: core.serialization.property("group_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + avatarUrl: core.serialization.property("avatar_url", core.serialization.string().optional()), + external: ExternalLinks, + isDeveloper: core.serialization.property("is_developer", core.serialization.boolean().optional()), + bio: core.serialization.string(), + isCurrentIdentityMember: core.serialization.property( + "is_current_identity_member", + core.serialization.boolean().optional() + ), + publicity: Publicity, + memberCount: core.serialization.property("member_count", core.serialization.number().optional()), + members: core.serialization.list(Member), + joinRequests: core.serialization.property("join_requests", core.serialization.list(JoinRequest)), + isCurrentIdentityRequestingJoin: core.serialization.property( + "is_current_identity_requesting_join", + core.serialization.boolean().optional() + ), + ownerIdentityId: core.serialization.property("owner_identity_id", core.serialization.string()), + }); + +export declare namespace Profile { + interface Raw { + group_id: string; + display_name: DisplayName.Raw; + avatar_url?: string | null; + external: ExternalLinks.Raw; + is_developer?: boolean | null; + bio: string; + is_current_identity_member?: boolean | null; + publicity: Publicity.Raw; + member_count?: number | null; + members: Member.Raw[]; + join_requests: JoinRequest.Raw[]; + is_current_identity_requesting_join?: boolean | null; + owner_identity_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Publicity.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Publicity.ts new file mode 100644 index 0000000000..ed4d8cd1b7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/Publicity.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Publicity: core.serialization.Schema = + core.serialization.enum_(["open", "closed"]); + +export declare namespace Publicity { + type Raw = "open" | "closed"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/index.ts new file mode 100644 index 0000000000..1973d736c4 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/common/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GroupSummary"; +export * from "./Publicity"; +export * from "./Handle"; +export * from "./ExternalLinks"; +export * from "./JoinRequest"; +export * from "./Member"; +export * from "./Profile"; +export * from "./BannedIdentity"; diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/ConsumeInviteResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/ConsumeInviteResponse.ts new file mode 100644 index 0000000000..3de51f2691 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/ConsumeInviteResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const ConsumeInviteResponse: core.serialization.ObjectSchema< + serializers.group.ConsumeInviteResponse.Raw, + Rivet.group.ConsumeInviteResponse +> = core.serialization.object({ + groupId: core.serialization.property("group_id", core.serialization.string().optional()), +}); + +export declare namespace ConsumeInviteResponse { + interface Raw { + group_id?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/CreateInviteRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/CreateInviteRequest.ts new file mode 100644 index 0000000000..d2d7357e78 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/CreateInviteRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CreateInviteRequest: core.serialization.ObjectSchema< + serializers.group.CreateInviteRequest.Raw, + Rivet.group.CreateInviteRequest +> = core.serialization.object({ + ttl: core.serialization.number().optional(), + useCount: core.serialization.property("use_count", core.serialization.number().optional()), +}); + +export declare namespace CreateInviteRequest { + interface Raw { + ttl?: number | null; + use_count?: number | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/CreateInviteResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/CreateInviteResponse.ts new file mode 100644 index 0000000000..2355c06300 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/CreateInviteResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CreateInviteResponse: core.serialization.ObjectSchema< + serializers.group.CreateInviteResponse.Raw, + Rivet.group.CreateInviteResponse +> = core.serialization.object({ + code: core.serialization.string(), +}); + +export declare namespace CreateInviteResponse { + interface Raw { + code: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/GetInviteResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/GetInviteResponse.ts new file mode 100644 index 0000000000..b0d4a454d5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/GetInviteResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../common/types/Handle"; + +export const GetInviteResponse: core.serialization.ObjectSchema< + serializers.group.GetInviteResponse.Raw, + Rivet.group.GetInviteResponse +> = core.serialization.object({ + group: Handle, +}); + +export declare namespace GetInviteResponse { + interface Raw { + group: Handle.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/index.ts new file mode 100644 index 0000000000..f8a24bc37f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/invites/types/index.ts @@ -0,0 +1,4 @@ +export * from "./GetInviteResponse"; +export * from "./ConsumeInviteResponse"; +export * from "./CreateInviteRequest"; +export * from "./CreateInviteResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/joinRequests/types/ResolveJoinRequestRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/joinRequests/types/ResolveJoinRequestRequest.ts new file mode 100644 index 0000000000..e08dd8f3be --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/joinRequests/types/ResolveJoinRequestRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const ResolveJoinRequestRequest: core.serialization.ObjectSchema< + serializers.group.ResolveJoinRequestRequest.Raw, + Rivet.group.ResolveJoinRequestRequest +> = core.serialization.object({ + resolution: core.serialization.boolean().optional(), +}); + +export declare namespace ResolveJoinRequestRequest { + interface Raw { + resolution?: boolean | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/resources/joinRequests/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/group/resources/joinRequests/types/index.ts new file mode 100644 index 0000000000..1bb524e650 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/resources/joinRequests/types/index.ts @@ -0,0 +1 @@ +export * from "./ResolveJoinRequestRequest"; diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/CreateRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/CreateRequest.ts new file mode 100644 index 0000000000..0d741f8390 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/CreateRequest.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { DisplayName } from "../../common/types/DisplayName"; + +export const CreateRequest: core.serialization.ObjectSchema< + serializers.group.CreateRequest.Raw, + Rivet.group.CreateRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName), +}); + +export declare namespace CreateRequest { + interface Raw { + display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/CreateResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/CreateResponse.ts new file mode 100644 index 0000000000..6e3bd3440b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/CreateResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const CreateResponse: core.serialization.ObjectSchema< + serializers.group.CreateResponse.Raw, + Rivet.group.CreateResponse +> = core.serialization.object({ + groupId: core.serialization.property("group_id", core.serialization.string()), +}); + +export declare namespace CreateResponse { + interface Raw { + group_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/GetBansResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/GetBansResponse.ts new file mode 100644 index 0000000000..73a98e075b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/GetBansResponse.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { BannedIdentity } from "../resources/common/types/BannedIdentity"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const GetBansResponse: core.serialization.ObjectSchema< + serializers.group.GetBansResponse.Raw, + Rivet.group.GetBansResponse +> = core.serialization.object({ + bannedIdentities: core.serialization.property("banned_identities", core.serialization.list(BannedIdentity)), + anchor: core.serialization.string().optional(), + watch: WatchResponse, +}); + +export declare namespace GetBansResponse { + interface Raw { + banned_identities: BannedIdentity.Raw[]; + anchor?: string | null; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/GetJoinRequestsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/GetJoinRequestsResponse.ts new file mode 100644 index 0000000000..f8e5924d97 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/GetJoinRequestsResponse.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { JoinRequest } from "../resources/common/types/JoinRequest"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const GetJoinRequestsResponse: core.serialization.ObjectSchema< + serializers.group.GetJoinRequestsResponse.Raw, + Rivet.group.GetJoinRequestsResponse +> = core.serialization.object({ + joinRequests: core.serialization.property("join_requests", core.serialization.list(JoinRequest)), + anchor: core.serialization.string().optional(), + watch: WatchResponse, +}); + +export declare namespace GetJoinRequestsResponse { + interface Raw { + join_requests: JoinRequest.Raw[]; + anchor?: string | null; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/GetMembersResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/GetMembersResponse.ts new file mode 100644 index 0000000000..5caef1b35e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/GetMembersResponse.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Member } from "../resources/common/types/Member"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const GetMembersResponse: core.serialization.ObjectSchema< + serializers.group.GetMembersResponse.Raw, + Rivet.group.GetMembersResponse +> = core.serialization.object({ + members: core.serialization.list(Member), + anchor: core.serialization.string().optional(), + watch: WatchResponse, +}); + +export declare namespace GetMembersResponse { + interface Raw { + members: Member.Raw[]; + anchor?: string | null; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/GetProfileResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/GetProfileResponse.ts new file mode 100644 index 0000000000..6344c62324 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/GetProfileResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Profile } from "../resources/common/types/Profile"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const GetProfileResponse: core.serialization.ObjectSchema< + serializers.group.GetProfileResponse.Raw, + Rivet.group.GetProfileResponse +> = core.serialization.object({ + group: Profile, + watch: WatchResponse, +}); + +export declare namespace GetProfileResponse { + interface Raw { + group: Profile.Raw; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/GetSummaryResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/GetSummaryResponse.ts new file mode 100644 index 0000000000..a03835559b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/GetSummaryResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { GroupSummary } from "../resources/common/types/GroupSummary"; + +export const GetSummaryResponse: core.serialization.ObjectSchema< + serializers.group.GetSummaryResponse.Raw, + Rivet.group.GetSummaryResponse +> = core.serialization.object({ + group: GroupSummary, +}); + +export declare namespace GetSummaryResponse { + interface Raw { + group: GroupSummary.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/ListSuggestedResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/ListSuggestedResponse.ts new file mode 100644 index 0000000000..5b7434e51d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/ListSuggestedResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { GroupSummary } from "../resources/common/types/GroupSummary"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const ListSuggestedResponse: core.serialization.ObjectSchema< + serializers.group.ListSuggestedResponse.Raw, + Rivet.group.ListSuggestedResponse +> = core.serialization.object({ + groups: core.serialization.list(GroupSummary), + watch: WatchResponse, +}); + +export declare namespace ListSuggestedResponse { + interface Raw { + groups: GroupSummary.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/PrepareAvatarUploadRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/PrepareAvatarUploadRequest.ts new file mode 100644 index 0000000000..0e725cdeb7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/PrepareAvatarUploadRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const PrepareAvatarUploadRequest: core.serialization.ObjectSchema< + serializers.group.PrepareAvatarUploadRequest.Raw, + Rivet.group.PrepareAvatarUploadRequest +> = core.serialization.object({ + path: core.serialization.string(), + mime: core.serialization.string().optional(), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace PrepareAvatarUploadRequest { + interface Raw { + path: string; + mime?: string | null; + content_length: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/PrepareAvatarUploadResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/PrepareAvatarUploadResponse.ts new file mode 100644 index 0000000000..abe64d39a1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/PrepareAvatarUploadResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { PresignedRequest } from "../../upload/resources/common/types/PresignedRequest"; + +export const PrepareAvatarUploadResponse: core.serialization.ObjectSchema< + serializers.group.PrepareAvatarUploadResponse.Raw, + Rivet.group.PrepareAvatarUploadResponse +> = core.serialization.object({ + uploadId: core.serialization.property("upload_id", core.serialization.string()), + presignedRequest: core.serialization.property("presigned_request", PresignedRequest), +}); + +export declare namespace PrepareAvatarUploadResponse { + interface Raw { + upload_id: string; + presigned_request: PresignedRequest.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/TransferOwnershipRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/TransferOwnershipRequest.ts new file mode 100644 index 0000000000..ff137e18a0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/TransferOwnershipRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const TransferOwnershipRequest: core.serialization.ObjectSchema< + serializers.group.TransferOwnershipRequest.Raw, + Rivet.group.TransferOwnershipRequest +> = core.serialization.object({ + newOwnerIdentityId: core.serialization.property("new_owner_identity_id", core.serialization.string()), +}); + +export declare namespace TransferOwnershipRequest { + interface Raw { + new_owner_identity_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/UpdateProfileRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/UpdateProfileRequest.ts new file mode 100644 index 0000000000..e2d3658ca0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/UpdateProfileRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { DisplayName } from "../../common/types/DisplayName"; +import { Publicity } from "../resources/common/types/Publicity"; + +export const UpdateProfileRequest: core.serialization.ObjectSchema< + serializers.group.UpdateProfileRequest.Raw, + Rivet.group.UpdateProfileRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName.optional()), + bio: core.serialization.string().optional(), + publicity: Publicity.optional(), +}); + +export declare namespace UpdateProfileRequest { + interface Raw { + display_name?: DisplayName.Raw | null; + bio?: string | null; + publicity?: Publicity.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/ValidateProfileRequest.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/ValidateProfileRequest.ts new file mode 100644 index 0000000000..9e8a6b656b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/ValidateProfileRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { DisplayName } from "../../common/types/DisplayName"; +import { Publicity } from "../resources/common/types/Publicity"; + +export const ValidateProfileRequest: core.serialization.ObjectSchema< + serializers.group.ValidateProfileRequest.Raw, + Rivet.group.ValidateProfileRequest +> = core.serialization.object({ + displayName: core.serialization.property("display_name", DisplayName.optional()), + bio: DisplayName.optional(), + publicity: Publicity.optional(), +}); + +export declare namespace ValidateProfileRequest { + interface Raw { + display_name?: DisplayName.Raw | null; + bio?: DisplayName.Raw | null; + publicity?: Publicity.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/ValidateProfileResponse.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/ValidateProfileResponse.ts new file mode 100644 index 0000000000..b781e5f5aa --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/ValidateProfileResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { ValidationError } from "../../common/types/ValidationError"; + +export const ValidateProfileResponse: core.serialization.ObjectSchema< + serializers.group.ValidateProfileResponse.Raw, + Rivet.group.ValidateProfileResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateProfileResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/group/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/group/types/index.ts new file mode 100644 index 0000000000..bbb5c4b821 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/group/types/index.ts @@ -0,0 +1,14 @@ +export * from "./ListSuggestedResponse"; +export * from "./CreateRequest"; +export * from "./CreateResponse"; +export * from "./PrepareAvatarUploadRequest"; +export * from "./PrepareAvatarUploadResponse"; +export * from "./ValidateProfileRequest"; +export * from "./ValidateProfileResponse"; +export * from "./GetBansResponse"; +export * from "./GetJoinRequestsResponse"; +export * from "./GetMembersResponse"; +export * from "./GetProfileResponse"; +export * from "./UpdateProfileRequest"; +export * from "./GetSummaryResponse"; +export * from "./TransferOwnershipRequest"; diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/activities/types/ListActivitiesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/activities/types/ListActivitiesResponse.ts new file mode 100644 index 0000000000..23e390b993 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/activities/types/ListActivitiesResponse.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../common/types/Handle"; +import { GameSummary } from "../../../../game/resources/common/types/GameSummary"; +import { GroupSummary } from "../../../../group/resources/common/types/GroupSummary"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const ListActivitiesResponse: core.serialization.ObjectSchema< + serializers.identity.ListActivitiesResponse.Raw, + Rivet.identity.ListActivitiesResponse +> = core.serialization.object({ + identities: core.serialization.list(Handle), + games: core.serialization.list(GameSummary), + suggestedGroups: core.serialization.property("suggested_groups", core.serialization.list(GroupSummary)), + suggestedPlayers: core.serialization.property("suggested_players", core.serialization.list(Handle)), + watch: WatchResponse, +}); + +export declare namespace ListActivitiesResponse { + interface Raw { + identities: Handle.Raw[]; + games: GameSummary.Raw[]; + suggested_groups: GroupSummary.Raw[]; + suggested_players: Handle.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/activities/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/activities/types/index.ts new file mode 100644 index 0000000000..9f3dd3a19e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/activities/types/index.ts @@ -0,0 +1 @@ +export * from "./ListActivitiesResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/DevState.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/DevState.ts new file mode 100644 index 0000000000..e149ff07bf --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/DevState.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const DevState: core.serialization.Schema = + core.serialization.enum_(["inactive", "pending", "accepted"]); + +export declare namespace DevState { + type Raw = "inactive" | "pending" | "accepted"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/EmailLinkedAccount.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/EmailLinkedAccount.ts new file mode 100644 index 0000000000..4992909688 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/EmailLinkedAccount.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Email } from "../../../../common/types/Email"; + +export const EmailLinkedAccount: core.serialization.ObjectSchema< + serializers.identity.EmailLinkedAccount.Raw, + Rivet.identity.EmailLinkedAccount +> = core.serialization.object({ + email: Email, +}); + +export declare namespace EmailLinkedAccount { + interface Raw { + email: Email.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/ExternalLinks.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/ExternalLinks.ts new file mode 100644 index 0000000000..54f26e1b0e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/ExternalLinks.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const ExternalLinks: core.serialization.ObjectSchema< + serializers.identity.ExternalLinks.Raw, + Rivet.identity.ExternalLinks +> = core.serialization.object({ + profile: core.serialization.string(), + settings: core.serialization.string().optional(), +}); + +export declare namespace ExternalLinks { + interface Raw { + profile: string; + settings?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GameActivity.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GameActivity.ts new file mode 100644 index 0000000000..eac9607b82 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GameActivity.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../../../game/resources/common/types/Handle"; + +export const GameActivity: core.serialization.ObjectSchema< + serializers.identity.GameActivity.Raw, + Rivet.identity.GameActivity +> = core.serialization.object({ + game: Handle, + message: core.serialization.string(), + publicMetadata: core.serialization.property("public_metadata", core.serialization.unknown().optional()), + mutualMetadata: core.serialization.property("mutual_metadata", core.serialization.unknown().optional()), +}); + +export declare namespace GameActivity { + interface Raw { + game: Handle.Raw; + message: string; + public_metadata?: unknown | null; + mutual_metadata?: unknown | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GameLinkStatus.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GameLinkStatus.ts new file mode 100644 index 0000000000..a202e67b95 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GameLinkStatus.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GameLinkStatus: core.serialization.Schema< + serializers.identity.GameLinkStatus.Raw, + Rivet.identity.GameLinkStatus +> = core.serialization.enum_(["incomplete", "complete", "cancelled"]); + +export declare namespace GameLinkStatus { + type Raw = "incomplete" | "complete" | "cancelled"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEvent.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEvent.ts new file mode 100644 index 0000000000..746427c74b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEvent.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { GlobalEventKind } from "./GlobalEventKind"; +import { GlobalEventNotification } from "./GlobalEventNotification"; + +export const GlobalEvent: core.serialization.ObjectSchema< + serializers.identity.GlobalEvent.Raw, + Rivet.identity.GlobalEvent +> = core.serialization.object({ + ts: Timestamp, + kind: GlobalEventKind, + notification: GlobalEventNotification.optional(), +}); + +export declare namespace GlobalEvent { + interface Raw { + ts: Timestamp.Raw; + kind: GlobalEventKind.Raw; + notification?: GlobalEventNotification.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventIdentityUpdate.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventIdentityUpdate.ts new file mode 100644 index 0000000000..6820aa5461 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventIdentityUpdate.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Profile } from "./Profile"; + +export const GlobalEventIdentityUpdate: core.serialization.ObjectSchema< + serializers.identity.GlobalEventIdentityUpdate.Raw, + Rivet.identity.GlobalEventIdentityUpdate +> = core.serialization.object({ + identity: Profile, +}); + +export declare namespace GlobalEventIdentityUpdate { + interface Raw { + identity: Profile.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventKind.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventKind.ts new file mode 100644 index 0000000000..8e32f759de --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventKind.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GlobalEventIdentityUpdate } from "./GlobalEventIdentityUpdate"; + +export const GlobalEventKind: core.serialization.ObjectSchema< + serializers.identity.GlobalEventKind.Raw, + Rivet.identity.GlobalEventKind +> = core.serialization.object({ + identityUpdate: core.serialization.property("identity_update", GlobalEventIdentityUpdate.optional()), +}); + +export declare namespace GlobalEventKind { + interface Raw { + identity_update?: GlobalEventIdentityUpdate.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventNotification.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventNotification.ts new file mode 100644 index 0000000000..c1d56978ef --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/GlobalEventNotification.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GlobalEventNotification: core.serialization.ObjectSchema< + serializers.identity.GlobalEventNotification.Raw, + Rivet.identity.GlobalEventNotification +> = core.serialization.object({ + title: core.serialization.string(), + description: core.serialization.string(), + thumbnailUrl: core.serialization.property("thumbnail_url", core.serialization.string()), + url: core.serialization.string(), +}); + +export declare namespace GlobalEventNotification { + interface Raw { + title: string; + description: string; + thumbnail_url: string; + url: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Group.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Group.ts new file mode 100644 index 0000000000..a9861c17ef --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Group.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Handle } from "../../../../group/resources/common/types/Handle"; + +export const Group: core.serialization.ObjectSchema = + core.serialization.object({ + group: Handle, + }); + +export declare namespace Group { + interface Raw { + group: Handle.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Handle.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Handle.ts new file mode 100644 index 0000000000..6eb96841a8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Handle.ts @@ -0,0 +1,31 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { AccountNumber } from "../../../../common/types/AccountNumber"; +import { ExternalLinks } from "./ExternalLinks"; + +export const Handle: core.serialization.ObjectSchema = + core.serialization.object({ + identityId: core.serialization.property("identity_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + accountNumber: core.serialization.property("account_number", AccountNumber), + avatarUrl: core.serialization.property("avatar_url", core.serialization.string()), + isRegistered: core.serialization.property("is_registered", core.serialization.boolean()), + external: ExternalLinks, + }); + +export declare namespace Handle { + interface Raw { + identity_id: string; + display_name: DisplayName.Raw; + account_number: AccountNumber.Raw; + avatar_url: string; + is_registered: boolean; + external: ExternalLinks.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/LinkedAccount.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/LinkedAccount.ts new file mode 100644 index 0000000000..8aa7eb0348 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/LinkedAccount.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { EmailLinkedAccount } from "./EmailLinkedAccount"; + +export const LinkedAccount: core.serialization.ObjectSchema< + serializers.identity.LinkedAccount.Raw, + Rivet.identity.LinkedAccount +> = core.serialization.object({ + email: EmailLinkedAccount.optional(), + defaultUser: core.serialization.property("default_user", core.serialization.boolean().optional()), +}); + +export declare namespace LinkedAccount { + interface Raw { + email?: EmailLinkedAccount.Raw | null; + default_user?: boolean | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Profile.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Profile.ts new file mode 100644 index 0000000000..8eb80e4db0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Profile.ts @@ -0,0 +1,65 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { AccountNumber } from "../../../../common/types/AccountNumber"; +import { ExternalLinks } from "./ExternalLinks"; +import { DevState } from "./DevState"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { Bio } from "../../../../common/types/Bio"; +import { LinkedAccount } from "./LinkedAccount"; +import { Group } from "./Group"; +import { StatSummary } from "../../../../game/resources/common/types/StatSummary"; + +export const Profile: core.serialization.ObjectSchema = + core.serialization.object({ + identityId: core.serialization.property("identity_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + accountNumber: core.serialization.property("account_number", AccountNumber), + avatarUrl: core.serialization.property("avatar_url", core.serialization.string()), + isRegistered: core.serialization.property("is_registered", core.serialization.boolean()), + external: ExternalLinks, + isAdmin: core.serialization.property("is_admin", core.serialization.boolean()), + isGameLinked: core.serialization.property("is_game_linked", core.serialization.boolean().optional()), + devState: core.serialization.property("dev_state", DevState.optional()), + followerCount: core.serialization.property("follower_count", core.serialization.number()), + followingCount: core.serialization.property("following_count", core.serialization.number()), + following: core.serialization.boolean(), + isFollowingMe: core.serialization.property("is_following_me", core.serialization.boolean()), + isMutualFollowing: core.serialization.property("is_mutual_following", core.serialization.boolean()), + joinTs: core.serialization.property("join_ts", Timestamp), + bio: Bio, + linkedAccounts: core.serialization.property("linked_accounts", core.serialization.list(LinkedAccount)), + groups: core.serialization.list(Group), + games: core.serialization.list(StatSummary), + awaitingDeletion: core.serialization.property("awaiting_deletion", core.serialization.boolean().optional()), + }); + +export declare namespace Profile { + interface Raw { + identity_id: string; + display_name: DisplayName.Raw; + account_number: AccountNumber.Raw; + avatar_url: string; + is_registered: boolean; + external: ExternalLinks.Raw; + is_admin: boolean; + is_game_linked?: boolean | null; + dev_state?: DevState.Raw | null; + follower_count: number; + following_count: number; + following: boolean; + is_following_me: boolean; + is_mutual_following: boolean; + join_ts: Timestamp.Raw; + bio: Bio.Raw; + linked_accounts: LinkedAccount.Raw[]; + groups: Group.Raw[]; + games: StatSummary.Raw[]; + awaiting_deletion?: boolean | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Status.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Status.ts new file mode 100644 index 0000000000..997f07f673 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Status.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Status: core.serialization.Schema = + core.serialization.enum_(["online", "away", "offline"]); + +export declare namespace Status { + type Raw = "online" | "away" | "offline"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Summary.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Summary.ts new file mode 100644 index 0000000000..89fee8a39e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/Summary.ts @@ -0,0 +1,37 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { AccountNumber } from "../../../../common/types/AccountNumber"; +import { ExternalLinks } from "./ExternalLinks"; + +export const Summary: core.serialization.ObjectSchema = + core.serialization.object({ + identityId: core.serialization.property("identity_id", core.serialization.string()), + displayName: core.serialization.property("display_name", DisplayName), + accountNumber: core.serialization.property("account_number", AccountNumber), + avatarUrl: core.serialization.property("avatar_url", core.serialization.string()), + isRegistered: core.serialization.property("is_registered", core.serialization.boolean()), + external: ExternalLinks, + following: core.serialization.boolean(), + isFollowingMe: core.serialization.property("is_following_me", core.serialization.boolean()), + isMutualFollowing: core.serialization.property("is_mutual_following", core.serialization.boolean()), + }); + +export declare namespace Summary { + interface Raw { + identity_id: string; + display_name: DisplayName.Raw; + account_number: AccountNumber.Raw; + avatar_url: string; + is_registered: boolean; + external: ExternalLinks.Raw; + following: boolean; + is_following_me: boolean; + is_mutual_following: boolean; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/UpdateGameActivity.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/UpdateGameActivity.ts new file mode 100644 index 0000000000..b91da49857 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/UpdateGameActivity.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const UpdateGameActivity: core.serialization.ObjectSchema< + serializers.identity.UpdateGameActivity.Raw, + Rivet.identity.UpdateGameActivity +> = core.serialization.object({ + message: core.serialization.string().optional(), + publicMetadata: core.serialization.property("public_metadata", core.serialization.unknown().optional()), + mutualMetadata: core.serialization.property("mutual_metadata", core.serialization.unknown().optional()), +}); + +export declare namespace UpdateGameActivity { + interface Raw { + message?: string | null; + public_metadata?: unknown | null; + mutual_metadata?: unknown | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/index.ts new file mode 100644 index 0000000000..cc2fa3d534 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/common/types/index.ts @@ -0,0 +1,16 @@ +export * from "./GlobalEvent"; +export * from "./GlobalEventKind"; +export * from "./GlobalEventNotification"; +export * from "./GlobalEventIdentityUpdate"; +export * from "./UpdateGameActivity"; +export * from "./Handle"; +export * from "./Summary"; +export * from "./Profile"; +export * from "./ExternalLinks"; +export * from "./Status"; +export * from "./GameActivity"; +export * from "./Group"; +export * from "./LinkedAccount"; +export * from "./EmailLinkedAccount"; +export * from "./DevState"; +export * from "./GameLinkStatus"; diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/events/types/WatchEventsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/events/types/WatchEventsResponse.ts new file mode 100644 index 0000000000..5933f2b63d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/events/types/WatchEventsResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GlobalEvent } from "../../common/types/GlobalEvent"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const WatchEventsResponse: core.serialization.ObjectSchema< + serializers.identity.WatchEventsResponse.Raw, + Rivet.identity.WatchEventsResponse +> = core.serialization.object({ + events: core.serialization.list(GlobalEvent), + watch: WatchResponse, +}); + +export declare namespace WatchEventsResponse { + interface Raw { + events: GlobalEvent.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/resources/events/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/identity/resources/events/types/index.ts new file mode 100644 index 0000000000..85124e8f72 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/resources/events/types/index.ts @@ -0,0 +1 @@ +export * from "./WatchEventsResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/types/GetHandlesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/types/GetHandlesResponse.ts new file mode 100644 index 0000000000..628df55e1d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/types/GetHandlesResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Handle } from "../resources/common/types/Handle"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const GetHandlesResponse: core.serialization.ObjectSchema< + serializers.identity.GetHandlesResponse.Raw, + Rivet.identity.GetHandlesResponse +> = core.serialization.object({ + identities: core.serialization.list(Handle), + watch: WatchResponse, +}); + +export declare namespace GetHandlesResponse { + interface Raw { + identities: Handle.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/types/GetProfileResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/types/GetProfileResponse.ts new file mode 100644 index 0000000000..010d0aa5a1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/types/GetProfileResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Profile } from "../resources/common/types/Profile"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const GetProfileResponse: core.serialization.ObjectSchema< + serializers.identity.GetProfileResponse.Raw, + Rivet.identity.GetProfileResponse +> = core.serialization.object({ + identity: Profile, + watch: WatchResponse, +}); + +export declare namespace GetProfileResponse { + interface Raw { + identity: Profile.Raw; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/types/GetSummariesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/types/GetSummariesResponse.ts new file mode 100644 index 0000000000..a76c4e2f1a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/types/GetSummariesResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Summary } from "../resources/common/types/Summary"; +import { WatchResponse } from "../../common/types/WatchResponse"; + +export const GetSummariesResponse: core.serialization.ObjectSchema< + serializers.identity.GetSummariesResponse.Raw, + Rivet.identity.GetSummariesResponse +> = core.serialization.object({ + identities: core.serialization.list(Summary), + watch: WatchResponse, +}); + +export declare namespace GetSummariesResponse { + interface Raw { + identities: Summary.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/types/PrepareAvatarUploadResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/types/PrepareAvatarUploadResponse.ts new file mode 100644 index 0000000000..d8e2fc34a8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/types/PrepareAvatarUploadResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { PresignedRequest } from "../../upload/resources/common/types/PresignedRequest"; + +export const PrepareAvatarUploadResponse: core.serialization.ObjectSchema< + serializers.identity.PrepareAvatarUploadResponse.Raw, + Rivet.identity.PrepareAvatarUploadResponse +> = core.serialization.object({ + uploadId: core.serialization.property("upload_id", core.serialization.string()), + presignedRequest: core.serialization.property("presigned_request", PresignedRequest), +}); + +export declare namespace PrepareAvatarUploadResponse { + interface Raw { + upload_id: string; + presigned_request: PresignedRequest.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/types/SetupResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/types/SetupResponse.ts new file mode 100644 index 0000000000..256afe9830 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/types/SetupResponse.ts @@ -0,0 +1,29 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Jwt } from "../../common/types/Jwt"; +import { Timestamp } from "../../common/types/Timestamp"; +import { Profile } from "../resources/common/types/Profile"; + +export const SetupResponse: core.serialization.ObjectSchema< + serializers.identity.SetupResponse.Raw, + Rivet.identity.SetupResponse +> = core.serialization.object({ + identityToken: core.serialization.property("identity_token", Jwt), + identityTokenExpireTs: core.serialization.property("identity_token_expire_ts", Timestamp), + identity: Profile, + gameId: core.serialization.property("game_id", core.serialization.string()), +}); + +export declare namespace SetupResponse { + interface Raw { + identity_token: Jwt.Raw; + identity_token_expire_ts: Timestamp.Raw; + identity: Profile.Raw; + game_id: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/types/ValidateProfileResponse.ts b/sdks/api/full/typescript/src/serialization/resources/identity/types/ValidateProfileResponse.ts new file mode 100644 index 0000000000..61571c8e65 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/types/ValidateProfileResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { ValidationError } from "../../common/types/ValidationError"; + +export const ValidateProfileResponse: core.serialization.ObjectSchema< + serializers.identity.ValidateProfileResponse.Raw, + Rivet.identity.ValidateProfileResponse +> = core.serialization.object({ + errors: core.serialization.list(ValidationError), +}); + +export declare namespace ValidateProfileResponse { + interface Raw { + errors: ValidationError.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/identity/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/identity/types/index.ts new file mode 100644 index 0000000000..3a4306097a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/identity/types/index.ts @@ -0,0 +1,6 @@ +export * from "./SetupResponse"; +export * from "./GetProfileResponse"; +export * from "./GetHandlesResponse"; +export * from "./GetSummariesResponse"; +export * from "./ValidateProfileResponse"; +export * from "./PrepareAvatarUploadResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/index.ts b/sdks/api/full/typescript/src/serialization/resources/index.ts index 31fb152a0d..5275a08ebb 100644 --- a/sdks/api/full/typescript/src/serialization/resources/index.ts +++ b/sdks/api/full/typescript/src/serialization/resources/index.ts @@ -1,5 +1,6 @@ export * as actor from "./actor"; export * as cloud from "./cloud"; +export * as edgeIntercom from "./edgeIntercom"; export * as group from "./group"; export * as identity from "./identity"; export * as provision from "./provision"; diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/CustomLobbyPublicity.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/CustomLobbyPublicity.ts new file mode 100644 index 0000000000..10885e8489 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/CustomLobbyPublicity.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const CustomLobbyPublicity: core.serialization.Schema< + serializers.matchmaker.CustomLobbyPublicity.Raw, + Rivet.matchmaker.CustomLobbyPublicity +> = core.serialization.enum_(["public", "private"]); + +export declare namespace CustomLobbyPublicity { + type Raw = "public" | "private"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/GameModeInfo.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/GameModeInfo.ts new file mode 100644 index 0000000000..a8b8027fc4 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/GameModeInfo.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; + +export const GameModeInfo: core.serialization.ObjectSchema< + serializers.matchmaker.GameModeInfo.Raw, + Rivet.matchmaker.GameModeInfo +> = core.serialization.object({ + gameModeId: core.serialization.property("game_mode_id", Identifier), +}); + +export declare namespace GameModeInfo { + interface Raw { + game_mode_id: Identifier.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinLobby.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinLobby.ts new file mode 100644 index 0000000000..d57c0bcc5a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinLobby.ts @@ -0,0 +1,29 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { JoinRegion } from "./JoinRegion"; +import { JoinPort } from "./JoinPort"; +import { JoinPlayer } from "./JoinPlayer"; + +export const JoinLobby: core.serialization.ObjectSchema< + serializers.matchmaker.JoinLobby.Raw, + Rivet.matchmaker.JoinLobby +> = core.serialization.object({ + lobbyId: core.serialization.property("lobby_id", core.serialization.string()), + region: JoinRegion, + ports: core.serialization.record(core.serialization.string(), JoinPort), + player: JoinPlayer, +}); + +export declare namespace JoinLobby { + interface Raw { + lobby_id: string; + region: JoinRegion.Raw; + ports: Record; + player: JoinPlayer.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPlayer.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPlayer.ts new file mode 100644 index 0000000000..cd402df7bc --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPlayer.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Jwt } from "../../../../common/types/Jwt"; + +export const JoinPlayer: core.serialization.ObjectSchema< + serializers.matchmaker.JoinPlayer.Raw, + Rivet.matchmaker.JoinPlayer +> = core.serialization.object({ + token: Jwt, +}); + +export declare namespace JoinPlayer { + interface Raw { + token: Jwt.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPort.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPort.ts new file mode 100644 index 0000000000..0e77887971 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPort.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { JoinPortRange } from "./JoinPortRange"; + +export const JoinPort: core.serialization.ObjectSchema = + core.serialization.object({ + host: core.serialization.string().optional(), + hostname: core.serialization.string(), + port: core.serialization.number().optional(), + portRange: core.serialization.property("port_range", JoinPortRange.optional()), + isTls: core.serialization.property("is_tls", core.serialization.boolean()), + }); + +export declare namespace JoinPort { + interface Raw { + host?: string | null; + hostname: string; + port?: number | null; + port_range?: JoinPortRange.Raw | null; + is_tls: boolean; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPortRange.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPortRange.ts new file mode 100644 index 0000000000..fa51f669e5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinPortRange.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const JoinPortRange: core.serialization.ObjectSchema< + serializers.matchmaker.JoinPortRange.Raw, + Rivet.matchmaker.JoinPortRange +> = core.serialization.object({ + min: core.serialization.number(), + max: core.serialization.number(), +}); + +export declare namespace JoinPortRange { + interface Raw { + min: number; + max: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinRegion.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinRegion.ts new file mode 100644 index 0000000000..a0251ffc3b --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/JoinRegion.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; +import { DisplayName } from "../../../../common/types/DisplayName"; + +export const JoinRegion: core.serialization.ObjectSchema< + serializers.matchmaker.JoinRegion.Raw, + Rivet.matchmaker.JoinRegion +> = core.serialization.object({ + regionId: core.serialization.property("region_id", Identifier), + displayName: core.serialization.property("display_name", DisplayName), +}); + +export declare namespace JoinRegion { + interface Raw { + region_id: Identifier.Raw; + display_name: DisplayName.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/LobbyInfo.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/LobbyInfo.ts new file mode 100644 index 0000000000..bac822d7b6 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/LobbyInfo.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const LobbyInfo: core.serialization.ObjectSchema< + serializers.matchmaker.LobbyInfo.Raw, + Rivet.matchmaker.LobbyInfo +> = core.serialization.object({ + regionId: core.serialization.property("region_id", core.serialization.string()), + gameModeId: core.serialization.property("game_mode_id", core.serialization.string()), + lobbyId: core.serialization.property("lobby_id", core.serialization.string()), + maxPlayersNormal: core.serialization.property("max_players_normal", core.serialization.number()), + maxPlayersDirect: core.serialization.property("max_players_direct", core.serialization.number()), + maxPlayersParty: core.serialization.property("max_players_party", core.serialization.number()), + totalPlayerCount: core.serialization.property("total_player_count", core.serialization.number()), + state: core.serialization.unknown().optional(), +}); + +export declare namespace LobbyInfo { + interface Raw { + region_id: string; + game_mode_id: string; + lobby_id: string; + max_players_normal: number; + max_players_direct: number; + max_players_party: number; + total_player_count: number; + state?: unknown | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/RegionInfo.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/RegionInfo.ts new file mode 100644 index 0000000000..e6c2398e90 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/RegionInfo.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; +import { DisplayName } from "../../../../common/types/DisplayName"; +import { Coord } from "../../../../geo/resources/common/types/Coord"; +import { Distance } from "../../../../geo/resources/common/types/Distance"; + +export const RegionInfo: core.serialization.ObjectSchema< + serializers.matchmaker.RegionInfo.Raw, + Rivet.matchmaker.RegionInfo +> = core.serialization.object({ + regionId: core.serialization.property("region_id", Identifier), + providerDisplayName: core.serialization.property("provider_display_name", DisplayName), + regionDisplayName: core.serialization.property("region_display_name", DisplayName), + datacenterCoord: core.serialization.property("datacenter_coord", Coord), + datacenterDistanceFromClient: core.serialization.property("datacenter_distance_from_client", Distance), +}); + +export declare namespace RegionInfo { + interface Raw { + region_id: Identifier.Raw; + provider_display_name: DisplayName.Raw; + region_display_name: DisplayName.Raw; + datacenter_coord: Coord.Raw; + datacenter_distance_from_client: Distance.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/index.ts new file mode 100644 index 0000000000..5519ce0ef7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/common/types/index.ts @@ -0,0 +1,9 @@ +export * from "./LobbyInfo"; +export * from "./GameModeInfo"; +export * from "./RegionInfo"; +export * from "./JoinLobby"; +export * from "./JoinRegion"; +export * from "./JoinPort"; +export * from "./JoinPortRange"; +export * from "./JoinPlayer"; +export * from "./CustomLobbyPublicity"; diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/CreateLobbyResponse.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/CreateLobbyResponse.ts new file mode 100644 index 0000000000..76e0bcca56 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/CreateLobbyResponse.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { JoinLobby } from "../../common/types/JoinLobby"; +import { JoinPort } from "../../common/types/JoinPort"; +import { JoinPlayer } from "../../common/types/JoinPlayer"; + +export const CreateLobbyResponse: core.serialization.ObjectSchema< + serializers.matchmaker.CreateLobbyResponse.Raw, + Rivet.matchmaker.CreateLobbyResponse +> = core.serialization.object({ + lobby: JoinLobby, + ports: core.serialization.record(core.serialization.string(), JoinPort), + player: JoinPlayer, +}); + +export declare namespace CreateLobbyResponse { + interface Raw { + lobby: JoinLobby.Raw; + ports: Record; + player: JoinPlayer.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/FindLobbyResponse.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/FindLobbyResponse.ts new file mode 100644 index 0000000000..c6938f82d8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/FindLobbyResponse.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { JoinLobby } from "../../common/types/JoinLobby"; +import { JoinPort } from "../../common/types/JoinPort"; +import { JoinPlayer } from "../../common/types/JoinPlayer"; + +export const FindLobbyResponse: core.serialization.ObjectSchema< + serializers.matchmaker.FindLobbyResponse.Raw, + Rivet.matchmaker.FindLobbyResponse +> = core.serialization.object({ + lobby: JoinLobby, + ports: core.serialization.record(core.serialization.string(), JoinPort), + player: JoinPlayer, +}); + +export declare namespace FindLobbyResponse { + interface Raw { + lobby: JoinLobby.Raw; + ports: Record; + player: JoinPlayer.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/JoinLobbyResponse.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/JoinLobbyResponse.ts new file mode 100644 index 0000000000..058978c8db --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/JoinLobbyResponse.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { JoinLobby } from "../../common/types/JoinLobby"; +import { JoinPort } from "../../common/types/JoinPort"; +import { JoinPlayer } from "../../common/types/JoinPlayer"; + +export const JoinLobbyResponse: core.serialization.ObjectSchema< + serializers.matchmaker.JoinLobbyResponse.Raw, + Rivet.matchmaker.JoinLobbyResponse +> = core.serialization.object({ + lobby: JoinLobby, + ports: core.serialization.record(core.serialization.string(), JoinPort), + player: JoinPlayer, +}); + +export declare namespace JoinLobbyResponse { + interface Raw { + lobby: JoinLobby.Raw; + ports: Record; + player: JoinPlayer.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/ListLobbiesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/ListLobbiesResponse.ts new file mode 100644 index 0000000000..43e6081278 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/ListLobbiesResponse.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GameModeInfo } from "../../common/types/GameModeInfo"; +import { RegionInfo } from "../../common/types/RegionInfo"; +import { LobbyInfo } from "../../common/types/LobbyInfo"; + +export const ListLobbiesResponse: core.serialization.ObjectSchema< + serializers.matchmaker.ListLobbiesResponse.Raw, + Rivet.matchmaker.ListLobbiesResponse +> = core.serialization.object({ + gameModes: core.serialization.property("game_modes", core.serialization.list(GameModeInfo)), + regions: core.serialization.list(RegionInfo), + lobbies: core.serialization.list(LobbyInfo), +}); + +export declare namespace ListLobbiesResponse { + interface Raw { + game_modes: GameModeInfo.Raw[]; + regions: RegionInfo.Raw[]; + lobbies: LobbyInfo.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/index.ts new file mode 100644 index 0000000000..13491dd556 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/lobbies/types/index.ts @@ -0,0 +1,4 @@ +export * from "./FindLobbyResponse"; +export * from "./JoinLobbyResponse"; +export * from "./CreateLobbyResponse"; +export * from "./ListLobbiesResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/GameModeStatistics.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/GameModeStatistics.ts new file mode 100644 index 0000000000..bf9d4f2151 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/GameModeStatistics.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; +import { RegionStatistics } from "./RegionStatistics"; + +export const GameModeStatistics: core.serialization.ObjectSchema< + serializers.matchmaker.GameModeStatistics.Raw, + Rivet.matchmaker.GameModeStatistics +> = core.serialization.object({ + playerCount: core.serialization.property("player_count", core.serialization.number()), + regions: core.serialization.record(Identifier, RegionStatistics), +}); + +export declare namespace GameModeStatistics { + interface Raw { + player_count: number; + regions: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/GetStatisticsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/GetStatisticsResponse.ts new file mode 100644 index 0000000000..52803ab865 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/GetStatisticsResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Identifier } from "../../../../common/types/Identifier"; +import { GameModeStatistics } from "./GameModeStatistics"; + +export const GetStatisticsResponse: core.serialization.ObjectSchema< + serializers.matchmaker.GetStatisticsResponse.Raw, + Rivet.matchmaker.GetStatisticsResponse +> = core.serialization.object({ + playerCount: core.serialization.property("player_count", core.serialization.number()), + gameModes: core.serialization.property("game_modes", core.serialization.record(Identifier, GameModeStatistics)), +}); + +export declare namespace GetStatisticsResponse { + interface Raw { + player_count: number; + game_modes: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/RegionStatistics.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/RegionStatistics.ts new file mode 100644 index 0000000000..179f5ce3b9 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/RegionStatistics.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const RegionStatistics: core.serialization.ObjectSchema< + serializers.matchmaker.RegionStatistics.Raw, + Rivet.matchmaker.RegionStatistics +> = core.serialization.object({ + playerCount: core.serialization.property("player_count", core.serialization.number()), +}); + +export declare namespace RegionStatistics { + interface Raw { + player_count: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/index.ts new file mode 100644 index 0000000000..e6a2666580 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/players/types/index.ts @@ -0,0 +1,3 @@ +export * from "./GetStatisticsResponse"; +export * from "./GameModeStatistics"; +export * from "./RegionStatistics"; diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/regions/types/ListRegionsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/regions/types/ListRegionsResponse.ts new file mode 100644 index 0000000000..28c25528e8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/regions/types/ListRegionsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { RegionInfo } from "../../common/types/RegionInfo"; + +export const ListRegionsResponse: core.serialization.ObjectSchema< + serializers.matchmaker.ListRegionsResponse.Raw, + Rivet.matchmaker.ListRegionsResponse +> = core.serialization.object({ + regions: core.serialization.list(RegionInfo), +}); + +export declare namespace ListRegionsResponse { + interface Raw { + regions: RegionInfo.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/regions/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/regions/types/index.ts new file mode 100644 index 0000000000..dd60cc81be --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/matchmaker/resources/regions/types/index.ts @@ -0,0 +1 @@ +export * from "./ListRegionsResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationRegisterFirebaseService.ts b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationRegisterFirebaseService.ts new file mode 100644 index 0000000000..748eb5bf20 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationRegisterFirebaseService.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const NotificationRegisterFirebaseService: core.serialization.ObjectSchema< + serializers.portal.NotificationRegisterFirebaseService.Raw, + Rivet.portal.NotificationRegisterFirebaseService +> = core.serialization.object({ + accessKey: core.serialization.property("access_key", core.serialization.string()), +}); + +export declare namespace NotificationRegisterFirebaseService { + interface Raw { + access_key: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationRegisterService.ts b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationRegisterService.ts new file mode 100644 index 0000000000..09a940d843 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationRegisterService.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { NotificationRegisterFirebaseService } from "./NotificationRegisterFirebaseService"; + +export const NotificationRegisterService: core.serialization.ObjectSchema< + serializers.portal.NotificationRegisterService.Raw, + Rivet.portal.NotificationRegisterService +> = core.serialization.object({ + firebase: NotificationRegisterFirebaseService.optional(), +}); + +export declare namespace NotificationRegisterService { + interface Raw { + firebase?: NotificationRegisterFirebaseService.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationUnregisterService.ts b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationUnregisterService.ts new file mode 100644 index 0000000000..cd7ee68bba --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/NotificationUnregisterService.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const NotificationUnregisterService: core.serialization.Schema< + serializers.portal.NotificationUnregisterService.Raw, + Rivet.portal.NotificationUnregisterService +> = core.serialization.enum_(["firebase"]); + +export declare namespace NotificationUnregisterService { + type Raw = "firebase"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/index.ts new file mode 100644 index 0000000000..af64098ef7 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/portal/resources/common/types/index.ts @@ -0,0 +1,3 @@ +export * from "./NotificationRegisterService"; +export * from "./NotificationRegisterFirebaseService"; +export * from "./NotificationUnregisterService"; diff --git a/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/GetGameProfileResponse.ts b/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/GetGameProfileResponse.ts new file mode 100644 index 0000000000..3b065cbcf5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/GetGameProfileResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Profile } from "../../../../game/resources/common/types/Profile"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const GetGameProfileResponse: core.serialization.ObjectSchema< + serializers.portal.GetGameProfileResponse.Raw, + Rivet.portal.GetGameProfileResponse +> = core.serialization.object({ + game: Profile, + watch: WatchResponse, +}); + +export declare namespace GetGameProfileResponse { + interface Raw { + game: Profile.Raw; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/GetSuggestedGamesResponse.ts b/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/GetSuggestedGamesResponse.ts new file mode 100644 index 0000000000..4f2f9fe449 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/GetSuggestedGamesResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GameSummary } from "../../../../game/resources/common/types/GameSummary"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const GetSuggestedGamesResponse: core.serialization.ObjectSchema< + serializers.portal.GetSuggestedGamesResponse.Raw, + Rivet.portal.GetSuggestedGamesResponse +> = core.serialization.object({ + games: core.serialization.list(GameSummary), + watch: WatchResponse, +}); + +export declare namespace GetSuggestedGamesResponse { + interface Raw { + games: GameSummary.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/index.ts new file mode 100644 index 0000000000..ffac3322f5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/portal/resources/games/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetSuggestedGamesResponse"; +export * from "./GetGameProfileResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/PoolType.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/PoolType.ts new file mode 100644 index 0000000000..aa7b29dcfb --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/PoolType.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PoolType: core.serialization.Schema = + core.serialization.enum_(["job", "gg", "ats", "pegboard", "pegboard_isolate", "fdb"]); + +export declare namespace PoolType { + type Raw = "job" | "gg" | "ats" | "pegboard" | "pegboard_isolate" | "fdb"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/Server.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/Server.ts new file mode 100644 index 0000000000..985140cee2 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/Server.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PoolType } from "./PoolType"; + +export const Server: core.serialization.ObjectSchema = + core.serialization.object({ + serverId: core.serialization.property("server_id", core.serialization.string()), + datacenterId: core.serialization.property("datacenter_id", core.serialization.string()), + poolType: core.serialization.property("pool_type", PoolType), + lanIp: core.serialization.property("lan_ip", core.serialization.string().optional()), + wanIp: core.serialization.property("wan_ip", core.serialization.string().optional()), + }); + +export declare namespace Server { + interface Raw { + server_id: string; + datacenter_id: string; + pool_type: PoolType.Raw; + lan_ip?: string | null; + wan_ip?: string | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/index.ts new file mode 100644 index 0000000000..a8fa543428 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PoolType"; +export * from "./Server"; diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/GetServersResponse.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/GetServersResponse.ts new file mode 100644 index 0000000000..518133ab55 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/GetServersResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Server } from "../../common/types/Server"; + +export const GetServersResponse: core.serialization.ObjectSchema< + serializers.provision.datacenters.GetServersResponse.Raw, + Rivet.provision.datacenters.GetServersResponse +> = core.serialization.object({ + servers: core.serialization.list(Server), +}); + +export declare namespace GetServersResponse { + interface Raw { + servers: Server.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/GetTlsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/GetTlsResponse.ts new file mode 100644 index 0000000000..03925dc5d5 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/GetTlsResponse.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GetTlsResponse: core.serialization.ObjectSchema< + serializers.provision.datacenters.GetTlsResponse.Raw, + Rivet.provision.datacenters.GetTlsResponse +> = core.serialization.object({ + jobCertPem: core.serialization.property("job_cert_pem", core.serialization.string()), + jobPrivateKeyPem: core.serialization.property("job_private_key_pem", core.serialization.string()), +}); + +export declare namespace GetTlsResponse { + interface Raw { + job_cert_pem: string; + job_private_key_pem: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/index.ts new file mode 100644 index 0000000000..00625bc437 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/datacenters/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetTlsResponse"; +export * from "./GetServersResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/servers/types/GetInfoResponse.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/servers/types/GetInfoResponse.ts new file mode 100644 index 0000000000..fcae30cd42 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/servers/types/GetInfoResponse.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GetInfoResponse: core.serialization.ObjectSchema< + serializers.provision.servers.GetInfoResponse.Raw, + Rivet.provision.servers.GetInfoResponse +> = core.serialization.object({ + name: core.serialization.string(), + serverId: core.serialization.property("server_id", core.serialization.string()), + datacenterId: core.serialization.property("datacenter_id", core.serialization.string()), + clusterId: core.serialization.property("cluster_id", core.serialization.string()), + lanIp: core.serialization.property("lan_ip", core.serialization.string()), + wanIp: core.serialization.property("wan_ip", core.serialization.string()), + vlanIp: core.serialization.property("vlan_ip", core.serialization.string()), + publicIp: core.serialization.property("public_ip", core.serialization.string()), +}); + +export declare namespace GetInfoResponse { + interface Raw { + name: string; + server_id: string; + datacenter_id: string; + cluster_id: string; + lan_ip: string; + wan_ip: string; + vlan_ip: string; + public_ip: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/servers/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/servers/types/index.ts new file mode 100644 index 0000000000..f9b6ce198e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/servers/types/index.ts @@ -0,0 +1 @@ +export * from "./GetInfoResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/tunnel/types/GetTlsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/tunnel/types/GetTlsResponse.ts new file mode 100644 index 0000000000..14d0fee1fa --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/tunnel/types/GetTlsResponse.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GetTlsResponse: core.serialization.ObjectSchema< + serializers.provision.tunnel.GetTlsResponse.Raw, + Rivet.provision.tunnel.GetTlsResponse +> = core.serialization.object({ + certPem: core.serialization.property("cert_pem", core.serialization.string()), + rootCaCertPem: core.serialization.property("root_ca_cert_pem", core.serialization.string()), + privateKeyPem: core.serialization.property("private_key_pem", core.serialization.string()), +}); + +export declare namespace GetTlsResponse { + interface Raw { + cert_pem: string; + root_ca_cert_pem: string; + private_key_pem: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/provision/resources/tunnel/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/provision/resources/tunnel/types/index.ts new file mode 100644 index 0000000000..19c6f682d2 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/provision/resources/tunnel/types/index.ts @@ -0,0 +1 @@ +export * from "./GetTlsResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/BuildCompression.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..93c2ef4a9a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const BuildCompression: core.serialization.Schema< + serializers.servers.BuildCompression.Raw, + Rivet.servers.BuildCompression +> = core.serialization.enum_(["none", "lz4"]); + +export declare namespace BuildCompression { + type Raw = "none" | "lz4"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/BuildKind.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..c3dd0b43c8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/BuildKind.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const BuildKind: core.serialization.Schema = + core.serialization.enum_(["docker_image", "oci_bundle"]); + +export declare namespace BuildKind { + type Raw = "docker_image" | "oci_bundle"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/CreateBuildRequest.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/CreateBuildRequest.ts new file mode 100644 index 0000000000..12e33c69bd --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/CreateBuildRequest.ts @@ -0,0 +1,38 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PrepareFile } from "../../../../upload/resources/common/types/PrepareFile"; +import { BuildKind } from "./BuildKind"; +import { BuildCompression } from "./BuildCompression"; + +export const CreateBuildRequest: core.serialization.ObjectSchema< + serializers.servers.CreateBuildRequest.Raw, + Rivet.servers.CreateBuildRequest +> = core.serialization.object({ + name: core.serialization.string(), + imageTag: core.serialization.property("image_tag", core.serialization.string()), + imageFile: core.serialization.property("image_file", PrepareFile), + multipartUpload: core.serialization.property("multipart_upload", core.serialization.boolean().optional()), + kind: BuildKind.optional(), + compression: BuildCompression.optional(), + prewarmDatacenters: core.serialization.property( + "prewarm_datacenters", + core.serialization.list(core.serialization.string()).optional() + ), +}); + +export declare namespace CreateBuildRequest { + interface Raw { + name: string; + image_tag: string; + image_file: PrepareFile.Raw; + multipart_upload?: boolean | null; + kind?: BuildKind.Raw | null; + compression?: BuildCompression.Raw | null; + prewarm_datacenters?: string[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/CreateBuildResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/CreateBuildResponse.ts new file mode 100644 index 0000000000..642a3f4587 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/CreateBuildResponse.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PresignedRequest } from "../../../../upload/resources/common/types/PresignedRequest"; + +export const CreateBuildResponse: core.serialization.ObjectSchema< + serializers.servers.CreateBuildResponse.Raw, + Rivet.servers.CreateBuildResponse +> = core.serialization.object({ + build: core.serialization.string(), + imagePresignedRequest: core.serialization.property("image_presigned_request", PresignedRequest.optional()), + imagePresignedRequests: core.serialization.property( + "image_presigned_requests", + core.serialization.list(PresignedRequest).optional() + ), +}); + +export declare namespace CreateBuildResponse { + interface Raw { + build: string; + image_presigned_request?: PresignedRequest.Raw | null; + image_presigned_requests?: PresignedRequest.Raw[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/GetBuildResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/GetBuildResponse.ts new file mode 100644 index 0000000000..df9991b893 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/GetBuildResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Build } from "../../common/types/Build"; + +export const GetBuildResponse: core.serialization.ObjectSchema< + serializers.servers.GetBuildResponse.Raw, + Rivet.servers.GetBuildResponse +> = core.serialization.object({ + build: Build, +}); + +export declare namespace GetBuildResponse { + interface Raw { + build: Build.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/ListBuildsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/ListBuildsResponse.ts new file mode 100644 index 0000000000..da68acbe37 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/ListBuildsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Build } from "../../common/types/Build"; + +export const ListBuildsResponse: core.serialization.ObjectSchema< + serializers.servers.ListBuildsResponse.Raw, + Rivet.servers.ListBuildsResponse +> = core.serialization.object({ + builds: core.serialization.list(Build), +}); + +export declare namespace ListBuildsResponse { + interface Raw { + builds: Build.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/PatchBuildTagsRequest.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/PatchBuildTagsRequest.ts new file mode 100644 index 0000000000..1515e4e263 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/PatchBuildTagsRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PatchBuildTagsRequest: core.serialization.ObjectSchema< + serializers.servers.PatchBuildTagsRequest.Raw, + Rivet.servers.PatchBuildTagsRequest +> = core.serialization.object({ + tags: core.serialization.unknown(), + exclusiveTags: core.serialization.property( + "exclusive_tags", + core.serialization.list(core.serialization.string()).optional() + ), +}); + +export declare namespace PatchBuildTagsRequest { + interface Raw { + tags?: unknown; + exclusive_tags?: string[] | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/PatchBuildTagsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/PatchBuildTagsResponse.ts new file mode 100644 index 0000000000..24eb2678c2 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/PatchBuildTagsResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PatchBuildTagsResponse: core.serialization.ObjectSchema< + serializers.servers.PatchBuildTagsResponse.Raw, + Rivet.servers.PatchBuildTagsResponse +> = core.serialization.object({}); + +export declare namespace PatchBuildTagsResponse { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/index.ts new file mode 100644 index 0000000000..41b8855737 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/builds/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetBuildResponse"; +export * from "./ListBuildsResponse"; +export * from "./PatchBuildTagsRequest"; +export * from "./PatchBuildTagsResponse"; +export * from "./CreateBuildRequest"; +export * from "./CreateBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Build.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Build.ts new file mode 100644 index 0000000000..fd2d92e284 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Build.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const Build: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + name: core.serialization.string(), + createdAt: core.serialization.property("created_at", Timestamp), + contentLength: core.serialization.property("content_length", core.serialization.number()), + tags: core.serialization.record(core.serialization.string(), core.serialization.string()), + }); + +export declare namespace Build { + interface Raw { + id: string; + name: string; + created_at: Timestamp.Raw; + content_length: number; + tags: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Datacenter.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Datacenter.ts new file mode 100644 index 0000000000..ec79766607 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Datacenter.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Datacenter: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + slug: core.serialization.string(), + name: core.serialization.string(), + }); + +export declare namespace Datacenter { + interface Raw { + id: string; + slug: string; + name: string; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/GameGuardRouting.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/GameGuardRouting.ts new file mode 100644 index 0000000000..24560bc694 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/GameGuardRouting.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GameGuardRouting: core.serialization.ObjectSchema< + serializers.servers.GameGuardRouting.Raw, + Rivet.servers.GameGuardRouting +> = core.serialization.object({}); + +export declare namespace GameGuardRouting { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/HostRouting.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/HostRouting.ts new file mode 100644 index 0000000000..4cb89be278 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/HostRouting.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const HostRouting: core.serialization.ObjectSchema< + serializers.servers.HostRouting.Raw, + Rivet.servers.HostRouting +> = core.serialization.object({}); + +export declare namespace HostRouting { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Lifecycle.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Lifecycle.ts new file mode 100644 index 0000000000..c7d1e6fe92 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Lifecycle.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Lifecycle: core.serialization.ObjectSchema = + core.serialization.object({ + killTimeout: core.serialization.property("kill_timeout", core.serialization.number().optional()), + }); + +export declare namespace Lifecycle { + interface Raw { + kill_timeout?: number | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Network.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Network.ts new file mode 100644 index 0000000000..9eb1737d45 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Network.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { NetworkMode } from "./NetworkMode"; +import { Port } from "./Port"; + +export const Network: core.serialization.ObjectSchema = + core.serialization.object({ + mode: NetworkMode.optional(), + ports: core.serialization.record(core.serialization.string(), Port), + }); + +export declare namespace Network { + interface Raw { + mode?: NetworkMode.Raw | null; + ports: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/NetworkMode.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..632f8d81d1 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/NetworkMode.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const NetworkMode: core.serialization.Schema = + core.serialization.enum_(["bridge", "host"]); + +export declare namespace NetworkMode { + type Raw = "bridge" | "host"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Port.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Port.ts new file mode 100644 index 0000000000..ca7f437040 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Port.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PortProtocol } from "./PortProtocol"; +import { PortRouting } from "./PortRouting"; + +export const Port: core.serialization.ObjectSchema = + core.serialization.object({ + protocol: PortProtocol, + internalPort: core.serialization.property("internal_port", core.serialization.number().optional()), + publicHostname: core.serialization.property("public_hostname", core.serialization.string().optional()), + publicPort: core.serialization.property("public_port", core.serialization.number().optional()), + routing: PortRouting, + }); + +export declare namespace Port { + interface Raw { + protocol: PortProtocol.Raw; + internal_port?: number | null; + public_hostname?: string | null; + public_port?: number | null; + routing: PortRouting.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/PortProtocol.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..a93423fbe0 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/PortProtocol.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PortProtocol: core.serialization.Schema = + core.serialization.enum_(["http", "https", "tcp", "tcp_tls", "udp"]); + +export declare namespace PortProtocol { + type Raw = "http" | "https" | "tcp" | "tcp_tls" | "udp"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/PortRouting.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/PortRouting.ts new file mode 100644 index 0000000000..aada458af3 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/PortRouting.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GameGuardRouting } from "./GameGuardRouting"; +import { HostRouting } from "./HostRouting"; + +export const PortRouting: core.serialization.ObjectSchema< + serializers.servers.PortRouting.Raw, + Rivet.servers.PortRouting +> = core.serialization.object({ + gameGuard: core.serialization.property("game_guard", GameGuardRouting.optional()), + host: HostRouting.optional(), +}); + +export declare namespace PortRouting { + interface Raw { + game_guard?: GameGuardRouting.Raw | null; + host?: HostRouting.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Resources.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Resources.ts new file mode 100644 index 0000000000..6f79209b95 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Resources.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Resources: core.serialization.ObjectSchema = + core.serialization.object({ + cpu: core.serialization.number(), + memory: core.serialization.number(), + }); + +export declare namespace Resources { + interface Raw { + cpu: number; + memory: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Runtime.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Runtime.ts new file mode 100644 index 0000000000..a31d7e4b0e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Runtime.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Runtime: core.serialization.ObjectSchema = + core.serialization.object({ + build: core.serialization.string(), + arguments: core.serialization.list(core.serialization.string()).optional(), + environment: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), + }); + +export declare namespace Runtime { + interface Raw { + build: string; + arguments?: string[] | null; + environment?: Record | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Server.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Server.ts new file mode 100644 index 0000000000..4faadf74de --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/Server.ts @@ -0,0 +1,42 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Runtime } from "./Runtime"; +import { Network } from "./Network"; +import { Resources } from "./Resources"; +import { Lifecycle } from "./Lifecycle"; + +export const Server: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + environment: core.serialization.string(), + datacenter: core.serialization.string(), + tags: core.serialization.unknown(), + runtime: Runtime, + network: Network, + resources: Resources, + lifecycle: Lifecycle, + createdAt: core.serialization.property("created_at", core.serialization.number()), + startedAt: core.serialization.property("started_at", core.serialization.number().optional()), + destroyedAt: core.serialization.property("destroyed_at", core.serialization.number().optional()), + }); + +export declare namespace Server { + interface Raw { + id: string; + environment: string; + datacenter: string; + tags?: unknown; + runtime: Runtime.Raw; + network: Network.Raw; + resources: Resources.Raw; + lifecycle: Lifecycle.Raw; + created_at: number; + started_at?: number | null; + destroyed_at?: number | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/index.ts new file mode 100644 index 0000000000..22b3ebd8b8 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/common/types/index.ts @@ -0,0 +1,13 @@ +export * from "./Server"; +export * from "./Runtime"; +export * from "./Lifecycle"; +export * from "./Resources"; +export * from "./Network"; +export * from "./NetworkMode"; +export * from "./Port"; +export * from "./PortProtocol"; +export * from "./PortRouting"; +export * from "./GameGuardRouting"; +export * from "./HostRouting"; +export * from "./Build"; +export * from "./Datacenter"; diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/datacenters/types/ListDatacentersResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/datacenters/types/ListDatacentersResponse.ts new file mode 100644 index 0000000000..be2e5bfe86 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/datacenters/types/ListDatacentersResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Datacenter } from "../../common/types/Datacenter"; + +export const ListDatacentersResponse: core.serialization.ObjectSchema< + serializers.servers.ListDatacentersResponse.Raw, + Rivet.servers.ListDatacentersResponse +> = core.serialization.object({ + datacenters: core.serialization.list(Datacenter), +}); + +export declare namespace ListDatacentersResponse { + interface Raw { + datacenters: Datacenter.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/datacenters/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/datacenters/types/index.ts new file mode 100644 index 0000000000..ccc68f7435 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/datacenters/types/index.ts @@ -0,0 +1 @@ +export * from "./ListDatacentersResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/GetServerLogsResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/GetServerLogsResponse.ts new file mode 100644 index 0000000000..caa3fbac1d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/GetServerLogsResponse.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const GetServerLogsResponse: core.serialization.ObjectSchema< + serializers.servers.GetServerLogsResponse.Raw, + Rivet.servers.GetServerLogsResponse +> = core.serialization.object({ + lines: core.serialization.list(core.serialization.string()), + timestamps: core.serialization.list(core.serialization.string()), + watch: WatchResponse, +}); + +export declare namespace GetServerLogsResponse { + interface Raw { + lines: string[]; + timestamps: string[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/LogStream.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/LogStream.ts new file mode 100644 index 0000000000..2d0e7c4d85 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/LogStream.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const LogStream: core.serialization.Schema = + core.serialization.enum_(["std_out", "std_err"]); + +export declare namespace LogStream { + type Raw = "std_out" | "std_err"; +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/index.ts new file mode 100644 index 0000000000..9fbd91049e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetServerLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerNetworkRequest.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerNetworkRequest.ts new file mode 100644 index 0000000000..30bb3c4ecc --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerNetworkRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { NetworkMode } from "../resources/common/types/NetworkMode"; +import { CreateServerPortRequest } from "./CreateServerPortRequest"; + +export const CreateServerNetworkRequest: core.serialization.ObjectSchema< + serializers.servers.CreateServerNetworkRequest.Raw, + Rivet.servers.CreateServerNetworkRequest +> = core.serialization.object({ + mode: NetworkMode.optional(), + ports: core.serialization.record(core.serialization.string(), CreateServerPortRequest), +}); + +export declare namespace CreateServerNetworkRequest { + interface Raw { + mode?: NetworkMode.Raw | null; + ports: Record; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerPortRequest.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerPortRequest.ts new file mode 100644 index 0000000000..f2d9ff127a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerPortRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { PortProtocol } from "../resources/common/types/PortProtocol"; +import { PortRouting } from "../resources/common/types/PortRouting"; + +export const CreateServerPortRequest: core.serialization.ObjectSchema< + serializers.servers.CreateServerPortRequest.Raw, + Rivet.servers.CreateServerPortRequest +> = core.serialization.object({ + protocol: PortProtocol, + internalPort: core.serialization.property("internal_port", core.serialization.number().optional()), + routing: PortRouting.optional(), +}); + +export declare namespace CreateServerPortRequest { + interface Raw { + protocol: PortProtocol.Raw; + internal_port?: number | null; + routing?: PortRouting.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerRequest.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerRequest.ts new file mode 100644 index 0000000000..10dca67a10 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerRequest.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { CreateServerRuntimeRequest } from "./CreateServerRuntimeRequest"; +import { CreateServerNetworkRequest } from "./CreateServerNetworkRequest"; +import { Resources } from "../resources/common/types/Resources"; +import { Lifecycle } from "../resources/common/types/Lifecycle"; + +export const CreateServerRequest: core.serialization.ObjectSchema< + serializers.servers.CreateServerRequest.Raw, + Rivet.servers.CreateServerRequest +> = core.serialization.object({ + datacenter: core.serialization.string(), + tags: core.serialization.unknown(), + runtime: CreateServerRuntimeRequest, + network: CreateServerNetworkRequest, + resources: Resources, + lifecycle: Lifecycle.optional(), +}); + +export declare namespace CreateServerRequest { + interface Raw { + datacenter: string; + tags?: unknown; + runtime: CreateServerRuntimeRequest.Raw; + network: CreateServerNetworkRequest.Raw; + resources: Resources.Raw; + lifecycle?: Lifecycle.Raw | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerResponse.ts new file mode 100644 index 0000000000..615fe5106d --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Server } from "../resources/common/types/Server"; + +export const CreateServerResponse: core.serialization.ObjectSchema< + serializers.servers.CreateServerResponse.Raw, + Rivet.servers.CreateServerResponse +> = core.serialization.object({ + server: Server, +}); + +export declare namespace CreateServerResponse { + interface Raw { + server: Server.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerRuntimeRequest.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerRuntimeRequest.ts new file mode 100644 index 0000000000..264a4bec8e --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/CreateServerRuntimeRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const CreateServerRuntimeRequest: core.serialization.ObjectSchema< + serializers.servers.CreateServerRuntimeRequest.Raw, + Rivet.servers.CreateServerRuntimeRequest +> = core.serialization.object({ + build: core.serialization.string(), + arguments: core.serialization.list(core.serialization.string()).optional(), + environment: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), +}); + +export declare namespace CreateServerRuntimeRequest { + interface Raw { + build: string; + arguments?: string[] | null; + environment?: Record | null; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/DestroyServerResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/DestroyServerResponse.ts new file mode 100644 index 0000000000..98a05c22db --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/DestroyServerResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const DestroyServerResponse: core.serialization.ObjectSchema< + serializers.servers.DestroyServerResponse.Raw, + Rivet.servers.DestroyServerResponse +> = core.serialization.object({}); + +export declare namespace DestroyServerResponse { + interface Raw {} +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/GetServerResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/GetServerResponse.ts new file mode 100644 index 0000000000..0f499f0ecc --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/GetServerResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Server } from "../resources/common/types/Server"; + +export const GetServerResponse: core.serialization.ObjectSchema< + serializers.servers.GetServerResponse.Raw, + Rivet.servers.GetServerResponse +> = core.serialization.object({ + server: Server, +}); + +export declare namespace GetServerResponse { + interface Raw { + server: Server.Raw; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/ListServersResponse.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/ListServersResponse.ts new file mode 100644 index 0000000000..f45968ef1c --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/ListServersResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Server } from "../resources/common/types/Server"; + +export const ListServersResponse: core.serialization.ObjectSchema< + serializers.servers.ListServersResponse.Raw, + Rivet.servers.ListServersResponse +> = core.serialization.object({ + servers: core.serialization.list(Server), +}); + +export declare namespace ListServersResponse { + interface Raw { + servers: Server.Raw[]; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/servers/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/servers/types/index.ts new file mode 100644 index 0000000000..f414130acd --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/servers/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetServerResponse"; +export * from "./CreateServerRequest"; +export * from "./CreateServerRuntimeRequest"; +export * from "./CreateServerNetworkRequest"; +export * from "./CreateServerPortRequest"; +export * from "./CreateServerResponse"; +export * from "./DestroyServerResponse"; +export * from "./ListServersResponse"; diff --git a/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/PrepareFile.ts b/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/PrepareFile.ts new file mode 100644 index 0000000000..6af098300a --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/PrepareFile.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PrepareFile: core.serialization.ObjectSchema< + serializers.upload.PrepareFile.Raw, + Rivet.upload.PrepareFile +> = core.serialization.object({ + path: core.serialization.string(), + contentType: core.serialization.property("content_type", core.serialization.string().optional()), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace PrepareFile { + interface Raw { + path: string; + content_type?: string | null; + content_length: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/PresignedRequest.ts b/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/PresignedRequest.ts new file mode 100644 index 0000000000..a490edb18f --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/PresignedRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PresignedRequest: core.serialization.ObjectSchema< + serializers.upload.PresignedRequest.Raw, + Rivet.upload.PresignedRequest +> = core.serialization.object({ + path: core.serialization.string(), + url: core.serialization.string(), + byteOffset: core.serialization.property("byte_offset", core.serialization.number()), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace PresignedRequest { + interface Raw { + path: string; + url: string; + byte_offset: number; + content_length: number; + } +} diff --git a/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/index.ts b/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/index.ts new file mode 100644 index 0000000000..c950bbac53 --- /dev/null +++ b/sdks/api/full/typescript/src/serialization/resources/upload/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PresignedRequest"; +export * from "./PrepareFile"; diff --git a/sdks/api/full/typescript/tsconfig.json b/sdks/api/full/typescript/tsconfig.json deleted file mode 100644 index 6386dc3821..0000000000 --- a/sdks/api/full/typescript/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "extendedDiagnostics": true, - "strict": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "esModuleInterop": true, - "skipLibCheck": true, - "declaration": true, - "emitDeclarationOnly": true, - "sourceMap": true, - "noUnusedParameters": true, - "outDir": "types", - "rootDir": "src", - "baseUrl": "src", - "paths": { - "@rivet-gg/api": [ - "." - ] - } - }, - "include": [ - "src" - ], - "exclude": [] -} \ No newline at end of file diff --git a/sdks/api/full/typescript/yarn-error.log b/sdks/api/full/typescript/yarn-error.log deleted file mode 100644 index bd95666e45..0000000000 --- a/sdks/api/full/typescript/yarn-error.log +++ /dev/null @@ -1,522 +0,0 @@ -Arguments: - /nix/store/njh6p007ymbmcgas5l7sqqxfmm394zx1-nodejs-18.15.0/bin/node /root/.nix-profile/bin/yarn install - -PATH: - /root/rivet/ee/target/debug:/root/rivet/ee/target/release:/nix/store/rnzr5gb65b4f5xk7dmljk93km9wpsll6-bash-interactive-5.2-p15/bin:/nix/store/95cxzy2hpizr23343b8bskl4yacf4b3l-python3-3.10.11/bin:/nix/store/ywwjpdyhar4f3vcqf4qk77vrbr3vj5wl-patchelf-0.15.0/bin:/nix/store/7wkshj58fcsl1f3zyi67qsxgl1p8nki1-gcc-wrapper-12.2.0/bin:/nix/store/dcd1zhv56rk0d2z7akzfjgzr076c4jl9-gcc-12.2.0/bin:/nix/store/lyvhsvwp2pzy74fkcn7qbs5vcgy5d7vl-glibc-2.37-8-bin/bin:/nix/store/ahkfdxq8mcpsb5kvdvgqr1wv8zjngbh4-coreutils-9.1/bin:/nix/store/rbwalnmk5a6nj9mbldxzmj11gvacbrsi-binutils-wrapper-2.40/bin:/nix/store/22p5nv7fbxhm06mfkwwnibv1nsz06x4b-binutils-2.40/bin:/nix/store/kd1k6pxi5f6i9fviifhwkr8n013a55xb-k3d-5.4.4/bin:/nix/store/7p45r1h2fzkp4gv4ilky92vxhjfnbv05-kubectl-1.27.1/bin:/nix/store/1y7j55f883l1n6n1k8njilfvhang2473-kubernetes-helm-3.11.3/bin:/nix/store/g044pvzvs5c5ifvla9smyf76yis5vg88-awscli2-2.11.20/bin:/nix/store/5p9k3m2xf3zv6lxzrk69kbl7ph3zf49f-python3.10-distro-1.8.0/bin:/nix/store/0jzsa5xz40zjswfijggla7w8s2m14r97-python3.10-docutils-0.19/bin:/nix/store/684bnp1igmcdwcl8s7wxly0mw2cz9mvi-groff-1.22.4/bin:/nix/store/rrgqac6d3zj9ggh8j79p5vkqp30f2w6d-less-608/bin:/nix/store/9rxgjyaj1njjrm305san7sccnl1ab4hf-python3.10-rsa-4.9/bin:/nix/store/wl4fy4mbd1z5h0gbl9r4q4lf5hc40ic2-python3.10-jmespath-1.0.1/bin:/nix/store/b6ik2xnqnrgz6gbx420gq4p0if3v2w73-terraform-1.4.6/bin:/nix/store/pdlfyp58m3rlwibwfsyf45q01ylmznhh-cloc-1.96/bin:/nix/store/nkfn58xv8nzp0r67izyhhmsr39v8ksjh-curl-8.0.1-dev/bin:/nix/store/f15rvn9j4g93b2gd5jvhrszargl0j007-brotli-1.0.9/bin:/nix/store/m9vssg00klfyyffi6qnvk0hgkd714vad-libkrb5-1.20.1-dev/bin:/nix/store/4k4zg4jjg0icwv530vl9ick22r887d9m-libkrb5-1.20.1/bin:/nix/store/va385h5vli8jwpi534drdxnb0ilwlzwf-nghttp2-1.51.0-bin/bin:/nix/store/xasyqgjm54pq8w2d520smdsgfr3fdmpg-libidn2-2.3.4-bin/bin:/nix/store/126jncr3cfwdvqmzkx3296sibcpag3x8-openssl-3.0.8-bin/bin:/nix/store/7b2kg5i0fs4fsw6cp3r94gdndizirga9-zstd-1.5.5-bin/bin:/nix/store/hw1z8z2dshq759cgxggvn6dg3h8bdlcn-zstd-1.5.5/bin:/nix/store/0xyi7w3cm3g7gzwfpwqzx0n7xks2sdc6-curl-8.0.1-bin/bin:/nix/store/b9xp0s9f91sdv9csgi8ky3fmmkydd58c-docker-20.10.23/bin:/nix/store/naabcr94jsxrd39c5w94sxf4wg5kamdj-git-lfs-3.3.0/bin:/nix/store/25w69905py9pjf89i2x0sm6589fmrizv-go-migrate-4.15.2/bin:/nix/store/s9j08pc615ii5z8rln2yjarsc9zf7q04-jq-1.6-bin/bin:/nix/store/s1xnsm86dy195fr4i4n984ivakrvjv9d-openssh-9.3p1/bin:/nix/store/czrrap8sqkkplqj6j8b8r97jca7zfcbm-postgresql-14.8/bin:/nix/store/nnmfw7z062j9bwwi945qzac769f6yhzg-nodejs-20.2.0/bin:/nix/store/gq55kag0vp3rzyz5a73r71f64yc87pc4-python3.10-detect-secrets-1.4.0/bin:/nix/store/0xb0za44qaa74b2fzdgxpg3v5zc5d0r3-python3.10-gibberish-detector-0.1.1/bin:/nix/store/8v28q4mag3s4dba9fphxzgs6snhxg231-python3.10-charset-normalizer-3.0.1/bin:/nix/store/4pk431ywfvw0k926blzwncnp699z3vh5-clang-wrapper-11.1.0/bin:/nix/store/a1bf9m79xr32a55idbbjbjpylp1xphag-clang-11.1.0/bin:/nix/store/yhw6xjfl2x44nkhn1628nk2q2bgzhb8x-binutils-wrapper-2.40/bin:/nix/store/axg65w0cs7cs9y3jwvp5r35v36kcjjnz-llvm-11.1.0-dev/bin:/nix/store/9jmgsy8bll4ya21v4yvv96mr2ky1cc52-ncurses-6.4-dev/bin:/nix/store/4g9phbpakh51bbw2n391vipz9r5z56kw-ncurses-6.4/bin:/nix/store/axh023wfx7ijlvl4a3rs9bw05x9k9mg7-llvm-11.1.0/bin:/nix/store/7w2n11y3ywzkhx5kk4nff79lzc0dm7v8-lld-11.1.0/bin:/nix/store/09jbh8y3jbq0gs47793rzn6i7yaabxmp-pkg-config-wrapper-0.29.2/bin:/nix/store/r42igcns4iha19h26r0wclb3ss5lvpcj-rust-1.83.0-2024-11-26-90b35a623/bin:/nix/store/rirxz9khcfg554kxwq7iw9fpifa2z3q7-protobuf-3.21.12/bin:/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin:/nix/store/1dm5yvxvbm954z5j1lh08y1i6bqw8ipx-go-task-3.24.0/bin:/nix/store/8a1h2icgqrhhg7g4c0w0d85s430ihq1k-libressl-3.7.2-nc/bin:/nix/store/m877x4smb0ay04n1hhyr6qcbr263z4vm-clang-11.1.0-dev/bin:/nix/store/dlhyf1n0vwa0kgm24dsqs5qq5hld6pny-foundationdb-7.1.30/bin:/nix/store/gsvxrriqkq5i8anzcd9ql7x7znhal5cd-compiler-rt-libc-11.1.0/bin:/nix/store/ahkfdxq8mcpsb5kvdvgqr1wv8zjngbh4-coreutils-9.1/bin:/nix/store/4qrbfa42xyicny7vlgbbqxz07kcsjbx2-findutils-4.9.0/bin:/nix/store/6bcqajyagcc4s3azx0zqnb3rqxd7gdnv-diffutils-3.9/bin:/nix/store/gy82r5cf12hgkmhzifsyx3fp6cnf6j2l-gnused-4.9/bin:/nix/store/zrls4w5lxynqakh1jlrp03kg4bxzp9yi-gnugrep-3.7/bin:/nix/store/s3yl3l8na93v53k2cfsyz0jrb50bnk8n-gawk-5.2.1/bin:/nix/store/czy796d2241296bdy45w87cmaiig50zr-gnutar-1.34/bin:/nix/store/hdbb5ayyrz1b5hicbsb4am8vin0xxxg6-gzip-1.12/bin:/nix/store/hd573q7097cxj5q29pnc3z0rvakz7ga3-bzip2-1.0.8-bin/bin:/nix/store/nnis9ph3wj866bbs0lalbf22i5bq8yry-gnumake-4.4.1/bin:/nix/store/rhvbjmcfnkg8i2dxpzr114cp1ws7f667-bash-5.2-p15/bin:/nix/store/x4ckkjsxfl4ihl82v0bzsyxs4ay2d5b5-patch-2.7.6/bin:/nix/store/8xjzmhw6hgqmynb5f1v7aw2lvafij405-xz-5.4.3-bin/bin:/nix/store/lcjsmsxqwd4vkq2wj5mmbyjzny3i6k49-file-5.44/bin:/root/.deno/bin:/root/.deno/bin:/nix/store/qs7j7r5jcvn6ijvdccjnnc7qjqpfgd0l-nodejs-20.11.1/bin:/root/.local/bin:/root/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/nix/store/njh6p007ymbmcgas5l7sqqxfmm394zx1-nodejs-18.15.0/bin:/root/.local/bin:/root/.cargo/bin:/root/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.vector/bin - -Yarn version: - 1.22.19 - -Node version: - 18.15.0 - -Platform: - linux x64 - -Trace: - Error: ENOENT: no such file or directory, open '/usr/local/share/.cache/yarn/v6/npm-event-target-shim-5.0.1-5d4d3ebdf9583d63a5333ce2deb7480ab2b05789-integrity/node_modules/event-target-shim/.yarn-tarball.tgz' - -npm manifest: - { - "name": "@rivet-gg/api-full", - "version": "24.1.0", - "private": false, - "repository": "https://github.com/rivet-gg/rivet/tree/main/sdks/typescript", - "files": [ - "dist", - "types", - "core.d.ts", - "serialization.d.ts" - ], - "exports": { - ".": { - "node": "./dist/node/index.js", - "import": "./dist/browser/esm/index.js", - "require": "./dist/browser/cjs/index.js", - "default": "./dist/browser/cjs/index.js", - "types": "./types/index.d.ts" - }, - "./core": { - "node": "./dist/node/core.js", - "import": "./dist/browser/esm/core.js", - "require": "./dist/browser/cjs/core.js", - "default": "./dist/browser/cjs/core.js", - "types": "./types/core/index.d.ts" - }, - "./serialization": { - "node": "./dist/node/serialization.js", - "import": "./dist/browser/esm/serialization.js", - "require": "./dist/browser/cjs/serialization.js", - "default": "./dist/browser/cjs/serialization.js", - "types": "./types/serialization/index.d.ts" - } - }, - "types": "./types/index.d.ts", - "scripts": { - "format": "prettier --write 'src/**/*.ts'", - "compile": "tsc", - "bundle": "node build.js", - "build": "yarn compile && yarn bundle", - "prepack": "yarn run build" - }, - "dependencies": { - "form-data": "^4.0.0", - "js-base64": "^3.7.5", - "node-fetch": "2", - "qs": "^6.11.2", - "readable-stream": "^4.5.2", - "url-join": "^5.0.0" - }, - "devDependencies": { - "@types/node": "17.0.33", - "@types/node-fetch": "2.6.11", - "@types/qs": "6.9.8", - "@types/readable-stream": "^4.0.18", - "@types/url-join": "4.0.1", - "esbuild": "^0.19.11", - "prettier": "2.7.1", - "typescript": "4.6.4" - }, - "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - - "@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - - "@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - - "@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - - "@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - - "@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - - "@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - - "@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - - "@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - - "@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - - "@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - - "@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - - "@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - - "@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - - "@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - - "@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - - "@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - - "@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - - "@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - - "@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - - "@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - - "@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - - "@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== - - "@types/node-fetch@2.6.11": - version "2.6.11" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" - integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - - "@types/node@*": - version "22.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" - integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== - dependencies: - undici-types "~6.13.0" - - "@types/node@17.0.33": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.33.tgz#3c1879b276dc63e73030bb91165e62a4509cd506" - integrity sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ== - - "@types/qs@6.9.8": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - - "@types/readable-stream@^4.0.18": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.18.tgz#5d8d15d26c776500ce573cae580787d149823bfc" - integrity sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - - "@types/url-join@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.1.tgz#4989c97f969464647a8586c7252d97b449cdc045" - integrity sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ== - - abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - - asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - - base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - - buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - - call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - - combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - - define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - - delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - - esbuild@^0.19.11: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" - - event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - - events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - - form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - - function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - - get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - - gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - - has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - - has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - - has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - - hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - - ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - - js-base64@^3.7.5: - version "3.7.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" - integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== - - mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - - mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - - node-fetch@2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - - object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - - prettier@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - - process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - - qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - - readable-stream@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - - safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - - safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - - set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - - side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - - string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - - tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - - typescript@4.6.4: - version "4.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== - - undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== - - url-join@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" - integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== - - webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - - whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" diff --git a/sdks/api/full/typescript/yarn.lock b/sdks/api/full/typescript/yarn.lock deleted file mode 100644 index 526db53de9..0000000000 --- a/sdks/api/full/typescript/yarn.lock +++ /dev/null @@ -1,436 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - -"@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - -"@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - -"@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - -"@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - -"@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - -"@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - -"@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - -"@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - -"@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - -"@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - -"@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - -"@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - -"@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - -"@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - -"@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - -"@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - -"@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - -"@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - -"@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - -"@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - -"@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - -"@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== - -"@types/node-fetch@2.6.11": - version "2.6.11" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" - integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - -"@types/node@*": - version "22.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" - integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== - dependencies: - undici-types "~6.13.0" - -"@types/node@17.0.33": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.33.tgz#3c1879b276dc63e73030bb91165e62a4509cd506" - integrity sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ== - -"@types/qs@6.9.8": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - -"@types/readable-stream@^4.0.18": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.18.tgz#5d8d15d26c776500ce573cae580787d149823bfc" - integrity sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - -"@types/url-join@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.1.tgz#4989c97f969464647a8586c7252d97b449cdc045" - integrity sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -esbuild@^0.19.11: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -js-base64@^3.7.5: - version "3.7.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" - integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -node-fetch@2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -prettier@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -readable-stream@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -typescript@4.6.4: - version "4.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== - -undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== - -url-join@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" - integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" diff --git a/sdks/api/runtime/rust/src/apis/mod.rs.rej b/sdks/api/runtime/rust/src/apis/mod.rs.rej index 6910d29b04..174298e594 100644 --- a/sdks/api/runtime/rust/src/apis/mod.rs.rej +++ b/sdks/api/runtime/rust/src/apis/mod.rs.rej @@ -1,4 +1,6 @@ -@@ -16,13 +16,33 @@ +--- mod.rs ++++ mod.rs +@@ -16,13 +16,33 @@ pub enum Error { ResponseError(ResponseContent), } diff --git a/sdks/api/runtime/typescript/.gitignore b/sdks/api/runtime/typescript/.gitignore deleted file mode 100644 index 169a00539f..0000000000 --- a/sdks/api/runtime/typescript/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -node_modules -.DS_Store -*.d.ts -dist/ -types/ - -# yarn berry -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions diff --git a/sdks/api/runtime/typescript/.prettierrc.yml b/sdks/api/runtime/typescript/.prettierrc.yml deleted file mode 100644 index 0c06786bf5..0000000000 --- a/sdks/api/runtime/typescript/.prettierrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -tabWidth: 4 -printWidth: 120 diff --git a/sdks/api/runtime/typescript/archive.tgz b/sdks/api/runtime/typescript/archive.tgz deleted file mode 100644 index 9d8b45cab4..0000000000 --- a/sdks/api/runtime/typescript/archive.tgz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:597e2bbd7572e5458b834a86bf4f5618c40e1f5c83a3c04afca15e78a8a6f813 -size 280111 diff --git a/sdks/api/runtime/typescript/build.js b/sdks/api/runtime/typescript/build.js deleted file mode 100644 index ea2d841bbe..0000000000 --- a/sdks/api/runtime/typescript/build.js +++ /dev/null @@ -1,62 +0,0 @@ -const { build } = require("esbuild"); - -void main(); - -async function main() { - await bundle({ - platform: "node", - target: "node14", - format: "cjs", - outdir: "node", - }); - await bundle({ - platform: "browser", - format: "esm", - outdir: "browser/esm", - }); - await bundle({ - platform: "browser", - format: "cjs", - outdir: "browser/cjs", - }); -} - -async function bundle({ platform, target, format, outdir }) { - await runEsbuild({ - platform, - target, - format, - entryPoint: "./src/index.ts", - outfile: `./dist/${outdir}/index.js`, - }); - await runEsbuild({ - platform, - target, - format, - entryPoint: "./src/core/index.ts", - outfile: `./dist/${outdir}/core.js`, - }); - await runEsbuild({ - platform, - target, - format, - entryPoint: "./src/serialization/index.ts", - outfile: `./dist/${outdir}/serialization.js`, - }); -} - -async function runEsbuild({ platform, target, format, entryPoint, outfile }) { - await build({ - platform, - target, - format, - entryPoints: [entryPoint], - outfile, - bundle: true, - alias: { - // matches up with tsconfig paths - "@rivet-gg/api": "./src", - }, - external: ['node-fetch'], - }).catch(() => process.exit(1)); -} diff --git a/sdks/api/runtime/typescript/jsr.jsonc b/sdks/api/runtime/typescript/jsr.jsonc deleted file mode 100644 index 0cb4673054..0000000000 --- a/sdks/api/runtime/typescript/jsr.jsonc +++ /dev/null @@ -1,17 +0,0 @@ -{ - // "name": "@rivet-gg/api", - // "version": "0.0.1-rc.1", - // "license": "Apache-2.0", - // "exports": { - // ".": "./dist/browser/esm/index.js", - // "./core": "./dist/browser/esm/core.js", - // "./serialization": "./dist/browser/esm/serialization.js" - // - // // ".": "./src/index.ts", - // // "./core": "./src/core/index.ts", - // // "./serialization": "./src/serialization/index.ts" - // }, - // // "exclude": [ - // // "!dist/browser/esm/" - // // ] -} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/BuildCompression.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..df210e01c1 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildCompression = + /** + * None compression. */ + | "none" + /** + * LZ4 compression. Use the minimum compression level. */ + | "lz4"; + +export const BuildCompression = { + None: "none", + Lz4: "lz4", +} as const; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/BuildKind.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..2331b5be94 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/BuildKind.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BuildKind = + /** + * Docker image archive generated by `docker save`. */ + | "docker_image" + /** + * OCI-compliant bundle. */ + | "oci_bundle" + /** + * A JavaScript file. */ + | "javascript"; + +export const BuildKind = { + DockerImage: "docker_image", + OciBundle: "oci_bundle", + Javascript: "javascript", +} as const; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/GetBuildResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/GetBuildResponse.ts new file mode 100644 index 0000000000..c4dcbb9d5e --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/GetBuildResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetBuildResponse { + build: Rivet.actor.Build; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/ListBuildsResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/ListBuildsResponse.ts new file mode 100644 index 0000000000..172af9a0e2 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/ListBuildsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListBuildsResponse { + /** A list of builds for the project associated with the token. */ + builds: Rivet.actor.Build[]; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts new file mode 100644 index 0000000000..48390f6ee6 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PatchBuildTagsRequest { + tags?: unknown; + /** Removes the given tag keys from all other builds. */ + exclusiveTags?: string[]; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts new file mode 100644 index 0000000000..3b884f6442 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface PatchBuildTagsResponse {} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildRequest.ts new file mode 100644 index 0000000000..75343b37d0 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildRequest.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface PrepareBuildRequest { + /** A tag given to the project build. */ + imageTag?: string; + imageFile: Rivet.upload.PrepareFile; + kind?: Rivet.actor.BuildKind; + compression?: Rivet.actor.BuildCompression; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildResponse.ts new file mode 100644 index 0000000000..6148071aea --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/PrepareBuildResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface PrepareBuildResponse { + build: string; + presignedRequests: Rivet.upload.PresignedRequest[]; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/index.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/index.ts new file mode 100644 index 0000000000..07f139fd9e --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/builds/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetBuildResponse"; +export * from "./ListBuildsResponse"; +export * from "./PatchBuildTagsRequest"; +export * from "./PatchBuildTagsResponse"; +export * from "./PrepareBuildRequest"; +export * from "./PrepareBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Actor.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Actor.ts new file mode 100644 index 0000000000..73c277247a --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Actor.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Actor { + id: string; + region: string; + tags?: unknown; + runtime: Rivet.actor.Runtime; + network: Rivet.actor.Network; + resources: Rivet.actor.Resources; + lifecycle: Rivet.actor.Lifecycle; + createdAt: Rivet.Timestamp; + startedAt?: Rivet.Timestamp; + destroyedAt?: Rivet.Timestamp; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Build.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Build.ts new file mode 100644 index 0000000000..eb4cdcc752 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Build.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Build { + id: string; + name: string; + createdAt: Rivet.Timestamp; + /** Unsigned 64 bit integer. */ + contentLength: number; + /** Tags of this build */ + tags: Record; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/EndpointType.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/EndpointType.ts new file mode 100644 index 0000000000..81a3761c43 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/EndpointType.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type EndpointType = "hostname" | "path"; + +export const EndpointType = { + Hostname: "hostname", + Path: "path", +} as const; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/GuardRouting.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/GuardRouting.ts new file mode 100644 index 0000000000..039f163247 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/GuardRouting.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface GuardRouting {} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/HostRouting.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/HostRouting.ts new file mode 100644 index 0000000000..cdd2164517 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/HostRouting.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface HostRouting {} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Lifecycle.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Lifecycle.ts new file mode 100644 index 0000000000..c6c949e83f --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Lifecycle.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Lifecycle { + /** 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. */ + killTimeout?: number; + /** 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. */ + durable?: boolean; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Network.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Network.ts new file mode 100644 index 0000000000..3cbb50f8ad --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Network.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Network { + mode: Rivet.actor.NetworkMode; + ports: Record; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/NetworkMode.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..692083122e --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/NetworkMode.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type NetworkMode = "bridge" | "host"; + +export const NetworkMode = { + Bridge: "bridge", + Host: "host", +} as const; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Port.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Port.ts new file mode 100644 index 0000000000..40a134e092 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Port.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface Port { + protocol: Rivet.actor.PortProtocol; + internalPort?: number; + hostname?: string; + port?: number; + path?: string; + /** Fully formed connection URL including protocol, hostname, port, and path, if applicable. */ + url?: string; + routing: Rivet.actor.PortRouting; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/PortProtocol.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..cafdb2e4de --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/PortProtocol.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type PortProtocol = "http" | "https" | "tcp" | "tcp_tls" | "udp"; + +export const PortProtocol = { + Http: "http", + Https: "https", + Tcp: "tcp", + TcpTls: "tcp_tls", + Udp: "udp", +} as const; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/PortRouting.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/PortRouting.ts new file mode 100644 index 0000000000..24e3b2c807 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/PortRouting.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface PortRouting { + guard?: Rivet.actor.GuardRouting; + host?: Rivet.actor.HostRouting; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Region.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Region.ts new file mode 100644 index 0000000000..79a8512096 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Region.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Region { + id: string; + name: string; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Resources.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Resources.ts new file mode 100644 index 0000000000..8255dc6705 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Resources.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Resources { + /** + * The number of CPU cores in millicores, or 1/1000 of a core. For example, + * 1/8 of a core would be 125 millicores, and 1 core would be 1000 + * millicores. + */ + cpu: number; + /** The amount of memory in megabytes */ + memory: number; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Runtime.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Runtime.ts new file mode 100644 index 0000000000..a918ef8387 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/Runtime.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface Runtime { + build: string; + arguments?: string[]; + environment?: Record; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/index.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/index.ts new file mode 100644 index 0000000000..71748c7636 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/common/types/index.ts @@ -0,0 +1,14 @@ +export * from "./Actor"; +export * from "./Runtime"; +export * from "./Lifecycle"; +export * from "./Resources"; +export * from "./Network"; +export * from "./NetworkMode"; +export * from "./Port"; +export * from "./PortProtocol"; +export * from "./PortRouting"; +export * from "./GuardRouting"; +export * from "./HostRouting"; +export * from "./EndpointType"; +export * from "./Build"; +export * from "./Region"; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/GetActorLogsResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/GetActorLogsResponse.ts new file mode 100644 index 0000000000..0982d890db --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/GetActorLogsResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface GetActorLogsResponse { + /** Sorted old to new. */ + lines: string[]; + /** Sorted old to new. */ + timestamps: Rivet.Timestamp[]; + watch: Rivet.WatchResponse; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/LogStream.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/LogStream.ts new file mode 100644 index 0000000000..c8dd8fc0ad --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/LogStream.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type LogStream = "std_out" | "std_err"; + +export const LogStream = { + StdOut: "std_out", + StdErr: "std_err", +} as const; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/index.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/index.ts new file mode 100644 index 0000000000..b7d3ce1ba2 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetActorLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/ListRegionsResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/ListRegionsResponse.ts new file mode 100644 index 0000000000..8e6f6cbf51 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/ListRegionsResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ListRegionsResponse { + regions: Rivet.actor.Region[]; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/ResolveRegionResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/ResolveRegionResponse.ts new file mode 100644 index 0000000000..8eb3ee22c3 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/ResolveRegionResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../../../index"; + +export interface ResolveRegionResponse { + region: Rivet.actor.Region; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/index.ts b/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/index.ts new file mode 100644 index 0000000000..603d3091aa --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/resources/regions/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ListRegionsResponse"; +export * from "./ResolveRegionResponse"; diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorNetworkRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorNetworkRequest.ts new file mode 100644 index 0000000000..a8675a97c1 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorNetworkRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorNetworkRequest { + mode?: Rivet.actor.NetworkMode; + ports?: Record; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorPortRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorPortRequest.ts new file mode 100644 index 0000000000..53fc5e8649 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorPortRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorPortRequest { + protocol: Rivet.actor.PortProtocol; + internalPort?: number; + routing?: Rivet.actor.PortRouting; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorRequest.ts new file mode 100644 index 0000000000..f2267d5c3b --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorRequest.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorRequest { + region?: string; + tags?: unknown; + build?: string; + buildTags?: unknown; + runtime?: Rivet.actor.CreateActorRuntimeRequest; + network?: Rivet.actor.CreateActorNetworkRequest; + resources?: Rivet.actor.Resources; + lifecycle?: Rivet.actor.Lifecycle; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorResponse.ts new file mode 100644 index 0000000000..ddceda5117 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface CreateActorResponse { + /** The actor that was created */ + actor: Rivet.actor.Actor; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorRuntimeRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorRuntimeRequest.ts new file mode 100644 index 0000000000..4c3fbde102 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/CreateActorRuntimeRequest.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface CreateActorRuntimeRequest { + environment?: Record; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/DestroyActorResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/DestroyActorResponse.ts new file mode 100644 index 0000000000..6656d4884f --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/DestroyActorResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DestroyActorResponse {} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/GetActorResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/GetActorResponse.ts new file mode 100644 index 0000000000..1266ace808 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/GetActorResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface GetActorResponse { + actor: Rivet.actor.Actor; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/ListActorsResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/ListActorsResponse.ts new file mode 100644 index 0000000000..b8b08c8c15 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/ListActorsResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ListActorsResponse { + /** A list of actors for the project associated with the token. */ + actors: Rivet.actor.Actor[]; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeActorRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeActorRequest.ts new file mode 100644 index 0000000000..d559a790a1 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeActorRequest.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeActorRequest { + build?: string; + buildTags?: unknown; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeActorResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeActorResponse.ts new file mode 100644 index 0000000000..6afcca95ec --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeActorResponse.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeActorResponse {} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeAllActorsRequest.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeAllActorsRequest.ts new file mode 100644 index 0000000000..0b6e4311c8 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeAllActorsRequest.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeAllActorsRequest { + tags?: unknown; + build?: string; + buildTags?: unknown; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeAllActorsResponse.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeAllActorsResponse.ts new file mode 100644 index 0000000000..a1a71d02f8 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/UpgradeAllActorsResponse.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface UpgradeAllActorsResponse { + count: number; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/actor/types/index.ts b/sdks/api/runtime/typescript/src/api/resources/actor/types/index.ts new file mode 100644 index 0000000000..d84d6cbd8b --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/actor/types/index.ts @@ -0,0 +1,12 @@ +export * from "./GetActorResponse"; +export * from "./CreateActorRequest"; +export * from "./CreateActorRuntimeRequest"; +export * from "./CreateActorNetworkRequest"; +export * from "./CreateActorPortRequest"; +export * from "./CreateActorResponse"; +export * from "./DestroyActorResponse"; +export * from "./UpgradeActorRequest"; +export * from "./UpgradeActorResponse"; +export * from "./UpgradeAllActorsRequest"; +export * from "./UpgradeAllActorsResponse"; +export * from "./ListActorsResponse"; diff --git a/sdks/api/runtime/typescript/src/api/resources/common/types/ErrorBody.ts b/sdks/api/runtime/typescript/src/api/resources/common/types/ErrorBody.ts new file mode 100644 index 0000000000..dd97458572 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/common/types/ErrorBody.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Rivet from "../../../index"; + +export interface ErrorBody { + code: string; + message: string; + rayId: string; + documentation?: string; + metadata?: Rivet.ErrorMetadata | undefined; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/common/types/ErrorMetadata.ts b/sdks/api/runtime/typescript/src/api/resources/common/types/ErrorMetadata.ts new file mode 100644 index 0000000000..d236d1f19d --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/common/types/ErrorMetadata.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Unstructured metadata relating to an error. Must be manually parsed. + */ +export type ErrorMetadata = unknown; diff --git a/sdks/api/runtime/typescript/src/api/resources/common/types/Timestamp.ts b/sdks/api/runtime/typescript/src/api/resources/common/types/Timestamp.ts new file mode 100644 index 0000000000..44f4eb6858 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/common/types/Timestamp.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * RFC3339 timestamp + */ +export type Timestamp = Date; diff --git a/sdks/api/runtime/typescript/src/api/resources/common/types/WatchResponse.ts b/sdks/api/runtime/typescript/src/api/resources/common/types/WatchResponse.ts new file mode 100644 index 0000000000..9b74a009b3 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/common/types/WatchResponse.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Provided by watchable endpoints used in blocking loops. + */ +export interface WatchResponse { + /** + * Index indicating the version of the data responded. + * Pass this to `WatchQuery` to block and wait for the next response. + */ + index: string; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/common/types/index.ts b/sdks/api/runtime/typescript/src/api/resources/common/types/index.ts new file mode 100644 index 0000000000..eb53c3b2d6 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/common/types/index.ts @@ -0,0 +1,4 @@ +export * from "./WatchResponse"; +export * from "./Timestamp"; +export * from "./ErrorMetadata"; +export * from "./ErrorBody"; diff --git a/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/PrepareFile.ts b/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/PrepareFile.ts new file mode 100644 index 0000000000..8e048600ee --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/PrepareFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A file being prepared to upload. + */ +export interface PrepareFile { + /** The path/filename of the file. */ + path: string; + /** The MIME type of the file. */ + contentType?: string; + /** Unsigned 64 bit integer. */ + contentLength: number; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/PresignedRequest.ts b/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/PresignedRequest.ts new file mode 100644 index 0000000000..542bc3c5a4 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/PresignedRequest.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * A presigned request used to upload files. Upload your file to the given URL via a PUT request. + */ +export interface PresignedRequest { + /** The name of the file to upload. This is the same as the one given in the upload prepare file. */ + path: string; + /** The URL of the presigned request for which to upload your file to. */ + url: string; + /** The byte offset for this multipart chunk. Always 0 if not a multipart upload. */ + byteOffset: number; + /** Expected size of this upload. */ + contentLength: number; +} diff --git a/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/index.ts b/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/index.ts new file mode 100644 index 0000000000..c950bbac53 --- /dev/null +++ b/sdks/api/runtime/typescript/src/api/resources/upload/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PresignedRequest"; +export * from "./PrepareFile"; diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/BuildCompression.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/BuildCompression.ts new file mode 100644 index 0000000000..d7295dd506 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/BuildCompression.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const BuildCompression: core.serialization.Schema< + serializers.actor.BuildCompression.Raw, + Rivet.actor.BuildCompression +> = core.serialization.enum_(["none", "lz4"]); + +export declare namespace BuildCompression { + type Raw = "none" | "lz4"; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/BuildKind.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/BuildKind.ts new file mode 100644 index 0000000000..e92bedb40c --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/BuildKind.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const BuildKind: core.serialization.Schema = + core.serialization.enum_(["docker_image", "oci_bundle", "javascript"]); + +export declare namespace BuildKind { + type Raw = "docker_image" | "oci_bundle" | "javascript"; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/GetBuildResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/GetBuildResponse.ts new file mode 100644 index 0000000000..ad0991b6a9 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/GetBuildResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Build } from "../../common/types/Build"; + +export const GetBuildResponse: core.serialization.ObjectSchema< + serializers.actor.GetBuildResponse.Raw, + Rivet.actor.GetBuildResponse +> = core.serialization.object({ + build: Build, +}); + +export declare namespace GetBuildResponse { + interface Raw { + build: Build.Raw; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/ListBuildsResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/ListBuildsResponse.ts new file mode 100644 index 0000000000..6bf90e4c05 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/ListBuildsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Build } from "../../common/types/Build"; + +export const ListBuildsResponse: core.serialization.ObjectSchema< + serializers.actor.ListBuildsResponse.Raw, + Rivet.actor.ListBuildsResponse +> = core.serialization.object({ + builds: core.serialization.list(Build), +}); + +export declare namespace ListBuildsResponse { + interface Raw { + builds: Build.Raw[]; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts new file mode 100644 index 0000000000..7eb991101a --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PatchBuildTagsRequest: core.serialization.ObjectSchema< + serializers.actor.PatchBuildTagsRequest.Raw, + Rivet.actor.PatchBuildTagsRequest +> = core.serialization.object({ + tags: core.serialization.unknown(), + exclusiveTags: core.serialization.property( + "exclusive_tags", + core.serialization.list(core.serialization.string()).optional() + ), +}); + +export declare namespace PatchBuildTagsRequest { + interface Raw { + tags?: unknown; + exclusive_tags?: string[] | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts new file mode 100644 index 0000000000..8310eab7f1 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PatchBuildTagsResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PatchBuildTagsResponse: core.serialization.ObjectSchema< + serializers.actor.PatchBuildTagsResponse.Raw, + Rivet.actor.PatchBuildTagsResponse +> = core.serialization.object({}); + +export declare namespace PatchBuildTagsResponse { + interface Raw {} +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildRequest.ts new file mode 100644 index 0000000000..cc9f86ffa0 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildRequest.ts @@ -0,0 +1,29 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PrepareFile } from "../../../../upload/resources/common/types/PrepareFile"; +import { BuildKind } from "./BuildKind"; +import { BuildCompression } from "./BuildCompression"; + +export const PrepareBuildRequest: core.serialization.ObjectSchema< + serializers.actor.PrepareBuildRequest.Raw, + Rivet.actor.PrepareBuildRequest +> = core.serialization.object({ + imageTag: core.serialization.property("image_tag", core.serialization.string().optional()), + imageFile: core.serialization.property("image_file", PrepareFile), + kind: BuildKind.optional(), + compression: BuildCompression.optional(), +}); + +export declare namespace PrepareBuildRequest { + interface Raw { + image_tag?: string | null; + image_file: PrepareFile.Raw; + kind?: BuildKind.Raw | null; + compression?: BuildCompression.Raw | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildResponse.ts new file mode 100644 index 0000000000..e6af29637c --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/PrepareBuildResponse.ts @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PresignedRequest } from "../../../../upload/resources/common/types/PresignedRequest"; + +export const PrepareBuildResponse: core.serialization.ObjectSchema< + serializers.actor.PrepareBuildResponse.Raw, + Rivet.actor.PrepareBuildResponse +> = core.serialization.object({ + build: core.serialization.string(), + presignedRequests: core.serialization.property("presigned_requests", core.serialization.list(PresignedRequest)), +}); + +export declare namespace PrepareBuildResponse { + interface Raw { + build: string; + presigned_requests: PresignedRequest.Raw[]; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/index.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/index.ts new file mode 100644 index 0000000000..07f139fd9e --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/builds/types/index.ts @@ -0,0 +1,8 @@ +export * from "./GetBuildResponse"; +export * from "./ListBuildsResponse"; +export * from "./PatchBuildTagsRequest"; +export * from "./PatchBuildTagsResponse"; +export * from "./PrepareBuildRequest"; +export * from "./PrepareBuildResponse"; +export * from "./BuildKind"; +export * from "./BuildCompression"; diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Actor.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Actor.ts new file mode 100644 index 0000000000..3679eda7e5 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Actor.ts @@ -0,0 +1,41 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Runtime } from "./Runtime"; +import { Network } from "./Network"; +import { Resources } from "./Resources"; +import { Lifecycle } from "./Lifecycle"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const Actor: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + region: core.serialization.string(), + tags: core.serialization.unknown(), + runtime: Runtime, + network: Network, + resources: Resources, + lifecycle: Lifecycle, + createdAt: core.serialization.property("created_at", Timestamp), + startedAt: core.serialization.property("started_at", Timestamp.optional()), + destroyedAt: core.serialization.property("destroyed_at", Timestamp.optional()), + }); + +export declare namespace Actor { + interface Raw { + id: string; + region: string; + tags?: unknown; + runtime: Runtime.Raw; + network: Network.Raw; + resources: Resources.Raw; + lifecycle: Lifecycle.Raw; + created_at: Timestamp.Raw; + started_at?: Timestamp.Raw | null; + destroyed_at?: Timestamp.Raw | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Build.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Build.ts new file mode 100644 index 0000000000..f7b1bf9a0e --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Build.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; + +export const Build: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + name: core.serialization.string(), + createdAt: core.serialization.property("created_at", Timestamp), + contentLength: core.serialization.property("content_length", core.serialization.number()), + tags: core.serialization.record(core.serialization.string(), core.serialization.string()), + }); + +export declare namespace Build { + interface Raw { + id: string; + name: string; + created_at: Timestamp.Raw; + content_length: number; + tags: Record; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/EndpointType.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/EndpointType.ts new file mode 100644 index 0000000000..76f1ea738d --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/EndpointType.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const EndpointType: core.serialization.Schema = + core.serialization.enum_(["hostname", "path"]); + +export declare namespace EndpointType { + type Raw = "hostname" | "path"; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/GuardRouting.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/GuardRouting.ts new file mode 100644 index 0000000000..9957acedb0 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/GuardRouting.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const GuardRouting: core.serialization.ObjectSchema< + serializers.actor.GuardRouting.Raw, + Rivet.actor.GuardRouting +> = core.serialization.object({}); + +export declare namespace GuardRouting { + interface Raw {} +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/HostRouting.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/HostRouting.ts new file mode 100644 index 0000000000..560b74d780 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/HostRouting.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const HostRouting: core.serialization.ObjectSchema = + core.serialization.object({}); + +export declare namespace HostRouting { + interface Raw {} +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Lifecycle.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Lifecycle.ts new file mode 100644 index 0000000000..25ba1c364d --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Lifecycle.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Lifecycle: core.serialization.ObjectSchema = + core.serialization.object({ + killTimeout: core.serialization.property("kill_timeout", core.serialization.number().optional()), + durable: core.serialization.boolean().optional(), + }); + +export declare namespace Lifecycle { + interface Raw { + kill_timeout?: number | null; + durable?: boolean | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Network.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Network.ts new file mode 100644 index 0000000000..a6eb07afa1 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Network.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { NetworkMode } from "./NetworkMode"; +import { Port } from "./Port"; + +export const Network: core.serialization.ObjectSchema = + core.serialization.object({ + mode: NetworkMode, + ports: core.serialization.record(core.serialization.string(), Port), + }); + +export declare namespace Network { + interface Raw { + mode: NetworkMode.Raw; + ports: Record; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/NetworkMode.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/NetworkMode.ts new file mode 100644 index 0000000000..533c79ed44 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/NetworkMode.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const NetworkMode: core.serialization.Schema = + core.serialization.enum_(["bridge", "host"]); + +export declare namespace NetworkMode { + type Raw = "bridge" | "host"; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Port.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Port.ts new file mode 100644 index 0000000000..e84caa6da0 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Port.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { PortProtocol } from "./PortProtocol"; +import { PortRouting } from "./PortRouting"; + +export const Port: core.serialization.ObjectSchema = + core.serialization.object({ + protocol: PortProtocol, + internalPort: core.serialization.property("internal_port", core.serialization.number().optional()), + hostname: core.serialization.string().optional(), + port: core.serialization.number().optional(), + path: core.serialization.string().optional(), + url: core.serialization.string().optional(), + routing: PortRouting, + }); + +export declare namespace Port { + interface Raw { + protocol: PortProtocol.Raw; + internal_port?: number | null; + hostname?: string | null; + port?: number | null; + path?: string | null; + url?: string | null; + routing: PortRouting.Raw; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/PortProtocol.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/PortProtocol.ts new file mode 100644 index 0000000000..9bfccdb03e --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/PortProtocol.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PortProtocol: core.serialization.Schema = + core.serialization.enum_(["http", "https", "tcp", "tcp_tls", "udp"]); + +export declare namespace PortProtocol { + type Raw = "http" | "https" | "tcp" | "tcp_tls" | "udp"; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/PortRouting.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/PortRouting.ts new file mode 100644 index 0000000000..1dfd5201c0 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/PortRouting.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { GuardRouting } from "./GuardRouting"; +import { HostRouting } from "./HostRouting"; + +export const PortRouting: core.serialization.ObjectSchema = + core.serialization.object({ + guard: GuardRouting.optional(), + host: HostRouting.optional(), + }); + +export declare namespace PortRouting { + interface Raw { + guard?: GuardRouting.Raw | null; + host?: HostRouting.Raw | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Region.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Region.ts new file mode 100644 index 0000000000..a319f0ee69 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Region.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Region: core.serialization.ObjectSchema = + core.serialization.object({ + id: core.serialization.string(), + name: core.serialization.string(), + }); + +export declare namespace Region { + interface Raw { + id: string; + name: string; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Resources.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Resources.ts new file mode 100644 index 0000000000..01e66ee919 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Resources.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Resources: core.serialization.ObjectSchema = + core.serialization.object({ + cpu: core.serialization.number(), + memory: core.serialization.number(), + }); + +export declare namespace Resources { + interface Raw { + cpu: number; + memory: number; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Runtime.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Runtime.ts new file mode 100644 index 0000000000..4c05945029 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/Runtime.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const Runtime: core.serialization.ObjectSchema = + core.serialization.object({ + build: core.serialization.string(), + arguments: core.serialization.list(core.serialization.string()).optional(), + environment: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), + }); + +export declare namespace Runtime { + interface Raw { + build: string; + arguments?: string[] | null; + environment?: Record | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/index.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/index.ts new file mode 100644 index 0000000000..71748c7636 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/common/types/index.ts @@ -0,0 +1,14 @@ +export * from "./Actor"; +export * from "./Runtime"; +export * from "./Lifecycle"; +export * from "./Resources"; +export * from "./Network"; +export * from "./NetworkMode"; +export * from "./Port"; +export * from "./PortProtocol"; +export * from "./PortRouting"; +export * from "./GuardRouting"; +export * from "./HostRouting"; +export * from "./EndpointType"; +export * from "./Build"; +export * from "./Region"; diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/GetActorLogsResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/GetActorLogsResponse.ts new file mode 100644 index 0000000000..35562c96f7 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/GetActorLogsResponse.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Timestamp } from "../../../../common/types/Timestamp"; +import { WatchResponse } from "../../../../common/types/WatchResponse"; + +export const GetActorLogsResponse: core.serialization.ObjectSchema< + serializers.actor.GetActorLogsResponse.Raw, + Rivet.actor.GetActorLogsResponse +> = core.serialization.object({ + lines: core.serialization.list(core.serialization.string()), + timestamps: core.serialization.list(Timestamp), + watch: WatchResponse, +}); + +export declare namespace GetActorLogsResponse { + interface Raw { + lines: string[]; + timestamps: Timestamp.Raw[]; + watch: WatchResponse.Raw; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/LogStream.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/LogStream.ts new file mode 100644 index 0000000000..7676081e33 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/LogStream.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const LogStream: core.serialization.Schema = + core.serialization.enum_(["std_out", "std_err"]); + +export declare namespace LogStream { + type Raw = "std_out" | "std_err"; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/index.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/index.ts new file mode 100644 index 0000000000..b7d3ce1ba2 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/logs/types/index.ts @@ -0,0 +1,2 @@ +export * from "./GetActorLogsResponse"; +export * from "./LogStream"; diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/ListRegionsResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/ListRegionsResponse.ts new file mode 100644 index 0000000000..63f4ea693c --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/ListRegionsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Region } from "../../common/types/Region"; + +export const ListRegionsResponse: core.serialization.ObjectSchema< + serializers.actor.ListRegionsResponse.Raw, + Rivet.actor.ListRegionsResponse +> = core.serialization.object({ + regions: core.serialization.list(Region), +}); + +export declare namespace ListRegionsResponse { + interface Raw { + regions: Region.Raw[]; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/ResolveRegionResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/ResolveRegionResponse.ts new file mode 100644 index 0000000000..efcebd4407 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/ResolveRegionResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; +import { Region } from "../../common/types/Region"; + +export const ResolveRegionResponse: core.serialization.ObjectSchema< + serializers.actor.ResolveRegionResponse.Raw, + Rivet.actor.ResolveRegionResponse +> = core.serialization.object({ + region: Region, +}); + +export declare namespace ResolveRegionResponse { + interface Raw { + region: Region.Raw; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/index.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/index.ts new file mode 100644 index 0000000000..603d3091aa --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/resources/regions/types/index.ts @@ -0,0 +1,2 @@ +export * from "./ListRegionsResponse"; +export * from "./ResolveRegionResponse"; diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorNetworkRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorNetworkRequest.ts new file mode 100644 index 0000000000..b77b9391a3 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorNetworkRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { NetworkMode } from "../resources/common/types/NetworkMode"; +import { CreateActorPortRequest } from "./CreateActorPortRequest"; + +export const CreateActorNetworkRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorNetworkRequest.Raw, + Rivet.actor.CreateActorNetworkRequest +> = core.serialization.object({ + mode: NetworkMode.optional(), + ports: core.serialization.record(core.serialization.string(), CreateActorPortRequest).optional(), +}); + +export declare namespace CreateActorNetworkRequest { + interface Raw { + mode?: NetworkMode.Raw | null; + ports?: Record | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorPortRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorPortRequest.ts new file mode 100644 index 0000000000..6fe88c3776 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorPortRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { PortProtocol } from "../resources/common/types/PortProtocol"; +import { PortRouting } from "../resources/common/types/PortRouting"; + +export const CreateActorPortRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorPortRequest.Raw, + Rivet.actor.CreateActorPortRequest +> = core.serialization.object({ + protocol: PortProtocol, + internalPort: core.serialization.property("internal_port", core.serialization.number().optional()), + routing: PortRouting.optional(), +}); + +export declare namespace CreateActorPortRequest { + interface Raw { + protocol: PortProtocol.Raw; + internal_port?: number | null; + routing?: PortRouting.Raw | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorRequest.ts new file mode 100644 index 0000000000..a8b7873c1b --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorRequest.ts @@ -0,0 +1,38 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { CreateActorRuntimeRequest } from "./CreateActorRuntimeRequest"; +import { CreateActorNetworkRequest } from "./CreateActorNetworkRequest"; +import { Resources } from "../resources/common/types/Resources"; +import { Lifecycle } from "../resources/common/types/Lifecycle"; + +export const CreateActorRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorRequest.Raw, + Rivet.actor.CreateActorRequest +> = core.serialization.object({ + region: core.serialization.string().optional(), + tags: core.serialization.unknown(), + build: core.serialization.string().optional(), + buildTags: core.serialization.property("build_tags", core.serialization.unknown().optional()), + runtime: CreateActorRuntimeRequest.optional(), + network: CreateActorNetworkRequest.optional(), + resources: Resources.optional(), + lifecycle: Lifecycle.optional(), +}); + +export declare namespace CreateActorRequest { + interface Raw { + region?: string | null; + tags?: unknown; + build?: string | null; + build_tags?: unknown | null; + runtime?: CreateActorRuntimeRequest.Raw | null; + network?: CreateActorNetworkRequest.Raw | null; + resources?: Resources.Raw | null; + lifecycle?: Lifecycle.Raw | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorResponse.ts new file mode 100644 index 0000000000..0b460b8388 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Actor } from "../resources/common/types/Actor"; + +export const CreateActorResponse: core.serialization.ObjectSchema< + serializers.actor.CreateActorResponse.Raw, + Rivet.actor.CreateActorResponse +> = core.serialization.object({ + actor: Actor, +}); + +export declare namespace CreateActorResponse { + interface Raw { + actor: Actor.Raw; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorRuntimeRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorRuntimeRequest.ts new file mode 100644 index 0000000000..7d119db035 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/CreateActorRuntimeRequest.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const CreateActorRuntimeRequest: core.serialization.ObjectSchema< + serializers.actor.CreateActorRuntimeRequest.Raw, + Rivet.actor.CreateActorRuntimeRequest +> = core.serialization.object({ + environment: core.serialization.record(core.serialization.string(), core.serialization.string()).optional(), +}); + +export declare namespace CreateActorRuntimeRequest { + interface Raw { + environment?: Record | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/DestroyActorResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/DestroyActorResponse.ts new file mode 100644 index 0000000000..f3d099b9c3 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/DestroyActorResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const DestroyActorResponse: core.serialization.ObjectSchema< + serializers.actor.DestroyActorResponse.Raw, + Rivet.actor.DestroyActorResponse +> = core.serialization.object({}); + +export declare namespace DestroyActorResponse { + interface Raw {} +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/GetActorResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/GetActorResponse.ts new file mode 100644 index 0000000000..2aff4a4676 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/GetActorResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Actor } from "../resources/common/types/Actor"; + +export const GetActorResponse: core.serialization.ObjectSchema< + serializers.actor.GetActorResponse.Raw, + Rivet.actor.GetActorResponse +> = core.serialization.object({ + actor: Actor, +}); + +export declare namespace GetActorResponse { + interface Raw { + actor: Actor.Raw; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/ListActorsResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/ListActorsResponse.ts new file mode 100644 index 0000000000..93b573d618 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/ListActorsResponse.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { Actor } from "../resources/common/types/Actor"; + +export const ListActorsResponse: core.serialization.ObjectSchema< + serializers.actor.ListActorsResponse.Raw, + Rivet.actor.ListActorsResponse +> = core.serialization.object({ + actors: core.serialization.list(Actor), +}); + +export declare namespace ListActorsResponse { + interface Raw { + actors: Actor.Raw[]; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeActorRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeActorRequest.ts new file mode 100644 index 0000000000..b443f01945 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeActorRequest.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeActorRequest: core.serialization.ObjectSchema< + serializers.actor.UpgradeActorRequest.Raw, + Rivet.actor.UpgradeActorRequest +> = core.serialization.object({ + build: core.serialization.string().optional(), + buildTags: core.serialization.property("build_tags", core.serialization.unknown().optional()), +}); + +export declare namespace UpgradeActorRequest { + interface Raw { + build?: string | null; + build_tags?: unknown | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeActorResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeActorResponse.ts new file mode 100644 index 0000000000..13b1259e1d --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeActorResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeActorResponse: core.serialization.ObjectSchema< + serializers.actor.UpgradeActorResponse.Raw, + Rivet.actor.UpgradeActorResponse +> = core.serialization.object({}); + +export declare namespace UpgradeActorResponse { + interface Raw {} +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeAllActorsRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeAllActorsRequest.ts new file mode 100644 index 0000000000..a074a1fa73 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeAllActorsRequest.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeAllActorsRequest: core.serialization.ObjectSchema< + serializers.actor.UpgradeAllActorsRequest.Raw, + Rivet.actor.UpgradeAllActorsRequest +> = core.serialization.object({ + tags: core.serialization.unknown(), + build: core.serialization.string().optional(), + buildTags: core.serialization.property("build_tags", core.serialization.unknown().optional()), +}); + +export declare namespace UpgradeAllActorsRequest { + interface Raw { + tags?: unknown; + build?: string | null; + build_tags?: unknown | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeAllActorsResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeAllActorsResponse.ts new file mode 100644 index 0000000000..0c9a015b3a --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/UpgradeAllActorsResponse.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const UpgradeAllActorsResponse: core.serialization.ObjectSchema< + serializers.actor.UpgradeAllActorsResponse.Raw, + Rivet.actor.UpgradeAllActorsResponse +> = core.serialization.object({ + count: core.serialization.number(), +}); + +export declare namespace UpgradeAllActorsResponse { + interface Raw { + count: number; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/actor/types/index.ts b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/index.ts new file mode 100644 index 0000000000..d84d6cbd8b --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/actor/types/index.ts @@ -0,0 +1,12 @@ +export * from "./GetActorResponse"; +export * from "./CreateActorRequest"; +export * from "./CreateActorRuntimeRequest"; +export * from "./CreateActorNetworkRequest"; +export * from "./CreateActorPortRequest"; +export * from "./CreateActorResponse"; +export * from "./DestroyActorResponse"; +export * from "./UpgradeActorRequest"; +export * from "./UpgradeActorResponse"; +export * from "./UpgradeAllActorsRequest"; +export * from "./UpgradeAllActorsResponse"; +export * from "./ListActorsResponse"; diff --git a/sdks/api/runtime/typescript/src/serialization/resources/common/types/ErrorBody.ts b/sdks/api/runtime/typescript/src/serialization/resources/common/types/ErrorBody.ts new file mode 100644 index 0000000000..8f81f08206 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/common/types/ErrorBody.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; +import { ErrorMetadata } from "./ErrorMetadata"; + +export const ErrorBody: core.serialization.ObjectSchema = + core.serialization.object({ + code: core.serialization.string(), + message: core.serialization.string(), + rayId: core.serialization.property("ray_id", core.serialization.string()), + documentation: core.serialization.string().optional(), + metadata: ErrorMetadata.optional(), + }); + +export declare namespace ErrorBody { + interface Raw { + code: string; + message: string; + ray_id: string; + documentation?: string | null; + metadata?: (ErrorMetadata.Raw | undefined) | null; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/common/types/ErrorMetadata.ts b/sdks/api/runtime/typescript/src/serialization/resources/common/types/ErrorMetadata.ts new file mode 100644 index 0000000000..df2633a06a --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/common/types/ErrorMetadata.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const ErrorMetadata: core.serialization.Schema = + core.serialization.unknown(); + +export declare namespace ErrorMetadata { + type Raw = unknown; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/common/types/Timestamp.ts b/sdks/api/runtime/typescript/src/serialization/resources/common/types/Timestamp.ts new file mode 100644 index 0000000000..683755ac05 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/common/types/Timestamp.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const Timestamp: core.serialization.Schema = + core.serialization.date(); + +export declare namespace Timestamp { + type Raw = string; +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/common/types/WatchResponse.ts b/sdks/api/runtime/typescript/src/serialization/resources/common/types/WatchResponse.ts new file mode 100644 index 0000000000..9180fc3b44 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/common/types/WatchResponse.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Rivet from "../../../../api/index"; +import * as core from "../../../../core"; + +export const WatchResponse: core.serialization.ObjectSchema = + core.serialization.object({ + index: core.serialization.string(), + }); + +export declare namespace WatchResponse { + interface Raw { + index: string; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/common/types/index.ts b/sdks/api/runtime/typescript/src/serialization/resources/common/types/index.ts new file mode 100644 index 0000000000..eb53c3b2d6 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/common/types/index.ts @@ -0,0 +1,4 @@ +export * from "./WatchResponse"; +export * from "./Timestamp"; +export * from "./ErrorMetadata"; +export * from "./ErrorBody"; diff --git a/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/PrepareFile.ts b/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/PrepareFile.ts new file mode 100644 index 0000000000..6af098300a --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/PrepareFile.ts @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PrepareFile: core.serialization.ObjectSchema< + serializers.upload.PrepareFile.Raw, + Rivet.upload.PrepareFile +> = core.serialization.object({ + path: core.serialization.string(), + contentType: core.serialization.property("content_type", core.serialization.string().optional()), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace PrepareFile { + interface Raw { + path: string; + content_type?: string | null; + content_length: number; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/PresignedRequest.ts b/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/PresignedRequest.ts new file mode 100644 index 0000000000..a490edb18f --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/PresignedRequest.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../../../index"; +import * as Rivet from "../../../../../../api/index"; +import * as core from "../../../../../../core"; + +export const PresignedRequest: core.serialization.ObjectSchema< + serializers.upload.PresignedRequest.Raw, + Rivet.upload.PresignedRequest +> = core.serialization.object({ + path: core.serialization.string(), + url: core.serialization.string(), + byteOffset: core.serialization.property("byte_offset", core.serialization.number()), + contentLength: core.serialization.property("content_length", core.serialization.number()), +}); + +export declare namespace PresignedRequest { + interface Raw { + path: string; + url: string; + byte_offset: number; + content_length: number; + } +} diff --git a/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/index.ts b/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/index.ts new file mode 100644 index 0000000000..c950bbac53 --- /dev/null +++ b/sdks/api/runtime/typescript/src/serialization/resources/upload/resources/common/types/index.ts @@ -0,0 +1,2 @@ +export * from "./PresignedRequest"; +export * from "./PrepareFile"; diff --git a/sdks/api/runtime/typescript/tsconfig.json b/sdks/api/runtime/typescript/tsconfig.json deleted file mode 100644 index 6386dc3821..0000000000 --- a/sdks/api/runtime/typescript/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "extendedDiagnostics": true, - "strict": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "esModuleInterop": true, - "skipLibCheck": true, - "declaration": true, - "emitDeclarationOnly": true, - "sourceMap": true, - "noUnusedParameters": true, - "outDir": "types", - "rootDir": "src", - "baseUrl": "src", - "paths": { - "@rivet-gg/api": [ - "." - ] - } - }, - "include": [ - "src" - ], - "exclude": [] -} \ No newline at end of file diff --git a/sdks/api/runtime/typescript/yarn-error.log b/sdks/api/runtime/typescript/yarn-error.log deleted file mode 100644 index cf5800507a..0000000000 --- a/sdks/api/runtime/typescript/yarn-error.log +++ /dev/null @@ -1,522 +0,0 @@ -Arguments: - /nix/store/njh6p007ymbmcgas5l7sqqxfmm394zx1-nodejs-18.15.0/bin/node /root/.nix-profile/bin/yarn install - -PATH: - /root/rivet/ee/target/debug:/root/rivet/ee/target/release:/nix/store/rnzr5gb65b4f5xk7dmljk93km9wpsll6-bash-interactive-5.2-p15/bin:/nix/store/95cxzy2hpizr23343b8bskl4yacf4b3l-python3-3.10.11/bin:/nix/store/ywwjpdyhar4f3vcqf4qk77vrbr3vj5wl-patchelf-0.15.0/bin:/nix/store/7wkshj58fcsl1f3zyi67qsxgl1p8nki1-gcc-wrapper-12.2.0/bin:/nix/store/dcd1zhv56rk0d2z7akzfjgzr076c4jl9-gcc-12.2.0/bin:/nix/store/lyvhsvwp2pzy74fkcn7qbs5vcgy5d7vl-glibc-2.37-8-bin/bin:/nix/store/ahkfdxq8mcpsb5kvdvgqr1wv8zjngbh4-coreutils-9.1/bin:/nix/store/rbwalnmk5a6nj9mbldxzmj11gvacbrsi-binutils-wrapper-2.40/bin:/nix/store/22p5nv7fbxhm06mfkwwnibv1nsz06x4b-binutils-2.40/bin:/nix/store/kd1k6pxi5f6i9fviifhwkr8n013a55xb-k3d-5.4.4/bin:/nix/store/7p45r1h2fzkp4gv4ilky92vxhjfnbv05-kubectl-1.27.1/bin:/nix/store/1y7j55f883l1n6n1k8njilfvhang2473-kubernetes-helm-3.11.3/bin:/nix/store/g044pvzvs5c5ifvla9smyf76yis5vg88-awscli2-2.11.20/bin:/nix/store/5p9k3m2xf3zv6lxzrk69kbl7ph3zf49f-python3.10-distro-1.8.0/bin:/nix/store/0jzsa5xz40zjswfijggla7w8s2m14r97-python3.10-docutils-0.19/bin:/nix/store/684bnp1igmcdwcl8s7wxly0mw2cz9mvi-groff-1.22.4/bin:/nix/store/rrgqac6d3zj9ggh8j79p5vkqp30f2w6d-less-608/bin:/nix/store/9rxgjyaj1njjrm305san7sccnl1ab4hf-python3.10-rsa-4.9/bin:/nix/store/wl4fy4mbd1z5h0gbl9r4q4lf5hc40ic2-python3.10-jmespath-1.0.1/bin:/nix/store/b6ik2xnqnrgz6gbx420gq4p0if3v2w73-terraform-1.4.6/bin:/nix/store/pdlfyp58m3rlwibwfsyf45q01ylmznhh-cloc-1.96/bin:/nix/store/nkfn58xv8nzp0r67izyhhmsr39v8ksjh-curl-8.0.1-dev/bin:/nix/store/f15rvn9j4g93b2gd5jvhrszargl0j007-brotli-1.0.9/bin:/nix/store/m9vssg00klfyyffi6qnvk0hgkd714vad-libkrb5-1.20.1-dev/bin:/nix/store/4k4zg4jjg0icwv530vl9ick22r887d9m-libkrb5-1.20.1/bin:/nix/store/va385h5vli8jwpi534drdxnb0ilwlzwf-nghttp2-1.51.0-bin/bin:/nix/store/xasyqgjm54pq8w2d520smdsgfr3fdmpg-libidn2-2.3.4-bin/bin:/nix/store/126jncr3cfwdvqmzkx3296sibcpag3x8-openssl-3.0.8-bin/bin:/nix/store/7b2kg5i0fs4fsw6cp3r94gdndizirga9-zstd-1.5.5-bin/bin:/nix/store/hw1z8z2dshq759cgxggvn6dg3h8bdlcn-zstd-1.5.5/bin:/nix/store/0xyi7w3cm3g7gzwfpwqzx0n7xks2sdc6-curl-8.0.1-bin/bin:/nix/store/b9xp0s9f91sdv9csgi8ky3fmmkydd58c-docker-20.10.23/bin:/nix/store/naabcr94jsxrd39c5w94sxf4wg5kamdj-git-lfs-3.3.0/bin:/nix/store/25w69905py9pjf89i2x0sm6589fmrizv-go-migrate-4.15.2/bin:/nix/store/s9j08pc615ii5z8rln2yjarsc9zf7q04-jq-1.6-bin/bin:/nix/store/s1xnsm86dy195fr4i4n984ivakrvjv9d-openssh-9.3p1/bin:/nix/store/czrrap8sqkkplqj6j8b8r97jca7zfcbm-postgresql-14.8/bin:/nix/store/nnmfw7z062j9bwwi945qzac769f6yhzg-nodejs-20.2.0/bin:/nix/store/gq55kag0vp3rzyz5a73r71f64yc87pc4-python3.10-detect-secrets-1.4.0/bin:/nix/store/0xb0za44qaa74b2fzdgxpg3v5zc5d0r3-python3.10-gibberish-detector-0.1.1/bin:/nix/store/8v28q4mag3s4dba9fphxzgs6snhxg231-python3.10-charset-normalizer-3.0.1/bin:/nix/store/4pk431ywfvw0k926blzwncnp699z3vh5-clang-wrapper-11.1.0/bin:/nix/store/a1bf9m79xr32a55idbbjbjpylp1xphag-clang-11.1.0/bin:/nix/store/yhw6xjfl2x44nkhn1628nk2q2bgzhb8x-binutils-wrapper-2.40/bin:/nix/store/axg65w0cs7cs9y3jwvp5r35v36kcjjnz-llvm-11.1.0-dev/bin:/nix/store/9jmgsy8bll4ya21v4yvv96mr2ky1cc52-ncurses-6.4-dev/bin:/nix/store/4g9phbpakh51bbw2n391vipz9r5z56kw-ncurses-6.4/bin:/nix/store/axh023wfx7ijlvl4a3rs9bw05x9k9mg7-llvm-11.1.0/bin:/nix/store/7w2n11y3ywzkhx5kk4nff79lzc0dm7v8-lld-11.1.0/bin:/nix/store/09jbh8y3jbq0gs47793rzn6i7yaabxmp-pkg-config-wrapper-0.29.2/bin:/nix/store/r42igcns4iha19h26r0wclb3ss5lvpcj-rust-1.83.0-2024-11-26-90b35a623/bin:/nix/store/rirxz9khcfg554kxwq7iw9fpifa2z3q7-protobuf-3.21.12/bin:/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin:/nix/store/1dm5yvxvbm954z5j1lh08y1i6bqw8ipx-go-task-3.24.0/bin:/nix/store/8a1h2icgqrhhg7g4c0w0d85s430ihq1k-libressl-3.7.2-nc/bin:/nix/store/m877x4smb0ay04n1hhyr6qcbr263z4vm-clang-11.1.0-dev/bin:/nix/store/dlhyf1n0vwa0kgm24dsqs5qq5hld6pny-foundationdb-7.1.30/bin:/nix/store/gsvxrriqkq5i8anzcd9ql7x7znhal5cd-compiler-rt-libc-11.1.0/bin:/nix/store/ahkfdxq8mcpsb5kvdvgqr1wv8zjngbh4-coreutils-9.1/bin:/nix/store/4qrbfa42xyicny7vlgbbqxz07kcsjbx2-findutils-4.9.0/bin:/nix/store/6bcqajyagcc4s3azx0zqnb3rqxd7gdnv-diffutils-3.9/bin:/nix/store/gy82r5cf12hgkmhzifsyx3fp6cnf6j2l-gnused-4.9/bin:/nix/store/zrls4w5lxynqakh1jlrp03kg4bxzp9yi-gnugrep-3.7/bin:/nix/store/s3yl3l8na93v53k2cfsyz0jrb50bnk8n-gawk-5.2.1/bin:/nix/store/czy796d2241296bdy45w87cmaiig50zr-gnutar-1.34/bin:/nix/store/hdbb5ayyrz1b5hicbsb4am8vin0xxxg6-gzip-1.12/bin:/nix/store/hd573q7097cxj5q29pnc3z0rvakz7ga3-bzip2-1.0.8-bin/bin:/nix/store/nnis9ph3wj866bbs0lalbf22i5bq8yry-gnumake-4.4.1/bin:/nix/store/rhvbjmcfnkg8i2dxpzr114cp1ws7f667-bash-5.2-p15/bin:/nix/store/x4ckkjsxfl4ihl82v0bzsyxs4ay2d5b5-patch-2.7.6/bin:/nix/store/8xjzmhw6hgqmynb5f1v7aw2lvafij405-xz-5.4.3-bin/bin:/nix/store/lcjsmsxqwd4vkq2wj5mmbyjzny3i6k49-file-5.44/bin:/root/.deno/bin:/root/.deno/bin:/nix/store/qs7j7r5jcvn6ijvdccjnnc7qjqpfgd0l-nodejs-20.11.1/bin:/root/.local/bin:/root/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/nix/store/njh6p007ymbmcgas5l7sqqxfmm394zx1-nodejs-18.15.0/bin:/root/.local/bin:/root/.cargo/bin:/root/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.vector/bin - -Yarn version: - 1.22.19 - -Node version: - 18.15.0 - -Platform: - linux x64 - -Trace: - Error: ENOENT: no such file or directory, open '/usr/local/share/.cache/yarn/v6/npm-event-target-shim-5.0.1-5d4d3ebdf9583d63a5333ce2deb7480ab2b05789-integrity/node_modules/event-target-shim/.yarn-tarball.tgz' - -npm manifest: - { - "name": "@rivet-gg/api", - "version": "0.0.1-rc.5", - "private": false, - "repository": "https://github.com/rivet-gg/rivet/tree/main/sdks/typescript", - "files": [ - "dist", - "types", - "core.d.ts", - "serialization.d.ts" - ], - "exports": { - ".": { - "node": "./dist/node/index.js", - "import": "./dist/browser/esm/index.js", - "require": "./dist/browser/cjs/index.js", - "default": "./dist/browser/cjs/index.js", - "types": "./types/index.d.ts" - }, - "./core": { - "node": "./dist/node/core.js", - "import": "./dist/browser/esm/core.js", - "require": "./dist/browser/cjs/core.js", - "default": "./dist/browser/cjs/core.js", - "types": "./types/core/index.d.ts" - }, - "./serialization": { - "node": "./dist/node/serialization.js", - "import": "./dist/browser/esm/serialization.js", - "require": "./dist/browser/cjs/serialization.js", - "default": "./dist/browser/cjs/serialization.js", - "types": "./types/serialization/index.d.ts" - } - }, - "types": "./types/index.d.ts", - "scripts": { - "format": "prettier --write 'src/**/*.ts'", - "compile": "tsc", - "bundle": "node build.js", - "build": "yarn compile && yarn bundle", - "prepack": "yarn run build" - }, - "dependencies": { - "@types/readable-stream": "^4.0.18", - "form-data": "^4.0.0", - "js-base64": "^3.7.5", - "node-fetch": "2", - "qs": "^6.11.2", - "readable-stream": "^4.5.2", - "url-join": "^5.0.0" - }, - "devDependencies": { - "@types/node": "17.0.33", - "@types/node-fetch": "2.6.11", - "@types/qs": "6.9.8", - "@types/url-join": "4.0.1", - "esbuild": "^0.19.11", - "prettier": "2.7.1", - "typescript": "4.6.4" - }, - "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - - "@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - - "@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - - "@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - - "@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - - "@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - - "@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - - "@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - - "@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - - "@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - - "@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - - "@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - - "@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - - "@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - - "@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - - "@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - - "@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - - "@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - - "@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - - "@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - - "@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - - "@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - - "@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== - - "@types/node-fetch@2.6.11": - version "2.6.11" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" - integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - - "@types/node@*": - version "22.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" - integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== - dependencies: - undici-types "~6.13.0" - - "@types/node@17.0.33": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.33.tgz#3c1879b276dc63e73030bb91165e62a4509cd506" - integrity sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ== - - "@types/qs@6.9.8": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - - "@types/readable-stream@^4.0.18": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.18.tgz#5d8d15d26c776500ce573cae580787d149823bfc" - integrity sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - - "@types/url-join@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.1.tgz#4989c97f969464647a8586c7252d97b449cdc045" - integrity sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ== - - abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - - asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - - base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - - buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - - call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - - combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - - define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - - delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - - esbuild@^0.19.11: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" - - event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - - events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - - form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - - function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - - get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - - gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - - has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - - has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - - has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - - hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - - ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - - js-base64@^3.7.5: - version "3.7.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" - integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== - - mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - - mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - - node-fetch@2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - - object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - - prettier@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - - process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - - qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - - readable-stream@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - - safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - - safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - - set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - - side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - - string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - - tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - - typescript@4.6.4: - version "4.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== - - undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== - - url-join@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" - integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== - - webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - - whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" diff --git a/sdks/api/runtime/typescript/yarn.lock b/sdks/api/runtime/typescript/yarn.lock deleted file mode 100644 index 526db53de9..0000000000 --- a/sdks/api/runtime/typescript/yarn.lock +++ /dev/null @@ -1,436 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - -"@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - -"@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - -"@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - -"@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - -"@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - -"@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - -"@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - -"@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - -"@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - -"@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - -"@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - -"@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - -"@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - -"@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - -"@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - -"@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - -"@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - -"@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - -"@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - -"@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - -"@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - -"@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== - -"@types/node-fetch@2.6.11": - version "2.6.11" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" - integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - -"@types/node@*": - version "22.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" - integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== - dependencies: - undici-types "~6.13.0" - -"@types/node@17.0.33": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.33.tgz#3c1879b276dc63e73030bb91165e62a4509cd506" - integrity sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ== - -"@types/qs@6.9.8": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - -"@types/readable-stream@^4.0.18": - version "4.0.18" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.18.tgz#5d8d15d26c776500ce573cae580787d149823bfc" - integrity sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - -"@types/url-join@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.1.tgz#4989c97f969464647a8586c7252d97b449cdc045" - integrity sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -esbuild@^0.19.11: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -js-base64@^3.7.5: - version "3.7.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" - integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -node-fetch@2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -prettier@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -readable-stream@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -typescript@4.6.4: - version "4.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== - -undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== - -url-join@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" - integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" diff --git a/site/src/content/docs/api/spec.json b/site/src/content/docs/api/spec.json index 101c01b17a..c130ff1d8c 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"]},"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 +{"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."}}},"EdgeIntercomPegboardPrewarmImageRequest":{"type":"object","properties":{"image_artifact_url_stub":{"type":"string"}},"required":["image_artifact_url_stub"]},"EdgeIntercomPegboardToggleClientDrainRequest":{"type":"object","properties":{"draining":{"type":"boolean"},"drain_complete_ts":{"$ref":"#/components/schemas/Timestamp"}},"required":["draining"]},"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