diff --git a/.gitignore b/.gitignore index a4e9b984..a52a90e1 100644 --- a/.gitignore +++ b/.gitignore @@ -56,8 +56,8 @@ Temporary Items # End of https://www.toptal.com/developers/gitignore/api/deno,macos -# Backend -packages/backend/artifacts/ -packages/backend/vendor/ -packages/backend/node_modules/ +# JS Utils +packages/js-utils/artifacts/ +packages/js-utils/vendor/ +packages/js-utils/node_modules/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0effdff4..3dbab56f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,12 +54,6 @@ The backend package is a TypeScript package located at `packages/backend/`. This - `packages/backend/cli/` – JSON CLI interface to the toolchain - `packages/backend/runtime/` – Runtime code used to by the backend at runtime -### Backend Artifacts - -Backend artifacts are files that are required to be generated for the backend to run. - -Artifacts are automatically generated on Cargo build in `packages/backend-embed/build.rs`. Under the hood, this calls the `scripts/backend/build_artifacts.ts` script. - ### Embedding Deno Deno is automatically downloaded and installed to a temporary path in `packages/deno-embed`. This is used both at runtime for the toolchain and any build scripts that depend on Deno. diff --git a/Cargo.lock b/Cargo.lock index 894cfb19..4b38af7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,29 +17,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[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" @@ -49,12 +26,6 @@ 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" @@ -125,15 +96,6 @@ version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" -[[package]] -name = "arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "arrayref" version = "0.3.9" @@ -162,19 +124,6 @@ dependencies = [ "wait-timeout", ] -[[package]] -name = "async-posthog" -version = "0.2.3" -source = "git+https://github.com/rivet-gg/posthog-rs.git?rev=ef4e80e#ef4e80e57747ea7204794bce9a103bfeccefabf1" -dependencies = [ - "posthog-core", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror", - "tokio", -] - [[package]] name = "async-stream" version = "0.3.5" @@ -197,26 +146,6 @@ dependencies = [ "syn 2.0.77", ] -[[package]] -name = "async-trait" -version = "0.1.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - [[package]] name = "autocfg" version = "1.3.0" @@ -250,12 +179,6 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - [[package]] name = "bitflags" version = "1.3.2" @@ -307,12 +230,6 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" -[[package]] -name = "bytecount" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" - [[package]] name = "byteorder" version = "1.5.0" @@ -389,12 +306,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfg-if" version = "1.0.0" @@ -409,23 +320,11 @@ checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", - "js-sys", "num-traits", "serde", - "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 = "clap" version = "4.5.17" @@ -472,39 +371,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "config" -version = "0.14.0" -source = "git+https://github.com/rivet-gg/config-rs?rev=0f3c89b4770276e8db72ce962974a9a72c59c97a#0f3c89b4770276e8db72ce962974a9a72c59c97a" -dependencies = [ - "async-trait", - "encoding_rs_io", - "lazy_static", - "nom", - "pathdiff", - "serde", - "serde_json", -] - [[package]] name = "console" version = "0.15.8" @@ -569,21 +435,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" version = "1.4.2" @@ -612,15 +463,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -672,22 +514,6 @@ dependencies = [ "syn 2.0.77", ] -[[package]] -name = "debugid" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" -dependencies = [ - "serde", - "uuid", -] - -[[package]] -name = "deflate64" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" - [[package]] name = "deranged" version = "0.3.11" @@ -698,17 +524,6 @@ dependencies = [ "serde", ] -[[package]] -name = "derive_arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "derive_builder" version = "0.20.1" @@ -754,7 +569,6 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", - "subtle", ] [[package]] @@ -778,37 +592,17 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "doc-comment" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -dependencies = [ - "serde", -] [[package]] name = "encode_unicode" @@ -825,15 +619,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "encoding_rs_io" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83" -dependencies = [ - "encoding_rs", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -850,28 +635,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - -[[package]] -name = "event-listener" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - [[package]] name = "fastrand" version = "2.1.1" @@ -921,21 +684,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "futures" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - [[package]] name = "futures-channel" version = "0.3.30" @@ -943,7 +691,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -952,28 +699,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot 0.12.3", -] - [[package]] name = "futures-io" version = "0.3.30" @@ -1009,7 +734,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ - "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -1038,10 +762,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -1087,7 +809,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.12", + "http", "indexmap 2.5.0", "slab", "tokio", @@ -1106,19 +828,6 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hashlink" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] [[package]] name = "heck" @@ -1144,24 +853,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - [[package]] name = "home" version = "0.5.9" @@ -1182,17 +873,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http-body" version = "0.4.6" @@ -1200,30 +880,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.1.0", -] - -[[package]] -name = "http-body-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" -dependencies = [ - "bytes", - "futures-util", - "http 1.1.0", - "http-body 1.0.1", + "http", "pin-project-lite", ] @@ -1239,12 +896,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "human_bytes" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" - [[package]] name = "humansize" version = "1.1.1" @@ -1262,8 +913,8 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 0.2.12", - "http-body 0.4.6", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -1276,74 +927,17 @@ dependencies = [ ] [[package]] -name = "hyper" -version = "1.4.1" +name = "hyper-rustls" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ - "bytes", - "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", + "http", + "hyper", + "rustls", "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.30", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" -dependencies = [ - "futures-util", - "http 1.1.0", - "hyper 1.4.1", - "hyper-util", - "rustls 0.23.13", - "rustls-native-certs 0.8.0", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.0", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "hyper 1.4.1", - "pin-project-lite", - "socket2", - "tokio", - "tower", - "tower-service", - "tracing", + "tokio-rustls", ] [[package]] @@ -1452,16 +1046,6 @@ dependencies = [ "number_prefix", "portable-atomic", "unicode-width", - "vt100", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", ] [[package]] @@ -1471,9 +1055,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", ] [[package]] @@ -1482,25 +1063,6 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" -[[package]] -name = "is-docker" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" -dependencies = [ - "once_cell", -] - -[[package]] -name = "is-wsl" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" -dependencies = [ - "is-docker", - "once_cell", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -1513,28 +1075,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - [[package]] name = "jobserver" version = "0.1.32" @@ -1553,6 +1093,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonc-parser" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b558af6b49fd918e970471374e7a798b2c9bbcda624a210ffa3901ee5614bc8e" +dependencies = [ + "serde_json", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -1577,26 +1126,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "liblzma" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c45fc6fcf5b527d3cf89c1dee8c327943984b0dc8bfcf6e100473b00969e63" -dependencies = [ - "liblzma-sys", -] - -[[package]] -name = "liblzma-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63117d31458acdb7b406f6c60090aa8e1e7cd6e283f8ee02ce585ed68c53fe39" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "libredox" version = "0.1.3" @@ -1605,7 +1134,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall 0.5.4", + "redox_syscall", ] [[package]] @@ -1636,12 +1165,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "lockfree-object-pool" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" - [[package]] name = "log" version = "0.4.22" @@ -1667,41 +1190,6 @@ dependencies = [ "libc", ] -[[package]] -name = "lzma-rs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" -dependencies = [ - "byteorder", - "crc", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matchit" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest", -] - [[package]] name = "memchr" version = "2.7.4" @@ -1735,12 +1223,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -1762,12 +1244,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - [[package]] name = "nix" version = "0.27.1" @@ -1779,51 +1255,12 @@ dependencies = [ "libc", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec", - "itoa", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1848,15 +1285,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - [[package]] name = "object" version = "0.36.4" @@ -1872,63 +1300,12 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "open" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" -dependencies = [ - "is-wsl", - "libc", - "pathdiff", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - [[package]] name = "option-ext" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "papergrid" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453cf71f2a37af495a1a124bf30d4d7469cfbea58e9f2479be9d222396a518a2" -dependencies = [ - "bytecount", - "fnv", - "unicode-width", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.3" @@ -1936,21 +1313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.10", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -1961,59 +1324,17 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.4", + "redox_syscall", "smallvec", "windows-targets 0.52.6", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest", - "hmac", -] - [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "pin-project-lite" version = "0.2.14" @@ -2058,112 +1379,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] -name = "portpicker" -version = "0.1.1" +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9" -dependencies = [ - "rand", -] - -[[package]] -name = "postgresql_archive" -version = "0.17.2" -source = "git+https://github.com/rivet-gg/postgresql-embedded?rev=569e7f6b8e54511aee025bd85ad7178ab80ac6a2#569e7f6b8e54511aee025bd85ad7178ab80ac6a2" -dependencies = [ - "anyhow", - "async-trait", - "flate2", - "futures-util", - "hex", - "http 1.1.0", - "human_bytes", - "liblzma", - "num-format", - "regex", - "reqwest 0.12.7", - "reqwest-middleware", - "reqwest-retry", - "reqwest-tracing", - "semver", - "serde", - "serde_json", - "sha2", - "tar", - "target-triple", - "tempfile", - "thiserror", - "tracing", - "tracing-indicatif", - "url", - "zip 2.2.0", -] +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "postgresql_commands" -version = "0.17.2" -source = "git+https://github.com/rivet-gg/postgresql-embedded?rev=569e7f6b8e54511aee025bd85ad7178ab80ac6a2#569e7f6b8e54511aee025bd85ad7178ab80ac6a2" +name = "predicates" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" dependencies = [ - "anyhow", - "thiserror", - "tracing", -] - -[[package]] -name = "postgresql_embedded" -version = "0.17.2" -source = "git+https://github.com/rivet-gg/postgresql-embedded?rev=569e7f6b8e54511aee025bd85ad7178ab80ac6a2#569e7f6b8e54511aee025bd85ad7178ab80ac6a2" -dependencies = [ - "anyhow", - "home", - "postgresql_archive", - "postgresql_commands", - "rand", - "semver", - "sqlx", - "target-triple", - "tempfile", - "thiserror", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "posthog-core" -version = "0.1.0" -source = "git+https://github.com/rivet-gg/posthog-rs.git?rev=ef4e80e#ef4e80e57747ea7204794bce9a103bfeccefabf1" -dependencies = [ - "chrono", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "predicates" -version = "3.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" -dependencies = [ - "anstyle", - "difflib", - "predicates-core", + "anstyle", + "difflib", + "predicates-core", ] [[package]] @@ -2182,30 +1411,6 @@ dependencies = [ "termtree", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro-hack" version = "0.5.20+deprecated" @@ -2221,54 +1426,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "quinn" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls 0.23.13", - "socket2", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "quinn-proto" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" -dependencies = [ - "bytes", - "rand", - "ring", - "rustc-hash", - "rustls 0.23.13", - "slab", - "thiserror", - "tinyvec", - "tracing", -] - -[[package]] -name = "quinn-udp" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" -dependencies = [ - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "quote" version = "1.0.37" @@ -2278,42 +1435,6 @@ 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 = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - [[package]] name = "rayon" version = "1.10.0" @@ -2334,15 +1455,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.4" @@ -2404,10 +1516,10 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.30", - "hyper-rustls 0.24.2", + "http", + "http-body", + "hyper", + "hyper-rustls", "ipnet", "js-sys", "log", @@ -2416,15 +1528,15 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 0.1.2", + "sync_wrapper", "system-configuration", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tokio-util", "tower-service", "url", @@ -2432,115 +1544,10 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.25.4", + "webpki-roots", "winreg", ] -[[package]] -name = "reqwest" -version = "0.12.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-core", - "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "http-body-util", - "hyper 1.4.1", - "hyper-rustls 0.27.3", - "hyper-util", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls 0.23.13", - "rustls-native-certs 0.7.3", - "rustls-pemfile 2.1.3", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "tokio", - "tokio-rustls 0.26.0", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "windows-registry", -] - -[[package]] -name = "reqwest-middleware" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" -dependencies = [ - "anyhow", - "async-trait", - "http 1.1.0", - "reqwest 0.12.7", - "serde", - "thiserror", - "tower-service", -] - -[[package]] -name = "reqwest-retry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a83df1aaec00176d0fabb65dea13f832d2a446ca99107afc17c5d2d4981221d0" -dependencies = [ - "anyhow", - "async-trait", - "futures", - "getrandom", - "http 1.1.0", - "hyper 1.4.1", - "parking_lot 0.11.2", - "reqwest 0.12.7", - "reqwest-middleware", - "retry-policies", - "tokio", - "tracing", - "wasm-timer", -] - -[[package]] -name = "reqwest-tracing" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdd9bfa64c72233d8dd99ab7883efcdefe9e16d46488ecb9228b71a2e2ceb45" -dependencies = [ - "anyhow", - "async-trait", - "getrandom", - "http 1.1.0", - "matchit", - "reqwest 0.12.7", - "reqwest-middleware", - "tracing", -] - -[[package]] -name = "retry-policies" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" -dependencies = [ - "rand", -] - [[package]] name = "ring" version = "0.17.8" @@ -2560,7 +1567,7 @@ dependencies = [ name = "rivet-api-ee" version = "0.0.1" dependencies = [ - "reqwest 0.11.27", + "reqwest", "serde", "serde_derive", "serde_json", @@ -2569,28 +1576,12 @@ dependencies = [ "uuid", ] -[[package]] -name = "rivet-backend-embed" -version = "0.1.0" -dependencies = [ - "anyhow", - "fs_extra", - "include_dir", - "merkle_hash", - "rivet-deno-embed", - "sha2", - "tempfile", - "tokio", - "walkdir", -] - [[package]] name = "rivet-cli" version = "2.0.0-rc.4" dependencies = [ "anyhow", "clap", - "open", "rivet-toolchain", "serde", "serde_json", @@ -2604,11 +1595,26 @@ version = "0.1.0" dependencies = [ "anyhow", "dirs", - "reqwest 0.11.27", + "reqwest", "serde_json", "tempfile", "tokio", - "zip 0.5.13", + "zip", +] + +[[package]] +name = "rivet-js-utils-embed" +version = "0.1.0" +dependencies = [ + "anyhow", + "fs_extra", + "include_dir", + "merkle_hash", + "rivet-deno-embed", + "sha2", + "tempfile", + "tokio", + "walkdir", ] [[package]] @@ -2617,64 +1623,40 @@ version = "0.1.0" dependencies = [ "anyhow", "assert_cmd", - "async-posthog", "async-stream", - "config", "console", "const_format", "dirs", - "fs_extra", "futures-util", - "home", "humansize", "ignore", "indicatif", + "jsonc-parser", "lazy_static", "lz4", "mime_guess", "nix", - "open", "pkg-version", - "portpicker", - "postgresql_embedded", - "rand", "regex", - "reqwest 0.11.27", + "reqwest", "rivet-api-ee", - "rivet-backend-embed", "rivet-deno-embed", - "sentry", + "rivet-js-utils-embed", "serde", "serde_json", "sha1", "strum", - "sysinfo", - "tabled", "tar", "tempfile", - "term_size", - "thiserror", "tokio", "tokio-util", - "tower", "typed-path", "url", "uuid", "vergen-git2", - "webbrowser", "which", - "windows 0.48.0", - "zip 0.5.13", -] - -[[package]] -name = "rivet-toolchain-ffi" -version = "0.1.0" -dependencies = [ - "lazy_static", - "rivet-toolchain", - "serde_json", - "tokio", + "windows", + "zip", ] [[package]] @@ -2683,12 +1665,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustc-hash" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" - [[package]] name = "rustc_version" version = "0.4.1" @@ -2719,50 +1695,10 @@ checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring", - "rustls-webpki 0.101.7", + "rustls-webpki", "sct", ] -[[package]] -name = "rustls" -version = "0.23.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" -dependencies = [ - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.3", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.3", - "rustls-pki-types", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -2772,22 +1708,6 @@ dependencies = [ "base64 0.21.7", ] -[[package]] -name = "rustls-pemfile" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" -dependencies = [ - "base64 0.22.1", - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" - [[package]] name = "rustls-webpki" version = "0.101.7" @@ -2798,17 +1718,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - [[package]] name = "rustversion" version = "1.0.17" @@ -2830,15 +1739,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -2851,79 +1751,17 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", -] - -[[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.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" -dependencies = [ - "serde", -] - -[[package]] -name = "sentry" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00421ed8fa0c995f07cde48ba6c89e80f2b312f74ff637326f392fbfd23abe02" -dependencies = [ - "sentry-core", -] - -[[package]] -name = "sentry-core" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a75011ea1c0d5c46e9e57df03ce81f5c7f0a9e199086334a1f9c0a541e0826" -dependencies = [ - "once_cell", - "rand", - "sentry-types", - "serde", - "serde_json", + "ring", + "untrusted", ] [[package]] -name = "sentry-types" -version = "0.32.3" +name = "semver" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4519c900ce734f7a0eb7aba0869dfb225a7af8820634a7dd51449e3b093cfb7c" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ - "debugid", - "hex", - "rand", "serde", - "serde_json", - "thiserror", - "time 0.3.36", - "url", - "uuid", ] [[package]] @@ -3020,15 +1858,6 @@ dependencies = [ "digest", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shlex" version = "1.3.0" @@ -3044,12 +1873,6 @@ dependencies = [ "libc", ] -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - [[package]] name = "slab" version = "0.4.9" @@ -3064,9 +1887,6 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -dependencies = [ - "serde", -] [[package]] name = "socket2" @@ -3084,155 +1904,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "sqlformat" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" -dependencies = [ - "nom", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-postgres", -] - -[[package]] -name = "sqlx-core" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" -dependencies = [ - "atoi", - "byteorder", - "bytes", - "crc", - "crossbeam-queue", - "either", - "event-listener", - "futures-channel", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashbrown 0.14.5", - "hashlink", - "hex", - "indexmap 2.5.0", - "log", - "memchr", - "once_cell", - "paste", - "percent-encoding", - "rustls 0.23.13", - "rustls-pemfile 2.1.3", - "serde", - "serde_json", - "sha2", - "smallvec", - "sqlformat", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "url", - "webpki-roots 0.26.6", -] - -[[package]] -name = "sqlx-macros" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 2.0.77", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" -dependencies = [ - "dotenvy", - "either", - "heck 0.5.0", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2", - "sqlx-core", - "sqlx-postgres", - "syn 2.0.77", - "tempfile", - "tokio", - "url", -] - -[[package]] -name = "sqlx-postgres" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.6.0", - "byteorder", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "hex", - "hkdf", - "hmac", - "home", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "rand", - "serde", - "serde_json", - "sha2", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror", - "tracing", - "whoami", -] - -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - [[package]] name = "strsim" version = "0.11.1" @@ -3261,12 +1932,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - [[package]] name = "syn" version = "1.0.109" @@ -3295,30 +1960,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" -[[package]] -name = "sync_wrapper" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" -dependencies = [ - "futures-core", -] - -[[package]] -name = "sysinfo" -version = "0.30.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" -dependencies = [ - "cfg-if", - "core-foundation-sys", - "libc", - "ntapi", - "once_cell", - "rayon", - "windows 0.52.0", -] - [[package]] name = "system-configuration" version = "0.5.1" @@ -3340,30 +1981,6 @@ dependencies = [ "libc", ] -[[package]] -name = "tabled" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5b2f8c37d26d87d2252187b0a45ea3cbf42baca10377c7e7eaaa2800fa9bf97" -dependencies = [ - "papergrid", - "tabled_derive", - "unicode-width", -] - -[[package]] -name = "tabled_derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9ee618502f497abf593e1c5c9577f34775b111480009ffccd7ad70d23fcaba8" -dependencies = [ - "heck 0.4.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "tar" version = "0.4.42" @@ -3375,12 +1992,6 @@ dependencies = [ "xattr", ] -[[package]] -name = "target-triple" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a4d50cdb458045afc8131fd91b64904da29548bcb63c7236e0844936c13078" - [[package]] name = "tempfile" version = "3.13.0" @@ -3394,16 +2005,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "term_size" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "termtree" version = "0.4.1" @@ -3430,16 +2031,6 @@ dependencies = [ "syn 2.0.77", ] -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - [[package]] name = "time" version = "0.1.45" @@ -3509,115 +2100,19 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot 0.12.3", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls 0.23.13", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", + "windows-sys 0.52.0", ] [[package]] -name = "tracing-attributes" -version = "0.1.27" +name = "tokio-macros" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", @@ -3625,50 +2120,51 @@ dependencies = [ ] [[package]] -name = "tracing-core" -version = "0.1.32" +name = "tokio-rustls" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "once_cell", - "valuable", + "rustls", + "tokio", ] [[package]] -name = "tracing-indicatif" -version = "0.3.6" +name = "tokio-util" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069580424efe11d97c3fef4197fa98c004fa26672cc71ad8770d224e23b1951d" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ - "indicatif", - "tracing", - "tracing-core", - "tracing-subscriber", + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", ] [[package]] -name = "tracing-log" -version = "0.2.0" +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", - "once_cell", + "pin-project-lite", "tracing-core", ] [[package]] -name = "tracing-subscriber" -version = "0.3.18" +name = "tracing-core" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", + "once_cell", ] [[package]] @@ -3719,12 +2215,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-properties" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524" - [[package]] name = "unicode-width" version = "0.1.14" @@ -3737,12 +2227,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - [[package]] name = "untrusted" version = "0.9.0" @@ -3758,7 +2242,6 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", - "serde", ] [[package]] @@ -3777,12 +2260,6 @@ dependencies = [ "serde", ] -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - [[package]] name = "vcpkg" version = "0.2.15" @@ -3837,39 +2314,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "vt100" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274de" -dependencies = [ - "itoa", - "log", - "unicode-width", - "vte", -] - -[[package]] -name = "vte" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" -dependencies = [ - "arrayvec", - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" -dependencies = [ - "proc-macro2", - "quote", -] - [[package]] name = "wait-timeout" version = "0.2.0" @@ -3910,12 +2354,6 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" version = "0.2.93" @@ -3996,21 +2434,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-sys" version = "0.3.70" @@ -4021,38 +2444,12 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webbrowser" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" -dependencies = [ - "core-foundation", - "home", - "jni", - "log", - "ndk-context", - "objc", - "raw-window-handle", - "url", - "web-sys", -] - [[package]] name = "webpki-roots" version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[package]] -name = "webpki-roots" -version = "0.26.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "which" version = "5.0.0" @@ -4066,16 +2463,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "whoami" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" -dependencies = [ - "redox_syscall 0.5.4", - "wasite", -] - [[package]] name = "winapi" version = "0.3.9" @@ -4116,16 +2503,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core", - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.52.0" @@ -4135,45 +2512,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-registry" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" -dependencies = [ - "windows-result", - "windows-strings", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -4201,21 +2539,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-targets" version = "0.48.5" @@ -4247,12 +2570,6 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -4265,12 +2582,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -4283,12 +2594,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -4307,12 +2612,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -4325,12 +2624,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -4343,12 +2636,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -4361,12 +2648,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -4400,47 +2681,6 @@ dependencies = [ "rustix", ] -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "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.77", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "zip" version = "0.5.13" @@ -4454,74 +2694,3 @@ dependencies = [ "thiserror", "time 0.1.45", ] - -[[package]] -name = "zip" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" -dependencies = [ - "aes", - "arbitrary", - "bzip2", - "constant_time_eq", - "crc32fast", - "crossbeam-utils", - "deflate64", - "displaydoc", - "flate2", - "hmac", - "indexmap 2.5.0", - "lzma-rs", - "memchr", - "pbkdf2", - "rand", - "sha1", - "thiserror", - "time 0.3.36", - "zeroize", - "zopfli", - "zstd", -] - -[[package]] -name = "zopfli" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" -dependencies = [ - "bumpalo", - "crc32fast", - "lockfree-object-pool", - "log", - "once_cell", - "simd-adler32", -] - -[[package]] -name = "zstd" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/Cargo.toml b/Cargo.toml index 2a0763be..fe5edadb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,10 @@ [workspace] resolver = "2" members = [ - "packages/backend-embed", "packages/cli", "packages/deno-embed", + "packages/js-utils-embed", "packages/toolchain", - "packages/toolchain-ffi", ] # Config for 'cargo dist' diff --git a/examples/docker/Dockerfile b/examples/docker/Dockerfile new file mode 100644 index 00000000..70b2dbcc --- /dev/null +++ b/examples/docker/Dockerfile @@ -0,0 +1,5 @@ +FROM alpine:latest +RUN apk add --no-cache shadow +RUN useradd -m -s /bin/sh rivet +USER rivet +CMD while true; do echo "Hello, World!"; sleep 10; done diff --git a/examples/docker/rivet.jsonc b/examples/docker/rivet.jsonc new file mode 100644 index 00000000..760424f4 --- /dev/null +++ b/examples/docker/rivet.jsonc @@ -0,0 +1,11 @@ +{ + "version": "2.0", + "builds": [ + { + "tags": { "name": "hello-world" }, + "runtime": "docker", + "dockerfile": "Dockerfile" + } + ] +} + diff --git a/examples/wip/rivet.jsonc b/examples/wip/rivet.jsonc new file mode 100644 index 00000000..1ce036e0 --- /dev/null +++ b/examples/wip/rivet.jsonc @@ -0,0 +1,56 @@ +{ + "version": "2.0", + "builds": [ + // Existing Docker image + { + "tags": { "name": "party" }, + "runtime": "docker", + "image": "existing image" + }, + // Build Docker image + { + "tags": { "name": "party" }, + "runtime": "docker", + "dockerfile": "Dockerfile", + // Optional: + "context": ".", + "build_target": "runner", + "args": { + "MY_ARG": "abc123" + }, + "unstable": { + "allow_root": true, + "build_method": "native", + "build_kind": "oci-bundle", + "build_compression": "lz4" + } + }, + // Build Deno script + // TODO: What build steps do we take? + // - Bundle Deno dependencies + // - Compile to JS + { + "tags": { "name": "party" }, + "runtime": "javascript", + "path": "./build.ts", + // Optional: + "import_map": "/path/to/import-map.json", + "deno": { + "config": "/path/to/deno.json", + "no_lock": false, + "no_remote": false + }, + "bundle": { + "minify": true + } + }, + // Prebuilt JavaScript + { + "tags": { "name": "party" }, + "runtime": "javascript", + "mode": "raw", + "command": "yarn run build", + "path": "./build.js" + } + ] +} diff --git a/packages/backend/case_conversion/mod.ts b/packages/backend/case_conversion/mod.ts deleted file mode 100644 index 0f552f6d..00000000 --- a/packages/backend/case_conversion/mod.ts +++ /dev/null @@ -1,13 +0,0 @@ -export function camelify(snake: string) { - const partial = snake.replace(/_([a-z])/g, (g) => (g[1] ?? "").toUpperCase()); - return (partial[0] ?? "").toLowerCase() + partial.slice(1); -} - -export function pascalify(snake: string) { - const camel = camelify(snake); - return (camel[0] ?? "").toUpperCase() + camel.slice(1); -} - -export function snakeify(camel: string) { - return camel.replace(/[A-Z]/g, (g) => `_${g.toLowerCase()}`); -} diff --git a/packages/backend/cli/common.ts b/packages/backend/cli/common.ts deleted file mode 100644 index cb970866..00000000 --- a/packages/backend/cli/common.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { z } from "zod"; -import { loadProject, Project } from "../toolchain/project/mod.ts"; - -export const globalOptsSchema = z.object({ - /** Path to the project root or project config. */ - project: z.string().nullable(), -}).catchall(z.unknown()); - -export type GlobalOpts = z.infer; - -export async function initProject(opts: GlobalOpts): Promise { - const project = await loadProject({ project: opts.project }); - return project; -} diff --git a/packages/backend/cli/tasks/build.ts b/packages/backend/cli/tasks/build.ts deleted file mode 100644 index f994590d..00000000 --- a/packages/backend/cli/tasks/build.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema } from "../common.ts"; -import { build, DbDriver, Format, MigrateMode, Runtime } from "../../toolchain/build/mod.ts"; -import { watch } from "../../toolchain/watch/mod.ts"; -import { Project } from "../../toolchain/project/mod.ts"; -import { migrateModeSchema } from "../util.ts"; -import { runTask } from "../task.ts"; - -export const inputSchema = z.object({ - watch: z.boolean().default(false), - runtime: z.enum([Runtime.Deno, Runtime.CloudflareWorkersPlatforms]).default(Runtime.Deno), - outputFormat: z.enum([Format.Native, Format.Bundled]), - dbDriver: z.enum([DbDriver.NodePostgres, DbDriver.NeonServerless, DbDriver.CloudflareHyperdrive]), - sdk: z.boolean().default(true), - migrate: z.boolean().default(true), - migrateMode: migrateModeSchema.default(MigrateMode.Generate), - strictSchemas: z.boolean().default(true), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - // Defaults based on runtime - if (input.runtime == Runtime.Deno) { - if (input.outputFormat == undefined) input.outputFormat = Format.Native; - if (input.dbDriver == undefined) input.dbDriver = DbDriver.NodePostgres; - } else if (input.runtime == Runtime.CloudflareWorkersPlatforms) { - if (input.outputFormat == undefined) input.outputFormat = Format.Bundled; - if (input.dbDriver == undefined) input.dbDriver = DbDriver.NeonServerless; - } - - // Validate - if (input.runtime == Runtime.CloudflareWorkersPlatforms) { - if (input.outputFormat != Format.Bundled) { - throw new Error( - `\`format\` must be "${Format.Bundled}" if \`runtime\` is "${Runtime.CloudflareWorkersPlatforms}".`, - ); - } - if (input.dbDriver != DbDriver.NeonServerless && input.dbDriver != DbDriver.CloudflareHyperdrive) { - throw new Error( - `\`db-driver\` must be "${DbDriver.NeonServerless}" or "${DbDriver.CloudflareHyperdrive}" if \`runtime\` is "${Runtime.CloudflareWorkersPlatforms}".`, - ); - } - } - if (input.runtime == Runtime.Deno) { - if (input.outputFormat != Format.Native) { - throw new Error( - `\`format\` must be "${Format.Native}" if \`runtime\` is "${Runtime.Deno}".`, - ); - } - } - - await watch({ - loadProjectOpts: input, - disableWatch: !input.watch, - async fn(project: Project, signal: AbortSignal) { - await build(project, { - format: input.outputFormat!, - runtime: input.runtime, - dbDriver: input.dbDriver!, - strictSchemas: input.strictSchemas, - skipDenoCheck: false, - sdk: input.sdk ? {} : undefined, - migrate: input.migrate - ? { - mode: input.migrateMode, - } - : undefined, - signal, - }); - }, - }); - }, -}); diff --git a/packages/backend/cli/tasks/clean.ts b/packages/backend/cli/tasks/clean.ts deleted file mode 100644 index ab9d7ba6..00000000 --- a/packages/backend/cli/tasks/clean.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../common.ts"; -import { cleanProject } from "../../toolchain/project/project.ts"; -import { runTask } from "../task.ts"; - -runTask({ - inputSchema: globalOptsSchema, - async run(input) { - const project = await initProject(input); - await cleanProject(project); - }, -}); diff --git a/packages/backend/cli/tasks/config/show.ts b/packages/backend/cli/tasks/config/show.ts deleted file mode 100644 index 24f67a0f..00000000 --- a/packages/backend/cli/tasks/config/show.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema } from "../../common.ts"; -import { readConfig } from "../../../toolchain/config/project.ts"; -import { loadProjectConfigPath } from "../../../toolchain/project/mod.ts"; -import { runTask } from "../../task.ts"; - -export const inputSchema = z.object({}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - // Don't load project since that requires acquiring a lock on the project - - const config = await readConfig(loadProjectConfigPath(input)); - console.log(JSON.stringify(config, null, "\t")); - }, -}); diff --git a/packages/backend/cli/tasks/create/actor.ts b/packages/backend/cli/tasks/create/actor.ts deleted file mode 100644 index eb0ac5d5..00000000 --- a/packages/backend/cli/tasks/create/actor.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { z } from "zod"; -import { templateActor } from "../../../toolchain/template/actor.ts"; -import { Casing } from "../../../toolchain/types/identifiers/defs.ts"; -import { validateIdentifier } from "../../../toolchain/types/identifiers/mod.ts"; -import { globalOptsSchema, initProject } from "../../common.ts"; -import { runTask } from "../../task.ts"; - -export const inputSchema = z.object({ - module: z.string(), - actor: z.string(), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - validateIdentifier(input.module, Casing.Snake); - validateIdentifier(input.actor, Casing.Snake); - - await templateActor(await initProject(input), input.module, input.actor); - }, -}); diff --git a/packages/backend/cli/tasks/create/module.ts b/packages/backend/cli/tasks/create/module.ts deleted file mode 100644 index 80e1eda3..00000000 --- a/packages/backend/cli/tasks/create/module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { z } from "zod"; -import { templateModule } from "../../../toolchain/template/module.ts"; -import { Casing } from "../../../toolchain/types/identifiers/defs.ts"; -import { validateIdentifier } from "../../../toolchain/types/identifiers/mod.ts"; -import { globalOptsSchema, initProject } from "../../common.ts"; -import { runTask } from "../../task.ts"; - -export const inputSchema = z.object({ - module: z.string(), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - validateIdentifier(input.module, Casing.Snake); - const project = await initProject(input); - await templateModule(project, input.module); - }, -}); diff --git a/packages/backend/cli/tasks/create/script.ts b/packages/backend/cli/tasks/create/script.ts deleted file mode 100644 index e50e97a2..00000000 --- a/packages/backend/cli/tasks/create/script.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { z } from "zod"; -import { templateScript } from "../../../toolchain/template/script.ts"; -import { Casing } from "../../../toolchain/types/identifiers/defs.ts"; -import { validateIdentifier } from "../../../toolchain/types/identifiers/mod.ts"; -import { globalOptsSchema, initProject } from "../../common.ts"; -import { runTask } from "../../task.ts"; - -export const inputSchema = z.object({ - module: z.string(), - script: z.string(), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - validateIdentifier(input.module, Casing.Snake); - validateIdentifier(input.script, Casing.Snake); - - await templateScript(await initProject(input), input.module, input.script); - }, -}); diff --git a/packages/backend/cli/tasks/create/test.ts b/packages/backend/cli/tasks/create/test.ts deleted file mode 100644 index 43dcd558..00000000 --- a/packages/backend/cli/tasks/create/test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { z } from "zod"; -import { templateTest } from "../../../toolchain/template/test.ts"; -import { Casing } from "../../../toolchain/types/identifiers/defs.ts"; -import { validateIdentifier } from "../../../toolchain/types/identifiers/mod.ts"; -import { globalOptsSchema, initProject } from "../../common.ts"; -import { runTask } from "../../task.ts"; - -export const inputSchema = z.object({ - module: z.string(), - test: z.string(), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - validateIdentifier(input.module, Casing.Snake); - validateIdentifier(input.test, Casing.Snake); - - await templateTest(await initProject(input), input.module, input.test); - }, -}); diff --git a/packages/backend/cli/tasks/db/migrate/apply.ts b/packages/backend/cli/tasks/db/migrate/apply.ts deleted file mode 100644 index 4a7a1ebe..00000000 --- a/packages/backend/cli/tasks/db/migrate/apply.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../../../common.ts"; -import { migrateApply } from "../../../../toolchain/migrate/apply.ts"; -import { resolveModules } from "../../../util.ts"; -import { runTask } from "../../../task.ts"; - -export const inputSchema = z.object({ - modules: z.array(z.string()).default([]), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - const modules = resolveModules(project, input.modules); - - await migrateApply(project, modules); - }, -}); diff --git a/packages/backend/cli/tasks/db/migrate/drop.ts b/packages/backend/cli/tasks/db/migrate/drop.ts deleted file mode 100644 index a8563cd4..00000000 --- a/packages/backend/cli/tasks/db/migrate/drop.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../../../common.ts"; -import { migrateDrop } from "../../../../toolchain/migrate/drop.ts"; -import { resolveModules } from "../../../util.ts"; -import { runTask } from "../../../task.ts"; - -export const inputSchema = z.object({ - modules: z.array(z.string()).default([]), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - const modules = resolveModules(project, input.modules); - - await migrateDrop(project, modules); - }, -}); diff --git a/packages/backend/cli/tasks/db/migrate/generate.ts b/packages/backend/cli/tasks/db/migrate/generate.ts deleted file mode 100644 index 3eeef04e..00000000 --- a/packages/backend/cli/tasks/db/migrate/generate.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../../../common.ts"; -import { migrateGenerate } from "../../../../toolchain/migrate/generate.ts"; -import { resolveModules } from "../../../util.ts"; -import { UserError } from "../../../../toolchain/error/mod.ts"; -import { runTask } from "../../../task.ts"; - -export const inputSchema = z.object({ - modules: z.array(z.string()).default([]), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - const modules = resolveModules(project, input.modules); - - for (const module of modules) { - if (module.registry.isExternal) { - throw new UserError(`Cannot run this command against external module: ${module.name}`); - } - } - - await migrateGenerate(project, modules); - }, -}); diff --git a/packages/backend/cli/tasks/db/migrate/push.ts b/packages/backend/cli/tasks/db/migrate/push.ts deleted file mode 100644 index 973cc7ea..00000000 --- a/packages/backend/cli/tasks/db/migrate/push.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../../../common.ts"; -import { migratePush } from "../../../../toolchain/migrate/push.ts"; -import { resolveModules } from "../../../util.ts"; -import { runTask } from "../../../task.ts"; - -export const inputSchema = z.object({ - modules: z.array(z.string()).default([]), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - const modules = resolveModules(project, input.modules); - - await migratePush(project, modules); - }, -}); diff --git a/packages/backend/cli/tasks/dev.ts b/packages/backend/cli/tasks/dev.ts deleted file mode 100644 index 8a8ddb8b..00000000 --- a/packages/backend/cli/tasks/dev.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema } from "../common.ts"; -import { build, DbDriver, Format, MigrateMode, Runtime } from "../../toolchain/build/mod.ts"; -import { watch } from "../../toolchain/watch/mod.ts"; -import { DENO_JSON_PATH, DENO_LOCK_PATH, Project } from "../../toolchain/project/mod.ts"; -import { InternalError } from "../../toolchain/error/mod.ts"; -import { ENTRYPOINT_PATH, projectDataPath } from "../../toolchain/project/project.ts"; -import { migrateModeSchema } from "./../util.ts"; -import { createAndStartProjectInternalApiRouter, InternalState, State } from "../../toolchain/internal_api/mod.ts"; -import { denoExecutablePath } from "../../toolchain/utils/deno.ts"; -import { getDatabaseUrl } from "../../toolchain/postgres.ts"; -import { runTask } from "../task.ts"; - -export const inputSchema = z.object({ - build: z.boolean().default(true), - check: z.boolean().default(true), - strictSchemas: z.boolean().default(true), - watch: z.boolean().default(true), - sdk: z.boolean().default(true), - migrate: z.boolean().default(true), - migrateMode: migrateModeSchema.default(MigrateMode.Dev), - nonInteractive: z.boolean().default(false), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - // Start internal router once we receive an event from `watch` - const internalState = new InternalState(); - let startedInternalRouter = false; - const setInternalState = (state: State) => { - // Start internal router if needed - if (!startedInternalRouter) { - createAndStartProjectInternalApiRouter(internalState); - startedInternalRouter = true; - } - - // Set state - internalState.set(state); - }; - - await watch({ - loadProjectOpts: input, - disableWatch: !input.watch, - onError: (project, error) => { - if (project) setInternalState({ value: "failure", project, error }); - }, - onFileChange: (project) => { - if (project) setInternalState({ value: "building", project }); - }, - onProjectChange(project) { - setInternalState({ value: "building", project }); - }, - async fn(project: Project, signal: AbortSignal) { - // Build project - if (input.build) { - await build(project, { - runtime: Runtime.Deno, - format: Format.Native, - dbDriver: DbDriver.NodePostgres, - strictSchemas: input.strictSchemas, - // This gets ran on `deno run` - skipDenoCheck: true, - sdk: input.sdk ? {} : undefined, - migrate: input.migrate - ? { - mode: input.migrateMode, - } - : undefined, - signal, - }); - } - internalState.set({ value: "success", project }); - - // Determine args - const args = [ - "--config", - projectDataPath(project, DENO_JSON_PATH), - "--lock", - projectDataPath(project, DENO_LOCK_PATH), - "--allow-env", - "--allow-net", - "--allow-read", - ]; - if (input.check) args.push("--check"); - - // Run entrypoint - const entrypointPath = projectDataPath(project, ENTRYPOINT_PATH); - const cmd = await new Deno.Command(denoExecutablePath(), { - args: [ - "run", - ...args, - entrypointPath, - ], - stdout: "inherit", - stderr: "inherit", - signal, - env: { - "DATABASE_URL": getDatabaseUrl(project), - }, - }) - .output(); - if (!signal.aborted && !cmd.success) throw new InternalError("Entrypoint failed", { path: entrypointPath }); - }, - }); - }, -}); diff --git a/packages/backend/cli/tasks/format.ts b/packages/backend/cli/tasks/format.ts deleted file mode 100644 index 61897e52..00000000 --- a/packages/backend/cli/tasks/format.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../common.ts"; -import { DENO_JSON_PATH, DENO_LOCK_PATH, listSourceFiles, projectDataPath } from "../../toolchain/project/mod.ts"; -import { UserError } from "../../toolchain/error/mod.ts"; -import { denoExecutablePath } from "../../toolchain/utils/deno.ts"; -import { runTask } from "../task.ts"; - -export const inputSchema = globalOptsSchema.extend({ - check: z.boolean().nullable(), -}); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - - const sourceFiles = await listSourceFiles(project, { localOnly: true }); - - const cmd = await new Deno.Command(denoExecutablePath(), { - args: [ - "fmt", - "--config", - projectDataPath(project, DENO_JSON_PATH), - "--lock", - projectDataPath(project, DENO_LOCK_PATH), - ...input.check ? ["--check"] : [], - ...sourceFiles, - ], - stdout: "inherit", - stderr: "inherit", - }).output(); - - if (!cmd.success) { - throw new UserError("Format failed.", { paths: sourceFiles }); - } - }, -}); diff --git a/packages/backend/cli/tasks/gen_openapi.ts b/packages/backend/cli/tasks/gen_openapi.ts deleted file mode 100644 index 39c48fc5..00000000 --- a/packages/backend/cli/tasks/gen_openapi.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../common.ts"; -import { generateOpenApi } from "../../toolchain/build/openapi.ts"; -import { build, DbDriver, Format, Runtime } from "../../toolchain/build/mod.ts"; -import { runTask } from "../task.ts"; - -export const inputSchema = globalOptsSchema.extend({ - output: z.string(), -}); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - - await build(project, { - format: Format.Native, - runtime: Runtime.Deno, - dbDriver: DbDriver.NodePostgres, - // Require schemas to be generated in order to build OpenAPI types - strictSchemas: true, - skipDenoCheck: true, - }); - - await generateOpenApi(project, input.output); - }, -}); diff --git a/packages/backend/cli/tasks/gen_sdk.ts b/packages/backend/cli/tasks/gen_sdk.ts deleted file mode 100644 index b9b73687..00000000 --- a/packages/backend/cli/tasks/gen_sdk.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { globalOptsSchema, initProject } from "../common.ts"; -import { build, DbDriver, Format, Runtime } from "../../toolchain/build/mod.ts"; -import { runTask } from "../task.ts"; - -runTask({ - inputSchema: globalOptsSchema, - async run(input) { - const project = await initProject(input); - - await build(project, { - format: Format.Native, - runtime: Runtime.Deno, - dbDriver: DbDriver.NodePostgres, - sdk: {}, - // Require schemas to be generated in order to generate SDk - strictSchemas: true, - skipDenoCheck: true, - }); - }, -}); diff --git a/packages/backend/cli/tasks/init.ts b/packages/backend/cli/tasks/init.ts deleted file mode 100644 index 4deb2f7f..00000000 --- a/packages/backend/cli/tasks/init.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema } from "../common.ts"; -import { templateProject } from "../../toolchain/template/project.ts"; -import { runTask } from "../task.ts"; - -export const inputSchema = z.object({ - dir: z.string().default("."), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - await templateProject(input.dir); - - console.log("Welcome to Rivet"); - console.log(""); - console.log("Created rivet.json"); - console.log(""); - console.log("Get started at https://rivet.gg/docs"); - }, -}); diff --git a/packages/backend/cli/tasks/lint.ts b/packages/backend/cli/tasks/lint.ts deleted file mode 100644 index fb44451a..00000000 --- a/packages/backend/cli/tasks/lint.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { z } from "zod"; -import { globalOptsSchema, initProject } from "../common.ts"; -import { DENO_JSON_PATH, DENO_LOCK_PATH, listSourceFiles, Project } from "../../toolchain/project/mod.ts"; -import { UserError } from "../../toolchain/error/mod.ts"; -import { denoExecutablePath } from "../../toolchain/utils/deno.ts"; -import { runTask } from "../task.ts"; - -export const inputSchema = z.object({ - // Add any command-specific options here -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - - const sourceFiles = await listSourceFiles(project, { localOnly: true }); - - const cmd = await new Deno.Command(denoExecutablePath(), { - args: [ - "lint", - "--config", - projectDataPath(project, DENO_JSON_PATH), - "--lock", - projectDataPath(project, DENO_LOCK_PATH), - ...sourceFiles, - ], - stdout: "inherit", - stderr: "inherit", - }).output(); - - if (!cmd.success) { - throw new UserError("Lint failed.", { paths: sourceFiles }); - } - }, -}); - -function projectDataPath(project: Project, DENO_JSON_PATH: any): string { - throw new Error("Function not implemented."); -} diff --git a/packages/backend/cli/tasks/module/add.ts b/packages/backend/cli/tasks/module/add.ts deleted file mode 100644 index 9d854aa5..00000000 --- a/packages/backend/cli/tasks/module/add.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { globalOptsSchema, initProject } from "../../common.ts"; -import { resolve } from "@std/path"; -import { fetchAndResolveModule } from "../../../toolchain/project/mod.ts"; -import { ProjectModuleConfig } from "../../../toolchain/config/project.ts"; -import { UserError } from "../../../toolchain/error/mod.ts"; -import { z } from "zod"; -import { runTask } from "../../task.ts"; - -export const inputSchema = z.object({ - moduleName: z.string(), - registry: z.string().nullable(), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - const project = await initProject(input); - - // Ensure not already installed - if (input.moduleName in project.config.modules) { - throw new UserError(`Module \`${input.moduleName}\` is already installed`); - } - - // Attempt to fetch module - const moduleConfig: ProjectModuleConfig = {}; - if (input.registry) moduleConfig.registry = input.registry; - await fetchAndResolveModule(project.path, project.configPath, project.registries, input.moduleName, moduleConfig); - - // Add to rivet.json - const newConfig = structuredClone(project.config); - newConfig.modules[input.moduleName] = moduleConfig; - await Deno.writeTextFile( - resolve(project.path, "rivet.json"), - JSON.stringify(newConfig, null, "\t"), - ); - }, -}); diff --git a/packages/backend/cli/tasks/test.ts b/packages/backend/cli/tasks/test.ts deleted file mode 100644 index 6619a6eb..00000000 --- a/packages/backend/cli/tasks/test.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { z } from "zod"; -import { resolve } from "@std/path"; -import * as glob from "glob"; -import { globalOptsSchema } from "../common.ts"; -import { build, DbDriver, Format, MigrateMode, Runtime } from "../../toolchain/build/mod.ts"; -import { watch } from "../../toolchain/watch/mod.ts"; -import { DENO_JSON_PATH, DENO_LOCK_PATH, Project, projectDataPath } from "../../toolchain/project/mod.ts"; -import { UserError } from "../../toolchain/error/mod.ts"; -import { info } from "../../toolchain/term/status.ts"; -import { migrateModeSchema } from "./../util.ts"; -import { denoExecutablePath } from "../../toolchain/utils/deno.ts"; -import { getDatabaseUrl } from "../../toolchain/postgres.ts"; -import { runTask } from "../task.ts"; - -export const inputSchema = z.object({ - build: z.boolean().default(true), - check: z.boolean().default(true), - strictSchemas: z.boolean().default(true), - sdk: z.boolean().default(true), - migrate: z.boolean().default(true), - migrateMode: migrateModeSchema.default(MigrateMode.Dev), - watch: z.boolean().default(false), - filter: z.string().nullable(), - modulesFilter: z.array(z.string()), -}).merge(globalOptsSchema); - -runTask({ - inputSchema, - async run(input) { - await watch({ - loadProjectOpts: input, - disableWatch: !input.watch, - fn: async (project: Project, signal: AbortSignal) => { - // Build project - if (input.build) { - await build(project, { - runtime: Runtime.Deno, - format: Format.Native, - dbDriver: DbDriver.NodePostgres, - strictSchemas: input.strictSchemas, - // This gets ran on `deno test` - skipDenoCheck: true, - sdk: input.sdk ? {} : undefined, - migrate: input.migrate - ? { - mode: input.migrateMode, - } - : undefined, - signal, - }); - } - - // Determine args - const args = [ - "--config", - projectDataPath(project, DENO_JSON_PATH), - "--lock", - projectDataPath(project, DENO_LOCK_PATH), - "--allow-env", - "--allow-net", - "--allow-read", - ]; - if (input.check) args.push("--check"); - if (input.filter) args.push(`--filter=${input.filter}`); - - // Find test scripts - const testingModules = []; - let totalTestFiles = 0; - for (const module of project.modules.values()) { - // Filter modules - if (input.modulesFilter.length == 0) { - // Only test local modules - if (module.registry.isExternal) continue; - } else { - // Only test specified modules. This allows for testing remote modules. - if (!input.modulesFilter.includes(module.name)) continue; - } - - testingModules.push(module.name); - - // Test all modules or filter module tests - const testPaths = (await glob.glob("*.ts", { - cwd: resolve(module.path, "tests"), - })) - .map((path) => resolve(module.path, "tests", path)); - totalTestFiles += testPaths.length; - args.push(...testPaths); - } - - if (testingModules.length == 0) { - info("Finished", "No modules to test"); - return; - } - - if (totalTestFiles == 0) { - throw new UserError("No test files", { - suggest: "See 'rivet create test --help' to create a test.", - }); - } - - // Run tests - info("Testing", testingModules.join(", ")); - const cmd = await new Deno.Command(denoExecutablePath(), { - args: [ - "test", - ...args, - ], - stdout: "inherit", - stderr: "inherit", - signal, - env: { - "DATABASE_URL": getDatabaseUrl(project), - // Force color for test logs - "RIVET_BACKEND_TERM_COLOR": Deno.env.get("RIVET_BACKEND_TERM_COLOR") ?? "always", - }, - }) - .output(); - if (!cmd.success) throw new UserError("Tests failed."); - }, - }); - }, -}); diff --git a/packages/backend/cli/util.ts b/packages/backend/cli/util.ts deleted file mode 100644 index 7474ed08..00000000 --- a/packages/backend/cli/util.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { z } from "zod"; -import { MigrateMode } from "../toolchain/build/mod.ts"; -import { Project } from "../toolchain/project/mod.ts"; -import { UserError } from "../toolchain/error/mod.ts"; - -export const migrateModeSchema = z.enum([ - MigrateMode.Dev, - MigrateMode.Generate, - MigrateMode.GenerateAndApply, - MigrateMode.Apply, -]); - -export function resolveModules(project: Project, moduleNames: string[]) { - if (moduleNames.length > 0) { - return moduleNames.map((name) => { - const module = project.modules.get(name); - if (!module) throw new UserError(`Module not found: ${name}`); - return module; - }); - } else { - return Array.from(project.modules.values()); - } -} diff --git a/packages/backend/deno.lock b/packages/backend/deno.lock deleted file mode 100644 index e0a33241..00000000 --- a/packages/backend/deno.lock +++ /dev/null @@ -1,700 +0,0 @@ -{ - "version": "3", - "packages": { - "specifiers": { - "jsr:@bartlomieju/postgres@^0.17.2": "jsr:@bartlomieju/postgres@0.17.2", - "jsr:@cross/deepmerge@^1.0.0": "jsr:@cross/deepmerge@1.0.0", - "jsr:@cross/dir@^1.1.0": "jsr:@cross/dir@1.1.0", - "jsr:@cross/env@^1.0.0": "jsr:@cross/env@1.0.2", - "jsr:@cross/runtime@^1.0.0": "jsr:@cross/runtime@1.1.0", - "jsr:@cross/utils@^0.7.0": "jsr:@cross/utils@0.7.1", - "jsr:@david/code-block-writer@^13": "jsr:@david/code-block-writer@13.0.3", - "jsr:@hono/hono@^4.6.3": "jsr:@hono/hono@4.6.3", - "jsr:@rivet-gg/esbuild-deno-loader@^0.10.3-fork.3": "jsr:@rivet-gg/esbuild-deno-loader@0.10.3-fork.3", - "jsr:@std/assert@0.213": "jsr:@std/assert@0.213.1", - "jsr:@std/assert@^0.213.1": "jsr:@std/assert@0.213.1", - "jsr:@std/assert@^0.226.0": "jsr:@std/assert@0.226.0", - "jsr:@std/async@0.213.1": "jsr:@std/async@0.213.1", - "jsr:@std/async@^1.0.4": "jsr:@std/async@1.0.5", - "jsr:@std/bytes@0.213.1": "jsr:@std/bytes@0.213.1", - "jsr:@std/bytes@^0.213.1": "jsr:@std/bytes@0.213.1", - "jsr:@std/cli@^1.0.5": "jsr:@std/cli@1.0.6", - "jsr:@std/collections@^1.0.5": "jsr:@std/collections@1.0.7", - "jsr:@std/crypto@0.213.1": "jsr:@std/crypto@0.213.1", - "jsr:@std/crypto@^1.0.3": "jsr:@std/crypto@1.0.3", - "jsr:@std/datetime@0.213.1": "jsr:@std/datetime@0.213.1", - "jsr:@std/encoding@0.213": "jsr:@std/encoding@0.213.1", - "jsr:@std/encoding@0.213.1": "jsr:@std/encoding@0.213.1", - "jsr:@std/encoding@^1.0.3": "jsr:@std/encoding@1.0.5", - "jsr:@std/fmt@0.213.1": "jsr:@std/fmt@0.213.1", - "jsr:@std/fmt@^0.213.1": "jsr:@std/fmt@0.213.1", - "jsr:@std/fmt@^1.0.1": "jsr:@std/fmt@1.0.2", - "jsr:@std/fs@0.213": "jsr:@std/fs@0.213.1", - "jsr:@std/fs@^0.229.3": "jsr:@std/fs@0.229.3", - "jsr:@std/io@0.213.1": "jsr:@std/io@0.213.1", - "jsr:@std/json@^0.213.1": "jsr:@std/json@0.213.1", - "jsr:@std/jsonc@0.213": "jsr:@std/jsonc@0.213.1", - "jsr:@std/path@0.213": "jsr:@std/path@0.213.1", - "jsr:@std/path@0.213.1": "jsr:@std/path@0.213.1", - "jsr:@std/path@1.0.0-rc.1": "jsr:@std/path@1.0.0-rc.1", - "jsr:@std/path@^0.213.1": "jsr:@std/path@0.213.1", - "jsr:@std/path@^0.225.2": "jsr:@std/path@0.225.2", - "jsr:@ts-morph/common@^0.24.0": "jsr:@ts-morph/common@0.24.0", - "jsr:@ts-morph/ts-morph@^23.0.0": "jsr:@ts-morph/ts-morph@23.0.0", - "npm:@asteasolutions/zod-to-openapi@^7.1.1": "npm:@asteasolutions/zod-to-openapi@7.1.1_zod@3.23.8", - "npm:@cloudflare/workers-types": "npm:@cloudflare/workers-types@4.20240919.0", - "npm:dedent@^1.5.3": "npm:dedent@1.5.3", - "npm:drizzle-orm@0.33.0": "npm:drizzle-orm@0.33.0_@cloudflare+workers-types@4.20240919.0", - "npm:esbuild-plugins-node-modules-polyfill@1.6.4": "npm:esbuild-plugins-node-modules-polyfill@1.6.4_esbuild@0.20.2", - "npm:esbuild@^0.20.2": "npm:esbuild@0.20.2", - "npm:glob@^11.0.0": "npm:glob@11.0.0", - "npm:nanoevents@^9.0.0": "npm:nanoevents@9.0.0", - "npm:zod-validation-error@^3.3.1": "npm:zod-validation-error@3.4.0_zod@3.23.8", - "npm:zod@^3.23.8": "npm:zod@3.23.8" - }, - "jsr": { - "@bartlomieju/postgres@0.17.2": { - "integrity": "e31842f98fbc37e5be2fc6248baf482307e8edce53cee07fb27a7d644cdacfe2", - "dependencies": [ - "jsr:@std/async@0.213.1", - "jsr:@std/bytes@0.213.1", - "jsr:@std/crypto@0.213.1", - "jsr:@std/datetime@0.213.1", - "jsr:@std/encoding@0.213.1", - "jsr:@std/fmt@0.213.1", - "jsr:@std/io@0.213.1", - "jsr:@std/path@0.213.1" - ] - }, - "@cross/deepmerge@1.0.0": { - "integrity": "1e1318a74e31ba1959b9aa0acae8bd417b806f74ffd25ac07c90e12f83ad6b1d" - }, - "@cross/dir@1.1.0": { - "integrity": "41eb779daf160f53bc33ef91f593f332fffc52ec9b81f87178db564718534e59", - "dependencies": [ - "jsr:@cross/env@^1.0.0", - "jsr:@cross/runtime@^1.0.0", - "jsr:@cross/utils@^0.7.0" - ] - }, - "@cross/env@1.0.2": { - "integrity": "28501ad1043c218a5b00fe5db27ec62c01ab16371bbe1b9d738496f0a7c5eeb8", - "dependencies": [ - "jsr:@cross/deepmerge@^1.0.0", - "jsr:@cross/runtime@^1.0.0" - ] - }, - "@cross/runtime@1.1.0": { - "integrity": "f35a3b768a9de125277329483b684062ffc9ee86f4449cb8b3d614adcad64ffb" - }, - "@cross/utils@0.7.1": { - "integrity": "6cc50ad31b0904364188c43d10e3d4888d817a3d415528b014c27deb8a35564e", - "dependencies": [ - "jsr:@cross/runtime@^1.0.0" - ] - }, - "@david/code-block-writer@13.0.3": { - "integrity": "f98c77d320f5957899a61bfb7a9bead7c6d83ad1515daee92dbacc861e13bb7f" - }, - "@hono/hono@4.6.3": { - "integrity": "a1f5a18cd12a0db54755b0461dd5a4e2d93a6f85403073eb710103eacc42daf3" - }, - "@rivet-gg/esbuild-deno-loader@0.10.3-fork.3": { - "integrity": "41712fa34aa18d6e5b644a5921dd4ca31f5924ce327288007bc7273b092932d3", - "dependencies": [ - "jsr:@std/encoding@0.213", - "jsr:@std/jsonc@0.213", - "jsr:@std/path@0.213" - ] - }, - "@std/assert@0.213.1": { - "integrity": "24c28178b30c8e0782c18e8e94ea72b16282207569cdd10ffb9d1d26f2edebfe", - "dependencies": [ - "jsr:@std/fmt@^0.213.1" - ] - }, - "@std/assert@0.226.0": { - "integrity": "0dfb5f7c7723c18cec118e080fec76ce15b4c31154b15ad2bd74822603ef75b3" - }, - "@std/async@0.213.1": { - "integrity": "c7e230912fca7e25ed4befbdc1a494acc855d527c178269b8c9de40649c4dc86" - }, - "@std/async@1.0.5": { - "integrity": "31d68214bfbb31bd4c6022401d484e3964147c76c9220098baa703a39b6c2da6" - }, - "@std/bytes@0.213.1": { - "integrity": "97f133c5bfb18b4522675e0822089de91e32618a4d8c2fcea8e175aca8f1f65c" - }, - "@std/cli@1.0.6": { - "integrity": "d22d8b38c66c666d7ad1f2a66c5b122da1704f985d3c47f01129f05abb6c5d3d" - }, - "@std/collections@1.0.7": { - "integrity": "6cff6949907372564735e25a5c6a7945d67cc31913b1b4d1278d08c2a5a3291d" - }, - "@std/crypto@0.213.1": { - "integrity": "e02fe3baba719add8cd5188963ce0c215583e4a58102d026684b57634415cd46" - }, - "@std/crypto@1.0.3": { - "integrity": "a2a32f51ddef632d299e3879cd027c630dcd4d1d9a5285d6e6788072f4e51e7f" - }, - "@std/datetime@0.213.1": { - "integrity": "cf64facd328b3f285406031e116bb43fe63a47dc8ab37f2f8c730331de957240" - }, - "@std/encoding@0.213.1": { - "integrity": "fcbb6928713dde941a18ca5db88ca1544d0755ec8fb20fe61e2dc8144b390c62" - }, - "@std/encoding@1.0.5": { - "integrity": "ecf363d4fc25bd85bd915ff6733a7e79b67e0e7806334af15f4645c569fefc04" - }, - "@std/fmt@0.213.1": { - "integrity": "a06d31777566d874b9c856c10244ac3e6b660bdec4c82506cd46be052a1082c3" - }, - "@std/fmt@1.0.2": { - "integrity": "87e9dfcdd3ca7c066e0c3c657c1f987c82888eb8103a3a3baa62684ffeb0f7a7" - }, - "@std/fs@0.213.1": { - "integrity": "fbcaf099f8a85c27ab0712b666262cda8fe6d02e9937bf9313ecaea39a22c501", - "dependencies": [ - "jsr:@std/assert@^0.213.1", - "jsr:@std/path@^0.213.1" - ] - }, - "@std/fs@0.229.3": { - "integrity": "783bca21f24da92e04c3893c9e79653227ab016c48e96b3078377ebd5222e6eb", - "dependencies": [ - "jsr:@std/path@1.0.0-rc.1" - ] - }, - "@std/io@0.213.1": { - "integrity": "18ee1ab872d43077d9ced51ffae38093ad4e818d2b23c3b18a6683edf5f428ae", - "dependencies": [ - "jsr:@std/assert@^0.213.1", - "jsr:@std/bytes@^0.213.1" - ] - }, - "@std/json@0.213.1": { - "integrity": "f572b1de605d07c4a5602445dac54bfc51b1fb87a3710a17aed2608bfca54e68" - }, - "@std/jsonc@0.213.1": { - "integrity": "5578f21aa583b7eb7317eed077ffcde47b294f1056bdbb9aacec407758637bfe", - "dependencies": [ - "jsr:@std/assert@^0.213.1", - "jsr:@std/json@^0.213.1" - ] - }, - "@std/path@0.213.1": { - "integrity": "f187bf278a172752e02fcbacf6bd78a335ed320d080a7ed3a5a59c3e88abc673", - "dependencies": [ - "jsr:@std/assert@^0.213.1" - ] - }, - "@std/path@0.225.2": { - "integrity": "0f2db41d36b50ef048dcb0399aac720a5348638dd3cb5bf80685bf2a745aa506", - "dependencies": [ - "jsr:@std/assert@^0.226.0" - ] - }, - "@std/path@1.0.0-rc.1": { - "integrity": "b8c00ae2f19106a6bb7cbf1ab9be52aa70de1605daeb2dbdc4f87a7cbaf10ff6" - }, - "@ts-morph/common@0.24.0": { - "integrity": "12b625b8e562446ba658cdbe9ad77774b4bd96b992ae8bd34c60dbf24d06c1f3", - "dependencies": [ - "jsr:@std/fs@^0.229.3", - "jsr:@std/path@^0.225.2" - ] - }, - "@ts-morph/ts-morph@23.0.0": { - "integrity": "5c5bf3187fc3d696ca0cc295e9e024e9c8d52051852cfea67f8e932cfbde0810", - "dependencies": [ - "jsr:@david/code-block-writer@^13", - "jsr:@ts-morph/common@^0.24.0" - ] - } - }, - "npm": { - "@asteasolutions/zod-to-openapi@7.1.1_zod@3.23.8": { - "integrity": "sha512-lF0d1gAc0lYLO9/BAGivwTwE2Sh9h6CHuDcbk5KnGBfIuAsAkDC+Fdat4dkQY3CS/zUWKHRmFEma0B7X132Ymw==", - "dependencies": { - "openapi3-ts": "openapi3-ts@4.4.0", - "zod": "zod@3.23.8" - } - }, - "@cloudflare/workers-types@4.20240919.0": { - "integrity": "sha512-DZwTpZVAV+fKTLxo6ntC2zMNRL/UJwvtMKUt/U7ZyJdR+t0qcBUZGx8jLi9gOFWYxkzO3s7slajwkR2hQRPXYQ==", - "dependencies": {} - }, - "@esbuild/aix-ppc64@0.20.2": { - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "dependencies": {} - }, - "@esbuild/android-arm64@0.20.2": { - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "dependencies": {} - }, - "@esbuild/android-arm@0.20.2": { - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "dependencies": {} - }, - "@esbuild/android-x64@0.20.2": { - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "dependencies": {} - }, - "@esbuild/darwin-arm64@0.20.2": { - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "dependencies": {} - }, - "@esbuild/darwin-x64@0.20.2": { - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "dependencies": {} - }, - "@esbuild/freebsd-arm64@0.20.2": { - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "dependencies": {} - }, - "@esbuild/freebsd-x64@0.20.2": { - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "dependencies": {} - }, - "@esbuild/linux-arm64@0.20.2": { - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "dependencies": {} - }, - "@esbuild/linux-arm@0.20.2": { - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "dependencies": {} - }, - "@esbuild/linux-ia32@0.20.2": { - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "dependencies": {} - }, - "@esbuild/linux-loong64@0.20.2": { - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "dependencies": {} - }, - "@esbuild/linux-mips64el@0.20.2": { - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "dependencies": {} - }, - "@esbuild/linux-ppc64@0.20.2": { - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "dependencies": {} - }, - "@esbuild/linux-riscv64@0.20.2": { - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "dependencies": {} - }, - "@esbuild/linux-s390x@0.20.2": { - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "dependencies": {} - }, - "@esbuild/linux-x64@0.20.2": { - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "dependencies": {} - }, - "@esbuild/netbsd-x64@0.20.2": { - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "dependencies": {} - }, - "@esbuild/openbsd-x64@0.20.2": { - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "dependencies": {} - }, - "@esbuild/sunos-x64@0.20.2": { - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "dependencies": {} - }, - "@esbuild/win32-arm64@0.20.2": { - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "dependencies": {} - }, - "@esbuild/win32-ia32@0.20.2": { - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "dependencies": {} - }, - "@esbuild/win32-x64@0.20.2": { - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "dependencies": {} - }, - "@isaacs/cliui@8.0.2": { - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "string-width@5.1.2", - "string-width-cjs": "string-width@4.2.3", - "strip-ansi": "strip-ansi@7.1.0", - "strip-ansi-cjs": "strip-ansi@6.0.1", - "wrap-ansi": "wrap-ansi@8.1.0", - "wrap-ansi-cjs": "wrap-ansi@7.0.0" - } - }, - "@jspm/core@2.0.1": { - "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", - "dependencies": {} - }, - "acorn@8.12.1": { - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dependencies": {} - }, - "ansi-regex@5.0.1": { - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dependencies": {} - }, - "ansi-regex@6.1.0": { - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dependencies": {} - }, - "ansi-styles@4.3.0": { - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "color-convert@2.0.1" - } - }, - "ansi-styles@6.2.1": { - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dependencies": {} - }, - "balanced-match@1.0.2": { - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dependencies": {} - }, - "brace-expansion@2.0.1": { - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "balanced-match@1.0.2" - } - }, - "color-convert@2.0.1": { - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "color-name@1.1.4" - } - }, - "color-name@1.1.4": { - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dependencies": {} - }, - "confbox@0.1.7": { - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", - "dependencies": {} - }, - "cross-spawn@7.0.3": { - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "path-key@3.1.1", - "shebang-command": "shebang-command@2.0.0", - "which": "which@2.0.2" - } - }, - "dedent@1.5.3": { - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dependencies": {} - }, - "drizzle-orm@0.33.0_@cloudflare+workers-types@4.20240919.0": { - "integrity": "sha512-SHy72R2Rdkz0LEq0PSG/IdvnT3nGiWuRk+2tXZQ90GVq/XQhpCzu/EFT3V2rox+w8MlkBQxifF8pCStNYnERfA==", - "dependencies": { - "@cloudflare/workers-types": "@cloudflare/workers-types@4.20240919.0" - } - }, - "eastasianwidth@0.2.0": { - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dependencies": {} - }, - "emoji-regex@8.0.0": { - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dependencies": {} - }, - "emoji-regex@9.2.2": { - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dependencies": {} - }, - "esbuild-plugins-node-modules-polyfill@1.6.4_esbuild@0.20.2": { - "integrity": "sha512-x3MCOvZrKDGAfqAYS/pZUUSwiN+XH7x84A+Prup0CZBJKuGfuGkTAC4g01D6JPs/GCM9wzZVfd8bmiy+cP/iXA==", - "dependencies": { - "@jspm/core": "@jspm/core@2.0.1", - "esbuild": "esbuild@0.20.2", - "local-pkg": "local-pkg@0.5.0", - "resolve.exports": "resolve.exports@2.0.2" - } - }, - "esbuild@0.20.2": { - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dependencies": { - "@esbuild/aix-ppc64": "@esbuild/aix-ppc64@0.20.2", - "@esbuild/android-arm": "@esbuild/android-arm@0.20.2", - "@esbuild/android-arm64": "@esbuild/android-arm64@0.20.2", - "@esbuild/android-x64": "@esbuild/android-x64@0.20.2", - "@esbuild/darwin-arm64": "@esbuild/darwin-arm64@0.20.2", - "@esbuild/darwin-x64": "@esbuild/darwin-x64@0.20.2", - "@esbuild/freebsd-arm64": "@esbuild/freebsd-arm64@0.20.2", - "@esbuild/freebsd-x64": "@esbuild/freebsd-x64@0.20.2", - "@esbuild/linux-arm": "@esbuild/linux-arm@0.20.2", - "@esbuild/linux-arm64": "@esbuild/linux-arm64@0.20.2", - "@esbuild/linux-ia32": "@esbuild/linux-ia32@0.20.2", - "@esbuild/linux-loong64": "@esbuild/linux-loong64@0.20.2", - "@esbuild/linux-mips64el": "@esbuild/linux-mips64el@0.20.2", - "@esbuild/linux-ppc64": "@esbuild/linux-ppc64@0.20.2", - "@esbuild/linux-riscv64": "@esbuild/linux-riscv64@0.20.2", - "@esbuild/linux-s390x": "@esbuild/linux-s390x@0.20.2", - "@esbuild/linux-x64": "@esbuild/linux-x64@0.20.2", - "@esbuild/netbsd-x64": "@esbuild/netbsd-x64@0.20.2", - "@esbuild/openbsd-x64": "@esbuild/openbsd-x64@0.20.2", - "@esbuild/sunos-x64": "@esbuild/sunos-x64@0.20.2", - "@esbuild/win32-arm64": "@esbuild/win32-arm64@0.20.2", - "@esbuild/win32-ia32": "@esbuild/win32-ia32@0.20.2", - "@esbuild/win32-x64": "@esbuild/win32-x64@0.20.2" - } - }, - "foreground-child@3.3.0": { - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dependencies": { - "cross-spawn": "cross-spawn@7.0.3", - "signal-exit": "signal-exit@4.1.0" - } - }, - "glob@11.0.0": { - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dependencies": { - "foreground-child": "foreground-child@3.3.0", - "jackspeak": "jackspeak@4.0.2", - "minimatch": "minimatch@10.0.1", - "minipass": "minipass@7.1.2", - "package-json-from-dist": "package-json-from-dist@1.0.0", - "path-scurry": "path-scurry@2.0.0" - } - }, - "is-fullwidth-code-point@3.0.0": { - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dependencies": {} - }, - "isexe@2.0.0": { - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dependencies": {} - }, - "jackspeak@4.0.2": { - "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", - "dependencies": { - "@isaacs/cliui": "@isaacs/cliui@8.0.2" - } - }, - "local-pkg@0.5.0": { - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", - "dependencies": { - "mlly": "mlly@1.7.1", - "pkg-types": "pkg-types@1.2.0" - } - }, - "lru-cache@11.0.1": { - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", - "dependencies": {} - }, - "minimatch@10.0.1": { - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minipass@7.1.2": { - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dependencies": {} - }, - "mlly@1.7.1": { - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", - "dependencies": { - "acorn": "acorn@8.12.1", - "pathe": "pathe@1.1.2", - "pkg-types": "pkg-types@1.2.0", - "ufo": "ufo@1.5.4" - } - }, - "nanoevents@9.0.0": { - "integrity": "sha512-X8pU7IOpgKXVLPxYUI55ymXc8XuBE+uypfEyEFBtHkD1EX9KavYTVc+vXZHFyHKzA1TaZoVDqklLdQBBrxIuAw==", - "dependencies": {} - }, - "openapi3-ts@4.4.0": { - "integrity": "sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==", - "dependencies": { - "yaml": "yaml@2.5.1" - } - }, - "package-json-from-dist@1.0.0": { - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dependencies": {} - }, - "path-key@3.1.1": { - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dependencies": {} - }, - "path-scurry@2.0.0": { - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dependencies": { - "lru-cache": "lru-cache@11.0.1", - "minipass": "minipass@7.1.2" - } - }, - "pathe@1.1.2": { - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dependencies": {} - }, - "pkg-types@1.2.0": { - "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", - "dependencies": { - "confbox": "confbox@0.1.7", - "mlly": "mlly@1.7.1", - "pathe": "pathe@1.1.2" - } - }, - "resolve.exports@2.0.2": { - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dependencies": {} - }, - "shebang-command@2.0.0": { - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "shebang-regex@3.0.0" - } - }, - "shebang-regex@3.0.0": { - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dependencies": {} - }, - "signal-exit@4.1.0": { - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dependencies": {} - }, - "string-width@4.2.3": { - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "emoji-regex@8.0.0", - "is-fullwidth-code-point": "is-fullwidth-code-point@3.0.0", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "string-width@5.1.2": { - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "eastasianwidth@0.2.0", - "emoji-regex": "emoji-regex@9.2.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "strip-ansi@6.0.1": { - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "ansi-regex@5.0.1" - } - }, - "strip-ansi@7.1.0": { - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "ansi-regex@6.1.0" - } - }, - "ufo@1.5.4": { - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dependencies": {} - }, - "which@2.0.2": { - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "isexe@2.0.0" - } - }, - "wrap-ansi@7.0.0": { - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "string-width": "string-width@4.2.3", - "strip-ansi": "strip-ansi@6.0.1" - } - }, - "wrap-ansi@8.1.0": { - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "ansi-styles@6.2.1", - "string-width": "string-width@5.1.2", - "strip-ansi": "strip-ansi@7.1.0" - } - }, - "yaml@2.5.1": { - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "dependencies": {} - }, - "zod-validation-error@3.4.0_zod@3.23.8": { - "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==", - "dependencies": { - "zod": "zod@3.23.8" - } - }, - "zod@3.23.8": { - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", - "dependencies": {} - } - } - }, - "remote": { - "https://deno.land/std@0.224.0/assert/_constants.ts": "a271e8ef5a573f1df8e822a6eb9d09df064ad66a4390f21b3e31f820a38e0975", - "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", - "https://deno.land/std@0.224.0/assert/assert_almost_equals.ts": "9e416114322012c9a21fa68e187637ce2d7df25bcbdbfd957cd639e65d3cf293", - "https://deno.land/std@0.224.0/assert/assert_array_includes.ts": "14c5094471bc8e4a7895fc6aa5a184300d8a1879606574cb1cd715ef36a4a3c7", - "https://deno.land/std@0.224.0/assert/assert_equals.ts": "3bbca947d85b9d374a108687b1a8ba3785a7850436b5a8930d81f34a32cb8c74", - "https://deno.land/std@0.224.0/assert/assert_exists.ts": "43420cf7f956748ae6ed1230646567b3593cb7a36c5a5327269279c870c5ddfd", - "https://deno.land/std@0.224.0/assert/assert_false.ts": "3e9be8e33275db00d952e9acb0cd29481a44fa0a4af6d37239ff58d79e8edeff", - "https://deno.land/std@0.224.0/assert/assert_greater.ts": "5e57b201fd51b64ced36c828e3dfd773412c1a6120c1a5a99066c9b261974e46", - "https://deno.land/std@0.224.0/assert/assert_greater_or_equal.ts": "9870030f997a08361b6f63400273c2fb1856f5db86c0c3852aab2a002e425c5b", - "https://deno.land/std@0.224.0/assert/assert_instance_of.ts": "e22343c1fdcacfaea8f37784ad782683ec1cf599ae9b1b618954e9c22f376f2c", - "https://deno.land/std@0.224.0/assert/assert_is_error.ts": "f856b3bc978a7aa6a601f3fec6603491ab6255118afa6baa84b04426dd3cc491", - "https://deno.land/std@0.224.0/assert/assert_less.ts": "60b61e13a1982865a72726a5fa86c24fad7eb27c3c08b13883fb68882b307f68", - "https://deno.land/std@0.224.0/assert/assert_less_or_equal.ts": "d2c84e17faba4afe085e6c9123a63395accf4f9e00150db899c46e67420e0ec3", - "https://deno.land/std@0.224.0/assert/assert_match.ts": "ace1710dd3b2811c391946954234b5da910c5665aed817943d086d4d4871a8b7", - "https://deno.land/std@0.224.0/assert/assert_not_equals.ts": "78d45dd46133d76ce624b2c6c09392f6110f0df9b73f911d20208a68dee2ef29", - "https://deno.land/std@0.224.0/assert/assert_not_instance_of.ts": "3434a669b4d20cdcc5359779301a0588f941ffdc2ad68803c31eabdb4890cf7a", - "https://deno.land/std@0.224.0/assert/assert_not_match.ts": "df30417240aa2d35b1ea44df7e541991348a063d9ee823430e0b58079a72242a", - "https://deno.land/std@0.224.0/assert/assert_not_strict_equals.ts": "37f73880bd672709373d6dc2c5f148691119bed161f3020fff3548a0496f71b8", - "https://deno.land/std@0.224.0/assert/assert_object_match.ts": "411450fd194fdaabc0089ae68f916b545a49d7b7e6d0026e84a54c9e7eed2693", - "https://deno.land/std@0.224.0/assert/assert_rejects.ts": "4bee1d6d565a5b623146a14668da8f9eb1f026a4f338bbf92b37e43e0aa53c31", - "https://deno.land/std@0.224.0/assert/assert_strict_equals.ts": "b4f45f0fd2e54d9029171876bd0b42dd9ed0efd8f853ab92a3f50127acfa54f5", - "https://deno.land/std@0.224.0/assert/assert_string_includes.ts": "496b9ecad84deab72c8718735373feb6cdaa071eb91a98206f6f3cb4285e71b8", - "https://deno.land/std@0.224.0/assert/assert_throws.ts": "c6508b2879d465898dab2798009299867e67c570d7d34c90a2d235e4553906eb", - "https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917", - "https://deno.land/std@0.224.0/assert/equal.ts": "bddf07bb5fc718e10bb72d5dc2c36c1ce5a8bdd3b647069b6319e07af181ac47", - "https://deno.land/std@0.224.0/assert/fail.ts": "0eba674ffb47dff083f02ced76d5130460bff1a9a68c6514ebe0cdea4abadb68", - "https://deno.land/std@0.224.0/assert/mod.ts": "48b8cb8a619ea0b7958ad7ee9376500fe902284bb36f0e32c598c3dc34cbd6f3", - "https://deno.land/std@0.224.0/assert/unimplemented.ts": "8c55a5793e9147b4f1ef68cd66496b7d5ba7a9e7ca30c6da070c1a58da723d73", - "https://deno.land/std@0.224.0/assert/unreachable.ts": "5ae3dbf63ef988615b93eb08d395dda771c96546565f9e521ed86f6510c29e19", - "https://deno.land/std@0.224.0/fmt/colors.ts": "508563c0659dd7198ba4bbf87e97f654af3c34eb56ba790260f252ad8012e1c5", - "https://deno.land/std@0.224.0/internal/diff.ts": "6234a4b493ebe65dc67a18a0eb97ef683626a1166a1906232ce186ae9f65f4e6", - "https://deno.land/std@0.224.0/internal/format.ts": "0a98ee226fd3d43450245b1844b47003419d34d210fa989900861c79820d21c2", - "https://deno.land/std@0.224.0/internal/mod.ts": "534125398c8e7426183e12dc255bb635d94e06d0f93c60a297723abe69d3b22e", - "https://esm.sh/zod-validation-error@3.3.0": "d8825ca67952b6adff6b35026dc465f9638d4923dbd54fe9e8e81fbfddca9630" - }, - "workspace": { - "dependencies": [ - "jsr:@bartlomieju/postgres@^0.17.2", - "jsr:@cross/dir@^1.1.0", - "jsr:@hono/hono@^4.6.3", - "jsr:@rivet-gg/esbuild-deno-loader@^0.10.3-fork.3", - "jsr:@std/assert@0.213", - "jsr:@std/async@^1.0.4", - "jsr:@std/cli@^1.0.5", - "jsr:@std/collections@^1.0.5", - "jsr:@std/crypto@^1.0.3", - "jsr:@std/encoding@^1.0.3", - "jsr:@std/fmt@^1.0.1", - "jsr:@std/fs@0.213", - "jsr:@std/jsonc@0.213", - "jsr:@std/path@0.213", - "jsr:@ts-morph/ts-morph@^23.0.0", - "npm:@asteasolutions/zod-to-openapi@^7.1.1", - "npm:@cloudflare/workers-types", - "npm:dedent@^1.5.3", - "npm:esbuild-plugins-node-modules-polyfill@1.6.4", - "npm:esbuild@^0.20.2", - "npm:glob@^11.0.0", - "npm:nanoevents@^9.0.0", - "npm:tar@^7.4.3", - "npm:typescript-json-schema@^0.62.0", - "npm:zod-validation-error@^3.3.1", - "npm:zod@^3.23.8" - ] - } -} diff --git a/packages/backend/dynamic/sdk/godot/client/client.gd b/packages/backend/dynamic/sdk/godot/client/client.gd deleted file mode 100644 index 9dc07de3..00000000 --- a/packages/backend/dynamic/sdk/godot/client/client.gd +++ /dev/null @@ -1,36 +0,0 @@ -extends Node -class_name RivetClient -## Low-level API used to build HTTP requests to the backend. - -const _ApiRequest := preload("request.gd") - -var configuration: RivetConfiguration - -func _init(configuration: RivetConfiguration): - self.configuration = configuration - -## Builds the headers for a request -func _build_headers() -> PackedStringArray: - return [ - "Accept: application/json", - "Content-Type: application/json", - ] - -## Builds the complete URL to the backend -func _build_url(path: String) -> String: - var path_segments := path.split("/", false) - return self.configuration.endpoint + "/" + "/".join(path_segments) - -## Creates a request -func build_request(request_name: String, method: HTTPClient.Method, path: String, body: Dictionary) -> _ApiRequest: - if !self.is_inside_tree(): - push_error("RivetClient node not added to tree, cannot make http requests") - - var url := self._build_url(path) - var body_json := JSON.stringify(body) - - return _ApiRequest.new(self, method, url, { - "headers": self._build_headers(), - "body": body_json, - "request_name": request_name, - }) diff --git a/packages/backend/dynamic/sdk/godot/client/configuration.gd b/packages/backend/dynamic/sdk/godot/client/configuration.gd deleted file mode 100644 index 6f320e2e..00000000 --- a/packages/backend/dynamic/sdk/godot/client/configuration.gd +++ /dev/null @@ -1,82 +0,0 @@ -class_name RivetConfiguration -## Rivet configuration. - -## Endpoint to send requests to. -var endpoint: String = "http://localhost:6420" - -## The version of the game. -var game_version: String = "unknown" - -func _init(): - self.endpoint = _get_backend_endpoint() - RivetLogger.log('Endpoint: %s' % self.endpoint) - self.game_version = _get_game_version() - RivetLogger.log('Game version: %s' % self.game_version) - -## Path of the configuration file bundled with a game from Rivet. -## -## This file is generated on deploy. -const RIVET_DEPLOYED_CONFIGURATION_FILE_PATH: String = "res://.rivet_config.gd" - -## Path of the configuration file when developing locally. -## -## This file is usually gitignored. -const RIVET_LOCAL_CONFIGURATION_FILE_PATH: String = "res://.rivet/config.gd" - -## Dynamically loads the configuration file with the backend endpoint. -func _get_configuration(): - if FileAccess.file_exists(RIVET_DEPLOYED_CONFIGURATION_FILE_PATH): - var deployed_config_file = ResourceLoader.load(RIVET_DEPLOYED_CONFIGURATION_FILE_PATH) - if deployed_config_file and 'new' in deployed_config_file: - RivetLogger.log('Using endpoint from deployed config') - return deployed_config_file.new() - - if FileAccess.file_exists(RIVET_LOCAL_CONFIGURATION_FILE_PATH): - var deployed_config_file = ResourceLoader.load(RIVET_LOCAL_CONFIGURATION_FILE_PATH) - if deployed_config_file and 'new' in deployed_config_file: - RivetLogger.log('Using endpoint from local config') - return deployed_config_file.new() - - return null - -## Derive the backend endpoint in order of priority: -## - Environment variable (if running from deployed server) -## - Configuration (if running in a client) -## - Fallback to localhost -func _get_backend_endpoint(): - # Use environment variable - var url_env = OS.get_environment("RIVET_BACKEND_ENDPOINT") - if url_env: - RivetLogger.log('Using endpoint from env') - return url_env - - # Use configuration shipped with game - var config = _get_configuration() - if config: - return config.backend_endpoint - - # Fallback - push_warning("Could not find backend endpoint, falling back to localhost:6420") - RivetLogger.log('Using default endpoint') - return "http://localhost:6420" - -## Derive the backend endpoint in order of priority: -## - Environment variable (if running from deployed server) -## - Configuration (if running in a client) -## - Fallback to localhost -func _get_game_version(): - # Use environment variable - var url_env = OS.get_environment("GAME_VERSION") - if url_env: - RivetLogger.log('Using game version from env') - return url_env - - # Use configuration shipped with game - var config = _get_configuration() - if config: - return config.game_version - - # Fallback - push_warning("Could not find game version endpoint") - return "unknown" - diff --git a/packages/backend/dynamic/sdk/godot/client/logger.gd b/packages/backend/dynamic/sdk/godot/client/logger.gd deleted file mode 100644 index 64f1b90b..00000000 --- a/packages/backend/dynamic/sdk/godot/client/logger.gd +++ /dev/null @@ -1,13 +0,0 @@ -class_name RivetLogger - -static func log(args): - print("[Rivet] ", args) - -static func warning(args): - print("[Rivet] ", args) - push_warning("[Rivet] ", args) - -static func error(args): - print("[Rivet] ", args) - push_error("[Rivet] ", args) - diff --git a/packages/backend/dynamic/sdk/godot/client/request.gd b/packages/backend/dynamic/sdk/godot/client/request.gd deleted file mode 100644 index b8b80184..00000000 --- a/packages/backend/dynamic/sdk/godot/client/request.gd +++ /dev/null @@ -1,111 +0,0 @@ -extends RefCounted -class_name RivetRequest -## A wrapper around HTTPRequest that emits a signal when the request is completed. -## This is a workaround for the fact that `HTTPRequest.request()` is blocking. -## To run a request, create a new Request, connect to the completed signal, -## and call `request().wait_completed()` to wait for the request to complete. - -const _ApiResponse := preload("response.gd") - -var _started_at: int -var _method: HTTPClient.Method -var _url: String - -## Human-friendly string indicating what this request does. This helps make it -## more clear what the request is doing in the logs instead of a verbose URL. -var _request_name = null - -var response: _ApiResponse = null -var _opts: Dictionary -var _http_request: HTTPRequest - -var _success_callback: Callable -var _failure_callback: Callable - -signal completed(response: _ApiResponse) -signal succeeded(response: _ApiResponse) -signal failed(response: _ApiResponse) - -func _init(owner: Node, method: HTTPClient.Method, url: String, opts: Variant = {}): - self._started_at = Time.get_ticks_msec() - self._method = method - self._url = url - if "request_name" in opts: - _request_name = opts.request_name - - self._http_request = HTTPRequest.new() - self._http_request.request_completed.connect(_on_request_completed) - self._opts = { - "method": method, - "url": url, - "body": opts.body, - "headers": opts.headers, - } - owner.add_child(self._http_request) - self._http_request.request(_opts.url, _opts.headers, _opts.method, _opts.body) - -func set_success_callback(callback: Callable) -> RivetRequest: - self._success_callback = callback - return self - -func set_failure_callback(callback: Callable) -> RivetRequest: - self._failure_callback = callback - return self - -func _on_request_completed(result, response_code, headers, body): - self.response = _ApiResponse.new(result, response_code, headers, body) - - var finished_at = Time.get_ticks_msec() - var elapsed = finished_at - self._started_at - - # Print request - var log_str - var is_error= false - - if _request_name != null: - log_str = "request=%s" % _request_name - else: - log_str = "request=%s" % _url - - if response.response_code == 200 && response.body != null: - log_str += " result=ok" - elif (response.response_code == 400 || response.response_code == 500) && response.body != null && "message" in response.body: - if "code" in response.body: - log_str += " result=%s" % response.body.code - else: - log_str += " result=unknown_error" - if "module" in response.body: - log_str += " module=%s" % response.body.module - log_str += " message=\"%s\"" % response.body.message - if "meta" in response.body: - log_str += " meta=%s" % JSON.stringify(response.body.meta) - else: - is_error = true - log_str += " result=%s http_status=%s response_code=%s" % [ - RivetResponse.Result.keys()[response.result], - response.http_status, - response.response_code, - ] - - log_str += " elapsed=%sms" % elapsed - - if is_error: - RivetLogger.error(log_str) - else: - RivetLogger.log(log_str) - - # Callbacks - if result == OK: - succeeded.emit(response) - if self._success_callback: - self._success_callback.call(response) - else: - failed.emit(response) - if self._failure_callback: - self._failure_callback.call(response) - completed.emit(response) - -## Waits for the request to complete and returns the response in non-blocking way -func async() -> _ApiResponse: - await completed - return response diff --git a/packages/backend/dynamic/sdk/godot/client/response.gd b/packages/backend/dynamic/sdk/godot/client/response.gd deleted file mode 100644 index 72c1b22a..00000000 --- a/packages/backend/dynamic/sdk/godot/client/response.gd +++ /dev/null @@ -1,69 +0,0 @@ -extends RefCounted -class_name RivetResponse -## A response from the server. Contains the result, response code, headers, and body. -## The body is a dictionary of the JSON response. - -enum Result { - OK = 0, - HTTP_RESPONSE_ERROR = 1, - HTTP_ERROR = 2, - JSON_PARSE_ERROR = 3, - UNKNOWN = 4 -} - -var result: Result: - get: - if http_status != HTTPClient.Status.STATUS_DISCONNECTED: - return Result.HTTP_ERROR - elif response_code == 200: - if body != null: - return Result.OK - else: - return Result.JSON_PARSE_ERROR - elif response_code > 0: - return Result.HTTP_RESPONSE_ERROR - else: - return Result.UNKNOWN - -## Low-level HTTP response status cdoe. -var http_status: HTTPClient.Status - -## HTTP status code from response. -var response_code: HTTPClient.ResponseCode - -## The headers from the server. -var headers: PackedStringArray - -## The raw body of the response. -var body_raw: PackedByteArray - -## The parsed JSON body of the response. -## -## Will be null if failed to parse. -var body: Variant - -func _init(http_status: int, response_code: int, headers: PackedStringArray, response_body: PackedByteArray) -> void: - self.http_status = http_status - self.response_code = response_code - self.headers = headers - - body_raw = response_body - var json = JSON.new() - var error = json.parse(response_body.get_string_from_utf8()) - if error == OK: - body = json.get_data() - -func is_ok() -> bool: - return self.result == Result.OK - -func is_error() -> bool: - return !self.is_ok() - -func _to_string() -> String: - return "RivetResponse [Result: %s, HTTP: %s, Response: %s, Body: %s]" % [ - Result.keys()[result], - http_status, - response_code, - body_raw.slice(0, 128).get_string_from_ascii() - ] - diff --git a/packages/backend/dynamic/sdk/godot/plugin.cfg b/packages/backend/dynamic/sdk/godot/plugin.cfg deleted file mode 100644 index 455a2cfe..00000000 --- a/packages/backend/dynamic/sdk/godot/plugin.cfg +++ /dev/null @@ -1,8 +0,0 @@ -[plugin] - -name="Rivet" -description="Auto-generated client for Rivet (https://rivet.gg)." -author="Rivet Gaming, Inc." -version="1.0.0" -script = "rivet.gd" - diff --git a/packages/backend/dynamic/sdk/typescript/package.json b/packages/backend/dynamic/sdk/typescript/package.json deleted file mode 100644 index 4cd34fa6..00000000 --- a/packages/backend/dynamic/sdk/typescript/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "rivet-sdk", - "version": "1.0.0", - "repository": { - "type": "git", - "url": "https://github.com/rivet-gg/rivet.git" - }, - "scripts": { - "build": "tsup", - "prepare": "npm run build" - }, - - "devDependencies": { - "typescript": "^4.0 || ^5.0", - "tsup": "^8.3.0" - }, - - "tsup": { - "entry": ["src/index.ts"], - "format": ["esm", "cjs", "iife"], - "sourcemap": true, - "dts": true - }, - - "files": ["dist"], - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", - "browser": "./dist/index.global.js", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - } - } -} diff --git a/packages/backend/dynamic/sdk/typescript/src/client/client.ts b/packages/backend/dynamic/sdk/typescript/src/client/client.ts deleted file mode 100644 index b117e3b2..00000000 --- a/packages/backend/dynamic/sdk/typescript/src/client/client.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { Configuration } from "./configuration.ts"; -import { RivetRequestError } from "./error.ts"; -import { Logger } from "./logger.ts"; - -export interface ClientConfiguration { - endpoint?: string; - gameVersion?: string; -} - -/** Low-level API used to build HTTP requests to the backend. */ -export class Client { - constructor(private configuration: Configuration) {} - - /** Builds the headers for a request */ - private _buildHeaders(): HeadersInit { - return { - "Accept": "application/json", - "Content-Type": "application/json", - }; - } - - /** Builds the complete URL to the backend */ - private _buildUrl(path: string): string { - return `${this.configuration.endpoint}${path}`; - } - - /** Creates a request */ - async buildRequest( - requestName: string | null, - method: string, - path: string, - body: any, - ): Promise { - const url = this._buildUrl(path); - const headers = this._buildHeaders(); - const bodyJson = JSON.stringify(body); - const startedAt = performance.now(); - - let response: Response | null = null; - let responseBody: any = null; - - try { - response = await fetch(url, { - method: method, - headers: headers, - body: bodyJson, - }); - - const elapsed = performance.now() - startedAt; - - // Try to parse the response body as JSON - try { - responseBody = await response.json(); - } catch (jsonError) { - responseBody = null; - } - - // Log the request and response - this._logRequest(requestName, url, response, responseBody, elapsed); - - if (response.ok) { - return responseBody; - } else { - // Handle HTTP errors - const errorCode = responseBody?.code || "unknown_error"; - const errorMessage = responseBody?.message || response.statusText || - "Unknown error"; - const errorMeta = responseBody?.meta; - - throw new RivetRequestError( - errorCode, - errorMessage, - response.status, - errorMeta, - ); - } - } catch (error) { - const elapsed = performance.now() - startedAt; - - // Log the error - this._logRequest(requestName, url, response, responseBody, elapsed, true); - - // Re-throw the error - throw error; - } - } - - private _logRequest( - requestName: string | null, - url: string, - response: Response | null, - responseBody: any, - elapsed: number, - isErrorOverride = false, - ) { - let logStr: string; - let isError = false; - - if (requestName != null) { - logStr = `request=${requestName}`; - } else { - logStr = `request=${url}`; - } - - if (response && response.ok && responseBody != null) { - logStr += " result=ok"; - } else if ( - response && - (response.status === 400 || response.status === 500) && - responseBody != null && - "message" in responseBody - ) { - if ("code" in responseBody) { - logStr += ` result=${responseBody.code}`; - } else { - logStr += " result=unknown_error"; - } - if ("module" in responseBody) { - logStr += ` module=${responseBody.module}`; - } - logStr += ` message="${responseBody.message}"`; - if ("meta" in responseBody) { - logStr += ` meta=${JSON.stringify(responseBody.meta)}`; - } - } else { - isError = true; - const statusText = response ? response.statusText : "unknown"; - const status = response ? response.status : "unknown"; - logStr += ` result=${statusText} http_status=${status} response_code=${status}`; - } - - logStr += ` elapsed=${elapsed}ms`; - - if (isError || isErrorOverride) { - Logger.error(logStr); - } else { - Logger.log(logStr); - } - } -} diff --git a/packages/backend/dynamic/sdk/typescript/src/client/configuration.ts b/packages/backend/dynamic/sdk/typescript/src/client/configuration.ts deleted file mode 100644 index f4803eb3..00000000 --- a/packages/backend/dynamic/sdk/typescript/src/client/configuration.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Logger } from "./logger.ts"; - -export interface ConfigurationOpts { - endpoint?: string; - gameVersion?: string; -} - -export class Configuration { - endpoint: string; - gameVersion: string; - - constructor(opts?: ConfigurationOpts) { - this.endpoint = opts?.endpoint ?? - this._getEnvironmentVariable("RIVET_BACKEND_ENDPOINT") ?? - "http://localhost:6420"; - this.gameVersion = opts?.gameVersion ?? - this._getEnvironmentVariable("GAME_VERSION") ?? "unknown"; - Logger.log(`Endpoint: ${this.endpoint}`); - Logger.log(`Game version: ${this.gameVersion}`); - } - - private _getEnvironmentVariable(name: string): string | undefined { - try { - return (globalThis as any).process?.env?.[name]; - } catch { - return undefined; - } - } -} diff --git a/packages/backend/dynamic/sdk/typescript/src/client/error.ts b/packages/backend/dynamic/sdk/typescript/src/client/error.ts deleted file mode 100644 index 9cf7d033..00000000 --- a/packages/backend/dynamic/sdk/typescript/src/client/error.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** Custom error class for API errors */ -export class RivetRequestError extends Error { - public code: string; - public status: number; - public meta?: any; - - constructor(code: string, message: string, status: number, meta?: any) { - super(message); - this.name = "RivetRequestError"; - this.code = code; - this.status = status; - this.meta = meta; - } -} diff --git a/packages/backend/dynamic/sdk/typescript/src/client/logger.ts b/packages/backend/dynamic/sdk/typescript/src/client/logger.ts deleted file mode 100644 index 38012f80..00000000 --- a/packages/backend/dynamic/sdk/typescript/src/client/logger.ts +++ /dev/null @@ -1,13 +0,0 @@ -export class Logger { - static log(message: string) { - console.log(`[Rivet] ${message}`); - } - - static warning(message: string) { - console.warn(`[Rivet] ${message}`); - } - - static error(message: string) { - console.error(`[Rivet] ${message}`); - } -} diff --git a/packages/backend/dynamic/sdk/typescript/tsconfig.json b/packages/backend/dynamic/sdk/typescript/tsconfig.json deleted file mode 100644 index 0490d9c1..00000000 --- a/packages/backend/dynamic/sdk/typescript/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "declaration": true, - "target": "esnext", - "module": "commonjs", - "moduleResolution": "node", - "allowImportingTsExtensions": true - }, - "exclude": [ - "dist", - "node_modules" - ] -} diff --git a/packages/backend/dynamic/sdk/unity/Client/Client.cs b/packages/backend/dynamic/sdk/unity/Client/Client.cs deleted file mode 100644 index 23401202..00000000 --- a/packages/backend/dynamic/sdk/unity/Client/Client.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections; -using UnityEngine; -using UnityEngine.Networking; -using Newtonsoft.Json; - -namespace Rivet -{ - public class Client : MonoBehaviour - { - private Configuration configuration; - - public Client(Configuration configuration) - { - this.configuration = configuration; - } - - public Request BuildRequest(string method, string path, Dictionary body = null) - { - var url = this.BuildUrl(path); - return new Request(this, method, url, body); - } - - private string BuildUrl(string path) - { - return $"{this.configuration.Endpoint}/{path.TrimStart('/')}"; - } - - public IEnumerator SendRequest(Request request, System.Action callback) - { - UnityWebRequest unityRequest = new UnityWebRequest(request.Url, request.Method); - if (request.Body != null) - { - string jsonData = JsonConvert.SerializeObject(request.Body); - byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonData); - unityRequest.uploadHandler = new UploadHandlerRaw(bodyRaw); - unityRequest.downloadHandler = new DownloadHandlerBuffer(); - unityRequest.SetRequestHeader("Content-Type", "application/json"); - } - - yield return unityRequest.SendWebRequest(); - - Response response = new Response(unityRequest.responseCode, unityRequest.GetResponseHeaders(), unityRequest.downloadHandler.text); - callback?.Invoke(response); - } - } -} diff --git a/packages/backend/dynamic/sdk/unity/Client/Request.cs b/packages/backend/dynamic/sdk/unity/Client/Request.cs deleted file mode 100644 index 70fc29a5..00000000 --- a/packages/backend/dynamic/sdk/unity/Client/Request.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; - -namespace Rivet -{ - public class Request - { - public string Method { get; private set; } - public string Url { get; private set; } - public Dictionary Body { get; private set; } - - private Client _client; - - public Request(Client client, string method, string url, Dictionary body = null) - { - this._client = client; - this.Method = method; - this.Url = url; - this.Body = body; - } - - public void Send(System.Action callback) - { - _client.StartCoroutine(_client.SendRequest(this, callback)); - } - } -} diff --git a/packages/backend/dynamic/sdk/unity/Client/Response.cs b/packages/backend/dynamic/sdk/unity/Client/Response.cs deleted file mode 100644 index 26b9dd11..00000000 --- a/packages/backend/dynamic/sdk/unity/Client/Response.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using Newtonsoft.Json; - -namespace Rivet -{ - public class Response - { - public long StatusCode { get; private set; } - public Dictionary Headers { get; private set; } - public string BodyRaw { get; private set; } - public Dictionary Body { get; private set; } - - public Response(long statusCode, Dictionary headers, string bodyRaw) - { - this.StatusCode = statusCode; - this.Headers = headers; - this.BodyRaw = bodyRaw; - - try - { - this.Body = JsonConvert.DeserializeObject>(bodyRaw); - } - catch (JsonException) - { - this.Body = null; - } - } - - public bool IsSuccess() - { - return StatusCode >= 200 && StatusCode < 300; - } - } -} diff --git a/packages/backend/path_resolver/mod.ts b/packages/backend/path_resolver/mod.ts deleted file mode 100644 index 32eb0349..00000000 --- a/packages/backend/path_resolver/mod.ts +++ /dev/null @@ -1,196 +0,0 @@ -export type PathPair = { path: string; isPrefix: boolean }; - -export interface QualifiedPathPair { - module: string; - route: string; - path: PathPair; -} - -/** - * A class to resolve paths to their associated {@link QualifiedPathPair}. - * - * This is used to look up `QualifiedPathPair` values by the requested path. - */ -export class PathResolver { - private readonly exactRoutes: Map = new Map(); - private readonly prefixRoutes: Map = new Map(); - - private _collisions: Set | undefined = undefined; - - public constructor(routes: QualifiedPathPair[]) { - for (const route of routes) { - const { isPrefix, path } = route.path; - if (isPrefix) { - this.prefixRoutes.set(path, route); - } else { - this.exactRoutes.set(path, route); - } - } - } - - /** - * A utility function to ensure that there are no collisions between paths. - * - * This function is used in the constructor to ensure that no path is a child - * of a prefix and no prefix is the ancestor of any path. - * - * @param paths The paths to check for collisions - * - * @throws `Error` if any paths are found to collide - */ - private static getCollisions(routes: QualifiedPathPair[]) { - const bannedPrefixes = new Map(); - - const takenPrefixes = new Map(); - const takenExact = new Map(); - - const issuePaths = new Set(); - - for (const routeInfo of routes) { - const path = routeInfo.path; - - // Make sure it is not exactly the same as any other exact path - const takingRoute = takenExact.get(path.path); - if (takingRoute) { - issuePaths.add(takingRoute); - issuePaths.add(routeInfo); - } - - // Make sure it is not a child of any prefixed path - for (const ancestor of pathAncestors(path.path)) { - const conflictingPrefix = takenPrefixes.get(ancestor); - if (conflictingPrefix) { - issuePaths.add(conflictingPrefix); - issuePaths.add(routeInfo); - } - } - - // If the path is a prefix: - if (path.isPrefix) { - // Make sure it is not an ancestor of any other registered path - // (prefix or exact) - const conflictingChild = bannedPrefixes.get(path.path); - if (conflictingChild) { - issuePaths.add(conflictingChild); - issuePaths.add(routeInfo); - } - - takenPrefixes.set(path.path, routeInfo); - } - - // Mark all ancestors of the path (and the path itself) as banned prefixes - for (const ancestor of pathAncestors(path.path)) { - bannedPrefixes.set(ancestor, routeInfo); - } - - // Disallow exact matches for both prefixe and exact - takenExact.set(path.path, routeInfo); - } - - // if (issuePaths.size > 0) { - // throw new RouteCollisionError(Array.from(issuePaths)); - // } - return issuePaths; - } - - /** - * A function to look up `QualifiedPathPair` values by their path. - * - * @param path The pathname the request was made to - * @returns The `T` value associated with the path, whether that is an exact - * or a prefixed path - */ - public resolve(path: string): QualifiedPathPair | null { - // Try to find an exact match first (generally just an optimization) - if (this.exactRoutes.has(path)) { - return this.exactRoutes.get(path)!; - } - - // Iterate over all ancestors of the path and check if any of the - // ancestors are a registered prefix. - // - // This is speedy enough because the runtime is tied to the length of - // the path, rather than the number of routes. - for (const prefix of pathAncestors(path)) { - if (this.prefixRoutes.has(prefix)) { - return this.prefixRoutes.get(prefix)!; - } - } - - return null; - } - - public get collisions() { - let collisions = this._collisions; - if (!collisions) { - collisions = PathResolver.getCollisions([ - ...this.exactRoutes.values(), - ...this.prefixRoutes.values(), - ]); - this._collisions = collisions; - } - return Array.from(collisions).map((o) => Object.freeze(o)); - } -} - -/** - * Resolves a path to a `QualifiedPathPair` only once. - * - * This is used in Cloudflare workers, where we only need to resolve the path - * once per instance of the runtime, and cannot optimize path lookup by keeping - * the resolver in memory. - * - * ### NOTE: This may return an invalid result if there are multiple routes that match. - * - * @param routes The qualified path routes to match on - * @param path The url path to resolve - */ -export function resolveOnce(routes: QualifiedPathPair[], path: string): QualifiedPathPair | null { - let currentRoute: QualifiedPathPair | null = null; - const cleanPath = path.replace(/\/$/, ""); - - for (const route of routes) { - const { isPrefix, path: routePathWithPossibleSlash } = route.path; - const routePath = routePathWithPossibleSlash.replace(/\/$/, ""); - - if (isPrefix) { - if (cleanPath.startsWith(routePath)) { - currentRoute = route; - break; - } - } else { - if (cleanPath === routePath) { - currentRoute = route; - break; - } - } - } - - return currentRoute; -} - -/** - * A generator utility function that yields all ancestors of a given path. - * - * This includes the inputted path, and is ordered from most deeply nested to - * least deeply nested. - * - * @param path to list the ancestors of - * @yields Valid ancestor paths as strings - */ -export function* pathAncestors(path: string): IterableIterator { - let remaining = path; - while (remaining !== "/" && remaining) { - yield remaining; - - const lastSlash = remaining.lastIndexOf("/"); - if (lastSlash === -1) { - break; - } - remaining = remaining.slice(0, lastSlash); - } - - // At this point, output the root, just in case someone used a prefix of - // "/" - yield "/"; -} diff --git a/packages/backend/runtime/actor/actor.ts b/packages/backend/runtime/actor/actor.ts deleted file mode 100644 index 2933a0b6..00000000 --- a/packages/backend/runtime/actor/actor.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ModuleContextParams } from "../context.ts"; -import { errorToLogEntries } from "../logger.ts"; -import { ActorContext } from "../mod.ts"; -import { ActorInstanceDriver, ScheduleDriver, StorageDriver } from "./driver.ts"; - -/** - * Actor implementation that user-made actors will extend. - */ -export abstract class ActorBase< - Input, - State, -> { - public state!: State; - - public destroyed: boolean = false; - - private backgroundPromises: Promise[] = []; - - public constructor( - private readonly instanceDriver: ActorInstanceDriver, - public readonly storage: StorageDriver, - public readonly schedule: ScheduleDriver, - ) {} - - public abstract initialize(ctx: ActorContext, input: Input): State | Promise; - - /** - * Runs a promise in the background. - * - * This allows the actor runtime to ensure that a promise completes while - * returning from an RPC request early. - */ - protected runInBackground(ctx: ActorContext, promise: Promise) { - // TODO: Should we force save the state? - // Add logging to promise and make it non-failable - const nonfailablePromise = promise - .then(() => ctx.log.trace("background promise complete")) - .catch((err) => ctx.log.error("background promise failed", ...errorToLogEntries("error", err))); - this.instanceDriver.runInBackground(nonfailablePromise); - } - - /** - * Forces the state to get saved. - * - * This is helpful if running a long task that may fail later or a background - * job that updates the state. - */ - public async forceSaveState() { - await this.instanceDriver.forceSaveState(); - } -} diff --git a/packages/backend/runtime/actor/driver.ts b/packages/backend/runtime/actor/driver.ts deleted file mode 100644 index 4402151d..00000000 --- a/packages/backend/runtime/actor/driver.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Trace } from "../mod.ts"; - -export interface CreateOpts { - moduleName: string; - actorName: string; - instanceName: string; - input: unknown; - trace: Trace; -} - -export interface CallOpts { - moduleName: string; - actorName: string; - instanceName: string; - fn: string; - request: unknown; - trace: Trace; -} - -export interface GetOrCreateAndCallOpts { - moduleName: string; - actorName: string; - instanceName: string; - input: unknown; - fn: string; - request: unknown; - trace: Trace; -} - -export interface ExistsOpts { - moduleName: string; - actorName: string; - instanceName: string; -} - -export interface DestroyOpts { - moduleName: string; - actorName: string; - instanceName: string; -} - -export interface ActorDriver { - createActor(opts: CreateOpts): Promise; - callActor(opts: CallOpts): Promise; - getOrCreateAndCallActor(opts: GetOrCreateAndCallOpts): Promise; - actorExists(opts: ExistsOpts): Promise; - destroyActor(opts: DestroyOpts): Promise; -} - -export interface ActorInstanceDriver { - runInBackground(promise: Promise): void; - forceSaveState(): Promise; -} - -export interface StorageDriver { - get(key: string): Promise; - put(key: string, value: V): Promise; - delete(key: string): Promise; -} - -export interface ScheduleDriver { - after(duration: number, fn: string, request: unknown): void; - at(timestamp: number, fn: string, request: unknown): void; - __inspect(): Promise; -} diff --git a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/driver.ts b/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/driver.ts deleted file mode 100644 index 194c0609..00000000 --- a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/driver.ts +++ /dev/null @@ -1,85 +0,0 @@ -// This file is only imported when the runtime is `cloudflare_workers_platform`. - -import { Config, Environment } from "../../../mod.ts"; -import { ActorDriver, CallOpts, CreateOpts, DestroyOpts, ExistsOpts, GetOrCreateAndCallOpts } from "../../driver.ts"; -import { handleRpcOutput } from "./rpc_output.ts"; -export { buildGlobalDurableObjectClass } from "./global_durable_object.ts"; - -export class CloudflareDurableObjectsActorDriver implements ActorDriver { - public constructor(public readonly env: Environment, public readonly config: Config) {} - - async createActor(opts: CreateOpts): Promise { - const stub = this.getStub(opts.moduleName, opts.actorName, opts.instanceName); - return handleRpcOutput( - await stub.init({ - module: opts.moduleName, - actor: opts.actorName, - instance: opts.instanceName, - input: opts.input, - trace: opts.trace, - }), - ); - } - - async callActor(opts: CallOpts): Promise { - const stub = this.getStub(opts.moduleName, opts.actorName, opts.instanceName); - - // HACK: Fixes "Type instantiation is excessively deep and possibly infinite." - return handleRpcOutput( - await stub.callRpc({ - fn: opts.fn, - request: opts.request, - trace: opts.trace, - }), - ); - } - - async getOrCreateAndCallActor(opts: GetOrCreateAndCallOpts): Promise { - const stub = this.getStub(opts.moduleName, opts.actorName, opts.instanceName); - - // HACK: Fixes "Type instantiation is excessively deep and possibly infinite." - return handleRpcOutput( - await stub.getOrCreateAndCallRpc({ - init: { - module: opts.moduleName, - actor: opts.actorName, - instance: opts.instanceName, - input: opts.input, - trace: opts.trace, - }, - fn: opts.fn, - request: opts.request, - trace: opts.trace, - }), - ); - } - - async actorExists(opts: ExistsOpts): Promise { - // TODO: Mark the actor base as destroyed - const stub = this.getStub(opts.moduleName, opts.actorName, opts.instanceName); - return await stub.initialized(); - } - - async destroyActor(opts: DestroyOpts): Promise { - const stub = this.getStub(opts.moduleName, opts.actorName, opts.instanceName); - await stub.destroy(); - } - - private getStub( - moduleName: string, - actorName: string, - instanceName: string, - ): any { - // TODO: Fix Deno.env.get hack. This does not return a string, it returns an object. - const ns = this.env.get("__GLOBAL_DURABLE_OBJECT") as any; - - const module = this.config.modules[moduleName]!; - const actor = module.actors[actorName]!; - const name = `%%${module.storageAlias}%%${actor.storageAlias}%%${instanceName}`; - const id = ns.idFromName(name); - - return ns.get(id); - } -} - -export { CloudflareDurableObjectsActorDriver as ActorDriver }; diff --git a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/global_durable_object.ts b/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/global_durable_object.ts deleted file mode 100644 index 2655cfb4..00000000 --- a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/global_durable_object.ts +++ /dev/null @@ -1,485 +0,0 @@ -import { DurableObject } from "cloudflare:workers"; -import { CloudflareDurableObjectsStorage } from "./storage.ts"; -import { CloudflareDurableObjectsSchedule } from "./schedule.ts"; -import { ActorBase } from "../../actor.ts"; -import { - ActorContext, - appendTraceEntry, - Config, - Environment, - ModuleContextParams, - Runtime, - Trace, -} from "../../../mod.ts"; -import { RegistryCallMap } from "../../../proxy.ts"; -import { ActorDriver } from "./driver.ts"; -import { newTrace } from "../../../trace.ts"; -import { errorToLogEntries, log } from "../../../logger.ts"; -import { captureRpcOutput, RpcOutput } from "./rpc_output.ts"; -import { CloudflareDurableObjectsInstance } from "./instance.ts"; -import { serializeError } from "../../../error.ts"; - -const KEYS = { - META: { - MODULE: "meta:module", - ACTOR: "meta:actor", - CREATED_AT: "meta:created_at", - }, - SCHEDULE: { - SCHEDULE: "schedule:schedule", - EVENT_PREFIX: "schedule:event:", - event(id: string): string { - return `${this.EVENT_PREFIX}${id}`; - }, - alarmError(fn: string): string { - return `schedule:alarm_error:${fn}`; - }, - }, - STATE: "state", -}; - -interface ScheduleState { - // Sorted by timestamp asc - events: ScheduleIndexEvent[]; -} - -interface ScheduleIndexEvent { - timestamp: number; - eventId: string; -} - -interface ScheduleEvent { - timestamp: number; - fn: string; - request: unknown; -} - -// MARK: TODO: -interface InitOpts { - module: string; - actor: string; - instance: string; - input: any; - trace: Trace; - ignoreAlreadyInitialized?: boolean; -} - -interface GetOrCreateAndCallOpts { - init: InitOpts; - fn: string; - request: unknown; - trace: Trace; -} - -interface CallRpcOpts { - fn: string; - request: unknown; - trace: Trace; -} - -/* - * __GlobalDurableObject type used for referencing an instance of the class. - */ -export interface __GlobalDurableObjectT extends DurableObject { - // ALlow accessing from ActorInstanceDriver - readonly publicCtx: DurableObjectState; - - // Called over network - init(opts: InitOpts): Promise>; - initialized(): Promise; - destroy(): Promise; - getOrCreateAndCallRpc(opts: GetOrCreateAndCallOpts): Promise>; - callRpc({ fn, request }: CallRpcOpts): Promise>; - - // Called internally - scheduleEvent(timestamp: number, fn: string, request: unknown): Promise; - alarm(): Promise; - get storage(): DurableObjectStorage; - forceSaveState(): Promise; -} - -/** - * Actor data & config read from the actor state. - */ -interface ActorMeta { - moduleName: string; - actorName: string; -} - -/** - * Generate a __GlobalDurableObject class that has access to the current config. - * - * We have to pass the config like this since the config's import is - * dynamically generated in entrypoint.ts. - * - * Doing this instead of setting a static `__GlobalDurableObject.config = xxxx` - * is better since it ensures that you _can't_ create an instance of - * __GlobalDurableObject that doesn't have an associated config. - */ -export function buildGlobalDurableObjectClass( - config: Config, - dependencyCaseConversionMap: RegistryCallMap, - actorDependencyCaseConversionMap: RegistryCallMap, -) { - class __GlobalDurableObject extends DurableObject implements __GlobalDurableObjectT { - private runtime: Runtime; - - private actorInstance?: ActorBase; - - /** This will be incremented on destroy. Useful for checking if there was a race condition between a task & destroy. */ - private generation: number = 0; - - constructor(ctx: DurableObjectState, env: unknown) { - super(ctx, env); - - const envAdapter: Environment = { - get(key: string): string | undefined { - return (env as any)[key]; - }, - }; - - this.runtime = new Runtime( - envAdapter, - config, - new ActorDriver(envAdapter, config), - dependencyCaseConversionMap, - actorDependencyCaseConversionMap, - ); - } - - get publicCtx(): DurableObjectState { - return this.ctx; - } - - /** - * Reads the metadata related to this actor from storage. - * - * This data is set in `init`. - */ - async getMeta(): Promise { - // Create actor instance - const storageRes = await this.ctx.storage.get([KEYS.META.MODULE, KEYS.META.ACTOR, KEYS.STATE]); - const moduleName = storageRes.get(KEYS.META.MODULE); - const actorName = storageRes.get(KEYS.META.ACTOR); - const state = storageRes.get(KEYS.STATE); - if (moduleName == undefined || actorName == undefined) throw new Error("actor not initialized"); - if (state == undefined) throw Error("actor state not initiated"); - - return { moduleName, actorName }; - } - - private async constructActor( - context: ActorContext, - meta: ActorMeta, - ): Promise> { - const generation = this.generation; - - // Actor already running - if (this.actorInstance) return this.actorInstance; - - // Get actor config - if (!(meta.moduleName in config.modules)) throw new Error(`module not found: ${meta.moduleName}`); - const moduleConfig = config.modules[meta.moduleName]!; - if (!(meta.actorName in moduleConfig.actors)) { - throw new Error(`actor not found: ${meta.moduleName}.${meta.actorName}`); - } - const actorConfig = moduleConfig.actors[meta.actorName]!; - - // Read state - const state = await this.ctx.storage.get(KEYS.STATE); - this.assertGeneration(generation); - if (state != undefined && typeof state != "string") { - throw new Error( - `actor state corrupt, actor state is of type string (found ${typeof state}. this actor needs to be manually reset.`, - ); - } - - // TODO: use ctx.waitUntil for all calls - // Construct actor - const actor = context.runBlockSync(() => { - return new (actorConfig.actor)( - new CloudflareDurableObjectsInstance(this), - new CloudflareDurableObjectsStorage(this), - new CloudflareDurableObjectsSchedule(this), - ); - }); - actor.state = state != undefined ? JSON.parse(state) : undefined; - this.actorInstance = actor; - - return actor; - } - - private createActorContext(moduleName: string, actorName: string, trace: Trace): ActorContext { - // Build context - const module = config.modules[moduleName]!; - const context = new ActorContext( - this.runtime, - trace, - moduleName, - module.db?.schemaName, - actorName, - dependencyCaseConversionMap, - actorDependencyCaseConversionMap, - ); - - return context; - } - - async init(opts: InitOpts): Promise> { - const context = this.createActorContext( - opts.module, - opts.actor, - appendTraceEntry(opts.trace, { actorInitialize: { module: opts.module, actor: opts.actor } }), - ); - return await captureRpcOutput(context, async () => { - this.initInner(context, opts); - }); - } - - async initInner(context: ActorContext, opts: InitOpts): Promise<{ meta: ActorMeta }> { - const generation = this.generation; - - // Check if already initialized - if (await this.initialized()) { - if (opts.ignoreAlreadyInitialized) { - return { - meta: await this.getMeta(), - }; - } else { - throw new Error("already initialized"); - } - } - this.assertGeneration(generation); - - // Store metadata - await this.ctx.storage.put({ - [KEYS.META.MODULE]: opts.module, - [KEYS.META.ACTOR]: opts.actor, - [KEYS.META.CREATED_AT]: Date.now(), - }); - this.assertGeneration(generation); - - // Build initial state - const actor = await this.constructActor(context, { - moduleName: opts.module, - actorName: opts.actor, - }); - this.assertGeneration(generation); - const state = await context.runBlock(async () => { - let state = actor.initialize(context, opts.input); - if (state instanceof Promise) state = await state; - return state; - }); - this.assertGeneration(generation); - actor.state = state; - await this.ctx.storage.put(KEYS.STATE, JSON.stringify(state)); - this.assertGeneration(generation); - - return { - meta: { - moduleName: opts.module, - actorName: opts.actor, - }, - }; - } - - async initialized(): Promise { - return await this.ctx.storage.get(KEYS.META.MODULE) != undefined; - } - - async destroy(): Promise { - this.generation++; - this.actorInstance = undefined; - await this.ctx.storage.deleteAll(); - await this.ctx.storage.deleteAlarm(); - await this.ctx.storage.sync(); - } - - async getOrCreateAndCallRpc(opts: GetOrCreateAndCallOpts): Promise> { - const context = this.createActorContext( - opts.init.module, - opts.init.actor, - appendTraceEntry(opts.trace, { - actorGetOrCreateAndCall: { module: opts.init.module, actor: opts.init.actor, fn: opts.fn }, - }), - ); - return await captureRpcOutput(context, async () => { - return this.getOrCreateAndCallRpcInner(context, opts); - }); - } - - async getOrCreateAndCallRpcInner( - context: ActorContext, - opts: GetOrCreateAndCallOpts, - ): Promise { - const generation = this.generation; - - const { meta } = await this.initInner(context, { - ...opts.init, - ignoreAlreadyInitialized: true, - }); - this.assertGeneration(generation); - - return await this.callRpcInner(context, meta, { fn: opts.fn, request: opts.request, trace: opts.trace }); - } - - async callRpc(opts: CallRpcOpts): Promise> { - const meta = await this.getMeta(); - - const context = this.createActorContext( - meta.moduleName, - meta.actorName, - appendTraceEntry(opts.trace, { actorCall: { module: meta.moduleName, actor: meta.actorName, fn: opts.fn } }), - ); - - return await captureRpcOutput(context, async () => { - return this.callRpcInner(context, meta, opts); - }); - } - - async callRpcInner(context: ActorContext, meta: ActorMeta, opts: CallRpcOpts): Promise { - const generation = this.generation; - - const actor = await this.constructActor(context, meta); - this.assertGeneration(generation); - - try { - // Call fn - const callRes = await context.runBlock(async () => { - let callRes = (actor as any)[opts.fn](context, opts.request); - if (callRes instanceof Promise) callRes = await callRes; - return callRes; - }); - return callRes; - } finally { - this.assertGeneration(generation); - - // Update state - await this.ctx.storage.put(KEYS.STATE, JSON.stringify(actor.state)); - this.assertGeneration(generation); - } - } - - async scheduleEvent(timestamp: number, fn: string, request: unknown): Promise { - const generation = this.generation; - - // Save event - const eventId = crypto.randomUUID(); - await this.ctx.storage.put(KEYS.SCHEDULE.event(eventId), { - timestamp, - fn, - request, - }); - this.assertGeneration(generation); - - // Read index - const schedule: ScheduleState = await this.ctx.storage.get(KEYS.SCHEDULE.SCHEDULE) ?? { events: [] }; - this.assertGeneration(generation); - - // Insert event in to index - const newEvent: ScheduleIndexEvent = { timestamp, eventId }; - const insertIndex = schedule.events.findIndex((x) => x.timestamp > newEvent.timestamp); - if (insertIndex === -1) { - schedule.events.push(newEvent); - } else { - schedule.events.splice(insertIndex, 0, newEvent); - } - - // Write new index - await this.ctx.storage.put(KEYS.SCHEDULE.SCHEDULE, schedule); - this.assertGeneration(generation); - - // Update alarm if: - // - this is the newest event (i.e. at beginning of array) or - // - this is the only event (i.e. the only event in the array) - if (insertIndex == 0 || schedule.events.length == 1) { - await this.ctx.storage.setAlarm(newEvent.timestamp); - } - } - - override async alarm(): Promise { - const generation = this.generation; - const now = Date.now(); - - // Read index - const scheduleIndex: ScheduleState = await this.ctx.storage.get(KEYS.SCHEDULE.SCHEDULE) ?? { events: [] }; - this.assertGeneration(generation); - - // Remove events from schedule - const runIndex = scheduleIndex.events.findIndex((x) => x.timestamp < now); - const scheduleIndexEvents = scheduleIndex.events.splice(0, runIndex + 1); - - // Find events to trigger - const eventKeys = scheduleIndexEvents.map((x) => KEYS.SCHEDULE.event(x.eventId)); - const scheduleEvents = await this.ctx.storage.get(eventKeys); - this.assertGeneration(generation); - await this.ctx.storage.delete(eventKeys); - this.assertGeneration(generation); - - // Write new schedule - await this.ctx.storage.put(KEYS.SCHEDULE.SCHEDULE, scheduleIndex); - this.assertGeneration(generation); - - // Set alarm for next event - if (scheduleIndex.events.length > 0) { - await this.ctx.storage.setAlarm(scheduleIndex.events[0]!.timestamp); - this.assertGeneration(generation); - } - - // Iterate by event key in order to ensure we call the events in order - for (const eventKey of eventKeys) { - const event = scheduleEvents.get(eventKey)!; - try { - // Call function - const res = await this.callRpc({ - fn: event.fn, - request: event.request, - trace: newTrace({ actorSchedule: {} }), - }); - - // Write error if needed - if ("error" in res.result) { - await this.ctx.storage.put(KEYS.SCHEDULE.alarmError(event.fn), { - error: res.result.error, - logs: res.logs, - timestamp: now, - }); - } - } catch (err) { - log("error", "failed to run scheduled event", ["fn", event.fn], ...errorToLogEntries("error", err)); - - // Write internal error - await this.ctx.storage.put(KEYS.SCHEDULE.alarmError(event.fn), { - error: serializeError(err), - timestamp: now, - }); - } - this.assertGeneration(generation); - } - } - - /** - * Make storage publicly accessible for use in `StorageDriver`. - */ - public get storage(): DurableObjectStorage { - return this.ctx.storage; - } - - async forceSaveState(): Promise { - if (this.actorInstance) { - await this.ctx.storage.put(KEYS.STATE, JSON.stringify(this.actorInstance.state)); - } - } - - /** - * Checks if the actor was destroyed by comparing the previous generation. - * - * Should be called after any async call. - */ - private assertGeneration(generation: number) { - if (this.generation != generation) throw new Error("actor destroyed"); - } - } - - return __GlobalDurableObject; -} diff --git a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/instance.ts b/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/instance.ts deleted file mode 100644 index a5d83eb0..00000000 --- a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/instance.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ActorInstanceDriver } from "../../driver.ts"; -import { __GlobalDurableObjectT } from "./global_durable_object.ts"; - -export class CloudflareDurableObjectsInstance implements ActorInstanceDriver { - constructor(private readonly durableObject: __GlobalDurableObjectT) {} - - runInBackground(promise: Promise): void { - this.durableObject.publicCtx.waitUntil(promise); - } - - async forceSaveState(): Promise { - this.durableObject.forceSaveState(); - } -} diff --git a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/rpc_output.ts b/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/rpc_output.ts deleted file mode 100644 index 868c7f85..00000000 --- a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/rpc_output.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { LogEntry, LogLevel, logRaw } from "../../../logger.ts"; -import { ActorContext, deserializeError, SerializedErrorType, serializeError, UnreachableError } from "../../../mod.ts"; - -/** - * Returned from any RPC call to a durable object. - */ -export interface RpcOutput { - result: RpcResult; - logs: [LogLevel, LogEntry[]][]; -} - -export type RpcResult = { ok: T } | { error: SerializedErrorType }; - -/** - * Capture logs & output and send it in RPC response. - */ -export async function captureRpcOutput(ctx: ActorContext, fn: () => Promise): Promise> { - let finished = false; - - // Capture logs - const logs: [LogLevel, LogEntry[]][] = []; - ctx.log.addListener((level, entry) => { - if (!finished) { - logs.push([level, entry]); - } - }); - - // Run function & capture logs - let result: RpcResult; - try { - const ok = await fn(); - result = { ok }; - } catch (error) { - result = { - error: serializeError(error), - }; - } - finished = true; - - // Build output - return { - result, - logs, - }; -} - -/** - * Re-logs & re-throws errors from an RPC call. - */ -export function handleRpcOutput(output: RpcOutput): T { - // Re-log all logs that were logged on the durable object - // - // We do this bc we currently can't collect logs on a DO with the tail worker - for (const [logLevel, logEntries] of output.logs) { - logRaw(logLevel, ...logEntries); - } - - // Handle result - if ("ok" in output.result) { - return output.result.ok; - } else if ("error" in output.result) { - throw deserializeError(output.result.error); - } else { - throw new UnreachableError(output.result); - } -} diff --git a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/schedule.ts b/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/schedule.ts deleted file mode 100644 index 3b3f6f1f..00000000 --- a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/schedule.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ScheduleDriver } from "../../driver.ts"; -import { __GlobalDurableObjectT } from "./global_durable_object.ts"; - -export class CloudflareDurableObjectsSchedule implements ScheduleDriver { - constructor(private readonly durableObject: __GlobalDurableObjectT) {} - - after(duration: number, fn: string, request: unknown): void { - this.durableObject.publicCtx.waitUntil(this.durableObject.scheduleEvent(Date.now() + duration, fn, request)); - } - at(timestamp: number, fn: string, request: unknown): void { - this.durableObject.publicCtx.waitUntil(this.durableObject.scheduleEvent(timestamp, fn, request)); - } - - async __inspect(): Promise { - const keys = await this.durableObject.storage.list({ prefix: "schedule:" }); - const alarm = await this.durableObject.storage.getAlarm(); - return { - keys: Object.fromEntries(keys), - alarm, - }; - } -} diff --git a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/storage.ts b/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/storage.ts deleted file mode 100644 index 22a7aecf..00000000 --- a/packages/backend/runtime/actor/drivers/cloudflare_durable_objects/storage.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { StorageDriver } from "../../driver.ts"; -import { __GlobalDurableObjectT } from "./global_durable_object.ts"; - -export class CloudflareDurableObjectsStorage implements StorageDriver { - constructor(private readonly durableObject: __GlobalDurableObjectT) {} - - async get(key: string): Promise { - const jsonRaw = await this.durableObject.storage.get(buildStorageKey(key)); - if (jsonRaw) { - return await JSON.parse(jsonRaw); - } else { - return undefined; - } - } - async put(key: string, value: V): Promise { - await this.durableObject.storage.put(key, JSON.stringify(value)); - } - async delete(key: string): Promise { - await this.durableObject.storage.delete(buildStorageKey(key)); - } -} - -/** - * Build a key from the actor's API that's namespaced to the storage. - * - * This allows us to store metadata on different keys. - */ -function buildStorageKey(key: string): string { - return `storage:${key}`; -} diff --git a/packages/backend/runtime/actor/drivers/memory/driver.ts b/packages/backend/runtime/actor/drivers/memory/driver.ts deleted file mode 100644 index a9a24796..00000000 --- a/packages/backend/runtime/actor/drivers/memory/driver.ts +++ /dev/null @@ -1,243 +0,0 @@ -// This file is only imported when the runtime is `deno` -// -import { ModuleContextParams } from "../../../context.ts"; -import { ActorContext, appendTraceEntry, Config, Environment, Runtime, Trace } from "../../../mod.ts"; -import { RegistryCallMap } from "../../../proxy.ts"; -import { ActorBase } from "../../actor.ts"; -import { ActorDriver, CallOpts, CreateOpts, DestroyOpts, ExistsOpts, GetOrCreateAndCallOpts } from "../../driver.ts"; -import { MemoryInstance } from "./instance.ts"; -import { MemorySchedule } from "./schedule.ts"; -import { MemoryStorage } from "./storage.ts"; - -export interface ActorRecord { - moduleName: string; - actorName: string; - instanceName: string; - state?: string; - storage: Map; - timeoutIds: Set; -} - -export interface ActorInstance { - actor: ActorBase; - createdAt: number; - accessedAt: number; -} - -export class MemoryActorDriver implements ActorDriver { - private runtime: Runtime; - private encoder = new TextEncoder(); - - /** - * List of persistent actor data. This is the data that is durable and - * outlives actor instances. - * - * Running actors are stored in `actorInstances`. - */ - private actorRecords = new Map(); - - /** - * List of all actors that are currently running. These are instantiated on - * demand with `getOrCreateActorInstance`. - * - * This is always a subset of `actorRegistry`. - */ - private actorInstances = new Map(); - - public constructor( - public readonly env: Environment, - public readonly config: Config, - private dependencyCaseConversionMap: RegistryCallMap, - private actorDependencyCaseConversionMap: RegistryCallMap, - ) { - this.runtime = new Runtime( - this.env, - this.config, - this, - this.dependencyCaseConversionMap, - this.actorDependencyCaseConversionMap, - ); - } - - async createActor({ moduleName, actorName, instanceName, input, trace }: CreateOpts): Promise { - const id = await this.getId(moduleName, actorName, instanceName); - - // Ensure doesn't already exist - if (this.actorRecords.has(await this.getId(moduleName, actorName, instanceName))) { - throw new Error("actor already created"); - } - - // Build drivers - const actorRecord: ActorRecord = { - moduleName, - actorName, - instanceName, - state: undefined, - storage: new Map(), - timeoutIds: new Set(), - }; - - // TODO: cache init actor in memory - // Run actor function - const { actor } = await this.getOrCreateActorInstance(actorRecord, true); - const context = this.createActorContext( - moduleName, - actorName, - appendTraceEntry(trace, { actorInitialize: { module: moduleName, actor: actorName } }), - ); - let initRes = actor.initialize(context, input); - if (initRes instanceof Promise) initRes = await initRes; - - // Sanitize state & save state - const stateString = JSON.stringify(initRes); - actor.state = JSON.parse(stateString); - actorRecord.state = stateString; - - // Save actor - this.actorRecords.set(id, actorRecord); - } - - async callActor({ moduleName, actorName, instanceName, fn, request, trace }: CallOpts): Promise { - const actorRecord = await this.getRecord(moduleName, actorName, instanceName); - const { actor } = await this.getOrCreateActorInstance(actorRecord, false); - - const context = this.createActorContext( - moduleName, - actorName, - appendTraceEntry(trace, { actorCall: { module: moduleName, actor: actorName, fn } }), - ); - - // Run actor function - let callRes = (actor as any)[fn](context, request); - if (callRes instanceof Promise) callRes = await callRes; - - // Sanitize state & save state - const stateString = JSON.stringify(actor.state); - actor.state = JSON.parse(stateString); - actorRecord.state = stateString; - - return callRes; - } - - async getOrCreateAndCallActor( - { moduleName, actorName, instanceName, input, fn, request, trace }: GetOrCreateAndCallOpts, - ): Promise { - // Create actor if needed - if (!this.actorRecords.has(await this.getId(moduleName, actorName, instanceName))) { - await this.createActor({ moduleName, actorName, instanceName, input, trace }); - } - - // Call actor - const callRes = await this.callActor({ moduleName, actorName, instanceName, fn, request, trace }); - - return callRes; - } - - async actorExists({ moduleName, actorName, instanceName }: ExistsOpts): Promise { - return this.actorRecords.has(await this.getId(moduleName, actorName, instanceName)); - } - - async destroyActor({ moduleName, actorName, instanceName }: DestroyOpts): Promise { - // TODO: Does not handle cancelling timeouts correctly - const id = await this.getId(moduleName, actorName, instanceName); - - // Delete record - const actorRecord = this.actorRecords.get(id); - if (actorRecord) { - // Clear timeouts - for (const id of actorRecord.timeoutIds) { - clearTimeout(id); - } - - this.actorRecords.delete(id); - } - - // Delete instance - const actorInstance = this.actorInstances.get(id); - if (actorInstance) { - actorInstance.actor.destroyed = true; - this.actorInstances.delete(id); - } - } - - private async getId(moduleName: string, actorName: string, instanceName: string) { - const module = this.config.modules[moduleName]!; - const actor = module.actors[actorName]!; - const name = `%%${module.storageAlias}%%${actor.storageAlias}%%${instanceName}`; - return await this.hash(name); - } - - private async getRecord(moduleName: string, actorName: string, instanceName: string): Promise { - const record = this.actorRecords.get(await this.getId(moduleName, actorName, instanceName)); - if (!record) throw new Error("Actor not created"); - return record; - } - - /** - * Gets a running instance or creates one on demand. - * - * `init` is true if calling `initialize` and `state` is undefined. - */ - private async getOrCreateActorInstance(record: ActorRecord, init: boolean): Promise { - // Create actor instance - if (!init && record.state === undefined) throw Error("actor state not initiated"); - - // Get actor config - if (!(record.moduleName in this.config.modules)) throw new Error("module not found"); - const moduleConfig = this.config.modules[record.moduleName]!; - if (!(record.actorName in moduleConfig.actors)) throw new Error("actor not found"); - const actorConfig = moduleConfig.actors[record.actorName]!; - - // Run actor function - const actorId = await this.getId(record.moduleName, record.actorName, record.instanceName); - if (this.actorInstances.has(actorId)) { - // Instance exists - - const instance = this.actorInstances.get(actorId)!; - instance.accessedAt = Date.now(); - return instance; - } else { - // New instance - - const actor = new (actorConfig.actor)( - new MemoryInstance(this, record), - new MemoryStorage(record), - new MemorySchedule(this, record), - ); - actor.state = record.state ? JSON.parse(record.state!) : undefined; - const instance = { - actor, - createdAt: Date.now(), - accessedAt: Date.now(), - }; - this.actorInstances.set(actorId, instance); - return instance; - } - } - - private createActorContext(moduleName: string, actorName: string, trace: Trace): ActorContext { - // Build context - const module = this.config.modules[moduleName]!; - const context = new ActorContext( - this.runtime, - trace, - moduleName, - module.db?.schemaName, - actorName, - this.dependencyCaseConversionMap, - this.actorDependencyCaseConversionMap, - ); - - return context; - } - - private async hash(input: string) { - const data = this.encoder.encode(input); - const hash = await crypto.subtle.digest("SHA-256", data); - const hashString = Array.from(new Uint8Array(hash)).map((b) => b.toString(16).padStart(2, "0")).join(""); - - return hashString; - } -} - -export { MemoryActorDriver as ActorDriver }; diff --git a/packages/backend/runtime/actor/drivers/memory/instance.ts b/packages/backend/runtime/actor/drivers/memory/instance.ts deleted file mode 100644 index b80be79f..00000000 --- a/packages/backend/runtime/actor/drivers/memory/instance.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ActorInstanceDriver } from "../../driver.ts"; -import { ActorRecord, MemoryActorDriver } from "./driver.ts"; - -export class MemoryInstance implements ActorInstanceDriver { - constructor(private readonly driver: MemoryActorDriver, private readonly actorRecord: ActorRecord) {} - - runInBackground(_promise: Promise): void { - // No action needed - } - - async forceSaveState(): Promise { - // TODO: - } -} diff --git a/packages/backend/runtime/actor/drivers/memory/schedule.ts b/packages/backend/runtime/actor/drivers/memory/schedule.ts deleted file mode 100644 index c9153a7f..00000000 --- a/packages/backend/runtime/actor/drivers/memory/schedule.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { newTrace } from "../../../mod.ts"; -import { ScheduleDriver } from "../../driver.ts"; -import { ActorRecord, MemoryActorDriver } from "./driver.ts"; - -export class MemorySchedule implements ScheduleDriver { - constructor(private readonly driver: MemoryActorDriver, private readonly actorRecord: ActorRecord) {} - - after(duration: number, fn: string, request: unknown): void { - this._setTimeout(duration, fn, request); - } - - at(timestamp: number, fn: string, request: unknown): void { - this._setTimeout(timestamp - Date.now(), fn, request); - } - - _setTimeout(duration: number, fn: string, request: unknown): void { - const timeoutId = setTimeout(() => { - this.actorRecord.timeoutIds.delete(timeoutId); - this.driver.callActor({ - moduleName: this.actorRecord.moduleName, - actorName: this.actorRecord.actorName, - instanceName: this.actorRecord.instanceName, - fn, - request, - trace: newTrace({ actorSchedule: {} }), - }); - }, duration); - this.actorRecord.timeoutIds.add(timeoutId); - } - - async __inspect(): Promise { - return {}; - } -} diff --git a/packages/backend/runtime/actor/drivers/memory/storage.ts b/packages/backend/runtime/actor/drivers/memory/storage.ts deleted file mode 100644 index 1bd1cd44..00000000 --- a/packages/backend/runtime/actor/drivers/memory/storage.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { StorageDriver } from "../../driver.ts"; -import { ActorRecord } from "./driver.ts"; - -export class MemoryStorage implements StorageDriver { - constructor(private readonly actorRecord: ActorRecord) {} - - async get(key: string): Promise { - const value = this.actorRecord.storage.get(key); - if (value) return JSON.parse(value); - else return undefined; - } - - async put(key: string, value: V): Promise { - this.actorRecord.storage.set(key, JSON.stringify(value)); - } - - async delete(key: string): Promise { - this.actorRecord.storage.delete(key); - throw new Error("Method not implemented."); - } -} diff --git a/packages/backend/runtime/actor/proxy.ts b/packages/backend/runtime/actor/proxy.ts deleted file mode 100644 index 7cd83b4f..00000000 --- a/packages/backend/runtime/actor/proxy.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { LogEntry, spreadObjectToLogEntries } from "../logger.ts"; -import { ActorContext, appendTraceEntry, Runtime, Trace } from "../mod.ts"; -import { ActorDriver } from "./driver.ts"; - -// Returned from ctx.actors.xxx -export class ActorProxy { - constructor( - private runtime: Runtime, - private driver: ActorDriver, - private moduleName: string, - private actorName: string, - private trace: Trace, - ) {} - - /** - * Build actor ctx. This is primarily for internal use, this will not be - * passed to a user. There will be another actor ctx built inside the actor - * driver itself that will be used within the actor itself. - */ - private createActorContext(trace: Trace): ActorContext { - const module = this.runtime.config.modules[this.moduleName]!; - const context = new ActorContext( - this.runtime, - trace, - this.moduleName, - module.db?.schemaName, - this.actorName, - // These aren't used so we don't need to provide them - {}, - {}, - ); - - return context; - } - - public async create(instanceName: string, input: Input): Promise { - const ctx = this.createActorContext( - appendTraceEntry(this.trace, { actorInitialize: { module: this.moduleName, actor: this.actorName } }), - ); - - const start = performance.now(); - if (this.runtime.env.get("_BACKEND_LOG_ACTOR_BODY") == "1") { - ctx.log.debug("create actor", ...spreadObjectToLogEntries("input", input)); - } else { - ctx.log.debug("create actor"); - } - - await this.driver.createActor({ - moduleName: this.moduleName, - actorName: this.actorName, - instanceName, - input, - trace: this.trace, - }); - - const duration = Math.ceil(performance.now() - start); - ctx.log.debug("actor created", ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : [])); - } - - public async call(instanceName: string, fn: string, request: Request): Promise { - const ctx = this.createActorContext( - appendTraceEntry(this.trace, { actorCall: { module: this.moduleName, actor: this.actorName, fn } }), - ); - - const start = performance.now(); - if (this.runtime.env.get("_BACKEND_LOG_ACTOR_BODY") == "1") { - ctx.log.debug("actor request", ["instance", instanceName], ...spreadObjectToLogEntries("request", request)); - } else { - ctx.log.debug("actor request", ["instance", instanceName]); - } - - const response = await this.driver.callActor({ - moduleName: this.moduleName, - actorName: this.actorName, - instanceName, - fn, - request, - trace: this.trace, - }) as Response; - - const duration = Math.ceil(performance.now() - start); - if (this.runtime.env.get("_BACKEND_LOG_ACTOR_BODY") == "1") { - ctx.log.debug( - "actor response", - ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : []), - ...spreadObjectToLogEntries("response", response), - ); - } else { - ctx.log.debug("actor response", ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : [])); - } - - return response; - } - - public async getOrCreateAndCall( - instanceName: string, - input: Input, - fn: string, - request: Request, - ): Promise { - const ctx = this.createActorContext( - appendTraceEntry(this.trace, { actorGetOrCreateAndCall: { module: this.moduleName, actor: this.actorName, fn } }), - ); - - const start = performance.now(); - if (this.runtime.env.get("_BACKEND_LOG_ACTOR_BODY") == "1") { - ctx.log.debug( - "actor request", - ["instance", instanceName], - ...spreadObjectToLogEntries("input", input), - ...spreadObjectToLogEntries("request", request), - ); - } else { - ctx.log.debug("actor request", ["instance", instanceName]); - } - - const response = await this.driver.getOrCreateAndCallActor({ - moduleName: this.moduleName, - actorName: this.actorName, - instanceName, - input, - fn, - request, - trace: this.trace, - }) as Response; - - const duration = Math.ceil(performance.now() - start); - if (this.runtime.env.get("_BACKEND_LOG_ACTOR_BODY") == "1") { - ctx.log.debug( - "actor response", - ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : []), - ...spreadObjectToLogEntries("response", response), - ); - } else { - ctx.log.debug("actor response", ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : [])); - } - - return response; - } - - public async exists(instanceName: string) { - const ctx = this.createActorContext(this.trace); - - const start = performance.now(); - - const response = await this.driver.actorExists({ - moduleName: this.moduleName, - actorName: this.actorName, - instanceName, - }); - - const duration = Math.ceil(performance.now() - start); - if (response) { - ctx.log.debug( - "actor exists", - ["instance", instanceName], - ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : []), - ); - } else { - ctx.log.debug( - "actor does not exist", - ["instance", instanceName], - ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : []), - ); - } - - return response; - } - - public async destroy(instanceName: string) { - const ctx = this.createActorContext(this.trace); - - const start = performance.now(); - - await this.driver.destroyActor({ - moduleName: this.moduleName, - actorName: this.actorName, - instanceName, - }); - - const duration = Math.ceil(performance.now() - start); - ctx.log.debug( - "actor destroyed", - ["instance", instanceName], - ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : []), - ); - } -} diff --git a/packages/backend/runtime/context.ts b/packages/backend/runtime/context.ts deleted file mode 100644 index 1a3b725e..00000000 --- a/packages/backend/runtime/context.ts +++ /dev/null @@ -1,420 +0,0 @@ -import { Runtime } from "./runtime.ts"; -import { Trace } from "./trace.ts"; -import { RuntimeError, ValidationError } from "./error.ts"; -import { appendTraceEntry } from "./trace.ts"; -import { ActorProxies, buildActorRegistryProxy, buildDependencyRegistryProxy, RegistryCallMap } from "./proxy.ts"; -import { DependencyScriptCallFunction } from "./types/registry.ts"; -import { camelify } from "../case_conversion/mod.ts"; -import { buildLogEntries, LogEntry, logRaw, spreadObjectToLogEntries } from "./logger.ts"; -import { LogLevel } from "./logger.ts"; -import { INTERNAL_ERROR_CODE, stringifyTrace } from "./mod.ts"; -import { Environment } from "./environment.ts"; -import { Database } from "./postgres.ts"; -import { assertExists } from "./deps.ts"; - -export interface ContextParams { - dependenciesSnake: any; - dependenciesCamel: any; - actorsSnake: any; - actorsCamel: any; -} - -/** - * Provides access to information about the runtime from a context. - */ -export class ContextRuntime { - constructor(private readonly runtime: Runtime) {} - - public get publicEndpoint(): string { - return this.runtime.publicEndpoint; - } -} - -export class Context { - public readonly log: ContextLog; - - public get runtime(): ContextRuntime { - return new ContextRuntime(this.internalRuntime); - } - - public get environment(): Environment { - return this.internalRuntime.env; - } - - public constructor( - protected readonly internalRuntime: Runtime, - public readonly trace: Trace, - protected readonly dependencyCaseConversionMap: RegistryCallMap, - protected readonly actorCaseConversionMap: RegistryCallMap, - ) { - this.log = new ContextLog(this); - } - - protected getRouteContext( - moduleName: string, - routeName: string, - ): RouteContext { - const module = this.internalRuntime.config.modules[moduleName]; - if (!module) throw new Error(`Module not found: ${moduleName}`); - - const route = module.routes[routeName]; - if (!route) throw new Error(`Route not found: ${routeName}`); - - return new RouteContext( - this.internalRuntime, - appendTraceEntry(this.trace, { - route: { module: moduleName, route: routeName }, - }), - moduleName, - module.db?.schemaName, - routeName, - this.dependencyCaseConversionMap, - this.actorCaseConversionMap, - ); - } - - protected isAllowedModuleName(_moduleName: string): boolean { - return true; - } - - public call: DependencyScriptCallFunction = async function ( - moduleName, - scriptName, - req, - ) { - // Check if calling module is allowed to call target module - if (!this.isAllowedModuleName(moduleName)) { - throw new RuntimeError( - "CANNOT_ACCESS_MODULE", - { cause: `Module \`${moduleName}\` is not a dependency` }, - ); - } - - // Lookup module - const module = this.internalRuntime.config.modules[moduleName]!; - if (!module) throw new Error(`Module not found: ${moduleName}`); - - // Lookup script - const script = module.scripts[scriptName]; - if (!script) throw new Error(`Script not found: ${scriptName}`); - - // Build context - const ctx = new ScriptContext( - this.internalRuntime, - appendTraceEntry(this.trace, { - script: { module: moduleName, script: scriptName }, - }), - moduleName, - module.db?.schemaName, - scriptName, - this.dependencyCaseConversionMap, - this.actorCaseConversionMap, - ); - ctx.log._listeners.push(...this.log._listeners); - - const requestParseResult = await script.requestSchema.safeParseAsync(req); - if (!requestParseResult.success) { - throw new ValidationError("Request did not match schema.", requestParseResult.error); - } - - const request = requestParseResult.data; - - // Log start - const scriptStart = performance.now(); - if (this.internalRuntime.env.get("_BACKEND_LOG_SCRIPT_BODY") == "1") { - ctx.log.debug("script request", ...spreadObjectToLogEntries("request", request)); - } else { - ctx.log.debug("script request"); - } - - // Execute script - const res = await ctx.runBlock(async () => await script.run(ctx, request)); - - // Log finish - // - // `duration` will be 0 on Cloudflare Workers if there are no async - // actions performed inside of the request: - // https://developers.cloudflare.com/workers/runtime-apis/performance/ - const duration = Math.ceil(performance.now() - scriptStart); - if (this.internalRuntime.env.get("_BACKEND_LOG_SCRIPT_BODY") == "1") { - ctx.log.debug( - "script response", - ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : []), - ...spreadObjectToLogEntries("response", res), - ); - } else { - ctx.log.debug( - "script response", - ...(duration > 0 ? [["duration", `${duration}ms`] as LogEntry] : []), - ); - } - - const responseParseResult = await script.responseSchema.safeParseAsync(res); - if (!responseParseResult.success) { - throw new ValidationError( - "Response did not match schema. If you are the module author, check the response type.", - responseParseResult.error, - ); - } - return responseParseResult.data; - }; - - public get modules() { - return buildDependencyRegistryProxy( - this, - this.dependencyCaseConversionMap, - ); - } - - public async tryCallRaw( - moduleName: string, - scriptName: string, - req: unknown, - ): Promise { - // Lookup module - const module = this.internalRuntime.config.modules[moduleName]; - if (!module) return null; - - // Lookup script - const script = module.scripts[scriptName]; - if (!script) return null; - - return await this.call(moduleName as any, scriptName as any, req as any); - } - - public async canCall( - moduleName: string, - scriptName: string, - req?: unknown, - ): Promise { - // Lookup module - const module = this.internalRuntime.config.modules[moduleName]; - if (!module) return false; - - // Lookup script - const script = module.scripts[scriptName]; - if (!script) return false; - - const result = await script.requestSchema.safeParseAsync(req); - if (!result.success) return false; - - return true; - } - - /** - * Runs a block of code and catches any related errors. Errors thrown from - * this block will be enriched or replaced with an INTERNAL_ERROR. - */ - public async runBlock(fn: () => Promise): Promise { - try { - return await fn(); - } catch (cause) { - if (cause === undefined) { - this.log.warn("caught undefined error from task. this may be caused using by cross-request promises."); - } - - if (cause instanceof RuntimeError) { - // Enrich error with more context - cause.enrich(this.internalRuntime, this); - throw cause; - } else { - // Convert to RuntimeError - const error = new RuntimeError(INTERNAL_ERROR_CODE, { cause }); - error.enrich(this.internalRuntime, this); - throw error; - } - } - } - - public runBlockSync(fn: () => Res): Res { - try { - return fn(); - } catch (cause) { - if (cause instanceof RuntimeError) { - // Enrich error with more context - cause.enrich(this.internalRuntime, this); - throw cause; - } else { - // Convert to RuntimeError - const error = new RuntimeError(INTERNAL_ERROR_CODE, { cause }); - error.enrich(this.internalRuntime, this); - throw error; - } - } - } -} - -export type LogListener = (level: LogLevel, entries: LogEntry[]) => void; - -class ContextLog { - public _listeners: LogListener[] = []; - - constructor(private readonly context: Context) {} - - public addListener(listener: LogListener) { - this._listeners.push(listener); - } - - private log(level: LogLevel, message: string, ...data: LogEntry[]) { - // Build entries - const logEntries = buildLogEntries( - level, - message, - ["trace", stringifyTrace(this.context.trace)], - ...data, - ); - - // Capture logs - for (const listener of this._listeners) { - listener(level, logEntries); - } - - // Output - logRaw(level, ...logEntries); - } - - public error(message: string, ...data: LogEntry[]) { - this.log("error", message, ...data); - } - - public warn(message: string, ...data: LogEntry[]) { - this.log("warn", message, ...data); - } - - public info(message: string, ...data: LogEntry[]) { - this.log("info", message, ...data); - } - - public debug(message: string, ...data: LogEntry[]) { - this.log("debug", message, ...data); - } - - public trace(message: string, ...data: LogEntry[]) { - this.log("trace", message, ...data); - } -} - -export interface ModuleContextParams extends ContextParams { - actorsSnake: any; - actorsCamel: any; - userConfig: any; - databaseSchema: any; -} - -/** - * Context for a module. - */ -export class ModuleContext extends Context { - public readonly db: Params["databaseSchema"] extends undefined ? undefined : Database; - - public constructor( - runtime: Runtime, - trace: Trace, - public readonly moduleName: string, - public readonly dbSchema: Params["databaseSchema"], - dependencyCaseConversionMap: RegistryCallMap, - actorCaseConversionMap: RegistryCallMap, - ) { - super(runtime, trace, dependencyCaseConversionMap, actorCaseConversionMap); - - const module = runtime.config.modules[moduleName]!; - if (module.db) { - assertExists(dbSchema); - this.db = runtime.postgres.getOrCreateDrizzleClient( - runtime.env, - runtime.config, - module, - ) as any; - } else { - this.db = undefined as any; - } - } - - protected override isAllowedModuleName(targetModuleName: string): boolean { - return this.internalRuntime.config - .modules[this.moduleName] - ?.dependencies - .has(targetModuleName) ?? false; - } - - public get config(): Params["userConfig"] { - return this.internalRuntime.config.modules[this.moduleName]!.userConfig as Params["userConfig"]; - } - - public get actors(): ActorProxies { - return buildActorRegistryProxy( - this.internalRuntime, - // TODO: Find a better way of looking up the module name. We don't use - // camel -> snake conversions anymore for modules in actors. - this.actorCaseConversionMap[camelify(this.moduleName)]!, - this.trace, - ); - } -} - -/** - * Context for a script. - */ -export class ScriptContext extends ModuleContext { - public constructor( - runtime: Runtime, - trace: Trace, - moduleName: string, - dbSchema: Params["databaseSchema"], - public readonly scriptName: string, - dependencyCaseConversionMap: RegistryCallMap, - actorCaseConversionMap: RegistryCallMap, - ) { - super(runtime, trace, moduleName, dbSchema, dependencyCaseConversionMap, actorCaseConversionMap); - } -} - -/** - * Context for an actor. - */ -export class ActorContext extends ModuleContext { - public constructor( - runtime: Runtime, - trace: Trace, - moduleName: string, - dbSchema: Params["databaseSchema"], - public readonly actorName: string, - dependencyCaseConversionMap: RegistryCallMap, - actorCaseConversionMap: RegistryCallMap, - ) { - super(runtime, trace, moduleName, dbSchema, dependencyCaseConversionMap, actorCaseConversionMap); - } -} - -/** - * Context for a route. - */ -export class RouteContext extends ModuleContext { - public constructor( - runtime: Runtime, - trace: Trace, - moduleName: string, - dbSchema: Params["databaseSchema"], - public readonly routeName: string, - dependencyCaseConversionMap: RegistryCallMap, - actorCaseConversionMap: RegistryCallMap, - ) { - super(runtime, trace, moduleName, dbSchema, dependencyCaseConversionMap, actorCaseConversionMap); - } - - public static fromContext( - ctx: Context, - moduleName: string, - routeName: string, - ): RouteContext { - // FIXME: This is a pretty terrible hack. We should find a better way to - // do this, probably with a "public" underscore function. - const ctxWithPublicGRC = ctx as unknown as { getRouteContext: Context["getRouteContext"] }; - return ctxWithPublicGRC.getRouteContext(moduleName, routeName); - } -} - -/** - * Context for a test. - */ -export class TestContext extends ModuleContext {} diff --git a/packages/backend/runtime/deps.ts b/packages/backend/runtime/deps.ts deleted file mode 100644 index 31909cf5..00000000 --- a/packages/backend/runtime/deps.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { assertEquals, assertExists } from "https://deno.land/std@0.224.0/assert/mod.ts"; -export { - fromError as fromValidationError, - isZodErrorLike as isValidationError, -} from "https://esm.sh/zod-validation-error@3.3.0"; diff --git a/packages/backend/runtime/environment.ts b/packages/backend/runtime/environment.ts deleted file mode 100644 index 06e10c5c..00000000 --- a/packages/backend/runtime/environment.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface Environment { - get(key: string): string | undefined; -} diff --git a/packages/backend/runtime/error.ts b/packages/backend/runtime/error.ts deleted file mode 100644 index 5b92fe73..00000000 --- a/packages/backend/runtime/error.ts +++ /dev/null @@ -1,266 +0,0 @@ -import { assert } from "https://deno.land/std@0.224.0/assert/mod.ts"; -import { ModuleContext } from "./context.ts"; -import { Context } from "./context.ts"; -import { fromValidationError } from "./deps.ts"; -import { ModuleContextParams } from "./mod.ts"; -import { ErrorConfig, Runtime } from "./runtime.ts"; -import { Trace } from "./trace.ts"; - -export const INTERNAL_ERROR_CODE = "internal_error"; -export const INTERNAL_ERROR_DESCRIPTION = "Internal error. Read the backend logs for more details."; - -const DEFAULT_ERROR_CONFIGS: Record = { - [INTERNAL_ERROR_CODE]: { - description: INTERNAL_ERROR_DESCRIPTION, - internal: false, - }, - "unreachable": { - description: "Unreachable.", - internal: true, - }, - "validation": { - description: "The provided data does not match the required schema.", - internal: false, - }, -}; - -// MARK: Runtime Error -export interface RuntimeErrorOptions extends ErrorOptions { - internal?: boolean; - meta?: any; - statusCode?: number; -} - -export class RuntimeError extends Error { - public moduleName?: string; - public trace?: Trace; - public errorConfig?: ErrorConfig; - public meta?: any; - public statusCode: number; - - public constructor( - public readonly code: string, - options?: RuntimeErrorOptions, - ) { - super(code, options); - this.meta = options?.meta; - this.statusCode = options?.statusCode ?? 500; - } - - public enrich< - Params extends ModuleContextParams, - Ctx extends Context, - >( - runtime: Runtime, - context: Ctx, - ) { - // Add context to error - if (context instanceof ModuleContext) { - this.moduleName = context.moduleName; - } - if (!this.trace) { - this.trace = context.trace; - } - - // Lookup error config if doesn't already exist - if (!this.errorConfig && this.moduleName) { - if (this.code in DEFAULT_ERROR_CONFIGS) { - this.errorConfig = DEFAULT_ERROR_CONFIGS[this.code]; - this.message = `${this.moduleName}[${this.code}]: ${this.errorConfig!.description}`; - } else { - const errorConfig = runtime.config.modules[this.moduleName]?.errors[this.code]; - if (errorConfig) { - this.errorConfig = errorConfig; - if (errorConfig.description) { - this.message = `${this.moduleName}[${this.code}]: ${errorConfig.description}`; - } - } else { - context.log.warn( - "error config not found. if you are the module author, check the error exists in module.json.", - ["errorCode", this.code], - ); - } - } - } - - // Build enriched message - let message = ""; - if (this.moduleName) { - message += `${this.moduleName}[${this.code}]`; - } else { - message += this.code; - } - if (this.errorConfig?.description) { - message += `: ${this.errorConfig.description}`; - } - this.message = message; - } - - public serialize(): SerializedErrorType { - return { - RuntimeError: { - name: this.name, - message: this.message, - stack: this.stack, - cause: this.cause ? serializeError(this.cause) : undefined, - code: this.code, - moduleName: this.moduleName, - trace: this.trace, - errorConfig: this.errorConfig, - meta: this.meta, - statusCode: this.statusCode, - }, - }; - } - - public static deserialize(data: RuntimeErrorSerialized, intermediateError?: RuntimeError): RuntimeError { - // Get or create error - const error = intermediateError ?? new RuntimeError(data.code, { - meta: data.meta, - statusCode: data.statusCode, - }); - - // This data is set in the constructor of the intermediate error - if (intermediateError === undefined) { - error.name = data.name; - error.message = data.message; - } - - // Overwrite common properties - error.stack = data.stack; - if (data.cause) { - error.cause = deserializeError(data.cause); - } - - // Assign RuntimeError-specific properties - error.moduleName = data.moduleName; - error.trace = data.trace; - error.errorConfig = data.errorConfig; - - return error; - } -} - -export interface RuntimeErrorSerialized extends ErrorSerialized { - code: string; - moduleName?: string; - trace?: Trace; - errorConfig?: ErrorConfig; - meta?: any; - statusCode: number; -} - -// MARK: Unreachable Error -export class UnreachableError extends RuntimeError { - constructor(public readonly value: never) { - super("unreachable", { meta: { value } }); - } - - public override serialize(): SerializedErrorType { - const baseData = super.serialize(); - assert("RuntimeError" in baseData); - const serialized: UnreachableErrorSerialized = { - ...baseData.RuntimeError, - value: this.value, - }; - return { UnreachableError: serialized }; - } - - public static override deserialize(data: UnreachableErrorSerialized): UnreachableError { - const error = new UnreachableError(data.value); - RuntimeError.deserialize(data, error); - return error; - } -} - -export interface UnreachableErrorSerialized extends RuntimeErrorSerialized { - value: never; -} - -// MARK: Validation Error -export class ValidationError extends RuntimeError { - constructor(message: string, public validationError: any) { - super("validation", { - meta: { - error: { ...validationError, name: "ValidationError" }, - }, - }); - this.cause = `${message} ${fromValidationError(validationError).toString()}`; - } - - public override serialize(): SerializedErrorType { - const baseData = super.serialize(); - assert("RuntimeError" in baseData); - const serialized: ValidationErrorSerialized = { - ...baseData.RuntimeError, - validationError: this.validationError, - }; - return { ValidationError: serialized }; - } - - public static override deserialize(data: ValidationErrorSerialized): ValidationError { - const error = new ValidationError(data.message, data.validationError); - RuntimeError.deserialize(data, error); - return error; - } -} - -export interface ValidationErrorSerialized extends RuntimeErrorSerialized { - validationError: any; -} - -// MARK: Serialize -export type SerializedErrorType = - | { Error: ErrorSerialized } - | { RuntimeError: RuntimeErrorSerialized } - | { UnreachableError: UnreachableErrorSerialized } - | { ValidationError: ValidationErrorSerialized }; - -export interface ErrorSerialized { - name: string; - message: string; - stack?: string; - cause?: SerializedErrorType; -} - -export function serializeError(error: unknown): SerializedErrorType { - if (error instanceof RuntimeError) { - return error.serialize(); - } else if (error instanceof Error) { - return { - Error: { - name: error.name, - message: error.message, - stack: error.stack, - cause: error.cause ? serializeError(error.cause) : undefined, - }, - }; - } else { - return { - Error: { - name: "Error", - message: `${error}`, - }, - }; - } -} - -export function deserializeError(data: SerializedErrorType): Error { - if ("UnreachableError" in data) { - return UnreachableError.deserialize(data.UnreachableError); - } else if ("ValidationError" in data) { - return ValidationError.deserialize(data.ValidationError); - } else if ("RuntimeError" in data) { - return RuntimeError.deserialize(data.RuntimeError); - } else if ("Error" in data) { - const error = new Error(data.Error.message); - error.name = data.Error.name; - error.stack = data.Error.stack; - if (data.Error.cause) { - error.cause = deserializeError(data.Error.cause); - } - return error; - } else { - throw new Error("Unknown error type"); - } -} diff --git a/packages/backend/runtime/error_test.ts b/packages/backend/runtime/error_test.ts deleted file mode 100644 index 9d90b5a6..00000000 --- a/packages/backend/runtime/error_test.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { unimplemented } from "https://deno.land/std@0.224.0/assert/unimplemented.ts"; -import { assertEquals, assertExists } from "./deps.ts"; -import { ModuleContext } from "./context.ts"; -import { RuntimeError } from "./error.ts"; -import { BuildRuntime, ModuleContextParams, newTrace } from "./mod.ts"; -import { Runtime } from "./runtime.ts"; -import { ActorDriver, CallOpts, CreateOpts, DestroyOpts, ExistsOpts, GetOrCreateAndCallOpts } from "./actor/driver.ts"; - -interface Params extends ModuleContextParams { - dependenciesSnake: { test_module: Record }; - dependenciesCamel: { testModule: Record }; - actorsSnake: Record; - actorsCamel: Record; - userConfig: null; - database: undefined; - databaseSchema: undefined; -} - -class DummyActorDriver implements ActorDriver { - createActor(_opts: CreateOpts): Promise { - throw new Error("Method not implemented."); - } - callActor(_opts: CallOpts): Promise { - throw new Error("Method not implemented."); - } - getOrCreateAndCallActor(_opts: GetOrCreateAndCallOpts): Promise { - throw new Error("Method not implemented."); - } - actorExists(_opts: ExistsOpts): Promise { - throw new Error("Method not implemented."); - } - destroyActor(_opts: DestroyOpts): Promise { - throw new Error("Method not implemented."); - } -} - -Deno.test("error", async () => { - const dependencyCaseConversionMap = { - testModule: {}, - } as const; - const actorCaseConversionMap = {} as const; - - // Setup - const runtime = new Runtime( - Deno.env, - { - runtime: BuildRuntime.Deno, - modules: { - test_module: { - storageAlias: "test_module", - scripts: {}, - routes: {}, - actors: {}, - errors: { - "TEST_ERROR": { - internal: false, - }, - }, - dependencies: new Set(["test_module"]), - userConfig: null, - }, - }, - db: { - drizzleFn: undefined as any, - createPgPool: () => unimplemented(), - }, - }, - new DummyActorDriver(), - dependencyCaseConversionMap, - actorCaseConversionMap, - ); - - const moduleContext = new ModuleContext( - runtime, - newTrace({ internalTest: {} }), - "test_module", - undefined, - dependencyCaseConversionMap, - actorCaseConversionMap, - ); - - // Create error - const error = new RuntimeError("TEST_ERROR"); - assertEquals(error.message.split("\n")[0], "TEST_ERROR"); - - // Erich error - error.enrich(runtime, moduleContext); - assertExists(error.moduleName); - assertExists(error.trace); - assertExists(error.errorConfig); - assertEquals(error.message.split("\n")[0], "test_module[TEST_ERROR]"); -}); diff --git a/packages/backend/runtime/export_to_module.ts b/packages/backend/runtime/export_to_module.ts deleted file mode 100644 index 774ffd5f..00000000 --- a/packages/backend/runtime/export_to_module.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * These are types that get automatically exported in module.gen.ts. - * - * Any common helper types should go here. - */ - -/** - * Empty Request/Response type. - * - * This only exists because of some quirks of empty interfaces in - * typescript that can be read more about here: - * https://www.totaltypescript.com/the-empty-object-type-in-typescript - */ -export type Empty = Record; - -export { RuntimeError, UnreachableError } from "./error.ts"; -export { ActorBase } from "./actor/actor.ts"; - -// MARK: Experimental -import { errorToLogEntries, getFormattedTimestamp, spreadObjectToLogEntries } from "./logger.ts"; -export const __EXPERIMENTAL = { - Log: { errorToLogEntries, spreadObjectToLogEntries, getFormattedTimestamp }, -}; diff --git a/packages/backend/runtime/logger.ts b/packages/backend/runtime/logger.ts deleted file mode 100644 index ff8a95d2..00000000 --- a/packages/backend/runtime/logger.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { RuntimeError } from "./error.ts"; -import { stringifyTrace } from "./mod.ts"; - -export type LogLevel = "error" | "warn" | "info" | "debug" | "trace"; - -export type LogEntry = [string, LogValue]; -export type LogValue = string | number | boolean | null | undefined; - -const LOG_LEVEL_COLORS: Record = { - error: "\x1b[31m", // Red - warn: "\x1b[33m", // Yellow - info: "\x1b[32m", // Green - debug: "\x1b[36m", // Cyan - trace: "\x1b[35m", // Magenta -}; - -const RESET_COLOR = "\x1b[0m"; - -/** Builds the full entries for a log. */ -export function buildLogEntries(level: LogLevel, message: string, ...data: LogEntry[]): LogEntry[] { - return [ - ["ts", getFormattedTimestamp()], - ["level", level], - ["msg", message], - ...data, - ]; -} - -export function log(level: LogLevel, message: string, ...data: LogEntry[]) { - logRaw( - level, - ...buildLogEntries(level, message, ...data), - ); -} - -export function logRaw(level: LogLevel, ...data: any[]) { - let message = stringify(...data); - - if (LOGGER_CONFIG.enableColor) { - message = `${LOG_LEVEL_COLORS[level]}${message}${RESET_COLOR}`; - } - - originalConsole.log(message); -} - -/** - * Serializes logfmt line using orderer parameters. - * - * We use varargs because it's ordered & it has less overhead than an object. - * - * ## Styling Methodology - * - * The three things you need to know for every log line is the level, the - * message, and who called it. These properties are highlighted in different colros - * and sorted in th eorder that you usually read them. - * - * Once you've found a log line you care about, then you want to find the - * property you need to see. The property names are bolded and the default color - * while the rest of the data is dim. This lets you scan to find the property - * name quickly then look closer to read the data associated with the - * property. - */ -export function stringify(...data: LogEntry[]) { - let line = ""; - - for (let i = 0; i < data.length; i++) { - const [key, valueRaw] = data[i]!; - - let isNull = false; - let valueString: string; - if (valueRaw == null) { - isNull = true; - valueString = ""; - } else { - valueString = valueRaw.toString(); - } - - const needsQuoting = valueString.indexOf(" ") > -1 || valueString.indexOf("=") > -1; - const needsEscaping = valueString.indexOf('"') > -1 || valueString.indexOf("\\") > -1; - - if (needsEscaping) valueString = valueString.replace(/["\\]/g, "\\$&"); - if (needsQuoting || needsEscaping) valueString = '"' + valueString + '"'; - if (valueString === "" && !isNull) valueString = '""'; - - if (LOGGER_CONFIG.enableColor) { - // With color - - // Secial message colors - let color = "\x1b[2m"; - if (key == "level" && valueString in LOG_LEVEL_COLORS) { - color = LOG_LEVEL_COLORS[valueString as LogLevel]; - } else if (key == "msg") { - color = "\x1b[32m"; - } else if (key == "trace") { - color = "\x1b[34m"; - } - - // Format line - line += "\x1b[0m\x1b[1m" + key + "\x1b[0m" + "\x1b[2m=\x1b[0m" + color + valueString + RESET_COLOR; - } else { - // No color - line += key + "=" + valueString; - } - - if (i != data.length - 1) { - line += " "; - } - } - - return line; -} - -export function getFormattedTimestamp() { - const now = new Date(); - - const year = now.getUTCFullYear(); - const month = String(now.getUTCMonth() + 1).padStart(2, "0"); - const day = String(now.getUTCDate()).padStart(2, "0"); - const hours = String(now.getUTCHours()).padStart(2, "0"); - const minutes = String(now.getUTCMinutes()).padStart(2, "0"); - const seconds = String(now.getUTCSeconds()).padStart(2, "0"); - const milliseconds = String(now.getUTCMilliseconds()).padStart(3, "0"); - - return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`; -} - -function castToLogValue(v: unknown): LogValue { - if (typeof v === "string" || typeof v === "number" || typeof v === "boolean" || v === null || v === undefined) { - return v; - } - try { - return JSON.stringify(v); - } catch (err) { - log("warn", "cannot cast object to log value", ["err", `${err}`]); - return "[cannot stringify]"; - } -} - -// Patch console methods -const originalConsole = { ...console }; - -function consoleLogWrapper(level: LogLevel, ...args: unknown[]) { - const data: LogEntry[] = args.slice(1).map((v, i) => [`data${i}`, castToLogValue(v)]); - log(level, args[0] as string, ...data); -} - -console.error = consoleLogWrapper.bind(undefined, "error"); -console.warn = consoleLogWrapper.bind(undefined, "warn"); -console.info = consoleLogWrapper.bind(undefined, "info"); -console.log = consoleLogWrapper.bind(undefined, "info"); -console.debug = consoleLogWrapper.bind(undefined, "debug"); -console.trace = consoleLogWrapper.bind(undefined, "trace"); - -// MARK: Config -interface GlobalLoggerConfig { - enableColor: boolean; - enableSpreadObject: boolean; - enableErrorStack: boolean; -} - -export const LOGGER_CONFIG: GlobalLoggerConfig = { - enableColor: false, - enableSpreadObject: false, - enableErrorStack: false, -}; - -// MARK: Utils -/** - * Converts an object in to an easier to read KV of entries. - */ -export function spreadObjectToLogEntries(base: string, data: unknown): LogEntry[] { - if ( - LOGGER_CONFIG.enableSpreadObject && typeof data == "object" && !Array.isArray(data) && data !== null && - Object.keys(data).length != 0 && Object.keys(data).length < 16 - ) { - const logData: LogEntry[] = []; - for (const key in data) { - // logData.push([`${base}.${key}`, JSON.stringify((data as any)[key])]); - logData.push(...spreadObjectToLogEntries(`${base}.${key}`, (data as any)[key])); - } - return logData; - } else { - return [[base, JSON.stringify(data)]]; - } -} - -export function errorToLogEntries(base: string, error: unknown): LogEntry[] { - if (error instanceof RuntimeError) { - return [ - [`${base}.code`, error.code], - [`${base}.description`, error.errorConfig?.description], - [`${base}.module`, error.moduleName], - ...(error.trace ? [[`${base}.trace`, stringifyTrace(error.trace)] as LogEntry] : []), - ...(LOGGER_CONFIG.enableErrorStack && error.stack - ? [[`${base}.stack`, formatStackTrace(error.stack)] as LogEntry] - : []), - ...(error.meta ? [[`${base}.meta`, JSON.stringify(error.meta)] as LogEntry] : []), - ...(error.cause ? errorToLogEntries(`${base}.cause`, error.cause) : []), - ]; - } else if (error instanceof Error) { - return [ - [`${base}.name`, error.name], - [`${base}.message`, error.message], - ...(LOGGER_CONFIG.enableErrorStack && error.stack - ? [[`${base}.stack`, formatStackTrace(error.stack)] as LogEntry] - : []), - ...(error.cause ? errorToLogEntries(`${base}.cause`, error.cause) : []), - ]; - } else { - return [ - [base, `${error}`], - ]; - } -} - -/** - * Formats a JS stack trace in to a legible one-liner. - */ -function formatStackTrace(stackTrace: string): string { - const regex = /at (.+?)$/gm; - const matches = [...stackTrace.matchAll(regex)]; - // Reverse array since the stack goes from top level -> bottom level - matches.reverse(); - return matches - .map((match) => match[1]!.trim()) - .join(" > "); -} diff --git a/packages/backend/runtime/mod.ts b/packages/backend/runtime/mod.ts deleted file mode 100644 index 10783330..00000000 --- a/packages/backend/runtime/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from "./context.ts"; -export * from "./error.ts"; -export * from "./runtime.ts"; -export * from "./trace.ts"; -export * from "./environment.ts"; - -// This will shim console.log -import "./logger.ts"; diff --git a/packages/backend/runtime/postgres.ts b/packages/backend/runtime/postgres.ts deleted file mode 100644 index ed4ac3f0..00000000 --- a/packages/backend/runtime/postgres.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Module } from "./runtime.ts"; -import { Config } from "./mod.ts"; -import { Environment } from "./environment.ts"; - -// See also packages/toolchain/drizzle_consts.ts (DRIZZLE_ORM_PACKAGE) -// -// Just types since all actual Postgres Drizzle code will be imported in -// entrypoint.ts in order to support multiple drivers. -import type { drizzle, NodePgDatabase } from "npm:drizzle-orm@0.33.0/node-postgres"; -import { Logger } from "npm:drizzle-orm@0.33.0/logger"; -import { log } from "./logger.ts"; -import { LogEntry } from "./logger.ts"; -import { assertExists } from "./deps.ts"; - -export { drizzle }; - -export function getDatabaseUrl(env: Environment): URL { - const databaseUrl = env.get("DATABASE_URL"); - assertExists(databaseUrl, "`DATABASE_URL` environment variable missing"); - return new URL(databaseUrl); -} - -/** - * Unknown driver type. - */ -export interface PgPoolDummy { - end?: () => Promise; -} - -// TODO: -/** - * This type represents the module exported from `db/schema.ts`. - * - * Required by NodePgDatabase. - */ -export type DatabaseSchema = Record; - -/** - * Represents a generic Drizzle client. - */ -export type Database = NodePgDatabase; - -/** Manages Postgres connections. */ -export class Postgres { - private isShutDown = false; - - private pgPool?: PgPoolDummy; - public drizzleClients = new Map>(); - - public async shutdown() { - this.isShutDown = true; - if (this.pgPool?.end) await this.pgPool.end(); - } - - public getOrCreatePgPool(env: Environment, config: Config): PgPoolDummy { - if (this.isShutDown) throw new Error("Postgres is shutting down"); - - if (this.pgPool) { - return this.pgPool; - } else { - const url = getDatabaseUrl(env); - - // Create & insert pool - const output = config.db.createPgPool(url); - this.pgPool = output; - return output; - } - } - - public getOrCreateDrizzleClient( - env: Environment, - config: Config, - module: Module, - ): Database { - if (!module.db) { - throw new Error("Cannot create Drizzle client for module without database"); - } - - if (this.isShutDown) throw new Error("Postgres is shutting down"); - - if (this.drizzleClients.has(module.db.schemaName)) { - return this.drizzleClients.get(module.db.schemaName) as Database; - } else { - // Create logger - - // Create & insert pool - const pool = this.getOrCreatePgPool(env, config); - const drizzleInstance = config.db.drizzleFn(pool, { - schema: module.db.drizzleSchema, - logger: env.get("_BACKEND_LOG_SQL_QUERIES") == "1" ? new DrizzleLogger() : undefined, - }); - this.drizzleClients.set(module.db.schemaName, drizzleInstance); - return drizzleInstance as Database; - } - } -} - -class DrizzleLogger implements Logger { - logQuery(query: string, params: unknown[]): void { - const logParams = params.map((x, i) => [`params.${i}`, JSON.stringify(x)] as LogEntry); - log("info", "sql query", ["query", query], ...logParams); - } -} diff --git a/packages/backend/runtime/proxy.ts b/packages/backend/runtime/proxy.ts deleted file mode 100644 index 1a2e812e..00000000 --- a/packages/backend/runtime/proxy.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { Context, Runtime, Trace } from "./mod.ts"; -import { RequestOf, ResponseOf } from "./types/registry.ts"; -import { ActorProxy } from "./actor/proxy.ts"; -import { ContextParams } from "./context.ts"; - -type ModuleRegistryPair = readonly [string, string]; - -/** - * This type is used denote a map the key/value pairs of one registry to - * another. - * - * Example: - * ```ts - * type TestReg1 = { - * foo: { - * bar: { request: FooBarRequest, response: FooBarResponse }, - * baz: { request: FooBazRequest, response: FooBazResponse }, - * }, - * fil: { - * qux: { request: FilQuxRequest, response: FilQuxResponse }, - * cor: { request: FilCorRequest, response: FilCorResponse }, - * } - * }; - * - * type TestReg2 = { - * canonicalFoo: { - * bar: { request: FooBarRequest, response: FooBarResponse }, - * bazScript: { request: FooBazRequest, response: FooBazResponse }, - * }, - * filMod: { - * qux: { request: FilQuxRequest, response: FilQuxResponse }, - * cor: { request: FilCorRequest, response: FilCorResponse }, - * }, - * }; - * - * const map: RegistryCallMap = { - * foo: { - * bar: ["canonicalFoo", "bar"], - * baz: ["canonicalFoo", "bazScript"], - * }, - * fil: { - * qux: ["filMod", "qux"], - * cor: ["filMod", "cor"], - * }, - * }; - * ``` - * - * This is used by the {@linkcode buildDependencyRegistryProxy} function to map the camel - * case keys from `ctx.modules..(data);` to an - * equivalent call to `ctx.call(, , data);`. - */ -export type RegistryCallMap = Record; - -export type ModuleCallMap = Record; - -/** - * A callable registry is an object that describes the structure of - * `ctx.modules`. - * - * If we have a registry like this: - * - module `foo` - * - script `bar` - * - request type `BarRequest` - * - response type `BarResponse` - * - script `baz` - * - request type `BazRequest` - * - response type `BazResponse` - * - module `fil` - * - script `qux` - * - request type `QuxRequest` - * - response type `QuxResponse` - * - script `cor` - * - request type `CorRequest` - * - response type `CorResponse` - * - * The callable registry would look like this: - * ```ts - * type CallableRegistry_TestReg = { - * foo: { - * bar: (req: BarRequest) => Promise, - * baz: (req: BazRequest) => Promise, - * }, - * fil: { - * qux: (req: QuxRequest) => Promise, - * cor: (req: CorRequest) => Promise, - * }, - * } - * ``` - * - * This is the type returned by the {@linkcode buildDependencyRegistryProxy} function. - * - * It is accessible to the user as `ctx.modules`. - */ -export type CallableDependencies = { - [Mod in keyof DependenciesT]: { - [Script in keyof DependenciesT[Mod]]: ( - req: RequestOf, - ) => Promise>; - }; -}; - -/** - * TODO: Comment - */ -export type ActorProxies = { - [Actor in keyof ActorsT]: ActorProxy; -}; - -/** - * @param ctx The {@link Context} object to use to call the scripts in - * accessible modules - * @param map A {@link MapFrom} object that describes how to map - * `[module, script] pairs from a camelCase registry to a snake_case registry - * @returns A {@link CallableDependencies} object that implements the "syntax sugar" - * that used in the `ctx.modules. - - diff --git a/packages/editor/package.json b/packages/editor/package.json deleted file mode 100644 index 1d40c84a..00000000 --- a/packages/editor/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@rivet-gg/editor", - "private": true, - "version": "0.0.0", - "type": "module", - "packageManager": "yarn@4.4.0", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.6.0", - "@fortawesome/free-brands-svg-icons": "^6.6.0", - "@fortawesome/free-solid-svg-icons": "^6.6.0", - "@fortawesome/react-fontawesome": "^0.2.2", - "@rivet-gg/components": "https://github.com/rivet-gg/hub#workspace=@rivet-gg/components&head=09-18-icons_pack", - "@rivet-gg/icons": "*", - "@sentry/react": "^8.17.0", - "@tanstack/query-broadcast-client-experimental": "^5.50.1", - "@tanstack/query-sync-storage-persister": "^5.50.1", - "@tanstack/react-query": "^5.50.1", - "@tanstack/react-query-devtools": "^5.50.1", - "@tanstack/react-query-persist-client": "^5.50.1", - "@tanstack/react-router": "^1.33.4", - "@tanstack/router-devtools": "^1.33.4", - "codemirror-json-schema": "^0.7.8", - "hono": "^4.5.9", - "ky": "^1.4.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-hook-form": "^7.52.0", - "superjson": "^2.2.1", - "zod": "^3.23.8" - }, - "devDependencies": { - "@tanstack/router-vite-plugin": "^1.45.2", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "@vitejs/plugin-react": "^4.2.1", - "autoprefixer": "^10.4.20", - "tailwindcss": "^3.4.10", - "typescript": "^5.2.2", - "vite": "^5.2.0", - "vite-plugin-favicons-inject": "^2.2.0" - }, - "resolutions": { - "@rivet-gg/icons": "https://github.com/rivet-gg/hub#workspace=@rivet-gg/icons&head=09-18-icons_pack" - } -} diff --git a/packages/editor/postcss.config.js b/packages/editor/postcss.config.js deleted file mode 100644 index 2aa7205d..00000000 --- a/packages/editor/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/packages/editor/src/app.tsx b/packages/editor/src/app.tsx deleted file mode 100644 index 27c3d491..00000000 --- a/packages/editor/src/app.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { library } from "@fortawesome/fontawesome-svg-core"; -import { iconPack } from "@rivet-gg/icons"; -import { - FullscreenLoading, - Toaster, - TooltipProvider, -} from "@rivet-gg/components"; -import * as Sentry from "@sentry/react"; -import { QueryClientProvider } from "@tanstack/react-query"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; -import { RouterProvider, createRouter } from "@tanstack/react-router"; -import { Suspense } from "react"; -import { queryClient } from "./queries/global"; -import { routeTree } from "./routeTree.gen"; - -library.add(iconPack); - -declare module "@tanstack/react-router" { - interface Register { - router: typeof router; - } - interface StaticDataRouteOption { - layout?: "full" | "compact"; - } -} - -declare global { - namespace RivetApp { - interface Config {} - } -} - -export const router = createRouter({ - routeTree, - context: { - queryClient, - }, - // Since we're using React Query, we don't want loader calls to ever be stale - // This will ensure that the loader is always called when the route is preloaded or visited - defaultPreloadStaleTime: 0, - defaultOnCatch: (error) => { - Sentry.captureException(error); - }, -}); - -export function App() { - return ( - - }> - - - - - - - - - ); -} diff --git a/packages/editor/src/assets/favicon.svg b/packages/editor/src/assets/favicon.svg deleted file mode 100644 index 287c4257..00000000 --- a/packages/editor/src/assets/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/editor/src/assets/logo.svg b/packages/editor/src/assets/logo.svg deleted file mode 100644 index 18076182..00000000 --- a/packages/editor/src/assets/logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/editor/src/components/banner-context.ts b/packages/editor/src/components/banner-context.ts deleted file mode 100644 index 7ffc36dc..00000000 --- a/packages/editor/src/components/banner-context.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from "react"; - -export const BannerContext = createContext<{ - banner: HTMLDivElement | null; -}>({ banner: null }); diff --git a/packages/editor/src/components/config-schema-context.ts b/packages/editor/src/components/config-schema-context.ts deleted file mode 100644 index 9ae04114..00000000 --- a/packages/editor/src/components/config-schema-context.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createContext } from "react"; -import type { ZodObject } from "zod"; - -// FIXME: use zod schemas from opengb -// biome-ignore lint/suspicious/noExplicitAny: we do not care about the shape of the schema -export const ConfigSchemaContext = createContext | undefined>( - undefined, -); diff --git a/packages/editor/src/components/dialogs/new-module-dialog.tsx b/packages/editor/src/components/dialogs/new-module-dialog.tsx deleted file mode 100644 index ab98af6f..00000000 --- a/packages/editor/src/components/dialogs/new-module-dialog.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, - Code, - type DialogContentProps, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, - Flex, -} from "@rivet-gg/components"; -import { addModule } from "../../lib/add-module"; -import { projectManifestQueryOptions, useConfigMutation } from "../../queries"; -import { queryClient } from "../../queries/global"; -import * as NewModuleForm from "../new-module-form"; - -interface NewModuleDialogProps extends DialogContentProps { - module: { name: string; registry: string }; -} - -export default function NewModuleDialog({ - module, - onClose, -}: NewModuleDialogProps) { - const { mutateAsync } = useConfigMutation(); - - return ( - { - const slug = values.name || module.name; - const manifest = await queryClient.fetchQuery(projectManifestQueryOptions()); - if (projectManifestQueryOptions.config.modules[slug]) { - return form.setError("name", { - message: "Module with this name already exists", - }); - } - - const config = { ...manifest.config }; - addModule(manifest, config, { - ...module, - alias: values.name !== module.name ? values.name : undefined, - }); - - await mutateAsync(config); - - onClose?.(); - }} - defaultValues={{ - name: "", - module: [module.registry, module.name].join("."), - }} - > - - Add module - - Choose a name (in snake_case) under which new module will - be available in your backend project. - - - - - - - - Advanced - - - - - - - - - - - Add - - - ); -} diff --git a/packages/editor/src/components/message-banner.tsx b/packages/editor/src/components/message-banner.tsx deleted file mode 100644 index 0e9b2380..00000000 --- a/packages/editor/src/components/message-banner.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { Icon } from "@rivet-gg/icons"; -import { Button, Strong, WithTooltip } from "@rivet-gg/components"; -import { useQuery } from "@tanstack/react-query"; -import { type PropsWithChildren, useContext, useEffect } from "react"; -import { createPortal } from "react-dom"; -import { useFormContext } from "react-hook-form"; -import { download } from "../lib/download"; -import { projectManifestQueryOptions, stateQueryOptions } from "../queries"; -import { queryClient } from "../queries/global"; -import { BannerContext } from "./banner-context"; -import { ConfigSchemaContext } from "./config-schema-context"; -import { CONFIG_FORM_ID } from "./modules-config-form"; - -function Container(props: PropsWithChildren) { - return ( -
- {props.children} -
- ); -} - -function Content() { - const { data: state } = useQuery(stateQueryOptions()); - const configSchema = useContext(ConfigSchemaContext); - const { formState, getValues, reset, trigger } = useFormContext(); - - useEffect(() => { - if (state?.value === "failure") { - queryClient.refetchQueries(projectManifestQueryOptions()).then(() => { - trigger("modules", { shouldFocus: true }); - }); - } - }, [state?.value, trigger]); - - if (formState.isDirty) { - return ( - - You have unsaved changes. -
- - Save - - } - /> - - -
- } - /> - - -
- ); - } - - if (state?.value === "failure") { - if ( - state.error && - state.error.name === "CombinedError" && - state.error.errors.some((e) => e.name === "ValidationError") - ) { - const validationErrors = state.error.errors.filter( - (e): e is ValidationError => e.name === "ValidationError", - ); - return ( - -
-

- Rivet server has failed to start. Modules ( - {validationErrors.map((e) => e.info.moduleName).join(", ")}) have invalid configurations. Consult the docs - for more information. -

- -
-
- ); - } - return ( - - Rivet server has failed to start. Please check the logs for more information. - - ); - } - - return null; -} - -export function MessageBanner() { - const { banner } = useContext(BannerContext); - - if (!banner) { - return null; - } - - return createPortal(, banner); -} diff --git a/packages/editor/src/components/module-card.tsx b/packages/editor/src/components/module-card.tsx deleted file mode 100644 index 0db14829..00000000 --- a/packages/editor/src/components/module-card.tsx +++ /dev/null @@ -1,215 +0,0 @@ -import { Icon } from "@rivet-gg/icons"; -import { - Button, - Card, - CardContent, - CardDescription, - cn, - Flex, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, - JsonCode, - MutedText, - Text, - WithTooltip, -} from "@rivet-gg/components"; -import { useFormContext } from "react-hook-form"; -import { ModuleManifest } from "../lib/types"; - -interface ConfigInputProps { - moduleName: string; -} - -function ConfigInput({ moduleName }: ConfigInputProps) { - const { control } = useFormContext(); - - return ( - { - return ( - - Configuration - - field.onChange(value)} - /> - - - Invalid module configuration. Please check the docs for more information. - - - ); - }} - /> - ); -} - -interface DeleteModuleButton { - moduleName: string; - content: string; - isDisabled?: boolean; -} - -function DeleteModuleButton({ - moduleName, - content, - isDisabled, -}: DeleteModuleButton) { - const { setValue, getValues } = useFormContext(); - return ( - - - - } - /> - ); -} - -interface ModuleCardProps { - module: ModuleManifest; - isRegistryExternal?: boolean; - isHighlighted?: boolean; - dependants: ModuleManifest[]; -} - -export function ModuleCard({ - module, - isRegistryExternal, - isHighlighted, - dependants, -}: ModuleCardProps) { - const { watch, resetField } = useFormContext(); - const modules = watch("modules"); - const isRemoved = modules[module.name] === undefined; - const allDependantsRemoved = dependants?.every( - (m) => modules[m.name] === undefined, - ); - return ( -
- -
- -

- {module.config.icon ? : null} - {module.config.name} -

- - {isRegistryExternal - ? ( - - - - - - } - /> - ) - : null} - - 0 - ? `Remove dependants (${dependants.map((m) => m.config.name).join(", ")}) before removing this module` - : "Delete module"} - isDisabled={!allDependantsRemoved} - moduleName={module.name} - /> - -
- - - -
-

{module.config.description}

- {dependants?.length > 0 - ? ( -

- Dependants: {dependants.map((m) => m.config.name).join(", ")}. -

- ) - : null} -
-
-
-
- {module.hasUserConfigSchema - ? ( - - - - ) - : ( - - - - No configuration available. - - - - )} -
- {isRemoved - ? ( - - - You marked this module to be removed. - - - - ) - : null} -
- ); -} diff --git a/packages/editor/src/components/module-search-context.tsx b/packages/editor/src/components/module-search-context.tsx deleted file mode 100644 index 92464e52..00000000 --- a/packages/editor/src/components/module-search-context.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { - type MutableRefObject, - type ReactNode, - createContext, - useRef, -} from "react"; - -export const ModuleSearchContext = - createContext | null>(null); - -export const ModuleSearchProvider = ({ children }: { children: ReactNode }) => { - const ref = useRef(null); - - return ( - - {children} - - ); -}; diff --git a/packages/editor/src/components/modules-config-form.tsx b/packages/editor/src/components/modules-config-form.tsx deleted file mode 100644 index fa9ec41b..00000000 --- a/packages/editor/src/components/modules-config-form.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { createSchemaForm } from "@rivet-gg/components"; -import { type ReactNode, useMemo } from "react"; -import { z, type ZodString } from "zod"; -import { convertSchemaToZod } from "../lib/schema-to-zod"; -import { useConfigMutation } from "../queries"; -import { ConfigSchemaContext } from "./config-schema-context"; -import { ProjectManifest } from "../lib/types"; - -export const CONFIG_FORM_ID = "config-form"; - -interface ModulesConfigFormProps extends ProjectManifest { - children: ReactNode; -} - -const stringToJSONSchema = z - .string() - .transform((str, ctx): z.infer => { - try { - return JSON.parse(str); - } catch (e) { - ctx.addIssue({ code: "custom", message: "Invalid JSON" }); - return z.NEVER; - } - }); - -export function ModulesConfigForm({ - config, - modules, - children, -}: ModulesConfigFormProps) { - const configSchema = useMemo(() => { - const modulesSchema = Object.entries(modules).map(([name, module]) => { - return [ - name, - module.hasUserConfigSchema && module.userConfigSchema - ? z - .object({ - config: stringToJSONSchema.pipe( - convertSchemaToZod(module.userConfigSchema), - ), - // FIXME: use zod schemas from opengb - }) - .passthrough() - .optional() - // FIXME: use zod schemas from opengb - : z - .object({}) - .passthrough() - .optional(), - ]; - }); - const schema = z.object({ - modules: z.object(Object.fromEntries(modulesSchema)), - }); - return schema; - }, [modules]); - - const { Form } = useMemo(() => { - return createSchemaForm(configSchema); - }, [configSchema]); - - const defaultValues = useMemo(() => { - const modulesDefaultValues = Object.entries(config.modules).map( - ([name, module]) => { - return [ - name, - modules[name].hasUserConfigSchema - ? { - ...module, - config: JSON.stringify(modules[name].userConfig, null, 2), - } - : module, - ]; - }, - ); - return { modules: Object.fromEntries(modulesDefaultValues) }; - }, [config, modules]); - - const { mutateAsync } = useConfigMutation(); - - return ( - -
{ - await mutateAsync(values); - }} - > - {children} -
-
- ); -} diff --git a/packages/editor/src/components/modules-select.tsx b/packages/editor/src/components/modules-select.tsx deleted file mode 100644 index be0d7b99..00000000 --- a/packages/editor/src/components/modules-select.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { Icon } from "@rivet-gg/icons"; -import { Badge, Combobox, type ComboboxProps, Flex } from "@rivet-gg/components"; -import { useSuspenseQuery } from "@tanstack/react-query"; -import { forwardRef } from "react"; -import { projectManifestQueryOptions } from "../queries"; -import { IndexedModuleConfig } from "../lib/types"; - -interface ModulesSelectProps extends Omit { - placeholder?: string; - onValueChange: (module: { name: string; registry: string }) => void; -} - -export const ModulesSelect = forwardRef( - ({ placeholder, onValueChange, ...props }, ref) => { - const { data } = useSuspenseQuery(projectManifestQueryOptions()); - - const options = Object.entries(data.registries).map(([slug, registry]) => { - const options = Object.entries(registry.modules).map( - ([moduleSlug, module]) => { - const isInstalled = Object.entries(data.config.modules).some( - ([key, module]) => - (module.module === moduleSlug || key === moduleSlug) && - (module.registry || "default") === slug, - ); - return { - label: ( - - ), - isInstalled, - value: `${slug}.${moduleSlug}`, - }; - }, - ); - options.sort((a, b) => { - if (a.isInstalled && !b.isInstalled) { - return 1; - } - if (!a.isInstalled && b.isInstalled) { - return -1; - } - return 0; - }); - return { heading: `${slug} registry`, key: slug, options }; - }); - - return ( - { - const [registry, name] = value.split("."); - onValueChange({ registry, name }); - }} - options={options} - placeholder={placeholder} - notFoundMessage="No modules found." - /> - ); - }, -); - -interface ModulesSelectOptionProps { - moduleSlug: string; - module: IndexedModuleConfig; - isInstalled?: boolean; -} - -function ModulesSelectOption({ - module, - moduleSlug, - isInstalled, -}: ModulesSelectOptionProps) { - return ( - - - - {module.icon ? : null} - - {module.name - ? ( - - {module.name}{" "} - - ({moduleSlug}) - - - ) - : <>{moduleSlug}} - - {isInstalled ? INSTALLED : null} - - {module.description - ? ( - - {module.description} - - ) - : null} - - - ); -} diff --git a/packages/editor/src/components/new-module-card.tsx b/packages/editor/src/components/new-module-card.tsx deleted file mode 100644 index e10ace16..00000000 --- a/packages/editor/src/components/new-module-card.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, - toast, -} from "@rivet-gg/components"; -import { useQueryClient } from "@tanstack/react-query"; -import { useCallback, useContext } from "react"; -import { useDialog } from "../hooks/use-dialog"; -import { addModule } from "../lib/add-module"; -import { projectManifestQueryOptions, useConfigMutation } from "../queries"; -import { ModuleSearchContext } from "./module-search-context"; -import { ModulesSelect } from "./modules-select"; - -export function NewModuleCard() { - const { dialog, add } = useAddModule(); - const ref = useContext(ModuleSearchContext); - - return ( - <> - {dialog} - - - Add Module - - Add a new module to your backend project. Modules are reusable - pieces of functionality that can be called from your scripts. - - - - - - - - ); -} - -const useAddModule = () => { - const queryClient = useQueryClient(); - const { mutateAsync } = useConfigMutation(); - const { dialog, open } = useDialog.NewModule({}); - - const add = useCallback( - async ({ name, registry }: { registry: string; name: string }) => { - const manifest = await queryClient.fetchQuery(projectManifestQueryOptions()); - - if (manifest.config.modules[name]) { - open({ module: { name, registry } }); - return; - } - - const config = { ...manifest.config }; - addModule(manifest, config, { registry, name }); - - await toast.promise(() => mutateAsync(config), { - loading: "Adding module...", - success: "Module added", - error: "Failed to add module", - }); - }, - [queryClient, mutateAsync, open], - ); - - return { dialog, add }; -}; diff --git a/packages/editor/src/components/new-module-form.tsx b/packages/editor/src/components/new-module-form.tsx deleted file mode 100644 index c96519df..00000000 --- a/packages/editor/src/components/new-module-form.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { - createSchemaForm, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, - Input, - JavaScriptCode, - Label, -} from "@rivet-gg/components"; -import { Casing, regexes } from "../../../backend/toolchain/types/identifiers/defs"; -import { z } from "zod"; -import { ModulesSelect } from "./modules-select"; - -export const { useContext, Form, Submit, SetValue } = createSchemaForm( - z.object({ - // TODO: Move to shared internals - name: z - .string() - .min(1) - .max(32) - .regex(regexes[Casing.Snake], "Must be snake_case") - .optional(), - module: z.string(), - }), -); - -export const Name = () => { - const { control, watch } = useContext(); - - const module = watch("module"); - - return ( - { - return ( - - Name - - - - - - ); - }} - /> - ); -}; - -export const Modules = () => { - const { control } = useContext(); - return ( - { - return ( - - Module - - - - - - ); - }} - /> - ); -}; - -export const UsagePreview = () => { - const { watch } = useContext(); - const name = watch("name", "module_name"); - const module = watch("module", "module_name"); - return ( - <> - - - - ); -}; diff --git a/packages/editor/src/hooks/use-dialog.ts b/packages/editor/src/hooks/use-dialog.ts deleted file mode 100644 index 2660d5d1..00000000 --- a/packages/editor/src/hooks/use-dialog.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createDataDialogHook } from "@rivet-gg/components"; - -export function useDialog() {} - -useDialog.NewModule = createDataDialogHook( - ["module"], - import("../components/dialogs/new-module-dialog"), -); diff --git a/packages/editor/src/index.css b/packages/editor/src/index.css deleted file mode 100644 index 3b86eb04..00000000 --- a/packages/editor/src/index.css +++ /dev/null @@ -1,17 +0,0 @@ -@import "@rivet-gg/components/theme.css"; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground min-h-screen; - } - #root { - @apply min-h-screen; - } -} \ No newline at end of file diff --git a/packages/editor/src/lib/add-module.ts b/packages/editor/src/lib/add-module.ts deleted file mode 100644 index 3899aaf2..00000000 --- a/packages/editor/src/lib/add-module.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { IndexedModuleConfig, ProjectConfig, ProjectManifest } from "./types"; - -export function configHasModule(config: ProjectConfig, registry: string, module: string): boolean { - return !!config.modules[module] || - Object.values(config.modules).find((m) => m.registry === registry && m.module === module); -} - -/** - * Add a module to the project and resolve its dependencies, modifies the project object in place - */ -export function addModule( - manifest: ProjectManifest, - config: ProjectConfig, - { registry, name, alias, force = true }: { registry: string; name: string; alias?: string; force?: boolean }, -) { - const moduleDef = manifest.registries[registry].modules[name]; - - if (!moduleDef) { - throw new Error(`Module ${name} not found in registry ${registry}`); - } - - // add dependecies - const dependecies = Object.keys(moduleDef.dependencies || {}) - // filter out dependencies that are already in the project - .filter((dep) => !configHasModule(manifest.config, registry, dep)); - - for (const name of dependecies) { - addModule(manifest, config, { name, registry, force: false }); - } - - appendModule(config.modules, { name, module: moduleDef, registry, alias, force }); -} - -/** - * Append a module to the project, modifies the modules object in place - */ -function appendModule( - modules: ProjectConfig["modules"], - { name: moduleName, module, registry, alias, force }: { - name: string; - module: IndexedModuleConfig; - registry: string; - alias?: string; - force?: boolean; - }, -) { - let name = moduleName; - - if (force) { - // if the module is already in the project, add a suffix - if (modules[name]) { - name = `${name}_${Date.now()}`; - } - if (alias) { - name = alias; - } - } - - if (modules[name]) { - return; - } - - modules[name] = {}; - - if (name !== moduleName) { - modules[name].module = moduleName; - } - - if (registry !== "default") { - modules[name].registry = registry; - } - - if (module.defaultConfig) { - modules[name].config = module.defaultConfig; - } -} diff --git a/packages/editor/src/lib/download.ts b/packages/editor/src/lib/download.ts deleted file mode 100644 index 508076fb..00000000 --- a/packages/editor/src/lib/download.ts +++ /dev/null @@ -1,8 +0,0 @@ -export function download(content: BlobPart, mimeType: string, filename: string) { - const a = document.createElement("a"); - const blob = new Blob([content], { type: mimeType }); - const url = URL.createObjectURL(blob); - a.setAttribute("href", url); - a.setAttribute("download", filename); - a.click(); -} diff --git a/packages/editor/src/lib/schema-to-zod.ts b/packages/editor/src/lib/schema-to-zod.ts deleted file mode 100644 index 88adba90..00000000 --- a/packages/editor/src/lib/schema-to-zod.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { z, ZodType } from "zod"; -import { AnySchemaElement, is } from "../../../backend/toolchain/build/schema/schema"; - -export function convertSchemaToZod(schema: AnySchemaElement): ZodType { - if (is("unknown", schema)) { - return z.unknown(); - } - if (is("optional", schema)) { - return z.optional(convertSchemaToZod(schema.value)); - } - if (is("date", schema)) { - return z.coerce.date(); - } - if (is("string", schema)) { - return z.string(); - } - if (is("number", schema)) { - return z.number(); - } - if (is("boolean", schema)) { - return z.boolean(); - } - if (is("undefined", schema)) { - return z.undefined(); - } - if (is("null", schema)) { - return z.null(); - } - if (is("any", schema)) { - return z.any(); - } - if (is("literal", schema)) { - return z.literal(schema.value); - } - if (is("tuple", schema)) { - const [item, ...items] = schema.items.map(convertSchemaToZod); - return z.tuple([item, ...items]); - } - if (is("array", schema)) { - return z.array(convertSchemaToZod(schema.item!)); - } - if (is("intersection", schema)) { - return z.intersection( - convertSchemaToZod(schema.left), - convertSchemaToZod(schema.right), - ); - } - if (is("union", schema)) { - const [itemA, itemB, ...items] = schema.items.map(convertSchemaToZod); - return z.union([itemA, itemB, ...items]); - } - if (is("nullable", schema)) { - return z.nullable(convertSchemaToZod(schema.item!)); - } - if (is("object", schema)) { - return z.object( - Object.fromEntries( - Object.entries(schema.properties).map(( - [key, value], - ) => [key, convertSchemaToZod(value)]), - ), - ).strict(); - } - if (is("record", schema)) { - return z.record(convertSchemaToZod(schema.elementType)); - } - if (is("never", schema)) { - return z.never(); - } - - return z.never(); -} diff --git a/packages/editor/src/lib/types.ts b/packages/editor/src/lib/types.ts deleted file mode 100644 index 477a8a5c..00000000 --- a/packages/editor/src/lib/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type { ProjectConfig } from "../../../backend/toolchain/config/project"; -export type { ModuleManifest, ProjectManifest } from "../../../backend/toolchain/build/project_manifest"; -export type { IndexedModuleConfig } from "../../../backend/toolchain/config/module"; -export type { ValidationError } from "../../../backend/toolchain/internal_api/state"; diff --git a/packages/editor/src/main.tsx b/packages/editor/src/main.tsx deleted file mode 100644 index b6775294..00000000 --- a/packages/editor/src/main.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom/client"; -import { App } from "./app.tsx"; -import "./index.css"; - -// biome-ignore lint/style/noNonNullAssertion: it should always be present -ReactDOM.createRoot(document.getElementById("root")!).render( - - - , -); diff --git a/packages/editor/src/queries/global.ts b/packages/editor/src/queries/global.ts deleted file mode 100644 index 5f6d073a..00000000 --- a/packages/editor/src/queries/global.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { toast } from "@rivet-gg/components"; -import { broadcastQueryClient } from "@tanstack/query-broadcast-client-experimental"; -import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; -import { MutationCache, QueryCache, QueryClient } from "@tanstack/react-query"; -import superjson from "superjson"; - -const queryCache = new QueryCache(); - -const mutationCache = new MutationCache({ - onError(error) { - console.log(error); - toast.error("An error occurred while performing the operation."); - }, -}); - -export const queryClient = new QueryClient({ - queryCache, - mutationCache, -}); - -export const queryClientPersister = createSyncStoragePersister({ - storage: window.localStorage, - serialize: superjson.stringify, - deserialize: superjson.parse, -}); - -broadcastQueryClient({ - queryClient, - broadcastChannel: "rivet-gg-opengb", -}); diff --git a/packages/editor/src/queries/index.ts b/packages/editor/src/queries/index.ts deleted file mode 100644 index 868bf87e..00000000 --- a/packages/editor/src/queries/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./queries"; -export * from "./mutations"; diff --git a/packages/editor/src/queries/mutations.ts b/packages/editor/src/queries/mutations.ts deleted file mode 100644 index 0478a7f1..00000000 --- a/packages/editor/src/queries/mutations.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import ky from "ky"; -import { projectManifestQueryOptions, stateQueryOptions } from "./queries"; -import type { ProjectConfig } from "../lib/types"; - -export function useConfigMutation() { - const queryClient = useQueryClient(); - return useMutation({ - throwOnError: true, - mutationFn: async (json: ProjectConfig) => { - await ky.patch("/__internal/config", { - json, - timeout: 10000, - }); - }, - onSuccess: async () => { - await queryClient.refetchQueries(projectManifestQueryOptions()); - await queryClient.invalidateQueries(stateQueryOptions()); - }, - }); -} diff --git a/packages/editor/src/queries/queries.ts b/packages/editor/src/queries/queries.ts deleted file mode 100644 index 0eb94eed..00000000 --- a/packages/editor/src/queries/queries.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { queryOptions } from "@tanstack/react-query"; -import { hc } from "hono/client"; -import type { InternalApi } from "../../../backend/toolchain/internal_api/router"; -import ky from "ky"; - -const client = hc("/__internal", { - fetch: (input: string, init: RequestInit | undefined) => ky(input, { ...init, timeout: 10000 }), -}); - -export const projectManifestQueryOptions = () => - queryOptions({ - queryKey: ["project_manifest"], - retry: 2, - queryFn: async () => { - const response = await client["project_manifest.json"].$get(); - if (!response.ok) { - throw new Error("Internal server error"); - } - return response.json(); - }, - throwOnError: true, - select: (data) => { - const modules = Object.entries(data.modules); - return { - ...data, - modules: Object.fromEntries( - modules.map(([slug, module]) => { - const isDuplicate = modules.filter(([_, m]) => m.config.name === module.config.name) - .length > 1; - const moduleName = module.config.name || module.namePascal; - return [ - slug, - { - ...module, - config: { - ...module.config, - name: isDuplicate ? `${moduleName} (${slug})` : moduleName, - }, - }, - ]; - }), - ), - }; - }, - }); - -export const registriesQueryOptions = () => - queryOptions({ - ...projectManifestQueryOptions(), - select: (data) => data.registries, - }); - -export const moduleQueryOptions = (slug: string) => - queryOptions({ - ...projectManifestQueryOptions(), - queryKey: ["module", slug], - select: (data) => - Object.values(data.registries).find((registry) => registry.modules[slug]) - ?.modules[slug], - }); - -export const stateQueryOptions = () => - queryOptions({ - refetchInterval: 2000, - queryKey: ["state"], - queryFn: async () => { - const response = await client.state.$get(); - if (!response.ok) { - throw new Error("Internal server error"); - } - return response.json(); - }, - }); - -export const configQueryOptions = () => - queryOptions({ - ...stateQueryOptions(), - refetchInterval: undefined, - select: (data) => data.config, - }); diff --git a/packages/editor/src/routes/__root.tsx b/packages/editor/src/routes/__root.tsx deleted file mode 100644 index 6c2a9a3f..00000000 --- a/packages/editor/src/routes/__root.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { FullscreenLoading } from "@rivet-gg/components"; -import { Header } from "@rivet-gg/components/header"; -import { PageLayout, RootLayout } from "@rivet-gg/components/layout"; -import { - type QueryClient, - useIsMutating, - useQuery, -} from "@tanstack/react-query"; -import { - Link, - Outlet, - createRootRouteWithContext, -} from "@tanstack/react-router"; -import { TanStackRouterDevtools } from "@tanstack/router-devtools"; -import { Suspense, forwardRef, useState } from "react"; -import logoUrl from "../assets/logo.svg"; -import { BannerContext } from "../components/banner-context"; -import { ModuleSearchProvider } from "../components/module-search-context"; -import { stateQueryOptions } from "../queries"; - -function RootRoute() { - const [banner, setBanner] = useState(null); - return ( - <> - }> - - - - - - - - - - - - - - - © {new Date().getFullYear()} Rivet Gaming, Inc. All rights - reserved - - - - - {import.meta.env.DEV ? : null} - - ); -} - -const OpenGBHeader = forwardRef((_, ref) => { - const isMutating = useIsMutating(); - const { data: state } = useQuery(stateQueryOptions()); - - return ( -
} - addons={ - isMutating || state?.value === "building" ? : null - } - logo={ - - Rivet Logo - - } - /> - ); -}); - -export interface RouterContext { - queryClient: QueryClient; -} - -export const Route = createRootRouteWithContext()({ - component: RootRoute, -}); diff --git a/packages/editor/src/routes/index.tsx b/packages/editor/src/routes/index.tsx deleted file mode 100644 index a37b1b80..00000000 --- a/packages/editor/src/routes/index.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import { Icon,faPlus } from "@rivet-gg/icons"; -import { - Button, - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, - Code, - Flex, - H4, - Link as RivetLink, - Separator, - SidebarNavigation, - SidebarPageContent, -} from "@rivet-gg/components"; -import { useSuspenseQuery } from "@tanstack/react-query"; -import { createFileRoute, Link, useLocation, useNavigate } from "@tanstack/react-router"; -import { useContext, useLayoutEffect } from "react"; -import { MessageBanner } from "../components/message-banner"; -import { ModuleCard } from "../components/module-card"; -import { ModuleSearchContext } from "../components/module-search-context"; -import { ModulesConfigForm } from "../components/modules-config-form"; -import { NewModuleCard } from "../components/new-module-card"; -import { projectManifestQueryOptions } from "../queries"; - -function NewModuleButton() { - const ref = useContext(ModuleSearchContext); - return ( - - ); -} - -function IndexRoute() { - const {hash} = useLocation(); - const navigate = useNavigate(); - const { data } = useSuspenseQuery(projectManifestQueryOptions()); - - useLayoutEffect(() => { - if(!hash) { - return; - } - - window.document.getElementById(hash)?.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'start'}); - const timeout = setTimeout(() => { - navigate({ hash: false }); - }, 1000); - - return () => { - clearTimeout(timeout); - } - }, [hash]); - - return ( - -

Modules

- - {Object.entries(data?.modules).map(([name, module]) => { - return ( - - {module.config.icon ? : null} - {module.config.name || module.namePascal} - - ); - })} - - } - > - - - - - - {Object.entries(data?.modules).map(([name, module]) => ( - m.config.dependencies?.[name] !== undefined, - )} - isHighlighted={hash === name} - isRegistryExternal={data.registries[module.registryName]?.isExternal} - /> - ))} - - - - Build your own module - - - - - - - - - -
- ); -} - -export const Route = createFileRoute("/")({ - component: IndexRoute, - pendingComponent: () => ( - - - Waiting for Rivet server... - - Taking longer than expected? Take a look at the terminal, maybe something's wrong. - - - - ), - errorComponent: ({ error }) => ( - - - Uh oh. There was an error. - - This page has lost connection to Rivet local server. Try refreshing the page, or take a look at the terminal - for more information. In case the issue still persist, create an issue on{" "} - - GitHub - {" "} - or contact us! - - - - - {"toString" in error ? error.toString() : JSON.stringify(error)} - - - - ), -}); diff --git a/packages/editor/src/vite-env.d.ts b/packages/editor/src/vite-env.d.ts deleted file mode 100644 index 69a6b107..00000000 --- a/packages/editor/src/vite-env.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// - -declare module "vite-plugin-favicons-inject"; diff --git a/packages/editor/tailwind.config.js b/packages/editor/tailwind.config.js deleted file mode 100644 index 13d63eff..00000000 --- a/packages/editor/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./src/**/*.{ts,tsx}", - "./node_modules/@rivet-gg/components/**/*.{ts,tsx}", - ], - presets: [require("@rivet-gg/components/tailwind-base")], -}; diff --git a/packages/editor/tsconfig.json b/packages/editor/tsconfig.json deleted file mode 100644 index 97742c26..00000000 --- a/packages/editor/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["esnext", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "@hono/hono": ["./node_modules/hono"], - "zod": ["./node_modules/zod"] - } - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/packages/editor/tsconfig.node.json b/packages/editor/tsconfig.node.json deleted file mode 100644 index 97ede7ee..00000000 --- a/packages/editor/tsconfig.node.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "strict": true - }, - "include": ["vite.config.ts"] -} diff --git a/packages/editor/turbo.json b/packages/editor/turbo.json deleted file mode 100644 index 35be9c68..00000000 --- a/packages/editor/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "build": { - "outputs": ["dist/**"] - } - } -} diff --git a/packages/editor/vite.config.ts b/packages/editor/vite.config.ts deleted file mode 100644 index a6216519..00000000 --- a/packages/editor/vite.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { relative, resolve } from "node:path"; -import { TanStackRouterVite } from "@tanstack/router-vite-plugin"; -import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; -import vitePluginFaviconsInject from "vite-plugin-favicons-inject"; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - react(), - TanStackRouterVite(), - vitePluginFaviconsInject( - resolve(__dirname, "src", "assets", "favicon.svg"), - { - appName: "Rivet Editor", - theme_color: "#ff4f00", - }, - ), - ], - build: { - // biome-ignore lint/style/noNonNullAssertion: it does not matter - outDir: relative(__dirname, process.env.VITE_OUT_DIR! || "dist"), - }, - server: { - port: 6422, - proxy: { - "/__internal": { - target: "http://127.0.0.1:6421", - changeOrigin: true, - }, - }, - }, -}); diff --git a/packages/editor/yarn.lock b/packages/editor/yarn.lock deleted file mode 100644 index cdeb3bc6..00000000 --- a/packages/editor/yarn.lock +++ /dev/null @@ -1,6390 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@alloc/quick-lru@npm:^5.2.0": - version: 5.2.0 - resolution: "@alloc/quick-lru@npm:5.2.0" - checksum: 10c0/7b878c48b9d25277d0e1a9b8b2f2312a314af806b4129dc902f2bc29ab09b58236e53964689feec187b28c80d2203aff03829754773a707a8a5987f1b7682d92 - languageName: node - linkType: hard - -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" - dependencies: - "@babel/highlight": "npm:^7.24.7" - picocolors: "npm:^1.0.0" - checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.25.2": - version: 7.25.4 - resolution: "@babel/compat-data@npm:7.25.4" - checksum: 10c0/50d79734d584a28c69d6f5b99adfaa064d0f41609a378aef04eb06accc5b44f8520e68549eba3a082478180957b7d5783f1bfb1672e4ae8574e797ce8bae79fa - languageName: node - linkType: hard - -"@babel/core@npm:^7.23.7, @babel/core@npm:^7.24.5, @babel/core@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/core@npm:7.25.2" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.0" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-module-transforms": "npm:^7.25.2" - "@babel/helpers": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.0" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.2" - "@babel/types": "npm:^7.25.2" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.4": - version: 7.25.5 - resolution: "@babel/generator@npm:7.25.5" - dependencies: - "@babel/types": "npm:^7.25.4" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^2.5.1" - checksum: 10c0/eb8af30c39476e4f4d6b953f355fcf092258291f78d65fb759b7d5e5e6fd521b5bfee64a4e2e4290279f0dcd25ccf8c49a61807828b99b5830d2b734506da1fd - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-compilation-targets@npm:7.25.2" - dependencies: - "@babel/compat-data": "npm:^7.25.2" - "@babel/helper-validator-option": "npm:^7.24.8" - browserslist: "npm:^4.23.1" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-module-transforms@npm:7.25.2" - dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-simple-access": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.2" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-plugin-utils@npm:7.24.8" - checksum: 10c0/0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-validator-option@npm:7.24.8" - checksum: 10c0/73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helpers@npm:7.25.0" - dependencies: - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/b7fe007fc4194268abf70aa3810365085e290e6528dcb9fbbf7a765d43c74b6369ce0f99c5ccd2d44c413853099daa449c9a0123f0b212ac8d18643f2e8174b8 - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.7" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/parser@npm:7.25.4" - dependencies: - "@babel/types": "npm:^7.25.4" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/bdada5662f15d1df11a7266ec3bc9bb769bf3637ecf3d051eafcfc8f576dcf5a3ac1007c5e059db4a1e1387db9ae9caad239fc4f79e4c2200930ed610e779993 - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f44d927a9ae8d5ef016ff5b450e1671e56629ddc12e56b938e41fd46e141170d9dfc9a53d6cb2b9a20a7dd266a938885e6a3981c60c052a2e1daed602ac80e51 - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.24.7": - version: 7.25.4 - resolution: "@babel/plugin-syntax-typescript@npm:7.25.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/199919d44c73e5edee9ffd311cf638f88d26a810189e32d338c46c7600441fd5c4a2e431f9be377707cbf318410895304e90b83bf8d9011d205150fa7f260e63 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-self@npm:^7.24.5": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/dcf3b732401f47f06bb29d6016e48066f66de00029a0ded98ddd9983c770a00a109d91cd04d2700d15ee0bcec3ae3027a5f12d69e15ec56efc0bcbfac65e92cb - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-source@npm:^7.24.1": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/970ef1264c7c6c416ab11610665d5309aec2bd2b9086ae394e1132e65138d97b060a7dc9d31054e050d6dc475b5a213938c9707c0202a5022d55dcb4c5abe28f - languageName: node - linkType: hard - -"@babel/runtime@npm:7.23.4": - version: 7.23.4 - resolution: "@babel/runtime@npm:7.23.4" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/db2bf183cd0119599b903ca51ca0aeea8e0ab478a16be1aae10dd90473ed614159d3e5adfdd8f8f3d840402428ce0d90b5c01aae95da9e45a2dd83e02d85ca27 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.18.6": - version: 7.25.4 - resolution: "@babel/runtime@npm:7.25.4" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/33e937e685f0bfc2d40c219261e2e50d0df7381a6e7cbf56b770e0c5d77cb0c21bf4d97da566cf0164317ed7508e992082c7b6cce7aaa3b17da5794f93fbfb46 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": - version: 7.25.6 - resolution: "@babel/runtime@npm:7.25.6" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/d6143adf5aa1ce79ed374e33fdfd74fa975055a80bc6e479672ab1eadc4e4bfd7484444e17dd063a1d180e051f3ec62b357c7a2b817e7657687b47313158c3d2 - languageName: node - linkType: hard - -"@babel/template@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/template@npm:7.25.0" - dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.23.7, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3": - version: 7.25.4 - resolution: "@babel/traverse@npm:7.25.4" - dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.4" - "@babel/parser": "npm:^7.25.4" - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.4" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/37c9b49b277e051fe499ef5f6f217370c4f648d6370564d70b5e6beb2da75bfda6d7dab1d39504d89e9245448f8959bc1a5880d2238840cdc3979b35338ed0f5 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/types@npm:7.25.4" - dependencies: - "@babel/helper-string-parser": "npm:^7.24.8" - "@babel/helper-validator-identifier": "npm:^7.24.7" - to-fast-properties: "npm:^2.0.0" - checksum: 10c0/9aa25dfcd89cc4e4dde3188091c34398a005a49e2c2b069d0367b41e1122c91e80fd92998c52a90f2fb500f7e897b6090ec8be263d9cb53d0d75c756f44419f2 - languageName: node - linkType: hard - -"@changesets/changelog-github@npm:^0.4.8": - version: 0.4.8 - resolution: "@changesets/changelog-github@npm:0.4.8" - dependencies: - "@changesets/get-github-info": "npm:^0.5.2" - "@changesets/types": "npm:^5.2.1" - dotenv: "npm:^8.1.0" - checksum: 10c0/e8bf1c8f769594be5d79cb2c2d23c9d0d9042e706cd0534da92b3dd96e5fa8c17fd6fb6c1bbfd1dc0432beabeafc83667909b633fcd5652bda5947ddfceabafa - languageName: node - linkType: hard - -"@changesets/get-github-info@npm:^0.5.2": - version: 0.5.2 - resolution: "@changesets/get-github-info@npm:0.5.2" - dependencies: - dataloader: "npm:^1.4.0" - node-fetch: "npm:^2.5.0" - checksum: 10c0/702c001d939be544490db4903c63d60a38404348bf6658632e9a8e204b1a96289a604a27aa00da67322331e4cfe3592e7175dbd88736449c203f4664a7c69824 - languageName: node - linkType: hard - -"@changesets/types@npm:^5.2.1": - version: 5.2.1 - resolution: "@changesets/types@npm:5.2.1" - checksum: 10c0/2500a5047e28daa4ffdef44ba4afb8f47a923b2466f976e3611a2afb29373152f64ca79c624a7b84d3b0c1d3e44d72f3a82871c21690b36e28073b8cd2825a28 - languageName: node - linkType: hard - -"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.16.2": - version: 6.18.0 - resolution: "@codemirror/autocomplete@npm:6.18.0" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.17.0" - "@lezer/common": "npm:^1.0.0" - peerDependencies: - "@codemirror/language": ^6.0.0 - "@codemirror/state": ^6.0.0 - "@codemirror/view": ^6.0.0 - "@lezer/common": ^1.0.0 - checksum: 10c0/dbcd6a63bd097ba78cbfbcb7f0096a8fbb801a3cabab7d6ff2c0e5b5f9af57b7609837d3a6104d1739bf021795e1204dd9423716e1a6517ab4323e4e5a54c96d - languageName: node - linkType: hard - -"@codemirror/commands@npm:^6.0.0, @codemirror/commands@npm:^6.1.0": - version: 6.6.0 - resolution: "@codemirror/commands@npm:6.6.0" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.4.0" - "@codemirror/view": "npm:^6.27.0" - "@lezer/common": "npm:^1.1.0" - checksum: 10c0/72be283779dafb1dc7ec4a7c80a7911b9edc251944f0a2c8112230154e7e84a0b3dedc3f09277935614b92eb3d3194b32fdbc3e167496c2501e8ee2ed4e42909 - languageName: node - linkType: hard - -"@codemirror/lang-javascript@npm:^6.2.2": - version: 6.2.2 - resolution: "@codemirror/lang-javascript@npm:6.2.2" - dependencies: - "@codemirror/autocomplete": "npm:^6.0.0" - "@codemirror/language": "npm:^6.6.0" - "@codemirror/lint": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.17.0" - "@lezer/common": "npm:^1.0.0" - "@lezer/javascript": "npm:^1.0.0" - checksum: 10c0/348969167fa5f18e8ec7e3614d408a95a54514f5625afcc680377d58a53d0f4ea412dcaeee65f0965e7d96f358d513b5c2744641b21ee5d0d976905b33715e48 - languageName: node - linkType: hard - -"@codemirror/lang-json@npm:^6.0.1": - version: 6.0.1 - resolution: "@codemirror/lang-json@npm:6.0.1" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@lezer/json": "npm:^1.0.0" - checksum: 10c0/c70301ba43d44dbd1ff0ccab6ec6e3fb9825d61d4854b4839441a8144a9c96997acdad16d93199d157308dd80088a5e9f14b66f395c7e79f4dadc6b4e70ce8a8 - languageName: node - linkType: hard - -"@codemirror/lang-yaml@npm:^6.1.1": - version: 6.1.1 - resolution: "@codemirror/lang-yaml@npm:6.1.1" - dependencies: - "@codemirror/autocomplete": "npm:^6.0.0" - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@lezer/common": "npm:^1.2.0" - "@lezer/highlight": "npm:^1.2.0" - "@lezer/yaml": "npm:^1.0.0" - checksum: 10c0/a6952affceacaa0e9ce699683f167eb356df487fa2254889d0067a30a7effe2d358607182da11bd7bc8d885e42fdd0235100a408f57be5a396b2e08179025246 - languageName: node - linkType: hard - -"@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.6.0": - version: 6.10.2 - resolution: "@codemirror/language@npm:6.10.2" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.23.0" - "@lezer/common": "npm:^1.1.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.0.0" - style-mod: "npm:^4.0.0" - checksum: 10c0/ac9b24dffb3aa6f502283dfe2bc4b4038f9fecbed9450fc4a72d408b9a09dc254f9af735b98091531829da163eb116e4cfa95aeacacff4fd36ef95cd9a54c4a6 - languageName: node - linkType: hard - -"@codemirror/lint@npm:^6.0.0": - version: 6.8.1 - resolution: "@codemirror/lint@npm:6.8.1" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - crelt: "npm:^1.0.5" - checksum: 10c0/3e7ca352fe08dd11cea4f3b5cdccff2fd08afb5393fdaf98ac659ef368d9169b4d42618c4f856168910a5d1bae7aa1ab6c72020be85b56ccdeb7f678ceb65b6d - languageName: node - linkType: hard - -"@codemirror/search@npm:^6.0.0": - version: 6.5.6 - resolution: "@codemirror/search@npm:6.5.6" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - crelt: "npm:^1.0.5" - checksum: 10c0/4bb8ca46d105e4b7eb5830c65abc61302f5cc86f0118c5ad3f0fe72d2a7f7309a7394eba8c784a8ac152569e16003f6edf3d69a7da6dac0c7abe96fe5395ed9b - languageName: node - linkType: hard - -"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1, @codemirror/state@npm:^6.4.0": - version: 6.4.1 - resolution: "@codemirror/state@npm:6.4.1" - checksum: 10c0/cdab74d0ca4e262531a257ac419c9c44124f3ace8b0ca1262598a9218fbb6fd8f0afeb4b5ed2f64552a9573a0fc5d55481d4b9b05e9505ef729f9bd0f9469423 - languageName: node - linkType: hard - -"@codemirror/theme-one-dark@npm:^6.0.0": - version: 6.1.2 - resolution: "@codemirror/theme-one-dark@npm:6.1.2" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - "@lezer/highlight": "npm:^1.0.0" - checksum: 10c0/d0d70ce1e03fa7e5d51cc72d8bdef043f30e14a5aee88f4dd71b64e176c3d68629c82390b9cfdab8cc1ac20d35703b65fe9160051fddc873aa67c613d9525a3d - languageName: node - linkType: hard - -"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0, @codemirror/view@npm:^6.28.4": - version: 6.33.0 - resolution: "@codemirror/view@npm:6.33.0" - dependencies: - "@codemirror/state": "npm:^6.4.0" - style-mod: "npm:^4.1.0" - w3c-keyname: "npm:^2.2.4" - checksum: 10c0/d5811048d84ff4682354ac6e59e42ea008e5a425746ecf7c6dca2f6df675b548c25e339040f1da038b318a306cbd90fb279f15b4f694fadc721f0d8d31a68ff8 - languageName: node - linkType: hard - -"@date-fns/tz@npm:^1.0.2": - version: 1.0.2 - resolution: "@date-fns/tz@npm:1.0.2" - checksum: 10c0/d6939116dd64040517e4f19b72d535eac0e6d20d398a88a8353811e65c1d004fa18c34e4cb1fed727defcf008d61b2989e5261e51afe9aa62b38bdb0a9884ef7 - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.2.0": - version: 1.2.0 - resolution: "@emnapi/runtime@npm:1.2.0" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/7005ff8b67724c9e61b6cd79a3decbdb2ce25d24abd4d3d187472f200ee6e573329c30264335125fb136bd813aa9cf9f4f7c9391d04b07dd1e63ce0a3427be57 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/aix-ppc64@npm:0.21.5" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm64@npm:0.21.5" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm@npm:0.21.5" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-x64@npm:0.21.5" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-arm64@npm:0.21.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-x64@npm:0.21.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-arm64@npm:0.21.5" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-x64@npm:0.21.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm64@npm:0.21.5" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm@npm:0.21.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ia32@npm:0.21.5" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-loong64@npm:0.21.5" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-mips64el@npm:0.21.5" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ppc64@npm:0.21.5" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-riscv64@npm:0.21.5" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-s390x@npm:0.21.5" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-x64@npm:0.21.5" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/netbsd-x64@npm:0.21.5" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/openbsd-x64@npm:0.21.5" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/sunos-x64@npm:0.21.5" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-arm64@npm:0.21.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-ia32@npm:0.21.5" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-x64@npm:0.21.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@floating-ui/core@npm:^1.6.0": - version: 1.6.7 - resolution: "@floating-ui/core@npm:1.6.7" - dependencies: - "@floating-ui/utils": "npm:^0.2.7" - checksum: 10c0/5c9ae274854f87ed09a61de758377d444c2b13ade7fd1067d74287b3e66de5340ae1281e48604b631c540855a2595cfc717adf9a2331eaadc4fa6d28e8571f64 - languageName: node - linkType: hard - -"@floating-ui/dom@npm:^1.0.0": - version: 1.6.10 - resolution: "@floating-ui/dom@npm:1.6.10" - dependencies: - "@floating-ui/core": "npm:^1.6.0" - "@floating-ui/utils": "npm:^0.2.7" - checksum: 10c0/ed7d7b400e00b2f31f1b8f11863af2cb95d0d3cd84635186ca31b41d8d9fe7fe12c85e4985617d7df7ed365abad48b327d0bae35934842007b4e1052d9780576 - languageName: node - linkType: hard - -"@floating-ui/react-dom@npm:^2.0.0": - version: 2.1.1 - resolution: "@floating-ui/react-dom@npm:2.1.1" - dependencies: - "@floating-ui/dom": "npm:^1.0.0" - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 10c0/732ab64600c511ceb0563b87bc557aa61789fec4f416a3f092bab89e508fa1d3ee5ade0f42051cc56eb5e4db867b87ab7fd48ce82db9fd4c01d94ffa08f60115 - languageName: node - linkType: hard - -"@floating-ui/utils@npm:^0.2.7": - version: 0.2.7 - resolution: "@floating-ui/utils@npm:0.2.7" - checksum: 10c0/0559ea5df2dc82219bad26e3509e9d2b70f6987e552dc8ddf7d7f5923cfeb7c44bf884567125b1f9cdb122a4c7e6e7ddbc666740bc30b0e4091ccbca63c6fb1c - languageName: node - linkType: hard - -"@fortawesome/fontawesome-common-types@npm:6.6.0": - version: 6.6.0 - resolution: "@fortawesome/fontawesome-common-types@npm:6.6.0" - checksum: 10c0/f76e5959f6ce01355f599126a3a68facba578dc8ebb7ad40fbd22417b7056364a577c1887720ec9653d4efa5b704a01150f5064fc7de237d697fd80e3d9c83aa - languageName: node - linkType: hard - -"@fortawesome/fontawesome-svg-core@npm:^6.6.0": - version: 6.6.0 - resolution: "@fortawesome/fontawesome-svg-core@npm:6.6.0" - dependencies: - "@fortawesome/fontawesome-common-types": "npm:6.6.0" - checksum: 10c0/38e2840791711524a3c57d9ea48a5a2e99da6fa3c657ba6beaad7ec3b8da31489a9e38f42b23d70584c75b579dc1ff8c67e075bc9789032278e4da54bb86ecfe - languageName: node - linkType: hard - -"@fortawesome/free-brands-svg-icons@npm:^6.6.0": - version: 6.6.0 - resolution: "@fortawesome/free-brands-svg-icons@npm:6.6.0" - dependencies: - "@fortawesome/fontawesome-common-types": "npm:6.6.0" - checksum: 10c0/1135a22ff274939da477496f550b6750a1b5fd0ddd0c09bddb1874f2c183a5c8edb519de2cebf6454b12a8457c3eec587bdb6f68e96140cceeb6d02c1ec35479 - languageName: node - linkType: hard - -"@fortawesome/free-solid-svg-icons@npm:^6.6.0": - version: 6.6.0 - resolution: "@fortawesome/free-solid-svg-icons@npm:6.6.0" - dependencies: - "@fortawesome/fontawesome-common-types": "npm:6.6.0" - checksum: 10c0/34828d5e682c6f9d19e3a892ff8a390128fa7dc68768b11c727c11b6a05e5efc929206bfbec83e9d3ae0590a6f6ea22fd5e447fea647e560650f7f3ef1cff543 - languageName: node - linkType: hard - -"@fortawesome/react-fontawesome@npm:^0.2.2": - version: 0.2.2 - resolution: "@fortawesome/react-fontawesome@npm:0.2.2" - dependencies: - prop-types: "npm:^15.8.1" - peerDependencies: - "@fortawesome/fontawesome-svg-core": ~1 || ~6 - react: ">=16.3" - checksum: 10c0/824f96cd9be2e637738de3073450b30fe6b5a91b4f95df804c162b47ddf7d1a43df5ed7439a01e7236e888edc093efad1e61322ac693ddc3ae01147b90318745 - languageName: node - linkType: hard - -"@hookform/resolvers@npm:^3.9.0": - version: 3.9.0 - resolution: "@hookform/resolvers@npm:3.9.0" - peerDependencies: - react-hook-form: ^7.0.0 - checksum: 10c0/0e0e55f63abbd212cf14abbd39afad1f9b6105d6b25ce827fc651b624ed2be467ebe9b186026e0f032062db59ce2370b14e9583b436ae2d057738bdd6f04356c - languageName: node - linkType: hard - -"@img/sharp-darwin-arm64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-darwin-arm64@npm:0.33.5" - dependencies: - "@img/sharp-libvips-darwin-arm64": "npm:1.0.4" - dependenciesMeta: - "@img/sharp-libvips-darwin-arm64": - optional: true - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@img/sharp-darwin-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-darwin-x64@npm:0.33.5" - dependencies: - "@img/sharp-libvips-darwin-x64": "npm:1.0.4" - dependenciesMeta: - "@img/sharp-libvips-darwin-x64": - optional: true - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@img/sharp-libvips-darwin-arm64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.4" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@img/sharp-libvips-darwin-x64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.4" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-arm64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.4" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-arm@npm:1.0.5": - version: 1.0.5 - resolution: "@img/sharp-libvips-linux-arm@npm:1.0.5" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-s390x@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.4" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linux-x64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linux-x64@npm:1.0.4" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@img/sharp-libvips-linuxmusl-x64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.4" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@img/sharp-linux-arm64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-arm64@npm:0.33.5" - dependencies: - "@img/sharp-libvips-linux-arm64": "npm:1.0.4" - dependenciesMeta: - "@img/sharp-libvips-linux-arm64": - optional: true - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-linux-arm@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-arm@npm:0.33.5" - dependencies: - "@img/sharp-libvips-linux-arm": "npm:1.0.5" - dependenciesMeta: - "@img/sharp-libvips-linux-arm": - optional: true - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-linux-s390x@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-s390x@npm:0.33.5" - dependencies: - "@img/sharp-libvips-linux-s390x": "npm:1.0.4" - dependenciesMeta: - "@img/sharp-libvips-linux-s390x": - optional: true - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-linux-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-x64@npm:0.33.5" - dependencies: - "@img/sharp-libvips-linux-x64": "npm:1.0.4" - dependenciesMeta: - "@img/sharp-libvips-linux-x64": - optional: true - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@img/sharp-linuxmusl-arm64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.5" - dependencies: - "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4" - dependenciesMeta: - "@img/sharp-libvips-linuxmusl-arm64": - optional: true - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@img/sharp-linuxmusl-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linuxmusl-x64@npm:0.33.5" - dependencies: - "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4" - dependenciesMeta: - "@img/sharp-libvips-linuxmusl-x64": - optional: true - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@img/sharp-wasm32@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-wasm32@npm:0.33.5" - dependencies: - "@emnapi/runtime": "npm:^1.2.0" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@img/sharp-win32-ia32@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-win32-ia32@npm:0.33.5" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@img/sharp-win32-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-win32-x64@npm:0.33.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" - dependencies: - "@jridgewell/set-array": "npm:^1.2.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 - languageName: node - linkType: hard - -"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.1.0, @lezer/common@npm:^1.2.0": - version: 1.2.1 - resolution: "@lezer/common@npm:1.2.1" - checksum: 10c0/af61436dc026f8deebaded13d8e1beea2ae307cbbfb270116cdedadb8208f0674da9c3b5963128a2b1cd4072b4e90bc8128133f4feaf31b6e801e4568f1a15a6 - languageName: node - linkType: hard - -"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.2.0": - version: 1.2.1 - resolution: "@lezer/highlight@npm:1.2.1" - dependencies: - "@lezer/common": "npm:^1.0.0" - checksum: 10c0/51b4c08596a0dfeec6a7b7ed90a7f2743ab42e7e8ff8b89707fd042860e4e133dbd8243639fcaf077305ae6c303aa74e69794015eb16cb34741f5ac6721f283c - languageName: node - linkType: hard - -"@lezer/javascript@npm:^1.0.0": - version: 1.4.17 - resolution: "@lezer/javascript@npm:1.4.17" - dependencies: - "@lezer/common": "npm:^1.2.0" - "@lezer/highlight": "npm:^1.1.3" - "@lezer/lr": "npm:^1.3.0" - checksum: 10c0/5e69eabd7b6ea58ff828073324282a38567488bd6da1541023f1a66268a0ac9d01cde924f4fad183fcbf630ac33680e6b859a18f6fbec14ffb76073cdccf7b2b - languageName: node - linkType: hard - -"@lezer/json@npm:^1.0.0": - version: 1.0.2 - resolution: "@lezer/json@npm:1.0.2" - dependencies: - "@lezer/common": "npm:^1.2.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.0.0" - checksum: 10c0/a84283b4e4ded682b5e90a068c52155deaeac79e8dc16da0e9904e72633be029a00ad2da26daa259e503ae3b116722985c3e15d9448336e5f0fde59f79b716ad - languageName: node - linkType: hard - -"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.3.0, @lezer/lr@npm:^1.4.0": - version: 1.4.2 - resolution: "@lezer/lr@npm:1.4.2" - dependencies: - "@lezer/common": "npm:^1.0.0" - checksum: 10c0/22bb5d0d4b33d0de5eb0706b7e5b5f2d20f570e112d9110009bd35b62ff10f2eb4eff8da4cf373dd4ddf5e06a304120b8f039add7ed9997c981c13945d5329cd - languageName: node - linkType: hard - -"@lezer/yaml@npm:^1.0.0": - version: 1.0.3 - resolution: "@lezer/yaml@npm:1.0.3" - dependencies: - "@lezer/common": "npm:^1.2.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.4.0" - checksum: 10c0/cef3d0c0a2c48a7e0f36ccc0af948da9394d17b164dcbaf0187d9b472fd4f628b3107d7a4041045181488f1966a94ae65640c932fc8d3bf8c3597813cfb86ae0 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@radix-ui/number@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/number@npm:1.1.0" - checksum: 10c0/a48e34d5ff1484de1b7cf5d7317fefc831d49e96a2229f300fd37b657bd8cfb59c922830c00ec02838ab21de3b299a523474592e4f30882153412ed47edce6a4 - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/primitive@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - checksum: 10c0/912216455537db3ca77f3e7f70174fb2b454fbd4a37a0acb7cfadad9ab6131abdfb787472242574460a3c301edf45738340cc84f6717982710082840fde7d916 - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/primitive@npm:1.1.0" - checksum: 10c0/1dcc8b5401799416ff8bdb15c7189b4536c193220ad8fd348a48b88f804ee38cec7bd03e2b9641f7da24610e2f61f23a306911ce883af92c4e8c1abac634cb61 - languageName: node - linkType: hard - -"@radix-ui/react-accordion@npm:^1.1.2": - version: 1.2.0 - resolution: "@radix-ui/react-accordion@npm:1.2.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-collapsible": "npm:1.1.0" - "@radix-ui/react-collection": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/324d7eb1653f57431297a2f3428f6221edf54d712b94ce9194243cfaef462490bd9d9976ec3cc868f5598f156242068f84d674a3febcf1c8ea8c4115efea0ae2 - languageName: node - linkType: hard - -"@radix-ui/react-arrow@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-arrow@npm:1.1.0" - dependencies: - "@radix-ui/react-primitive": "npm:2.0.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/cbe059dfa5a9c1677478d363bb5fd75b0c7a08221d0ac7f8e7b9aec9dbae9754f6a3518218cf63e4ed53df6c36d193c8d2618d03433a37aa0cb7ee77a60a591f - languageName: node - linkType: hard - -"@radix-ui/react-avatar@npm:^1.0.4": - version: 1.1.0 - resolution: "@radix-ui/react-avatar@npm:1.1.0" - dependencies: - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/6358ae171c886aa66a4b381d847ef8c84b7020adceaea8676f4f434e5229ff06a13022ff611557f548dd4e8739eadf1b0d22111ae3d47e08b5dd1005edcf76a5 - languageName: node - linkType: hard - -"@radix-ui/react-checkbox@npm:^1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-checkbox@npm:1.1.1" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - "@radix-ui/react-use-previous": "npm:1.1.0" - "@radix-ui/react-use-size": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/2d7d35b8319298166905057e9f7fb1d4b51d73bdec6c7c2127d2266e0f053c39586e316ea0da9a24612dfa86b8fc1f5160d4c37f79ae567025b62616de95c2c7 - languageName: node - linkType: hard - -"@radix-ui/react-collapsible@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-collapsible@npm:1.1.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/07d6d0be153d0c56d533e820005caa13a8305ba34b55af74180180113074979bcfd1d7414ba2533272deb659275c0c38eb48004338fd542fdcbd1962925f199f - languageName: node - linkType: hard - -"@radix-ui/react-collection@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-collection@npm:1.1.0" - dependencies: - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-slot": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/fecb9f0871c827070a8794b39c7379fdc7d0855c4b05804f0b395eef39c37b2c2b6779865d6cb35d3bc74b6b380107bd8b3754d1730a34ea88913e6cd0eb84d4 - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-compose-refs@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/be06f8dab35b5a1bffa7a5982fb26218ddade1acb751288333e3b89d7b4a7dfb5a6371be83876dac0ec2ebe0866d295e8618b778608e1965342986ea448040ec - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-compose-refs@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/7e18706084397d9458ca3473d8565b10691da06f6499a78edbcc4bd72cde08f62e91120658d17d58c19fc39d6b1dffe0133cc4535c8f5fce470abd478f6107e5 - languageName: node - linkType: hard - -"@radix-ui/react-context@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-context@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/3de5761b32cc70cd61715527f29d8c699c01ab28c195ced972ccbc7025763a373a68f18c9f948c7a7b922e469fd2df7fee5f7536e3f7bad44ffc06d959359333 - languageName: node - linkType: hard - -"@radix-ui/react-context@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-context@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/c843980f568cc61b512708863ec84c42a02e0f88359b22ad1c0e290cea3e6d7618eccbd2cd37bd974fadaa7636cbed5bda27553722e61197eb53852eaa34f1bb - languageName: node - linkType: hard - -"@radix-ui/react-dialog@npm:1.0.5": - version: 1.0.5 - resolution: "@radix-ui/react-dialog@npm:1.0.5" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-context": "npm:1.0.1" - "@radix-ui/react-dismissable-layer": "npm:1.0.5" - "@radix-ui/react-focus-guards": "npm:1.0.1" - "@radix-ui/react-focus-scope": "npm:1.0.4" - "@radix-ui/react-id": "npm:1.0.1" - "@radix-ui/react-portal": "npm:1.0.4" - "@radix-ui/react-presence": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-slot": "npm:1.0.2" - "@radix-ui/react-use-controllable-state": "npm:1.0.1" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.5" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/c5b3069397379e79857a3203f3ead4d12d87736b59899f02a63e620a07dd1e6704e15523926cdf8e39afe1c945a7ff0f2533c5ea5be1e17c3114820300a51133 - languageName: node - linkType: hard - -"@radix-ui/react-dialog@npm:^1.0.5": - version: 1.1.1 - resolution: "@radix-ui/react-dialog@npm:1.1.1" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-dismissable-layer": "npm:1.1.0" - "@radix-ui/react-focus-guards": "npm:1.1.0" - "@radix-ui/react-focus-scope": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-portal": "npm:1.1.1" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-slot": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.7" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/a21e318e8d45bed22067880f66beb4ea91118a6c0d43aa20de495c0373b53c12dfe28f58196d5b33300573a5e24e064ec53648a576f02366fb5a297d887b0860 - languageName: node - linkType: hard - -"@radix-ui/react-direction@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-direction@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/eb07d8cc3ae2388b824e0a11ae0e3b71fb0c49972b506e249cec9f27a5b7ef4305ee668c98b674833c92e842163549a83beb0a197dec1ec65774bdeeb61f932c - languageName: node - linkType: hard - -"@radix-ui/react-dismissable-layer@npm:1.0.5": - version: 1.0.5 - resolution: "@radix-ui/react-dismissable-layer@npm:1.0.5" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/primitive": "npm:1.0.1" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - "@radix-ui/react-use-escape-keydown": "npm:1.0.3" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/7e4308867aecfb07b506330c1964d94a52247ab9453725613cd326762aa13e483423c250f107219c131b0449600eb8d1576ce3159c2b96e8c978f75e46062cb2 - languageName: node - linkType: hard - -"@radix-ui/react-dismissable-layer@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-dismissable-layer@npm:1.1.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - "@radix-ui/react-use-escape-keydown": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/72967068ab02127b668ecfd0a1863149e2a42d9fd12d3247f51422a41f3d5faa82a147a5b0a8a6ec609eff8fe6baede6fb7d6111f76896656d13567e3ec29ba8 - languageName: node - linkType: hard - -"@radix-ui/react-dropdown-menu@npm:^2.0.6": - version: 2.1.1 - resolution: "@radix-ui/react-dropdown-menu@npm:2.1.1" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-menu": "npm:2.1.1" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/b54f1e41ddc8c3709ba2f8a59621138268d0380aca8399450a234997cc2214e4a6acf1a64ab387558ba39c0bd5839995a668bd71781762daac7618a2d71b4082 - languageName: node - linkType: hard - -"@radix-ui/react-focus-guards@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-focus-guards@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/d5fd4e5aa9d9a87c8ad490b3b4992d6f1d9eddf18e56df2a2bcf8744c4332b275d73377fd193df3e6ba0ad9608dc497709beca5c64de2b834d5f5350b3c9a272 - languageName: node - linkType: hard - -"@radix-ui/react-focus-guards@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-focus-guards@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/23af9ff17244568db9b2e99ae6e5718747a4b656bf12b1b15b0d3adca407988641a930612eca35a61b7e15d1ce312b3db13ea95999fa31ae641aaaac1e325df8 - languageName: node - linkType: hard - -"@radix-ui/react-focus-scope@npm:1.0.4": - version: 1.0.4 - resolution: "@radix-ui/react-focus-scope@npm:1.0.4" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-primitive": "npm:1.0.3" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/2fce0bafcab4e16cf4ed7560bda40654223f3d0add6b231e1c607433030c14e6249818b444b7b58ee7a6ff6bbf8e192c9c81d22c3a5c88c2daade9d1f881b5be - languageName: node - linkType: hard - -"@radix-ui/react-focus-scope@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-focus-scope@npm:1.1.0" - dependencies: - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/2593d4bbd4a3525624675ec1d5a591a44f015f43f449b99a5a33228159b83f445e8f1c6bc6f9f2011387abaeadd3df406623c08d4e795b7ae509795652a1d069 - languageName: node - linkType: hard - -"@radix-ui/react-id@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-id@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/e2859ca58bea171c956098ace7ecf615cf9432f58a118b779a14720746b3adcf0351c36c75de131548672d3cd290ca238198acbd33b88dc4706f98312e9317ad - languageName: node - linkType: hard - -"@radix-ui/react-id@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-id@npm:1.1.0" - dependencies: - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/acf13e29e51ee96336837fc0cfecc306328b20b0e0070f6f0f7aa7a621ded4a1ee5537cfad58456f64bae76caa7f8769231e88dc7dc106197347ee433c275a79 - languageName: node - linkType: hard - -"@radix-ui/react-label@npm:^2.0.2": - version: 2.1.0 - resolution: "@radix-ui/react-label@npm:2.1.0" - dependencies: - "@radix-ui/react-primitive": "npm:2.0.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/282d3b1b72ff14b431b3bb427d66d14253bbd30fad2437d8f4e7d5c0b6a41f6f7ed157460e02fb91b67b1c8cebc65f2c6fe1d3a32f4459d41238fc0fd4719875 - languageName: node - linkType: hard - -"@radix-ui/react-menu@npm:2.1.1": - version: 2.1.1 - resolution: "@radix-ui/react-menu@npm:2.1.1" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-collection": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-dismissable-layer": "npm:1.1.0" - "@radix-ui/react-focus-guards": "npm:1.1.0" - "@radix-ui/react-focus-scope": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-popper": "npm:1.2.0" - "@radix-ui/react-portal": "npm:1.1.1" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-roving-focus": "npm:1.1.0" - "@radix-ui/react-slot": "npm:1.1.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.7" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/2cb11867430276d8db595886ae0e01e67a555676d37e108d5a6c386df23329482115a041b6a4057fad6b855aa423681805c20d1f290fd1502e521e8e55aafb54 - languageName: node - linkType: hard - -"@radix-ui/react-popover@npm:^1.0.7": - version: 1.1.1 - resolution: "@radix-ui/react-popover@npm:1.1.1" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-dismissable-layer": "npm:1.1.0" - "@radix-ui/react-focus-guards": "npm:1.1.0" - "@radix-ui/react-focus-scope": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-popper": "npm:1.2.0" - "@radix-ui/react-portal": "npm:1.1.1" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-slot": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.7" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/4539082143c6c006727cf4a6300479f3dd912e85291d5ed7f084d8a7730acc3b5f6589925ab70eca025d3c78026f52f99c0155e11a35de37fe26b8078e6802b3 - languageName: node - linkType: hard - -"@radix-ui/react-popper@npm:1.2.0": - version: 1.2.0 - resolution: "@radix-ui/react-popper@npm:1.2.0" - dependencies: - "@floating-ui/react-dom": "npm:^2.0.0" - "@radix-ui/react-arrow": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - "@radix-ui/react-use-rect": "npm:1.1.0" - "@radix-ui/react-use-size": "npm:1.1.0" - "@radix-ui/rect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/a78ea534b9822d07153fff0895b6cdf742e7213782b140b3ab94a76df0ca70e6001925aea946e99ca680fc63a7fcca49c1d62e8dc5a2f651692fba3541e180c0 - languageName: node - linkType: hard - -"@radix-ui/react-portal@npm:1.0.4": - version: 1.0.4 - resolution: "@radix-ui/react-portal@npm:1.0.4" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-primitive": "npm:1.0.3" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/fed32f8148b833fe852fb5e2f859979ffdf2fb9a9ef46583b9b52915d764ad36ba5c958a64e61d23395628ccc09d678229ee94cd112941e8fe2575021f820c29 - languageName: node - linkType: hard - -"@radix-ui/react-portal@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-portal@npm:1.1.1" - dependencies: - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/7e7130fcb0d99197322cd97987e1d7279b6c264fb6be3d883cbfcd49267740d83ca17b431e0d98848afd6067a13ee823ca396a8b63ae68f18a728cf70398c830 - languageName: node - linkType: hard - -"@radix-ui/react-presence@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-presence@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1" - "@radix-ui/react-use-layout-effect": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/90780618b265fe794a8f1ddaa5bfd3c71a1127fa79330a14d32722e6265b44452a9dd36efe4e769129d33e57f979f6b8713e2cbf2e2755326aa3b0f337185b6e - languageName: node - linkType: hard - -"@radix-ui/react-presence@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-presence@npm:1.1.0" - dependencies: - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/58acb658b15b72991ad7a234ea90995902c470b3a182aa90ad03145cbbeaa40f211700c444bfa14cf47537cbb6b732e1359bc5396182de839bd680843c11bf31 - languageName: node - linkType: hard - -"@radix-ui/react-primitive@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-primitive@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-slot": "npm:1.0.2" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/67a66ff8898a5e7739eda228ab6f5ce808858da1dce967014138d87e72b6bbfc93dc1467c706d98d1a2b93bf0b6e09233d1a24d31c78227b078444c1a69c42be - languageName: node - linkType: hard - -"@radix-ui/react-primitive@npm:2.0.0": - version: 2.0.0 - resolution: "@radix-ui/react-primitive@npm:2.0.0" - dependencies: - "@radix-ui/react-slot": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/00cb6ca499252ca848c299212ba6976171cea7608b10b3f9a9639d6732dea2df1197ba0d97c001a4fdb29313c3e7fc2a490f6245dd3579617a0ffd85ae964fdd - languageName: node - linkType: hard - -"@radix-ui/react-progress@npm:^1.0.3": - version: 1.1.0 - resolution: "@radix-ui/react-progress@npm:1.1.0" - dependencies: - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/36b722fe274f843162cea186993bc8254ab034341becc88d031e44e1fd3a31dd3c3e7b8fb64e19a02d04da842e3f3b5a7638ed4924cf70f50925889d4439e3ed - languageName: node - linkType: hard - -"@radix-ui/react-radio-group@npm:^1.0.3": - version: 1.2.0 - resolution: "@radix-ui/react-radio-group@npm:1.2.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-roving-focus": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - "@radix-ui/react-use-previous": "npm:1.1.0" - "@radix-ui/react-use-size": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/24764236699e397c65ed32260e91d40681e24f3808b19c1f8fec4757641e3f959a32dacd83f23aaf4abda6c26d28af6ce293e5736f7d6220a129c15953b21ab7 - languageName: node - linkType: hard - -"@radix-ui/react-roving-focus@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-roving-focus@npm:1.1.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-collection": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/ce367d3033a12d639a8d445d2efa090aa4bc5a78125be568f8c8e4e59f30afd51b585a90031ec18cdba19afbaf1974633dbc0c2c3d2a14d9eb1bfea2ddbe5369 - languageName: node - linkType: hard - -"@radix-ui/react-scroll-area@npm:^1.0.5": - version: 1.1.0 - resolution: "@radix-ui/react-scroll-area@npm:1.1.0" - dependencies: - "@radix-ui/number": "npm:1.1.0" - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/46063b17f06bd2fe20ceaceb2fb0c1cd1b2767045d6d721904bc3f5d6726704a77eaf63997a514ca8f43d973da0c6446d7ca04057d9983cb0d46f4be8c01c9f5 - languageName: node - linkType: hard - -"@radix-ui/react-select@npm:^2.0.0": - version: 2.1.1 - resolution: "@radix-ui/react-select@npm:2.1.1" - dependencies: - "@radix-ui/number": "npm:1.1.0" - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-collection": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-dismissable-layer": "npm:1.1.0" - "@radix-ui/react-focus-guards": "npm:1.1.0" - "@radix-ui/react-focus-scope": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-popper": "npm:1.2.0" - "@radix-ui/react-portal": "npm:1.1.1" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-slot": "npm:1.1.0" - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - "@radix-ui/react-use-previous": "npm:1.1.0" - "@radix-ui/react-visually-hidden": "npm:1.1.0" - aria-hidden: "npm:^1.1.1" - react-remove-scroll: "npm:2.5.7" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/f12bce67f49f82e44f04d109f53be195d7a415e89e29aa09ec704899d6a7198486f118f3d1e37aa7afd3e14524951752fc79170ac5bd4c831cdc4032ea1c0382 - languageName: node - linkType: hard - -"@radix-ui/react-separator@npm:^1.0.3": - version: 1.1.0 - resolution: "@radix-ui/react-separator@npm:1.1.0" - dependencies: - "@radix-ui/react-primitive": "npm:2.0.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/0ca9e25db27b6b001f3c0c50b2df9d6cf070b949f183043e263115d694a25b7268fecd670572469a512e556deca25ebb08b3aec4a870f0309eed728eef19ab8a - languageName: node - linkType: hard - -"@radix-ui/react-slider@npm:^1.1.2": - version: 1.2.0 - resolution: "@radix-ui/react-slider@npm:1.2.0" - dependencies: - "@radix-ui/number": "npm:1.1.0" - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-collection": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - "@radix-ui/react-use-previous": "npm:1.1.0" - "@radix-ui/react-use-size": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/46aea4fadf5d2bf8273f0d9189d88a8c4d5fbb304990a1235a0fdf1d463201bec9655785f8c62d60c4aff3e6ab63d8b37c0c7cb23153ebd190f33cf9fa8bc0ea - languageName: node - linkType: hard - -"@radix-ui/react-slot@npm:1.0.2": - version: 1.0.2 - resolution: "@radix-ui/react-slot@npm:1.0.2" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-compose-refs": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/3af6ea4891e6fa8091e666802adffe7718b3cd390a10fa9229a5f40f8efded9f3918ea01b046103d93923d41cc32119505ebb6bde76cad07a87b6cf4f2119347 - languageName: node - linkType: hard - -"@radix-ui/react-slot@npm:1.1.0, @radix-ui/react-slot@npm:^1.0.2": - version: 1.1.0 - resolution: "@radix-ui/react-slot@npm:1.1.0" - dependencies: - "@radix-ui/react-compose-refs": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/a2e8bfb70c440506dd84a1a274f9a8bc433cca37ceae275e53552c9122612e3837744d7fc6f113d6ef1a11491aa914f4add71d76de41cb6d4db72547a8e261ae - languageName: node - linkType: hard - -"@radix-ui/react-switch@npm:^1.0.3": - version: 1.1.0 - resolution: "@radix-ui/react-switch@npm:1.1.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - "@radix-ui/react-use-previous": "npm:1.1.0" - "@radix-ui/react-use-size": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/49a250371dccce2a06564ce5812ffbd13b7b69fffe8473529a8a344d8caf95d4068f7d47bd257228e35802f008ba66af410b4d8456bc4257da237fa657c74d50 - languageName: node - linkType: hard - -"@radix-ui/react-tabs@npm:^1.0.4": - version: 1.1.0 - resolution: "@radix-ui/react-tabs@npm:1.1.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-direction": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-roving-focus": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/d6cb742c36a6918dd37c6a3c531b1f6832916dde26855f6c94baf4a17d20bbb17ffd8ba9844539c568a4484a39bbdf5fc528d44534d1d46d094840836c9ff47d - languageName: node - linkType: hard - -"@radix-ui/react-toggle@npm:^1.0.3": - version: 1.1.0 - resolution: "@radix-ui/react-toggle@npm:1.1.0" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/68af7280b88e1696f0c5b2dfbb53473d45ccc960dc8ae3326aed6086945696f2a4a9d73305a80cd945fb9d33ccf756a3162041d5e89bb713aa5a5231b636b010 - languageName: node - linkType: hard - -"@radix-ui/react-tooltip@npm:^1.1.1": - version: 1.1.2 - resolution: "@radix-ui/react-tooltip@npm:1.1.2" - dependencies: - "@radix-ui/primitive": "npm:1.1.0" - "@radix-ui/react-compose-refs": "npm:1.1.0" - "@radix-ui/react-context": "npm:1.1.0" - "@radix-ui/react-dismissable-layer": "npm:1.1.0" - "@radix-ui/react-id": "npm:1.1.0" - "@radix-ui/react-popper": "npm:1.2.0" - "@radix-ui/react-portal": "npm:1.1.1" - "@radix-ui/react-presence": "npm:1.1.0" - "@radix-ui/react-primitive": "npm:2.0.0" - "@radix-ui/react-slot": "npm:1.1.0" - "@radix-ui/react-use-controllable-state": "npm:1.1.0" - "@radix-ui/react-visually-hidden": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/76f3abcd27f7f673612631abc340a17e6ab0e5d20b901fe4828400de05d4d8a8711392417b028be86a3053a0881b80d0ed41c4e027eb64c1af9fe74db70d3786 - languageName: node - linkType: hard - -"@radix-ui/react-use-callback-ref@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/331b432be1edc960ca148637ae6087220873ee828ceb13bd155926ef8f49e862812de5b379129f6aaefcd11be53715f3237e6caa9a33d9c0abfff43f3ba58938 - languageName: node - linkType: hard - -"@radix-ui/react-use-callback-ref@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-callback-ref@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/e954863f3baa151faf89ac052a5468b42650efca924417470efd1bd254b411a94c69c30de2fdbb90187b38cb984795978e12e30423dc41e4309d93d53b66d819 - languageName: node - linkType: hard - -"@radix-ui/react-use-controllable-state@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/29b069dbf09e48bca321af6272574ad0fc7283174e7d092731a10663fe00c0e6b4bde5e1b5ea67725fe48dcbe8026e7ff0d69d42891c62cbb9ca408498171fbe - languageName: node - linkType: hard - -"@radix-ui/react-use-controllable-state@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-controllable-state@npm:1.1.0" - dependencies: - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/2af883b5b25822ac226e60a6bfde647c0123a76345052a90219026059b3f7225844b2c13a9a16fba859c1cda5fb3d057f2a04503f71780e607516492db4eb3a1 - languageName: node - linkType: hard - -"@radix-ui/react-use-escape-keydown@npm:1.0.3": - version: 1.0.3 - resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - "@radix-ui/react-use-callback-ref": "npm:1.0.1" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/3c94c78902dcb40b60083ee2184614f45c95a189178f52d89323b467bd04bcf5fdb1bc4d43debecd7f0b572c3843c7e04edbcb56f40a4b4b43936fb2770fb8ad - languageName: node - linkType: hard - -"@radix-ui/react-use-escape-keydown@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-escape-keydown@npm:1.1.0" - dependencies: - "@radix-ui/react-use-callback-ref": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/910fd696e5a0994b0e06b9cb68def8a865f47951a013ec240c77db2a9e1e726105602700ef5e5f01af49f2f18fe0e73164f9a9651021f28538ef8a30d91f3fbb - languageName: node - linkType: hard - -"@radix-ui/react-use-layout-effect@npm:1.0.1": - version: 1.0.1 - resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/13cd0c38395c5838bc9a18238020d3bcf67fb340039e6d1cbf438be1b91d64cf6900b78121f3dc9219faeb40dcc7b523ce0f17e4a41631655690e5a30a40886a - languageName: node - linkType: hard - -"@radix-ui/react-use-layout-effect@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-layout-effect@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/9bf87ece1845c038ed95863cfccf9d75f557c2400d606343bab0ab3192b9806b9840e6aa0a0333fdf3e83cf9982632852192f3e68d7d8367bc8c788dfdf8e62b - languageName: node - linkType: hard - -"@radix-ui/react-use-previous@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-previous@npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/9787d24790d4e330715127f2f4db56c4cbed9b0a47f97e11a68582c08a356a53c1ec41c7537382f6fb8d0db25de152770f17430e8eaf0fa59705be97760acbad - languageName: node - linkType: hard - -"@radix-ui/react-use-rect@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-rect@npm:1.1.0" - dependencies: - "@radix-ui/rect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/c2e30150ab49e2cec238cda306fd748c3d47fb96dcff69a3b08e1d19108d80bac239d48f1747a25dadca614e3e967267d43b91e60ea59db2befbc7bea913ff84 - languageName: node - linkType: hard - -"@radix-ui/react-use-size@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-size@npm:1.1.0" - dependencies: - "@radix-ui/react-use-layout-effect": "npm:1.1.0" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/4c8b89037597fdc1824d009e0c941b510c7c6c30f83024cc02c934edd748886786e7d9f36f57323b02ad29833e7fa7e8974d81969b4ab33d8f41661afa4f30a6 - languageName: node - linkType: hard - -"@radix-ui/react-visually-hidden@npm:1.1.0, @radix-ui/react-visually-hidden@npm:^1.0.3": - version: 1.1.0 - resolution: "@radix-ui/react-visually-hidden@npm:1.1.0" - dependencies: - "@radix-ui/react-primitive": "npm:2.0.0" - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 10c0/db138dd5f3c94958a9f836740d4408c89c4a73e770eaba5ead921e69b3c0d196c5cd58323d82829a9bc05a74873c299195dfd8366b9808e53a9a3dbca5a1e5fe - languageName: node - linkType: hard - -"@radix-ui/rect@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/rect@npm:1.1.0" - checksum: 10c0/a26ff7f8708fb5f2f7949baad70a6b2a597d761ee4dd4aadaf1c1a33ea82ea23dfef6ce6366a08310c5d008cdd60b2e626e4ee03fa342bd5f246ddd9d427f6be - languageName: node - linkType: hard - -"@react-hookz/deep-equal@npm:^1.0.4": - version: 1.0.4 - resolution: "@react-hookz/deep-equal@npm:1.0.4" - checksum: 10c0/f48774ccc63506e8de29eb6f3beff1204a5f51e481329f6b38b578bb43b35391eeacd9908f35a7fcca008e4c7e5144be7092103236042a8bcbbe4e7594ed4eb9 - languageName: node - linkType: hard - -"@react-hookz/web@npm:^24.0.4": - version: 24.0.4 - resolution: "@react-hookz/web@npm:24.0.4" - dependencies: - "@react-hookz/deep-equal": "npm:^1.0.4" - peerDependencies: - js-cookie: ^3.0.5 - react: ^16.8 || ^17 || ^18 - react-dom: ^16.8 || ^17 || ^18 - peerDependenciesMeta: - js-cookie: - optional: true - checksum: 10c0/894419b88601938b6b2027c8bc77a7e470de4cf196a2d461d53842b037cae57a2abe8e7279edd01ab56d7c671dd155de7795f6e717331c7fdb89734eafac8769 - languageName: node - linkType: hard - -"@rivet-gg/components@https://github.com/rivet-gg/hub#workspace=@rivet-gg/components&head=09-18-icons_pack": - version: 1.0.0 - resolution: "@rivet-gg/components@https://github.com/rivet-gg/hub.git#workspace=%40rivet-gg%2Fcomponents&commit=0f8e1cf7e5780c32f23ea176ef0ffec213ef77c8" - dependencies: - "@codemirror/lang-javascript": "npm:^6.2.2" - "@codemirror/lang-json": "npm:^6.0.1" - "@codemirror/view": "npm:^6.28.4" - "@hookform/resolvers": "npm:^3.9.0" - "@radix-ui/react-accordion": "npm:^1.1.2" - "@radix-ui/react-avatar": "npm:^1.0.4" - "@radix-ui/react-checkbox": "npm:^1.1.1" - "@radix-ui/react-dialog": "npm:^1.0.5" - "@radix-ui/react-dropdown-menu": "npm:^2.0.6" - "@radix-ui/react-label": "npm:^2.0.2" - "@radix-ui/react-popover": "npm:^1.0.7" - "@radix-ui/react-progress": "npm:^1.0.3" - "@radix-ui/react-radio-group": "npm:^1.0.3" - "@radix-ui/react-scroll-area": "npm:^1.0.5" - "@radix-ui/react-select": "npm:^2.0.0" - "@radix-ui/react-separator": "npm:^1.0.3" - "@radix-ui/react-slider": "npm:^1.1.2" - "@radix-ui/react-slot": "npm:^1.0.2" - "@radix-ui/react-switch": "npm:^1.0.3" - "@radix-ui/react-tabs": "npm:^1.0.4" - "@radix-ui/react-toggle": "npm:^1.0.3" - "@radix-ui/react-tooltip": "npm:^1.1.1" - "@radix-ui/react-visually-hidden": "npm:^1.0.3" - "@react-hookz/web": "npm:^24.0.4" - "@rivet-gg/icons": "npm:^1.0.0" - "@tailwindcss/container-queries": "npm:^0.1.1" - "@tanstack/react-virtual": "npm:^3.10.1" - "@uiw/codemirror-extensions-basic-setup": "npm:^4.23.0" - "@uiw/codemirror-theme-github": "npm:^4.23.0" - "@uiw/react-codemirror": "npm:^4.23.0" - class-variance-authority: "npm:^0.7.0" - clsx: "npm:^2.1.0" - cmdk: "npm:^1.0.0" - date-fns: "npm:^3.6.0" - framer-motion: "npm:^11.2.11" - input-otp: "npm:^1.2.3" - lucide-react: "npm:^0.439.0" - react: "npm:^18.2.0" - react-day-picker: "npm:^9.0.9" - react-dom: "npm:^18.2.0" - react-hook-form: "npm:^7.51.1" - react-resizable-panels: "npm:^2.0.19" - recharts: "npm:^2.12.7" - sonner: "npm:^1.4.41" - tailwind-merge: "npm:^2.2.2" - tailwindcss-animate: "npm:^1.0.7" - zod: "npm:^3.23.8" - checksum: 10c0/2a4232332770aab9beb5a2315f32b596f3264fdccaece813374dfaf333ec3763c6477833ed3ad63a8d83fb0d7ec7ae43210363cd308991e0e42c3e6893aba017 - languageName: node - linkType: hard - -"@rivet-gg/editor@workspace:.": - version: 0.0.0-use.local - resolution: "@rivet-gg/editor@workspace:." - dependencies: - "@fortawesome/fontawesome-svg-core": "npm:^6.6.0" - "@fortawesome/free-brands-svg-icons": "npm:^6.6.0" - "@fortawesome/free-solid-svg-icons": "npm:^6.6.0" - "@fortawesome/react-fontawesome": "npm:^0.2.2" - "@rivet-gg/components": "https://github.com/rivet-gg/hub#workspace=@rivet-gg/components&head=09-18-icons_pack" - "@rivet-gg/icons": "npm:*" - "@sentry/react": "npm:^8.17.0" - "@tanstack/query-broadcast-client-experimental": "npm:^5.50.1" - "@tanstack/query-sync-storage-persister": "npm:^5.50.1" - "@tanstack/react-query": "npm:^5.50.1" - "@tanstack/react-query-devtools": "npm:^5.50.1" - "@tanstack/react-query-persist-client": "npm:^5.50.1" - "@tanstack/react-router": "npm:^1.33.4" - "@tanstack/router-devtools": "npm:^1.33.4" - "@tanstack/router-vite-plugin": "npm:^1.45.2" - "@types/react": "npm:^18.2.66" - "@types/react-dom": "npm:^18.2.22" - "@vitejs/plugin-react": "npm:^4.2.1" - autoprefixer: "npm:^10.4.20" - codemirror-json-schema: "npm:^0.7.8" - hono: "npm:^4.5.9" - ky: "npm:^1.4.0" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" - react-hook-form: "npm:^7.52.0" - superjson: "npm:^2.2.1" - tailwindcss: "npm:^3.4.10" - typescript: "npm:^5.2.2" - vite: "npm:^5.2.0" - vite-plugin-favicons-inject: "npm:^2.2.0" - zod: "npm:^3.23.8" - languageName: unknown - linkType: soft - -"@rivet-gg/icons@https://github.com/rivet-gg/hub#workspace=@rivet-gg/icons&head=09-18-icons_pack": - version: 1.0.0 - resolution: "@rivet-gg/icons@https://github.com/rivet-gg/hub.git#workspace=%40rivet-gg%2Ficons&commit=0f8e1cf7e5780c32f23ea176ef0ffec213ef77c8" - dependencies: - dedent: "npm:^1.5.3" - local-pkg: "npm:^0.5.0" - vite: "npm:^5.2.0" - peerDependencies: - "@fortawesome/fontawesome-svg-core": ^6.5.2 - "@fortawesome/free-brands-svg-icons": ^6.5.2 - "@fortawesome/free-solid-svg-icons": ^6.5.2 - "@fortawesome/react-fontawesome": ^0.2.2 - react: ^18 - react-dom: ^18 - checksum: 10c0/8c9d75056094914a6a5cd4ebfd32853a607ff5eba94cf00d5b8b493965ff1c8a5d8092da96d9089aead8477119dbb07f114a02e0572dc44c7da1eade42bfb46a - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-android-arm64@npm:4.21.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.21.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.21.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.1" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.1" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.21.1": - version: 4.21.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@sagold/json-pointer@npm:^5.1.1, @sagold/json-pointer@npm:^5.1.2": - version: 5.1.2 - resolution: "@sagold/json-pointer@npm:5.1.2" - checksum: 10c0/6e82162852c824ecd5f41a4252a4514565f6e1d154488bb85b9ab1b7c4a483ef64fcbb9b0776762ae4cde63a65e232f5293583721e5742650ebaeb220f795245 - languageName: node - linkType: hard - -"@sagold/json-query@npm:^6.1.3": - version: 6.2.0 - resolution: "@sagold/json-query@npm:6.2.0" - dependencies: - "@sagold/json-pointer": "npm:^5.1.2" - ebnf: "npm:^1.9.1" - checksum: 10c0/64d03526ee81cf762eba564994420027b83c91ce012776ffb1bb12dc866da21ec5752ff6074fa91810ac20723cf5310598ae7a1da672c207f6350483332f68cc - languageName: node - linkType: hard - -"@sentry-internal/browser-utils@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry-internal/browser-utils@npm:8.27.0" - dependencies: - "@sentry/core": "npm:8.27.0" - "@sentry/types": "npm:8.27.0" - "@sentry/utils": "npm:8.27.0" - checksum: 10c0/08b086129d302ff9d8dbc6eb9fd9ce50802ccb1961313b0584d800c83c88d235325aed6f254da46f7af7b2a9a6098ab82a89a11fe68049ea3169b3920495b277 - languageName: node - linkType: hard - -"@sentry-internal/feedback@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry-internal/feedback@npm:8.27.0" - dependencies: - "@sentry/core": "npm:8.27.0" - "@sentry/types": "npm:8.27.0" - "@sentry/utils": "npm:8.27.0" - checksum: 10c0/6d69c984b9347dc46f0edaab7d7a75bd966d1bd57745eff267af35c2daeb24007ee58a3e097a67ca861d4beb5209b8b3604cb5a2cce3305a002091f4fb3d62a0 - languageName: node - linkType: hard - -"@sentry-internal/replay-canvas@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry-internal/replay-canvas@npm:8.27.0" - dependencies: - "@sentry-internal/replay": "npm:8.27.0" - "@sentry/core": "npm:8.27.0" - "@sentry/types": "npm:8.27.0" - "@sentry/utils": "npm:8.27.0" - checksum: 10c0/c4a76c65bc22b448e276c2f169fc911701d2f8ee298dfd3f1dfafd874fe16401ecc6be9dd517f5e4b768aed72cc71ded4c76b7c8d37513d72209d7b809d865d6 - languageName: node - linkType: hard - -"@sentry-internal/replay@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry-internal/replay@npm:8.27.0" - dependencies: - "@sentry-internal/browser-utils": "npm:8.27.0" - "@sentry/core": "npm:8.27.0" - "@sentry/types": "npm:8.27.0" - "@sentry/utils": "npm:8.27.0" - checksum: 10c0/cef069815873d1674f217352f34798535aa6f31b13039655b248410d9dc0aa0602e182ebc3bbc90e598591319f122f79099558ed38e23e6edc20b46248b65f78 - languageName: node - linkType: hard - -"@sentry/browser@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry/browser@npm:8.27.0" - dependencies: - "@sentry-internal/browser-utils": "npm:8.27.0" - "@sentry-internal/feedback": "npm:8.27.0" - "@sentry-internal/replay": "npm:8.27.0" - "@sentry-internal/replay-canvas": "npm:8.27.0" - "@sentry/core": "npm:8.27.0" - "@sentry/types": "npm:8.27.0" - "@sentry/utils": "npm:8.27.0" - checksum: 10c0/9e7707373ab791788c2cfb5995166da3d65978a3723c93a4b94bb94310cba1d96b92f99f8e3521fa44a60fede3db8eede10cfe752fafd8e357562c4a39f588f3 - languageName: node - linkType: hard - -"@sentry/core@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry/core@npm:8.27.0" - dependencies: - "@sentry/types": "npm:8.27.0" - "@sentry/utils": "npm:8.27.0" - checksum: 10c0/8f695b578d40db9f36e841fa072f310c1d28b3291a661ae1cd642c9d88feee72c5f7c023841b393dc341aa62ac6d8c6c04db432e53e6ebe6683ae184a0ff53a1 - languageName: node - linkType: hard - -"@sentry/react@npm:^8.17.0": - version: 8.27.0 - resolution: "@sentry/react@npm:8.27.0" - dependencies: - "@sentry/browser": "npm:8.27.0" - "@sentry/core": "npm:8.27.0" - "@sentry/types": "npm:8.27.0" - "@sentry/utils": "npm:8.27.0" - hoist-non-react-statics: "npm:^3.3.2" - peerDependencies: - react: ^16.14.0 || 17.x || 18.x || 19.x - checksum: 10c0/38d9e5a66e4a5bd6981a1657787a2686aa27ac8c751d530a272b127b943b605911173f2b8c2778fadc55586cd20e805c810c2149e5fe695e3bacd85c84b6f53c - languageName: node - linkType: hard - -"@sentry/types@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry/types@npm:8.27.0" - checksum: 10c0/f5cbd7772c4b1a52c645aa3b640c056841625789c71f3d0d935281a37000f02ce9520626f75945357a701d03bb1a4d9617306ea055239e37466b29e2b237b0bc - languageName: node - linkType: hard - -"@sentry/utils@npm:8.27.0": - version: 8.27.0 - resolution: "@sentry/utils@npm:8.27.0" - dependencies: - "@sentry/types": "npm:8.27.0" - checksum: 10c0/289daaa24fc1f086de5e1ecd9ba3c345daf41b0824892de86490ea9dcdd8df8bd3c8f5718d9613145cda4acb67a96a1d2f7c352d73d6972dcf5d8935f891f18f - languageName: node - linkType: hard - -"@shikijs/core@npm:1.14.1": - version: 1.14.1 - resolution: "@shikijs/core@npm:1.14.1" - dependencies: - "@types/hast": "npm:^3.0.4" - checksum: 10c0/a9779634956010788f346f779a8e445d17101cae64e6769a7a4d6d479ccd5d47e6c897fd7a57445cea6b64f1b79f1126ff4f57dbc6ce28c1533f6b74450d752f - languageName: node - linkType: hard - -"@shikijs/markdown-it@npm:^1.1.7": - version: 1.14.1 - resolution: "@shikijs/markdown-it@npm:1.14.1" - dependencies: - "@shikijs/transformers": "npm:1.14.1" - markdown-it: "npm:^14.1.0" - shiki: "npm:1.14.1" - checksum: 10c0/38ad8bbe9876d96a1367478f7b33e74ce2165aa368da562bed981c95ea6410a5582b3f274764d1d490503e338c5cf49e64d0985f722ed96fb63ee9026a03eef2 - languageName: node - linkType: hard - -"@shikijs/transformers@npm:1.14.1": - version: 1.14.1 - resolution: "@shikijs/transformers@npm:1.14.1" - dependencies: - shiki: "npm:1.14.1" - checksum: 10c0/72dd1b145cfe4e0e11e2a9259ddf8f89545f17f0cd4431d013b957db1b03339e14b99985b2b15eaaa9b58e7381baba087e87eec65e810bac35f243e7f79c426c - languageName: node - linkType: hard - -"@tailwindcss/container-queries@npm:^0.1.1": - version: 0.1.1 - resolution: "@tailwindcss/container-queries@npm:0.1.1" - peerDependencies: - tailwindcss: ">=3.2.0" - checksum: 10c0/336546ddcc60280723f2a92e311cac0acb8b05624c6519675d4b11ae13ed01dba5e622705a9be69cd66ca2c8019032551176546e6920d9634750165ac4c15d8e - languageName: node - linkType: hard - -"@tanstack/history@npm:1.49.7": - version: 1.49.7 - resolution: "@tanstack/history@npm:1.49.7" - checksum: 10c0/1559d51786a98d7c084b088e389e0a806d781d83a231f60210b674a84d20cb4d7fde5493a331df84052e081f182f587fbb13a3cdfe234e7ff4a09f7f6eb55410 - languageName: node - linkType: hard - -"@tanstack/query-broadcast-client-experimental@npm:^5.50.1": - version: 5.52.2 - resolution: "@tanstack/query-broadcast-client-experimental@npm:5.52.2" - dependencies: - "@tanstack/query-core": "npm:5.52.2" - broadcast-channel: "npm:^7.0.0" - checksum: 10c0/6742c3cdfb4a3bedee50be074254acdb10280b052ae2c291cc8c70abfcae837191a165972ecf092f2f0037a1e9e24d3a2998656a5c51321fd8c84d17d405d528 - languageName: node - linkType: hard - -"@tanstack/query-core@npm:5.52.2": - version: 5.52.2 - resolution: "@tanstack/query-core@npm:5.52.2" - checksum: 10c0/34bc28f492272642159e6eb41cc45d05669a91a7a9124dcfa4a9b721696b921c0909234373035c9f51159069d71ee449459f0d528de500cfb07e6eb8fdd8857c - languageName: node - linkType: hard - -"@tanstack/query-devtools@npm:5.51.16": - version: 5.51.16 - resolution: "@tanstack/query-devtools@npm:5.51.16" - checksum: 10c0/40f1fbad77b703b96809b06323962614f9868b6e453fbcfcc1c73f3ff4f479f4ef066706fdfb3c3be33da76122dac21725de42c0f65ac0344d3839688d672c32 - languageName: node - linkType: hard - -"@tanstack/query-persist-client-core@npm:5.52.2": - version: 5.52.2 - resolution: "@tanstack/query-persist-client-core@npm:5.52.2" - dependencies: - "@tanstack/query-core": "npm:5.52.2" - checksum: 10c0/db1ad38ab0f6931c0bbfd2022437bcd47ef4410c0e1f5a2738a5fd09a76a0ce244633b7f3814c8a7261bf0aeade13031b2561e01324717af7070ee8b7248905e - languageName: node - linkType: hard - -"@tanstack/query-sync-storage-persister@npm:^5.50.1": - version: 5.52.2 - resolution: "@tanstack/query-sync-storage-persister@npm:5.52.2" - dependencies: - "@tanstack/query-core": "npm:5.52.2" - "@tanstack/query-persist-client-core": "npm:5.52.2" - checksum: 10c0/7d9bfca4b059a85c424d6e20b90c7553c84d46ca2f20e6a0e139549afd3e158ac4c8395ac69ffb1c42c0a5e2da7882adc65fc994f1e7988bc1d4fbfbc3738806 - languageName: node - linkType: hard - -"@tanstack/react-query-devtools@npm:^5.50.1": - version: 5.52.2 - resolution: "@tanstack/react-query-devtools@npm:5.52.2" - dependencies: - "@tanstack/query-devtools": "npm:5.51.16" - peerDependencies: - "@tanstack/react-query": ^5.52.2 - react: ^18 || ^19 - checksum: 10c0/ccd8ed9b24cc46de1dc639ece99435de3239069e6ab8923c0e661d4434e59351574bff185125e526551f3f0f1f41162d3a53f548f3ba6578f25562e9181d5757 - languageName: node - linkType: hard - -"@tanstack/react-query-persist-client@npm:^5.50.1": - version: 5.52.2 - resolution: "@tanstack/react-query-persist-client@npm:5.52.2" - dependencies: - "@tanstack/query-persist-client-core": "npm:5.52.2" - peerDependencies: - "@tanstack/react-query": ^5.52.2 - react: ^18 || ^19 - checksum: 10c0/0382db044b166279ddd0e1f94a51929eb40af3f2e056675d7661f744acd6e6d0e1c48d02557ccb73a0625f3cd45a831c10360e117fafd8b5c0be9901d11f8cea - languageName: node - linkType: hard - -"@tanstack/react-query@npm:^5.50.1": - version: 5.52.2 - resolution: "@tanstack/react-query@npm:5.52.2" - dependencies: - "@tanstack/query-core": "npm:5.52.2" - peerDependencies: - react: ^18 || ^19 - checksum: 10c0/936ecc8d4fbd2f89b5569ae9a2fe6e3c0af6ea02561de5f882b910662f1db1b0d73d7a9cbd94fd4d569a2c0773b5e629da4752dc62d4f3ebcf165f5b56d80c0e - languageName: node - linkType: hard - -"@tanstack/react-router@npm:^1.33.4": - version: 1.51.2 - resolution: "@tanstack/react-router@npm:1.51.2" - dependencies: - "@tanstack/history": "npm:1.49.7" - "@tanstack/react-store": "npm:^0.5.5" - tiny-invariant: "npm:^1.3.3" - tiny-warning: "npm:^1.0.3" - peerDependencies: - react: ">=18" - react-dom: ">=18" - checksum: 10c0/c5d3967ea1c0620f978069bbd6e22b8f0c9a78ebffc88a4797a446501c10d6fc055233e197896371d1217f1d7e46b71ce36fb54c58eb5490adfcf55703da5408 - languageName: node - linkType: hard - -"@tanstack/react-store@npm:^0.5.5": - version: 0.5.5 - resolution: "@tanstack/react-store@npm:0.5.5" - dependencies: - "@tanstack/store": "npm:0.5.5" - use-sync-external-store: "npm:^1.2.2" - peerDependencies: - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - checksum: 10c0/69064c4b45dc2f42f1d0375612fc629fa6f5a42e1f2af5c42897103a71e15c6faf4f1855f157bb8c876fe6d8215a7b9f6df84466a27fad47d15dbec4d98fa1b8 - languageName: node - linkType: hard - -"@tanstack/react-virtual@npm:^3.10.1": - version: 3.10.5 - resolution: "@tanstack/react-virtual@npm:3.10.5" - dependencies: - "@tanstack/virtual-core": "npm:3.10.5" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/e1407b6b53abed97376fb3b30fa706bbb5797da0ad34f7c13182f808ff63a04add7f4b5001e85e3a33302a12823752c1cb4f40d166b2ee808bcaa3329201c50e - languageName: node - linkType: hard - -"@tanstack/router-devtools@npm:^1.33.4": - version: 1.51.2 - resolution: "@tanstack/router-devtools@npm:1.51.2" - dependencies: - clsx: "npm:^2.1.1" - goober: "npm:^2.1.14" - peerDependencies: - "@tanstack/react-router": ^1.51.2 - react: ">=18" - react-dom: ">=18" - checksum: 10c0/53466973ef5f3b23873ff137563805065c350c598f3fac6e1a90dac179bfdb98dabb5c86f831836ce0ac6c6199ec06afd99a037ea44e9d83746e4e9452bc098b - languageName: node - linkType: hard - -"@tanstack/router-generator@npm:^1.51.0": - version: 1.51.0 - resolution: "@tanstack/router-generator@npm:1.51.0" - dependencies: - prettier: "npm:^3.3.3" - zod: "npm:^3.23.8" - checksum: 10c0/b5b5119094c899903e839e5a1d79576d8c993c3a01987d986564ef1895df6345084b4d11f386fd7c3dee4134d045e551e86c1bc917ba736e1c1eea475340909e - languageName: node - linkType: hard - -"@tanstack/router-plugin@npm:^1.51.0": - version: 1.51.0 - resolution: "@tanstack/router-plugin@npm:1.51.0" - dependencies: - "@babel/core": "npm:^7.25.2" - "@babel/generator": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.3" - "@babel/plugin-syntax-jsx": "npm:^7.24.7" - "@babel/plugin-syntax-typescript": "npm:^7.24.7" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.3" - "@babel/types": "npm:^7.25.2" - "@tanstack/router-generator": "npm:^1.51.0" - "@types/babel__core": "npm:^7.20.5" - "@types/babel__generator": "npm:^7.6.8" - "@types/babel__template": "npm:^7.4.4" - "@types/babel__traverse": "npm:^7.20.6" - babel-dead-code-elimination: "npm:^1.0.6" - chokidar: "npm:^3.6.0" - unplugin: "npm:^1.12.2" - zod: "npm:^3.23.8" - peerDependencies: - "@rsbuild/core": ">=1.0.0" - vite: ">=5.0.0" - webpack: ">=5.92.0" - peerDependenciesMeta: - "@rsbuild/core": - optional: true - vite: - optional: true - webpack: - optional: true - checksum: 10c0/b5c858e7a88e075cd53c97f8994dfd26ed55dd5ff32f075b7cfe7469786cf86010ce4a256df6ac3ccba4bd25ea582173de3cff4dd06f8d5f6062bbe29dfe99fb - languageName: node - linkType: hard - -"@tanstack/router-vite-plugin@npm:^1.45.2": - version: 1.51.0 - resolution: "@tanstack/router-vite-plugin@npm:1.51.0" - dependencies: - "@tanstack/router-plugin": "npm:^1.51.0" - checksum: 10c0/71fac336d63733181014dff5494dea21bfaafae08173db1d8933417fce3a973baae2f404995f5000d348f3fc8ad913d333f7f78625d0cc99523b47c20af70c5d - languageName: node - linkType: hard - -"@tanstack/store@npm:0.5.5": - version: 0.5.5 - resolution: "@tanstack/store@npm:0.5.5" - checksum: 10c0/d06ba882f4196c24ffd1f72f31f3b8939e9fabe642bb03800451cf62b621a60c863c3b4a876384fd13fe3c70bfcae5d230243dba90faa45c15fdaad89e2787f1 - languageName: node - linkType: hard - -"@tanstack/virtual-core@npm:3.10.5": - version: 3.10.5 - resolution: "@tanstack/virtual-core@npm:3.10.5" - checksum: 10c0/844d0a30923636b8fd454688eaf4714375d6fa252baaf5494ec5fd6786183cae6267861b54ca693284c1ab935e2cc142d8f3684e89316dfe0472c5b8c3bf71c8 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.20.5": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff - languageName: node - linkType: hard - -"@types/babel__generator@npm:*, @types/babel__generator@npm:^7.6.8": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" - dependencies: - "@babel/types": "npm:^7.0.0" - checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 - languageName: node - linkType: hard - -"@types/babel__template@npm:*, @types/babel__template@npm:^7.4.4": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" - dependencies: - "@babel/parser": "npm:^7.1.0" - "@babel/types": "npm:^7.0.0" - checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.20.6": - version: 7.20.6 - resolution: "@types/babel__traverse@npm:7.20.6" - dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 - languageName: node - linkType: hard - -"@types/d3-array@npm:^3.0.3": - version: 3.2.1 - resolution: "@types/d3-array@npm:3.2.1" - checksum: 10c0/38bf2c778451f4b79ec81a2288cb4312fe3d6449ecdf562970cc339b60f280f31c93a024c7ff512607795e79d3beb0cbda123bb07010167bce32927f71364bca - languageName: node - linkType: hard - -"@types/d3-color@npm:*": - version: 3.1.3 - resolution: "@types/d3-color@npm:3.1.3" - checksum: 10c0/65eb0487de606eb5ad81735a9a5b3142d30bc5ea801ed9b14b77cb14c9b909f718c059f13af341264ee189acf171508053342142bdf99338667cea26a2d8d6ae - languageName: node - linkType: hard - -"@types/d3-ease@npm:^3.0.0": - version: 3.0.2 - resolution: "@types/d3-ease@npm:3.0.2" - checksum: 10c0/aff5a1e572a937ee9bff6465225d7ba27d5e0c976bd9eacdac2e6f10700a7cb0c9ea2597aff6b43a6ed850a3210030870238894a77ec73e309b4a9d0333f099c - languageName: node - linkType: hard - -"@types/d3-interpolate@npm:^3.0.1": - version: 3.0.4 - resolution: "@types/d3-interpolate@npm:3.0.4" - dependencies: - "@types/d3-color": "npm:*" - checksum: 10c0/066ebb8da570b518dd332df6b12ae3b1eaa0a7f4f0c702e3c57f812cf529cc3500ec2aac8dc094f31897790346c6b1ebd8cd7a077176727f4860c2b181a65ca4 - languageName: node - linkType: hard - -"@types/d3-path@npm:*": - version: 3.1.0 - resolution: "@types/d3-path@npm:3.1.0" - checksum: 10c0/85e8b3aa968a60a5b33198ade06ae7ffedcf9a22d86f24859ff58e014b053ccb7141ec163b78d547bc8215bb12bb54171c666057ab6156912814005b686afb31 - languageName: node - linkType: hard - -"@types/d3-scale@npm:^4.0.2": - version: 4.0.8 - resolution: "@types/d3-scale@npm:4.0.8" - dependencies: - "@types/d3-time": "npm:*" - checksum: 10c0/57de90e4016f640b83cb960b7e3a0ab3ed02e720898840ddc5105264ffcfea73336161442fdc91895377c2d2f91904d637282f16852b8535b77e15a761c8e99e - languageName: node - linkType: hard - -"@types/d3-shape@npm:^3.1.0": - version: 3.1.6 - resolution: "@types/d3-shape@npm:3.1.6" - dependencies: - "@types/d3-path": "npm:*" - checksum: 10c0/0625715925d3c7ed3d44ce998b42c993f063c31605b6e4a8046c4be0fe724e2d214fc83e86d04f429a30a6e1f439053e92b0d9e59e1180c3a5327b4a6e79fa0a - languageName: node - linkType: hard - -"@types/d3-time@npm:*, @types/d3-time@npm:^3.0.0": - version: 3.0.3 - resolution: "@types/d3-time@npm:3.0.3" - checksum: 10c0/245a8aadca504df27edf730de502e47a68f16ae795c86b5ca35e7afa91c133aa9ef4d08778f8cf1ed2be732f89a4105ba4b437ce2afbdfd17d3d937b6ba5f568 - languageName: node - linkType: hard - -"@types/d3-timer@npm:^3.0.0": - version: 3.0.2 - resolution: "@types/d3-timer@npm:3.0.2" - checksum: 10c0/c644dd9571fcc62b1aa12c03bcad40571553020feeb5811f1d8a937ac1e65b8a04b759b4873aef610e28b8714ac71c9885a4d6c127a048d95118f7e5b506d9e1 - languageName: node - linkType: hard - -"@types/estree@npm:1.0.5": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d - languageName: node - linkType: hard - -"@types/hast@npm:^3.0.4": - version: 3.0.4 - resolution: "@types/hast@npm:3.0.4" - dependencies: - "@types/unist": "npm:*" - checksum: 10c0/3249781a511b38f1d330fd1e3344eed3c4e7ea8eff82e835d35da78e637480d36fad37a78be5a7aed8465d237ad0446abc1150859d0fde395354ea634decf9f7 - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.12": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - -"@types/node@npm:^20.4.2": - version: 20.16.2 - resolution: "@types/node@npm:20.16.2" - dependencies: - undici-types: "npm:~6.19.2" - checksum: 10c0/74fac185dbd2c6b301cde75747c1cd6c9ca1ad7266147ea107a798837f40b8a05991177ebd7925fc7450d51334096259d186afad6e0d22864b7c97f8afef6ba7 - languageName: node - linkType: hard - -"@types/prop-types@npm:*": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: 10c0/1babcc7db6a1177779f8fde0ccc78d64d459906e6ef69a4ed4dd6339c920c2e05b074ee5a92120fe4e9d9f1a01c952f843ebd550bee2332fc2ef81d1706878f8 - languageName: node - linkType: hard - -"@types/react-dom@npm:^18.2.22": - version: 18.3.0 - resolution: "@types/react-dom@npm:18.3.0" - dependencies: - "@types/react": "npm:*" - checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b - languageName: node - linkType: hard - -"@types/react@npm:*, @types/react@npm:^18.2.66": - version: 18.3.4 - resolution: "@types/react@npm:18.3.4" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10c0/5c52e1e6f540cff21e3c2a5212066d02e005f6fb21e4a536a29097fae878db9f407cd7a4b43778f51359349c5f692e08bc77ddb5f5cecbfca9ca4d4e3c91a48e - languageName: node - linkType: hard - -"@types/unist@npm:*": - version: 3.0.3 - resolution: "@types/unist@npm:3.0.3" - checksum: 10c0/2b1e4adcab78388e088fcc3c0ae8700f76619dbcb4741d7d201f87e2cb346bfc29a89003cfea2d76c996e1061452e14fcd737e8b25aacf949c1f2d6b2bc3dd60 - languageName: node - linkType: hard - -"@uiw/codemirror-extensions-basic-setup@npm:4.23.0, @uiw/codemirror-extensions-basic-setup@npm:^4.23.0": - version: 4.23.0 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.23.0" - dependencies: - "@codemirror/autocomplete": "npm:^6.0.0" - "@codemirror/commands": "npm:^6.0.0" - "@codemirror/language": "npm:^6.0.0" - "@codemirror/lint": "npm:^6.0.0" - "@codemirror/search": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - peerDependencies: - "@codemirror/autocomplete": ">=6.0.0" - "@codemirror/commands": ">=6.0.0" - "@codemirror/language": ">=6.0.0" - "@codemirror/lint": ">=6.0.0" - "@codemirror/search": ">=6.0.0" - "@codemirror/state": ">=6.0.0" - "@codemirror/view": ">=6.0.0" - checksum: 10c0/951ce6f6b771c3a6c61a3e031e59e1a20bad3f9f36815743ca96a1c90bdb6b1f9bc956beda41d61c628e196e8c333512fa9e8d5ca3b5121901d294db926de31f - languageName: node - linkType: hard - -"@uiw/codemirror-theme-github@npm:^4.23.0": - version: 4.23.0 - resolution: "@uiw/codemirror-theme-github@npm:4.23.0" - dependencies: - "@uiw/codemirror-themes": "npm:4.23.0" - checksum: 10c0/f61b833d602c4b8e2754dc657f40692abb7dafb28381329f2ee9d322ddb4a93c75db34080b3bb47d7ec0c9722bdf79be47c9368407486bb2e5e7bf2167384e57 - languageName: node - linkType: hard - -"@uiw/codemirror-themes@npm:4.23.0": - version: 4.23.0 - resolution: "@uiw/codemirror-themes@npm:4.23.0" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - peerDependencies: - "@codemirror/language": ">=6.0.0" - "@codemirror/state": ">=6.0.0" - "@codemirror/view": ">=6.0.0" - checksum: 10c0/2e3408037434424da89495e647703f9eac27bf4d53c4ab63faa1265021c24fa28c3ca084e3b4ca2c5ac9c6ef3336d707b4eefca8ebfea988ecd1beb66afce834 - languageName: node - linkType: hard - -"@uiw/react-codemirror@npm:^4.23.0": - version: 4.23.0 - resolution: "@uiw/react-codemirror@npm:4.23.0" - dependencies: - "@babel/runtime": "npm:^7.18.6" - "@codemirror/commands": "npm:^6.1.0" - "@codemirror/state": "npm:^6.1.1" - "@codemirror/theme-one-dark": "npm:^6.0.0" - "@uiw/codemirror-extensions-basic-setup": "npm:4.23.0" - codemirror: "npm:^6.0.0" - peerDependencies: - "@babel/runtime": ">=7.11.0" - "@codemirror/state": ">=6.0.0" - "@codemirror/theme-one-dark": ">=6.0.0" - "@codemirror/view": ">=6.0.0" - codemirror: ">=6.0.0" - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 10c0/3bdd3bc442624f6f1c6b00b5cb447c9a57c2ccfce3b0813b8631a365b5b7408957eb1a6ac64813520658273ff18fb189a7097df0574905d672139d25f8c9259e - languageName: node - linkType: hard - -"@vitejs/plugin-react@npm:^4.2.1": - version: 4.3.1 - resolution: "@vitejs/plugin-react@npm:4.3.1" - dependencies: - "@babel/core": "npm:^7.24.5" - "@babel/plugin-transform-react-jsx-self": "npm:^7.24.5" - "@babel/plugin-transform-react-jsx-source": "npm:^7.24.1" - "@types/babel__core": "npm:^7.20.5" - react-refresh: "npm:^0.14.2" - peerDependencies: - vite: ^4.2.0 || ^5.0.0 - checksum: 10c0/39a027feddfd6b3e307121d79631462ef1aae05714ba7a2f9a73d240d0f89c2bf281132568eb27b55d6ddaf08d86ad1bd8b0066090240e570de8c6320eb9a903 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 - languageName: node - linkType: hard - -"acorn@npm:^8.11.3, acorn@npm:^8.12.1": - version: 8.12.1 - resolution: "acorn@npm:8.12.1" - bin: - acorn: bin/acorn - checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c - languageName: node - linkType: hard - -"any-promise@npm:^1.0.0": - version: 1.3.0 - resolution: "any-promise@npm:1.3.0" - checksum: 10c0/60f0298ed34c74fef50daab88e8dab786036ed5a7fad02e012ab57e376e0a0b4b29e83b95ea9b5e7d89df762f5f25119b83e00706ecaccb22cfbacee98d74889 - languageName: node - linkType: hard - -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - -"arg@npm:^5.0.2": - version: 5.0.2 - resolution: "arg@npm:5.0.2" - checksum: 10c0/ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e - languageName: node - linkType: hard - -"aria-hidden@npm:^1.1.1": - version: 1.2.4 - resolution: "aria-hidden@npm:1.2.4" - dependencies: - tslib: "npm:^2.0.0" - checksum: 10c0/8abcab2e1432efc4db415e97cb3959649ddf52c8fc815d7384f43f3d3abf56f1c12852575d00df9a8927f421d7e0712652dd5f8db244ea57634344e29ecfc74a - languageName: node - linkType: hard - -"autoprefixer@npm:^10.4.20": - version: 10.4.20 - resolution: "autoprefixer@npm:10.4.20" - dependencies: - browserslist: "npm:^4.23.3" - caniuse-lite: "npm:^1.0.30001646" - fraction.js: "npm:^4.3.7" - normalize-range: "npm:^0.1.2" - picocolors: "npm:^1.0.1" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.1.0 - bin: - autoprefixer: bin/autoprefixer - checksum: 10c0/e1f00978a26e7c5b54ab12036d8c13833fad7222828fc90914771b1263f51b28c7ddb5803049de4e77696cbd02bb25cfc3634e80533025bb26c26aacdf938940 - languageName: node - linkType: hard - -"babel-dead-code-elimination@npm:^1.0.6": - version: 1.0.6 - resolution: "babel-dead-code-elimination@npm:1.0.6" - dependencies: - "@babel/core": "npm:^7.23.7" - "@babel/parser": "npm:^7.23.6" - "@babel/traverse": "npm:^7.23.7" - "@babel/types": "npm:^7.23.6" - checksum: 10c0/0cdf2ec2f43193cab7b8d9553b3fcbc6a0f3ebe74745084dad2fd7698b64eebd1d296c7653a7cb9071fdc5cca3342fb332d7401a64ffc4e6e98694ee432f7424 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.3.0 - resolution: "binary-extensions@npm:2.3.0" - checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f - languageName: node - linkType: hard - -"braces@npm:^3.0.3, braces@npm:~3.0.2": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"broadcast-channel@npm:^7.0.0": - version: 7.0.0 - resolution: "broadcast-channel@npm:7.0.0" - dependencies: - "@babel/runtime": "npm:7.23.4" - oblivious-set: "npm:1.4.0" - p-queue: "npm:6.6.2" - unload: "npm:2.4.1" - checksum: 10c0/5cf04d2e4d2920f955d39b382efc32be0cf2f265bf07e0770d50c4d0691c7bf02613cc9b334132b874dc092b0db6b9fc463c4c7883be1ce3d2588c9388cae54f - languageName: node - linkType: hard - -"browserslist@npm:^4.23.1, browserslist@npm:^4.23.3": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" - dependencies: - caniuse-lite: "npm:^1.0.30001646" - electron-to-chromium: "npm:^1.5.4" - node-releases: "npm:^2.0.18" - update-browserslist-db: "npm:^1.1.0" - bin: - browserslist: cli.js - checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 - languageName: node - linkType: hard - -"cacache@npm:^18.0.0": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" - dependencies: - "@npmcli/fs": "npm:^3.1.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f - languageName: node - linkType: hard - -"camelcase-css@npm:^2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 10c0/1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001653 - resolution: "caniuse-lite@npm:1.0.30001653" - checksum: 10c0/7aedf037541c93744148f599daea93d46d1f93ab4347997189efa2d1f003af8eadd7e1e05347ef09261ac1dc635ce375b8c6c00796245fffb4120a124824a14f - languageName: node - linkType: hard - -"chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"class-variance-authority@npm:^0.7.0": - version: 0.7.0 - resolution: "class-variance-authority@npm:0.7.0" - dependencies: - clsx: "npm:2.0.0" - checksum: 10c0/e11c57edf4bf50ef1c97bae41d68885afbaaedba26c48b7cc5dfb033390fed7012147e9532168d8c4f3497fce4dff15e20e6e60b8c9c9a4b0fe26b0e804513db - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - -"clsx@npm:2.0.0": - version: 2.0.0 - resolution: "clsx@npm:2.0.0" - checksum: 10c0/c09f43b3144a0b7826b6b11b6a111b2c7440831004eecc02d333533c5e58ef0aa5f2dce071d3b25fbb8c8ea97b45df96c74bcc1d51c8c2027eb981931107b0cd - languageName: node - linkType: hard - -"clsx@npm:^2.0.0, clsx@npm:^2.1.0, clsx@npm:^2.1.1": - version: 2.1.1 - resolution: "clsx@npm:2.1.1" - checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 - languageName: node - linkType: hard - -"cmdk@npm:^1.0.0": - version: 1.0.0 - resolution: "cmdk@npm:1.0.0" - dependencies: - "@radix-ui/react-dialog": "npm:1.0.5" - "@radix-ui/react-primitive": "npm:1.0.3" - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/bf1c9cfce46f2f507ab95735fa08c9aa27e76ecdff87720cc51ae89dbf4814b7559668458f66ff4c3932a88a6b9d8817be05c3cc4ff98bc40c3645acf4a97376 - languageName: node - linkType: hard - -"codemirror-json-schema@npm:^0.7.8": - version: 0.7.8 - resolution: "codemirror-json-schema@npm:0.7.8" - dependencies: - "@changesets/changelog-github": "npm:^0.4.8" - "@codemirror/autocomplete": "npm:^6.16.2" - "@codemirror/lang-json": "npm:^6.0.1" - "@codemirror/lang-yaml": "npm:^6.1.1" - "@sagold/json-pointer": "npm:^5.1.1" - "@shikijs/markdown-it": "npm:^1.1.7" - "@types/json-schema": "npm:^7.0.12" - "@types/node": "npm:^20.4.2" - codemirror-json5: "npm:^1.0.3" - json-schema: "npm:^0.4.0" - json-schema-library: "npm:^9.3.5" - json5: "npm:^2.2.3" - markdown-it: "npm:^14.0.0" - vite-tsconfig-paths: "npm:^4.3.1" - yaml: "npm:^2.3.4" - peerDependencies: - "@codemirror/language": ^6.10.2 - "@codemirror/lint": ^6.8.0 - "@codemirror/state": ^6.4.1 - "@codemirror/view": ^6.27.0 - "@lezer/common": ^1.2.1 - dependenciesMeta: - "@codemirror/autocomplete": - optional: true - "@codemirror/lang-json": - optional: true - "@codemirror/lang-yaml": - optional: true - codemirror-json5: - optional: true - json5: - optional: true - checksum: 10c0/374326f8bca65d7c6756fceaf1dee6bc86d89e508bb7d9ae2b2252706c80a332e62e9992502cb9143c02779346eab16d36dbc843026fd8a7f43bfba040c54652 - languageName: node - linkType: hard - -"codemirror-json5@npm:^1.0.3": - version: 1.0.3 - resolution: "codemirror-json5@npm:1.0.3" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - "@lezer/common": "npm:^1.0.0" - "@lezer/highlight": "npm:^1.0.0" - json5: "npm:^2.2.1" - lezer-json5: "npm:^2.0.2" - checksum: 10c0/a842f3f34d3286abeb86879b89b555ca68b08447303f4e8fac9abfb71e6b6df30ab3815ecfae0cf790976749e32ef8cd7baae1db6dd7a4a8e6e40696a14d275f - languageName: node - linkType: hard - -"codemirror@npm:^6.0.0": - version: 6.0.1 - resolution: "codemirror@npm:6.0.1" - dependencies: - "@codemirror/autocomplete": "npm:^6.0.0" - "@codemirror/commands": "npm:^6.0.0" - "@codemirror/language": "npm:^6.0.0" - "@codemirror/lint": "npm:^6.0.0" - "@codemirror/search": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - checksum: 10c0/219b0f6ee91d373380fba2e0564a2665990a3cdada0b01861768005b09061187c58eeb3db96aef486777b02b77b50a50ee843635e3743c47d3725034913c4b60 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: "npm:^1.0.0" - simple-swizzle: "npm:^0.2.2" - checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 - languageName: node - linkType: hard - -"color@npm:^4.2.3": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: "npm:^2.0.1" - color-string: "npm:^1.9.0" - checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 - languageName: node - linkType: hard - -"commander@npm:^2.19.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 - languageName: node - linkType: hard - -"commander@npm:^4.0.0": - version: 4.1.1 - resolution: "commander@npm:4.1.1" - checksum: 10c0/84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab - languageName: node - linkType: hard - -"confbox@npm:^0.1.7": - version: 0.1.7 - resolution: "confbox@npm:0.1.7" - checksum: 10c0/18b40c2f652196a833f3f1a5db2326a8a579cd14eacabfe637e4fc8cb9b68d7cf296139a38c5e7c688ce5041bf46f9adce05932d43fde44cf7e012840b5da111 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b - languageName: node - linkType: hard - -"copy-anything@npm:^3.0.2": - version: 3.0.5 - resolution: "copy-anything@npm:3.0.5" - dependencies: - is-what: "npm:^4.1.8" - checksum: 10c0/01eadd500c7e1db71d32d95a3bfaaedcb839ef891c741f6305ab0461398056133de08f2d1bf4c392b364e7bdb7ce498513896e137a7a183ac2516b065c28a4fe - languageName: node - linkType: hard - -"crelt@npm:^1.0.5": - version: 1.0.6 - resolution: "crelt@npm:1.0.6" - checksum: 10c0/e0fb76dff50c5eb47f2ea9b786c17f9425c66276025adee80876bdbf4a84ab72e899e56d3928431ab0cb057a105ef704df80fe5726ef0f7b1658f815521bdf09 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - -"csstype@npm:^3.0.2": - version: 3.1.3 - resolution: "csstype@npm:3.1.3" - checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 - languageName: node - linkType: hard - -"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": - version: 3.2.4 - resolution: "d3-array@npm:3.2.4" - dependencies: - internmap: "npm:1 - 2" - checksum: 10c0/08b95e91130f98c1375db0e0af718f4371ccacef7d5d257727fe74f79a24383e79aba280b9ffae655483ffbbad4fd1dec4ade0119d88c4749f388641c8bf8c50 - languageName: node - linkType: hard - -"d3-color@npm:1 - 3": - version: 3.1.0 - resolution: "d3-color@npm:3.1.0" - checksum: 10c0/a4e20e1115fa696fce041fbe13fbc80dc4c19150fa72027a7c128ade980bc0eeeba4bcf28c9e21f0bce0e0dbfe7ca5869ef67746541dcfda053e4802ad19783c - languageName: node - linkType: hard - -"d3-ease@npm:^3.0.1": - version: 3.0.1 - resolution: "d3-ease@npm:3.0.1" - checksum: 10c0/fec8ef826c0cc35cda3092c6841e07672868b1839fcaf556e19266a3a37e6bc7977d8298c0fcb9885e7799bfdcef7db1baaba9cd4dcf4bc5e952cf78574a88b0 - languageName: node - linkType: hard - -"d3-format@npm:1 - 3": - version: 3.1.0 - resolution: "d3-format@npm:3.1.0" - checksum: 10c0/049f5c0871ebce9859fc5e2f07f336b3c5bfff52a2540e0bac7e703fce567cd9346f4ad1079dd18d6f1e0eaa0599941c1810898926f10ac21a31fd0a34b4aa75 - languageName: node - linkType: hard - -"d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": - version: 3.0.1 - resolution: "d3-interpolate@npm:3.0.1" - dependencies: - d3-color: "npm:1 - 3" - checksum: 10c0/19f4b4daa8d733906671afff7767c19488f51a43d251f8b7f484d5d3cfc36c663f0a66c38fe91eee30f40327443d799be17169f55a293a3ba949e84e57a33e6a - languageName: node - linkType: hard - -"d3-path@npm:^3.1.0": - version: 3.1.0 - resolution: "d3-path@npm:3.1.0" - checksum: 10c0/dc1d58ec87fa8319bd240cf7689995111a124b141428354e9637aa83059eb12e681f77187e0ada5dedfce346f7e3d1f903467ceb41b379bfd01cd8e31721f5da - languageName: node - linkType: hard - -"d3-scale@npm:^4.0.2": - version: 4.0.2 - resolution: "d3-scale@npm:4.0.2" - dependencies: - d3-array: "npm:2.10.0 - 3" - d3-format: "npm:1 - 3" - d3-interpolate: "npm:1.2.0 - 3" - d3-time: "npm:2.1.1 - 3" - d3-time-format: "npm:2 - 4" - checksum: 10c0/65d9ad8c2641aec30ed5673a7410feb187a224d6ca8d1a520d68a7d6eac9d04caedbff4713d1e8545be33eb7fec5739983a7ab1d22d4e5ad35368c6729d362f1 - languageName: node - linkType: hard - -"d3-shape@npm:^3.1.0": - version: 3.2.0 - resolution: "d3-shape@npm:3.2.0" - dependencies: - d3-path: "npm:^3.1.0" - checksum: 10c0/f1c9d1f09926daaf6f6193ae3b4c4b5521e81da7d8902d24b38694517c7f527ce3c9a77a9d3a5722ad1e3ff355860b014557b450023d66a944eabf8cfde37132 - languageName: node - linkType: hard - -"d3-time-format@npm:2 - 4": - version: 4.1.0 - resolution: "d3-time-format@npm:4.1.0" - dependencies: - d3-time: "npm:1 - 3" - checksum: 10c0/735e00fb25a7fd5d418fac350018713ae394eefddb0d745fab12bbff0517f9cdb5f807c7bbe87bb6eeb06249662f8ea84fec075f7d0cd68609735b2ceb29d206 - languageName: node - linkType: hard - -"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.0.0": - version: 3.1.0 - resolution: "d3-time@npm:3.1.0" - dependencies: - d3-array: "npm:2 - 3" - checksum: 10c0/a984f77e1aaeaa182679b46fbf57eceb6ebdb5f67d7578d6f68ef933f8eeb63737c0949991618a8d29472dbf43736c7d7f17c452b2770f8c1271191cba724ca1 - languageName: node - linkType: hard - -"d3-timer@npm:^3.0.1": - version: 3.0.1 - resolution: "d3-timer@npm:3.0.1" - checksum: 10c0/d4c63cb4bb5461d7038aac561b097cd1c5673969b27cbdd0e87fa48d9300a538b9e6f39b4a7f0e3592ef4f963d858c8a9f0e92754db73116770856f2fc04561a - languageName: node - linkType: hard - -"dataloader@npm:^1.4.0": - version: 1.4.0 - resolution: "dataloader@npm:1.4.0" - checksum: 10c0/5fa4c843b9e60195092f1fc7e2acaff318ed46886dc670ddff683bc560f12d4079e6d1e77749501b7e111a8582d26a2aa2a2fbe6d7d5e1520cef64f4e1fd242d - languageName: node - linkType: hard - -"date-fns@npm:^3.6.0": - version: 3.6.0 - resolution: "date-fns@npm:3.6.0" - checksum: 10c0/0b5fb981590ef2f8e5a3ba6cd6d77faece0ea7f7158948f2eaae7bbb7c80a8f63ae30b01236c2923cf89bb3719c33aeb150c715ea4fe4e86e37dcf06bed42fb6 - languageName: node - linkType: hard - -"date-fns@npm:^4.1.0": - version: 4.1.0 - resolution: "date-fns@npm:4.1.0" - checksum: 10c0/b79ff32830e6b7faa009590af6ae0fb8c3fd9ffad46d930548fbb5acf473773b4712ae887e156ba91a7b3dc30591ce0f517d69fd83bd9c38650fdc03b4e0bac8 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": - version: 4.3.6 - resolution: "debug@npm:4.3.6" - dependencies: - ms: "npm:2.1.2" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 - languageName: node - linkType: hard - -"decimal.js-light@npm:^2.4.1": - version: 2.5.1 - resolution: "decimal.js-light@npm:2.5.1" - checksum: 10c0/4fd33f535aac9e5bd832796831b65d9ec7914ad129c7437b3ab991b0c2eaaa5a57e654e6174c4a17f1b3895ea366f0c1ab4955cdcdf7cfdcf3ad5a58b456c020 - languageName: node - linkType: hard - -"dedent@npm:^1.5.3": - version: 1.5.3 - resolution: "dedent@npm:1.5.3" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 - languageName: node - linkType: hard - -"deepmerge@npm:^4.3.1": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 - languageName: node - linkType: hard - -"detect-libc@npm:^2.0.3": - version: 2.0.3 - resolution: "detect-libc@npm:2.0.3" - checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 - languageName: node - linkType: hard - -"detect-node-es@npm:^1.1.0": - version: 1.1.0 - resolution: "detect-node-es@npm:1.1.0" - checksum: 10c0/e562f00de23f10c27d7119e1af0e7388407eb4b06596a25f6d79a360094a109ff285de317f02b090faae093d314cf6e73ac3214f8a5bb3a0def5bece94557fbe - languageName: node - linkType: hard - -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: 10c0/95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b - languageName: node - linkType: hard - -"discontinuous-range@npm:1.0.0": - version: 1.0.0 - resolution: "discontinuous-range@npm:1.0.0" - checksum: 10c0/487b105f83c1cc528e25e65d3c4b73958ec79769b7bd0e264414702a23a7e2b282c72982b4bef4af29fcab53f47816c3f0a5c40d85a99a490f4bc35b83dc00f8 - languageName: node - linkType: hard - -"dlv@npm:^1.1.3": - version: 1.1.3 - resolution: "dlv@npm:1.1.3" - checksum: 10c0/03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 - languageName: node - linkType: hard - -"dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" - dependencies: - "@babel/runtime": "npm:^7.8.7" - csstype: "npm:^3.0.2" - checksum: 10c0/f735074d66dd759b36b158fa26e9d00c9388ee0e8c9b16af941c38f014a37fc80782de83afefd621681b19ac0501034b4f1c4a3bff5caa1b8667f0212b5e124c - languageName: node - linkType: hard - -"dotenv@npm:^8.1.0": - version: 8.6.0 - resolution: "dotenv@npm:8.6.0" - checksum: 10c0/6750431dea8efbd54b9f2d9681b04e1ccc7989486461dcf058bb708d9e3d63b04115fcdf8840e38ad1e24a4a2e1e7c1560626c5e3ac7bc09371b127c49e2d45f - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"ebnf@npm:^1.9.1": - version: 1.9.1 - resolution: "ebnf@npm:1.9.1" - bin: - ebnf: dist/bin.js - checksum: 10c0/289a99edaabd15054a0c20da563cd378c3e3e22eec969ff86ae38b10e38a9ad0377c369b208eb7a3e287c1a3c5cb15b33e21d706d492c5f619e8fee2fea4f578 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.4": - version: 1.5.13 - resolution: "electron-to-chromium@npm:1.5.13" - checksum: 10c0/1d88ac39447e1d718c4296f92fe89836df4688daf2d362d6c49108136795f05a56dd9c950f1c6715e0395fa037c3b5f5ea686c543fdc90e6d74a005877c45022 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"entities@npm:^4.4.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"esbuild@npm:^0.21.3": - version: 0.21.5 - resolution: "esbuild@npm:0.21.5" - dependencies: - "@esbuild/aix-ppc64": "npm:0.21.5" - "@esbuild/android-arm": "npm:0.21.5" - "@esbuild/android-arm64": "npm:0.21.5" - "@esbuild/android-x64": "npm:0.21.5" - "@esbuild/darwin-arm64": "npm:0.21.5" - "@esbuild/darwin-x64": "npm:0.21.5" - "@esbuild/freebsd-arm64": "npm:0.21.5" - "@esbuild/freebsd-x64": "npm:0.21.5" - "@esbuild/linux-arm": "npm:0.21.5" - "@esbuild/linux-arm64": "npm:0.21.5" - "@esbuild/linux-ia32": "npm:0.21.5" - "@esbuild/linux-loong64": "npm:0.21.5" - "@esbuild/linux-mips64el": "npm:0.21.5" - "@esbuild/linux-ppc64": "npm:0.21.5" - "@esbuild/linux-riscv64": "npm:0.21.5" - "@esbuild/linux-s390x": "npm:0.21.5" - "@esbuild/linux-x64": "npm:0.21.5" - "@esbuild/netbsd-x64": "npm:0.21.5" - "@esbuild/openbsd-x64": "npm:0.21.5" - "@esbuild/sunos-x64": "npm:0.21.5" - "@esbuild/win32-arm64": "npm:0.21.5" - "@esbuild/win32-ia32": "npm:0.21.5" - "@esbuild/win32-x64": "npm:0.21.5" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de - languageName: node - linkType: hard - -"escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 - languageName: node - linkType: hard - -"escape-html@npm:^1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.1, eventemitter3@npm:^4.0.4": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 - languageName: node - linkType: hard - -"fast-copy@npm:^3.0.2": - version: 3.0.2 - resolution: "fast-copy@npm:3.0.2" - checksum: 10c0/02e8b9fd03c8c024d2987760ce126456a0e17470850b51e11a1c3254eed6832e4733ded2d93316c82bc0b36aeb991ad1ff48d1ba95effe7add7c3ab8d8eb554a - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-equals@npm:^5.0.1": - version: 5.0.1 - resolution: "fast-equals@npm:5.0.1" - checksum: 10c0/d7077b8b681036c2840ed9860a3048e44fc268fad2b525b8f25b43458be0c8ad976152eb4b475de9617170423c5b802121ebb61ed6641c3ac035fadaf805c8c0 - languageName: node - linkType: hard - -"fast-glob@npm:^3.3.0": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 - languageName: node - linkType: hard - -"favicons@npm:^7.0.0-beta.4": - version: 7.2.0 - resolution: "favicons@npm:7.2.0" - dependencies: - escape-html: "npm:^1.0.3" - sharp: "npm:^0.33.1" - xml2js: "npm:^0.6.1" - checksum: 10c0/6aa6f847b15f37f9f50815513016e1f82969e2275ff3677331b354239bba6401018e5344aa17ac02ff034e5aefc0c35f784e0844ec833fb6ea58f653ff29b2cd - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 - languageName: node - linkType: hard - -"fraction.js@npm:^4.3.7": - version: 4.3.7 - resolution: "fraction.js@npm:4.3.7" - checksum: 10c0/df291391beea9ab4c263487ffd9d17fed162dbb736982dee1379b2a8cc94e4e24e46ed508c6d278aded9080ba51872f1bc5f3a5fd8d7c74e5f105b508ac28711 - languageName: node - linkType: hard - -"framer-motion@npm:^11.2.11": - version: 11.3.30 - resolution: "framer-motion@npm:11.3.30" - dependencies: - tslib: "npm:^2.4.0" - peerDependencies: - "@emotion/is-prop-valid": "*" - react: ^18.0.0 - react-dom: ^18.0.0 - peerDependenciesMeta: - "@emotion/is-prop-valid": - optional: true - react: - optional: true - react-dom: - optional: true - checksum: 10c0/58355809d13f65bbd7a903de755cf1b78d9d3d5039de9b2ae0e25a6ab77748e3429c93e8056ad6fab378e4d0f1cf256133c11cd51f07b9b4d64550feea675b54 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 - languageName: node - linkType: hard - -"get-nonce@npm:^1.0.0": - version: 1.0.1 - resolution: "get-nonce@npm:1.0.1" - checksum: 10c0/2d7df55279060bf0568549e1ffc9b84bc32a32b7541675ca092dce56317cdd1a59a98dcc4072c9f6a980779440139a3221d7486f52c488e69dc0fd27b1efb162 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 - languageName: node - linkType: hard - -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 - languageName: node - linkType: hard - -"goober@npm:^2.1.14": - version: 2.1.14 - resolution: "goober@npm:2.1.14" - peerDependencies: - csstype: ^3.0.10 - checksum: 10c0/184eda787a9a14cffbaa8284e98dc127095e538b4acab2a84b81babca84253bb883e16208822e02584f27c7a69f3ec47341e5060dfa40a0e07c32ac1f79b2714 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.3.2": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: "npm:^16.7.0" - checksum: 10c0/fe0889169e845d738b59b64badf5e55fa3cf20454f9203d1eb088df322d49d4318df774828e789898dcb280e8a5521bb59b3203385662ca5e9218a6ca5820e74 - languageName: node - linkType: hard - -"hono@npm:^4.5.9": - version: 4.5.9 - resolution: "hono@npm:4.5.9" - checksum: 10c0/587d18aede5932bf3edb3bbcd35997713c02c834cf684c8607a194f6bc2d6573d08a2c619c4e20f9b9365d59fc851c8661c444ffafde3cfa9ac6aaec75dc2af8 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.5 - resolution: "https-proxy-agent@npm:7.0.5" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"input-otp@npm:^1.2.3": - version: 1.2.4 - resolution: "input-otp@npm:1.2.4" - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 10c0/bb2cd158cb244da6e807f791261a77a6184de19580af4afba6cc1ea5ff69e675d401537f8186dd6eab7985748e8e2f0ae67c3a7edfbffe963dda029679ee2d8d - languageName: node - linkType: hard - -"internmap@npm:1 - 2": - version: 2.0.3 - resolution: "internmap@npm:2.0.3" - checksum: 10c0/8cedd57f07bbc22501516fbfc70447f0c6812871d471096fad9ea603516eacc2137b633633daf432c029712df0baefd793686388ddf5737e3ea15074b877f7ed - languageName: node - linkType: hard - -"invariant@npm:^2.2.4": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" - dependencies: - loose-envify: "npm:^1.0.0" - checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: "npm:1.1.0" - sprintf-js: "npm:^1.1.3" - checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: "npm:^2.0.0" - checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0": - version: 2.15.1 - resolution: "is-core-module@npm:2.15.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/53432f10c69c40bfd2fa8914133a68709ff9498c86c3bf5fca3cdf3145a56fd2168cbf4a43b29843a6202a120a5f9c5ffba0a4322e1e3441739bc0b641682612 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-what@npm:^4.1.8": - version: 4.1.16 - resolution: "is-what@npm:4.1.16" - checksum: 10c0/611f1947776826dcf85b57cfb7bd3b3ea6f4b94a9c2f551d4a53f653cf0cb9d1e6518846648256d46ee6c91d114b6d09d2ac8a07306f7430c5900f87466aae5b - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"jiti@npm:^1.21.0": - version: 1.21.6 - resolution: "jiti@npm:1.21.6" - bin: - jiti: bin/jiti.js - checksum: 10c0/05b9ed58cd30d0c3ccd3c98209339e74f50abd9a17e716f65db46b6a35812103f6bde6e134be7124d01745586bca8cc5dae1d0d952267c3ebe55171949c32e56 - languageName: node - linkType: hard - -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 - languageName: node - linkType: hard - -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 - languageName: node - linkType: hard - -"json-schema-library@npm:^9.3.5": - version: 9.3.5 - resolution: "json-schema-library@npm:9.3.5" - dependencies: - "@sagold/json-pointer": "npm:^5.1.2" - "@sagold/json-query": "npm:^6.1.3" - deepmerge: "npm:^4.3.1" - fast-copy: "npm:^3.0.2" - fast-deep-equal: "npm:^3.1.3" - smtp-address-parser: "npm:1.0.10" - valid-url: "npm:^1.0.9" - checksum: 10c0/3268b7f6620faac347fc18d1e1e5b516869676b5317f470ca157b68704603fac9aadee6b6840a5086a04054fc2ec8e223a6cfe962ab09d5198f93631946548e1 - languageName: node - linkType: hard - -"json-schema@npm:^0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 - languageName: node - linkType: hard - -"json5@npm:^2.2.1, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c - languageName: node - linkType: hard - -"ky@npm:^1.4.0": - version: 1.7.1 - resolution: "ky@npm:1.7.1" - checksum: 10c0/ae2929cebef5b6c5ec47ca1557febc8d148fbcdd66389e66fc3582fa7971cbb942f6353d09089b53e60cd39fb5d467f1cb06ed10eb8fa2180938fc3684cd7306 - languageName: node - linkType: hard - -"lezer-json5@npm:^2.0.2": - version: 2.0.2 - resolution: "lezer-json5@npm:2.0.2" - dependencies: - "@lezer/lr": "npm:^1.0.0" - checksum: 10c0/3c40a419a618e3722bd93271cedfbbc9c15c02a4f2310f793f7812f021a0ce46e99b2c30a80aabad699a9a7eae787325f511710f03fd2d480e36c2f639cb9de2 - languageName: node - linkType: hard - -"lilconfig@npm:^2.1.0": - version: 2.1.0 - resolution: "lilconfig@npm:2.1.0" - checksum: 10c0/64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8 - languageName: node - linkType: hard - -"lilconfig@npm:^3.0.0": - version: 3.1.2 - resolution: "lilconfig@npm:3.1.2" - checksum: 10c0/f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d - languageName: node - linkType: hard - -"linkify-it@npm:^5.0.0": - version: 5.0.0 - resolution: "linkify-it@npm:5.0.0" - dependencies: - uc.micro: "npm:^2.0.0" - checksum: 10c0/ff4abbcdfa2003472fc3eb4b8e60905ec97718e11e33cca52059919a4c80cc0e0c2a14d23e23d8c00e5402bc5a885cdba8ca053a11483ab3cc8b3c7a52f88e2d - languageName: node - linkType: hard - -"local-pkg@npm:^0.5.0": - version: 0.5.0 - resolution: "local-pkg@npm:0.5.0" - dependencies: - mlly: "npm:^1.4.2" - pkg-types: "npm:^1.0.3" - checksum: 10c0/f61cbd00d7689f275558b1a45c7ff2a3ddf8472654123ed880215677b9adfa729f1081e50c27ffb415cdb9fa706fb755fec5e23cdd965be375c8059e87ff1cc9 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: "npm:^3.0.0 || ^4.0.0" - bin: - loose-envify: cli.js - checksum: 10c0/655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 - languageName: node - linkType: hard - -"lucide-react@npm:^0.439.0": - version: 0.439.0 - resolution: "lucide-react@npm:0.439.0" - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc - checksum: 10c0/153c6da6a1bdcc03c47080b00a50a341b7e485ccbb479a742c0fb606355acf93c136630626dad2d57cafe1f5c691dd4f2fcd0f2b7c813e7c9e0e1f065cf62be0 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^13.0.0": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" - dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" - http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e - languageName: node - linkType: hard - -"markdown-it@npm:^14.0.0, markdown-it@npm:^14.1.0": - version: 14.1.0 - resolution: "markdown-it@npm:14.1.0" - dependencies: - argparse: "npm:^2.0.1" - entities: "npm:^4.4.0" - linkify-it: "npm:^5.0.0" - mdurl: "npm:^2.0.0" - punycode.js: "npm:^2.3.1" - uc.micro: "npm:^2.1.0" - bin: - markdown-it: bin/markdown-it.mjs - checksum: 10c0/9a6bb444181d2db7016a4173ae56a95a62c84d4cbfb6916a399b11d3e6581bf1cc2e4e1d07a2f022ae72c25f56db90fbe1e529fca16fbf9541659dc53480d4b4 - languageName: node - linkType: hard - -"mdurl@npm:^2.0.0": - version: 2.0.0 - resolution: "mdurl@npm:2.0.0" - checksum: 10c0/633db522272f75ce4788440669137c77540d74a83e9015666a9557a152c02e245b192edc20bc90ae953bbab727503994a53b236b4d9c99bdaee594d0e7dd2ce0 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf - languageName: node - linkType: hard - -"mlly@npm:^1.4.2, mlly@npm:^1.7.1": - version: 1.7.1 - resolution: "mlly@npm:1.7.1" - dependencies: - acorn: "npm:^8.11.3" - pathe: "npm:^1.1.2" - pkg-types: "npm:^1.1.1" - ufo: "npm:^1.5.3" - checksum: 10c0/d836a7b0adff4d118af41fb93ad4d9e57f80e694a681185280ba220a4607603c19e86c80f9a6c57512b04280567f2599e3386081705c5b5fd74c9ddfd571d0fa - languageName: node - linkType: hard - -"moo@npm:^0.5.0": - version: 0.5.2 - resolution: "moo@npm:0.5.2" - checksum: 10c0/a9d9ad8198a51fe35d297f6e9fdd718298ca0b39a412e868a0ebd92286379ab4533cfc1f1f34516177f5129988ab25fe598f78e77c84e3bfe0d4a877b56525a8 - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc - languageName: node - linkType: hard - -"mz@npm:^2.7.0": - version: 2.7.0 - resolution: "mz@npm:2.7.0" - dependencies: - any-promise: "npm:^1.0.0" - object-assign: "npm:^4.0.1" - thenify-all: "npm:^1.0.0" - checksum: 10c0/103114e93f87362f0b56ab5b2e7245051ad0276b646e3902c98397d18bb8f4a77f2ea4a2c9d3ad516034ea3a56553b60d3f5f78220001ca4c404bd711bd0af39 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/e3fb661aa083454f40500473bb69eedb85dc160e763150b9a2c567c7e9ff560ce028a9f833123b618a6ea742e311138b591910e795614a629029e86e180660f3 - languageName: node - linkType: hard - -"nearley@npm:^2.20.1": - version: 2.20.1 - resolution: "nearley@npm:2.20.1" - dependencies: - commander: "npm:^2.19.0" - moo: "npm:^0.5.0" - railroad-diagrams: "npm:^1.0.0" - randexp: "npm:0.4.6" - bin: - nearley-railroad: bin/nearley-railroad.js - nearley-test: bin/nearley-test.js - nearley-unparse: bin/nearley-unparse.js - nearleyc: bin/nearleyc.js - checksum: 10c0/d25e1fd40b19c53a0ada6a688670f4a39063fd9553ab62885e81a82927d51572ce47193b946afa3d85efa608ba2c68f433c421f69b854bfb7f599eacb5fae37e - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 - languageName: node - linkType: hard - -"node-fetch@npm:^2.5.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 10.2.0 - resolution: "node-gyp@npm:10.2.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - tar: "npm:^6.2.1" - which: "npm:^4.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b - languageName: node - linkType: hard - -"node-releases@npm:^2.0.18": - version: 2.0.18 - resolution: "node-releases@npm:2.0.18" - checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 - languageName: node - linkType: hard - -"nopt@npm:^7.0.0": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 10c0/bf39b73a63e0a42ad1a48c2bd1bda5a07ede64a7e2567307a407674e595bcff0fa0d57e8e5f1e7fa5e91000797c7615e13613227aaaa4d6d6e87f5bd5cc95de6 - languageName: node - linkType: hard - -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-hash@npm:^3.0.0": - version: 3.0.0 - resolution: "object-hash@npm:3.0.0" - checksum: 10c0/a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 - languageName: node - linkType: hard - -"oblivious-set@npm:1.4.0": - version: 1.4.0 - resolution: "oblivious-set@npm:1.4.0" - checksum: 10c0/92fc4e0ed3e4e5a120f17e32964dc40671549704474aee94656ea8978837d8539d6e1655cc0ad42500315583eec41097fe38b58acd138ad8068a8083d0db2773 - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - -"p-queue@npm:6.6.2": - version: 6.6.2 - resolution: "p-queue@npm:6.6.2" - dependencies: - eventemitter3: "npm:^4.0.4" - p-timeout: "npm:^3.2.0" - checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e - languageName: node - linkType: hard - -"p-timeout@npm:^3.2.0": - version: 3.2.0 - resolution: "p-timeout@npm:3.2.0" - dependencies: - p-finally: "npm:^1.0.0" - checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.0 - resolution: "package-json-from-dist@npm:1.0.0" - checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"pathe@npm:^1.1.2": - version: 1.1.2 - resolution: "pathe@npm:1.1.2" - checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - -"pirates@npm:^4.0.1": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 10c0/00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 - languageName: node - linkType: hard - -"pkg-types@npm:^1.0.3, pkg-types@npm:^1.1.1": - version: 1.2.0 - resolution: "pkg-types@npm:1.2.0" - dependencies: - confbox: "npm:^0.1.7" - mlly: "npm:^1.7.1" - pathe: "npm:^1.1.2" - checksum: 10c0/111cf6ad4235438821ea195a0d70570b1bd36a71d094d258349027c9c304dea8b4f9669c9f7ce813f9a48a02942fb0d7fe9809127dbe7bb4b18a8de71583a081 - languageName: node - linkType: hard - -"postcss-import@npm:^15.1.0": - version: 15.1.0 - resolution: "postcss-import@npm:15.1.0" - dependencies: - postcss-value-parser: "npm:^4.0.0" - read-cache: "npm:^1.0.0" - resolve: "npm:^1.1.7" - peerDependencies: - postcss: ^8.0.0 - checksum: 10c0/518aee5c83ea6940e890b0be675a2588db68b2582319f48c3b4e06535a50ea6ee45f7e63e4309f8754473245c47a0372632378d1d73d901310f295a92f26f17b - languageName: node - linkType: hard - -"postcss-js@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-js@npm:4.0.1" - dependencies: - camelcase-css: "npm:^2.0.1" - peerDependencies: - postcss: ^8.4.21 - checksum: 10c0/af35d55cb873b0797d3b42529514f5318f447b134541844285c9ac31a17497297eb72296902967911bb737a75163441695737300ce2794e3bd8c70c13a3b106e - languageName: node - linkType: hard - -"postcss-load-config@npm:^4.0.1": - version: 4.0.2 - resolution: "postcss-load-config@npm:4.0.2" - dependencies: - lilconfig: "npm:^3.0.0" - yaml: "npm:^2.3.4" - peerDependencies: - postcss: ">=8.0.9" - ts-node: ">=9.0.0" - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - checksum: 10c0/3d7939acb3570b0e4b4740e483d6e555a3e2de815219cb8a3c8fc03f575a6bde667443aa93369c0be390af845cb84471bf623e24af833260de3a105b78d42519 - languageName: node - linkType: hard - -"postcss-nested@npm:^6.0.1": - version: 6.2.0 - resolution: "postcss-nested@npm:6.2.0" - dependencies: - postcss-selector-parser: "npm:^6.1.1" - peerDependencies: - postcss: ^8.2.14 - checksum: 10c0/7f9c3f2d764191a39364cbdcec350f26a312431a569c9ef17408021424726b0d67995ff5288405e3724bb7152a4c92f73c027e580ec91e798800ed3c52e2bc6e - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.1.1": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 - languageName: node - linkType: hard - -"postcss@npm:^8.4.23, postcss@npm:^8.4.41": - version: 8.4.41 - resolution: "postcss@npm:8.4.41" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10c0/c1828fc59e7ec1a3bf52b3a42f615dba53c67960ed82a81df6441b485fe43c20aba7f4e7c55425762fd99c594ecabbaaba8cf5b30fd79dfec5b52a9f63a2d690 - languageName: node - linkType: hard - -"prettier@npm:^3.3.3": - version: 3.3.3 - resolution: "prettier@npm:3.3.3" - bin: - prettier: bin/prettier.cjs - checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26 - languageName: node - linkType: hard - -"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: "npm:^1.4.0" - object-assign: "npm:^4.1.1" - react-is: "npm:^16.13.1" - checksum: 10c0/59ece7ca2fb9838031d73a48d4becb9a7cc1ed10e610517c7d8f19a1e02fa47f7c27d557d8a5702bec3cfeccddc853579832b43f449e54635803f277b1c78077 - languageName: node - linkType: hard - -"punycode.js@npm:^2.3.1": - version: 2.3.1 - resolution: "punycode.js@npm:2.3.1" - checksum: 10c0/1d12c1c0e06127fa5db56bd7fdf698daf9a78104456a6b67326877afc21feaa821257b171539caedd2f0524027fa38e67b13dd094159c8d70b6d26d2bea4dfdb - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"railroad-diagrams@npm:^1.0.0": - version: 1.0.0 - resolution: "railroad-diagrams@npm:1.0.0" - checksum: 10c0/81bf8f86870a69fb9ed243102db9ad6416d09c4cb83964490d44717690e07dd982f671503236a1f8af28f4cb79d5d7a87613930f10ac08defa845ceb6764e364 - languageName: node - linkType: hard - -"randexp@npm:0.4.6": - version: 0.4.6 - resolution: "randexp@npm:0.4.6" - dependencies: - discontinuous-range: "npm:1.0.0" - ret: "npm:~0.1.10" - checksum: 10c0/14ee14b6d7f5ce69609b51cc914fb7a7c82ad337820a141c5f762c5ad1fe868f5191ea6e82359aee019b625ee1359486628fa833909d12c3b5dd9571908c3345 - languageName: node - linkType: hard - -"react-day-picker@npm:^9.0.9": - version: 9.1.1 - resolution: "react-day-picker@npm:9.1.1" - dependencies: - "@date-fns/tz": "npm:^1.0.2" - date-fns: "npm:^4.1.0" - peerDependencies: - react: ">=16.8.0" - checksum: 10c0/3ff1a4ac3d7c8e32896a31489db2e481672a67350038efe0034b493cd4a39230e10bef74727e9e7d12ce4344fa31382beb51d95ee5402aa2d0aff9d86bb9c370 - languageName: node - linkType: hard - -"react-dom@npm:^18.2.0, react-dom@npm:^18.3.1": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" - peerDependencies: - react: ^18.3.1 - checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 - languageName: node - linkType: hard - -"react-hook-form@npm:^7.51.1, react-hook-form@npm:^7.52.0": - version: 7.53.0 - resolution: "react-hook-form@npm:7.53.0" - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - checksum: 10c0/6d62b150618a833c17d59e669b707661499e2bb516a8d340ca37699f99eb448bbba7b5b78324938c8948014e21efaa32e3510c2ba246fd5e97a96fca0cfa7c98 - languageName: node - linkType: hard - -"react-is@npm:^16.10.2, react-is@npm:^16.13.1, react-is@npm:^16.7.0": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 - languageName: node - linkType: hard - -"react-refresh@npm:^0.14.2": - version: 0.14.2 - resolution: "react-refresh@npm:0.14.2" - checksum: 10c0/875b72ef56b147a131e33f2abd6ec059d1989854b3ff438898e4f9310bfcc73acff709445b7ba843318a953cb9424bcc2c05af2b3d80011cee28f25aef3e2ebb - languageName: node - linkType: hard - -"react-remove-scroll-bar@npm:^2.3.3, react-remove-scroll-bar@npm:^2.3.4": - version: 2.3.6 - resolution: "react-remove-scroll-bar@npm:2.3.6" - dependencies: - react-style-singleton: "npm:^2.2.1" - tslib: "npm:^2.0.0" - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/4e32ee04bf655a8bd3b4aacf6ffc596ae9eb1b9ba27eef83f7002632ee75371f61516ae62250634a9eae4b2c8fc6f6982d9b182de260f6c11841841e6e2e7515 - languageName: node - linkType: hard - -"react-remove-scroll@npm:2.5.5": - version: 2.5.5 - resolution: "react-remove-scroll@npm:2.5.5" - dependencies: - react-remove-scroll-bar: "npm:^2.3.3" - react-style-singleton: "npm:^2.2.1" - tslib: "npm:^2.1.0" - use-callback-ref: "npm:^1.3.0" - use-sidecar: "npm:^1.1.2" - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/4952657e6a7b9d661d4ad4dfcef81b9c7fa493e35164abff99c35c0b27b3d172ef7ad70c09416dc44dd14ff2e6b38a5ec7da27e27e90a15cbad36b8fd2fd8054 - languageName: node - linkType: hard - -"react-remove-scroll@npm:2.5.7": - version: 2.5.7 - resolution: "react-remove-scroll@npm:2.5.7" - dependencies: - react-remove-scroll-bar: "npm:^2.3.4" - react-style-singleton: "npm:^2.2.1" - tslib: "npm:^2.1.0" - use-callback-ref: "npm:^1.3.0" - use-sidecar: "npm:^1.1.2" - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/dcd523ada602bd0a839c2032cadf0b3e4af55ee85acefee3760976a9cceaa4606927801b093bbb8bf3c2989c71e048f5428c2c6eb9e6681762e86356833d039b - languageName: node - linkType: hard - -"react-resizable-panels@npm:^2.0.19": - version: 2.1.1 - resolution: "react-resizable-panels@npm:2.1.1" - peerDependencies: - react: ^16.14.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/142e8980d5d7e8e8528c9da1982c2ef71bab9fbb92e0116627cfcb203ebd0bceaea03eba4f54b980868ba7b1a595313eafacf0ef27f900eb983f3f3c595c143c - languageName: node - linkType: hard - -"react-smooth@npm:^4.0.0": - version: 4.0.1 - resolution: "react-smooth@npm:4.0.1" - dependencies: - fast-equals: "npm:^5.0.1" - prop-types: "npm:^15.8.1" - react-transition-group: "npm:^4.4.5" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/5c19a2c147798c3de1329d442b1a371139c01113cc108c38c201b63502c329f943ede505c44089d26a6563eaa72a67b845d538d956f34a389b37fd3961308834 - languageName: node - linkType: hard - -"react-style-singleton@npm:^2.2.1": - version: 2.2.1 - resolution: "react-style-singleton@npm:2.2.1" - dependencies: - get-nonce: "npm:^1.0.0" - invariant: "npm:^2.2.4" - tslib: "npm:^2.0.0" - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/6d66f3bdb65e1ec79089f80314da97c9a005087a04ee034255a5de129a4c0d9fd0bf99fa7bf642781ac2dc745ca687aae3de082bd8afdd0d117bc953241e15ad - languageName: node - linkType: hard - -"react-transition-group@npm:^4.4.5": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" - dependencies: - "@babel/runtime": "npm:^7.5.5" - dom-helpers: "npm:^5.0.1" - loose-envify: "npm:^1.4.0" - prop-types: "npm:^15.6.2" - peerDependencies: - react: ">=16.6.0" - react-dom: ">=16.6.0" - checksum: 10c0/2ba754ba748faefa15f87c96dfa700d5525054a0141de8c75763aae6734af0740e77e11261a1e8f4ffc08fd9ab78510122e05c21c2d79066c38bb6861a886c82 - languageName: node - linkType: hard - -"react@npm:^18.2.0, react@npm:^18.3.1": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 - languageName: node - linkType: hard - -"read-cache@npm:^1.0.0": - version: 1.0.0 - resolution: "read-cache@npm:1.0.0" - dependencies: - pify: "npm:^2.3.0" - checksum: 10c0/90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814 - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: "npm:^2.2.1" - checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b - languageName: node - linkType: hard - -"recharts-scale@npm:^0.4.4": - version: 0.4.5 - resolution: "recharts-scale@npm:0.4.5" - dependencies: - decimal.js-light: "npm:^2.4.1" - checksum: 10c0/64ce1fc4ebe62001787bf4dc4cbb779452d33831619309c71c50277c58e8968ffe98941562d9d0d5ffdb02588ebd62f4fe6548fa826110fd458db9c3cc6dadc1 - languageName: node - linkType: hard - -"recharts@npm:^2.12.7": - version: 2.12.7 - resolution: "recharts@npm:2.12.7" - dependencies: - clsx: "npm:^2.0.0" - eventemitter3: "npm:^4.0.1" - lodash: "npm:^4.17.21" - react-is: "npm:^16.10.2" - react-smooth: "npm:^4.0.0" - recharts-scale: "npm:^0.4.4" - tiny-invariant: "npm:^1.3.1" - victory-vendor: "npm:^36.6.8" - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/2522d841a1f4e4c0a37046ddb61fa958ac37a66df63dcd4c6cb9113e3f7a71892d74e44494a55bc40faa0afd74d9cf58fec3d2ce53a8ddf997e75367bdd033fc - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.14.0": - version: 0.14.1 - resolution: "regenerator-runtime@npm:0.14.1" - checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 - languageName: node - linkType: hard - -"resolve@npm:^1.1.7, resolve@npm:^1.22.2": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 - languageName: node - linkType: hard - -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: 10c0/01f77cad0f7ea4f955852c03d66982609893edc1240c0c964b4c9251d0f9fb6705150634060d169939b096d3b77f4c84d6b6098a5b5d340160898c8581f1f63f - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rollup@npm:^4.20.0": - version: 4.21.1 - resolution: "rollup@npm:4.21.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.21.1" - "@rollup/rollup-android-arm64": "npm:4.21.1" - "@rollup/rollup-darwin-arm64": "npm:4.21.1" - "@rollup/rollup-darwin-x64": "npm:4.21.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.21.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.21.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.21.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.21.1" - "@rollup/rollup-linux-x64-musl": "npm:4.21.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.21.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.21.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.21.1" - "@types/estree": "npm:1.0.5" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/e64b6adabadc3e18544c68e9704744c333b38a68ba803c49b5344a015c5865bf35a72669ba121ba26869fa306f193884e07319ccfc570c08fd8f9e72c9949d4d - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"sax@npm:>=0.6.0": - version: 1.4.1 - resolution: "sax@npm:1.4.1" - checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c - languageName: node - linkType: hard - -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 - languageName: node - linkType: hard - -"semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.6.3": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf - languageName: node - linkType: hard - -"sharp@npm:^0.33.1": - version: 0.33.5 - resolution: "sharp@npm:0.33.5" - dependencies: - "@img/sharp-darwin-arm64": "npm:0.33.5" - "@img/sharp-darwin-x64": "npm:0.33.5" - "@img/sharp-libvips-darwin-arm64": "npm:1.0.4" - "@img/sharp-libvips-darwin-x64": "npm:1.0.4" - "@img/sharp-libvips-linux-arm": "npm:1.0.5" - "@img/sharp-libvips-linux-arm64": "npm:1.0.4" - "@img/sharp-libvips-linux-s390x": "npm:1.0.4" - "@img/sharp-libvips-linux-x64": "npm:1.0.4" - "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4" - "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4" - "@img/sharp-linux-arm": "npm:0.33.5" - "@img/sharp-linux-arm64": "npm:0.33.5" - "@img/sharp-linux-s390x": "npm:0.33.5" - "@img/sharp-linux-x64": "npm:0.33.5" - "@img/sharp-linuxmusl-arm64": "npm:0.33.5" - "@img/sharp-linuxmusl-x64": "npm:0.33.5" - "@img/sharp-wasm32": "npm:0.33.5" - "@img/sharp-win32-ia32": "npm:0.33.5" - "@img/sharp-win32-x64": "npm:0.33.5" - color: "npm:^4.2.3" - detect-libc: "npm:^2.0.3" - semver: "npm:^7.6.3" - dependenciesMeta: - "@img/sharp-darwin-arm64": - optional: true - "@img/sharp-darwin-x64": - optional: true - "@img/sharp-libvips-darwin-arm64": - optional: true - "@img/sharp-libvips-darwin-x64": - optional: true - "@img/sharp-libvips-linux-arm": - optional: true - "@img/sharp-libvips-linux-arm64": - optional: true - "@img/sharp-libvips-linux-s390x": - optional: true - "@img/sharp-libvips-linux-x64": - optional: true - "@img/sharp-libvips-linuxmusl-arm64": - optional: true - "@img/sharp-libvips-linuxmusl-x64": - optional: true - "@img/sharp-linux-arm": - optional: true - "@img/sharp-linux-arm64": - optional: true - "@img/sharp-linux-s390x": - optional: true - "@img/sharp-linux-x64": - optional: true - "@img/sharp-linuxmusl-arm64": - optional: true - "@img/sharp-linuxmusl-x64": - optional: true - "@img/sharp-wasm32": - optional: true - "@img/sharp-win32-ia32": - optional: true - "@img/sharp-win32-x64": - optional: true - checksum: 10c0/6b81421ddfe6ee524d8d77e325c5e147fef22884e1c7b1656dfd89a88d7025894115da02d5f984261bf2e6daa16f98cadd1721c4ba408b4212b1d2a60f233484 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"shiki@npm:1.14.1": - version: 1.14.1 - resolution: "shiki@npm:1.14.1" - dependencies: - "@shikijs/core": "npm:1.14.1" - "@types/hast": "npm:^3.0.4" - checksum: 10c0/756f45917f281e158eef114b985b9a4cae9f0470f955e2f96f4473a3aed327dc1d653b9bd6280eb28398bd0da6d533caa4fce61b716c1263c5d85df53964ade2 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: "npm:^0.3.1" - checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"smtp-address-parser@npm:1.0.10": - version: 1.0.10 - resolution: "smtp-address-parser@npm:1.0.10" - dependencies: - nearley: "npm:^2.20.1" - checksum: 10c0/946a06d81721e8fb0ea7cb26c3726523b2a82389aee523a28ace4e913a406da63e66b2fd27d946f0cff676cc2f2f58e822783d5ec4721786a7224be3f0211b62 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.4 - resolution: "socks-proxy-agent@npm:8.0.4" - dependencies: - agent-base: "npm:^7.1.1" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" - dependencies: - ip-address: "npm:^9.0.5" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 - languageName: node - linkType: hard - -"sonner@npm:^1.4.41": - version: 1.5.0 - resolution: "sonner@npm:1.5.0" - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/9561b5861bede7f874cc442e447a68c8bfa6e4eadad603bc04e38db35a8b8108741f595a12c9856742062bae230ffedf73122015940491f482c5aa9e68ee85e0 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 - languageName: node - linkType: hard - -"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": - version: 4.1.2 - resolution: "style-mod@npm:4.1.2" - checksum: 10c0/ad4d870b3642b0e42ecc7be0e106dd14b7af11985e34fee8de34e5e38c3214bfc96fa7055acea86d75a3a59ddea3f6a8c6641001a66494d7df72d09685e3fadb - languageName: node - linkType: hard - -"sucrase@npm:^3.32.0": - version: 3.35.0 - resolution: "sucrase@npm:3.35.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.2" - commander: "npm:^4.0.0" - glob: "npm:^10.3.10" - lines-and-columns: "npm:^1.1.6" - mz: "npm:^2.7.0" - pirates: "npm:^4.0.1" - ts-interface-checker: "npm:^0.1.9" - bin: - sucrase: bin/sucrase - sucrase-node: bin/sucrase-node - checksum: 10c0/ac85f3359d2c2ecbf5febca6a24ae9bf96c931f05fde533c22a94f59c6a74895e5d5f0e871878dfd59c2697a75ebb04e4b2224ef0bfc24ca1210735c2ec191ef - languageName: node - linkType: hard - -"superjson@npm:^2.2.1": - version: 2.2.1 - resolution: "superjson@npm:2.2.1" - dependencies: - copy-anything: "npm:^3.0.2" - checksum: 10c0/5d8202c955170bd98ef2647f712754ac54d2d007923cfdb53a4b035304d8964b8c41d5eff41ee277896e2ac32e06abb009b571f1589416b729fe40216320cc7a - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - -"tailwind-merge@npm:^2.2.2": - version: 2.5.2 - resolution: "tailwind-merge@npm:2.5.2" - checksum: 10c0/e43a9a468f7ba4ed5b4a399558d96d6270a3d8131dca111cccc803e71cc23885060d18d721f312a24fff0a75c567dbb30b2a87c18aba25eb4255df197d8170ab - languageName: node - linkType: hard - -"tailwindcss-animate@npm:^1.0.7": - version: 1.0.7 - resolution: "tailwindcss-animate@npm:1.0.7" - peerDependencies: - tailwindcss: "*" - checksum: 10c0/ec7dbd1631076b97d66a1fbaaa06e0725fccfa63119221e8d87a997b02dcede98ad88bb1ef6665b968f5d260fcefb10592e0299ca70208d365b37761edf5e19a - languageName: node - linkType: hard - -"tailwindcss@npm:^3.4.10": - version: 3.4.10 - resolution: "tailwindcss@npm:3.4.10" - dependencies: - "@alloc/quick-lru": "npm:^5.2.0" - arg: "npm:^5.0.2" - chokidar: "npm:^3.5.3" - didyoumean: "npm:^1.2.2" - dlv: "npm:^1.1.3" - fast-glob: "npm:^3.3.0" - glob-parent: "npm:^6.0.2" - is-glob: "npm:^4.0.3" - jiti: "npm:^1.21.0" - lilconfig: "npm:^2.1.0" - micromatch: "npm:^4.0.5" - normalize-path: "npm:^3.0.0" - object-hash: "npm:^3.0.0" - picocolors: "npm:^1.0.0" - postcss: "npm:^8.4.23" - postcss-import: "npm:^15.1.0" - postcss-js: "npm:^4.0.1" - postcss-load-config: "npm:^4.0.1" - postcss-nested: "npm:^6.0.1" - postcss-selector-parser: "npm:^6.0.11" - resolve: "npm:^1.22.2" - sucrase: "npm:^3.32.0" - bin: - tailwind: lib/cli.js - tailwindcss: lib/cli.js - checksum: 10c0/5212f4d90f21fc21b87008570a37de46af9c955a7c197d0f0e1d888edd5ef597f1f41194bec6b1fdc8a21e9460089d370bf728ce39b13abe93324a768b7043fd - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.2.1": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 - languageName: node - linkType: hard - -"thenify-all@npm:^1.0.0": - version: 1.6.0 - resolution: "thenify-all@npm:1.6.0" - dependencies: - thenify: "npm:>= 3.1.0 < 4" - checksum: 10c0/9b896a22735e8122754fe70f1d65f7ee691c1d70b1f116fda04fea103d0f9b356e3676cb789506e3909ae0486a79a476e4914b0f92472c2e093d206aed4b7d6b - languageName: node - linkType: hard - -"thenify@npm:>= 3.1.0 < 4": - version: 3.3.1 - resolution: "thenify@npm:3.3.1" - dependencies: - any-promise: "npm:^1.0.0" - checksum: 10c0/f375aeb2b05c100a456a30bc3ed07ef03a39cbdefe02e0403fb714b8c7e57eeaad1a2f5c4ecfb9ce554ce3db9c2b024eba144843cd9e344566d9fcee73b04767 - languageName: node - linkType: hard - -"tiny-invariant@npm:^1.3.1, tiny-invariant@npm:^1.3.3": - version: 1.3.3 - resolution: "tiny-invariant@npm:1.3.3" - checksum: 10c0/65af4a07324b591a059b35269cd696aba21bef2107f29b9f5894d83cc143159a204b299553435b03874ebb5b94d019afa8b8eff241c8a4cfee95872c2e1c1c4a - languageName: node - linkType: hard - -"tiny-warning@npm:^1.0.3": - version: 1.0.3 - resolution: "tiny-warning@npm:1.0.3" - checksum: 10c0/ef8531f581b30342f29670cb41ca248001c6fd7975ce22122bd59b8d62b4fc84ad4207ee7faa95cde982fa3357cd8f4be650142abc22805538c3b1392d7084fa - languageName: node - linkType: hard - -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"ts-interface-checker@npm:^0.1.9": - version: 0.1.13 - resolution: "ts-interface-checker@npm:0.1.13" - checksum: 10c0/232509f1b84192d07b81d1e9b9677088e590ac1303436da1e92b296e9be8e31ea042e3e1fd3d29b1742ad2c959e95afe30f63117b8f1bc3a3850070a5142fea7 - languageName: node - linkType: hard - -"tsconfck@npm:^3.0.3": - version: 3.1.1 - resolution: "tsconfck@npm:3.1.1" - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - bin: - tsconfck: bin/tsconfck.js - checksum: 10c0/e133eb308ba37e8db8dbac1905bddaaf4a62f0e01aa88143e19867e274a877b86b35cf69c9a0172ca3e7d1a4bb32400381ac7f7a1429e34250a8d7ae55aee3e7 - languageName: node - linkType: hard - -"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 - languageName: node - linkType: hard - -"typescript@npm:^5.2.2": - version: 5.5.4 - resolution: "typescript@npm:5.5.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/422be60f89e661eab29ac488c974b6cc0a660fb2228003b297c3d10c32c90f3bcffc1009b43876a082515a3c376b1eefcce823d6e78982e6878408b9a923199c - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": - version: 5.5.4 - resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/73409d7b9196a5a1217b3aaad929bf76294d3ce7d6e9766dd880ece296ee91cf7d7db6b16c6c6c630ee5096eccde726c0ef17c7dfa52b01a243e57ae1f09ef07 - languageName: node - linkType: hard - -"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": - version: 2.1.0 - resolution: "uc.micro@npm:2.1.0" - checksum: 10c0/8862eddb412dda76f15db8ad1c640ccc2f47cdf8252a4a30be908d535602c8d33f9855dfcccb8b8837855c1ce1eaa563f7fa7ebe3c98fd0794351aab9b9c55fa - languageName: node - linkType: hard - -"ufo@npm:^1.5.3": - version: 1.5.4 - resolution: "ufo@npm:1.5.4" - checksum: 10c0/b5dc4dc435c49c9ef8890f1b280a19ee4d0954d1d6f9ab66ce62ce64dd04c7be476781531f952a07c678d51638d02ad4b98e16237be29149295b0f7c09cda765 - languageName: node - linkType: hard - -"undici-types@npm:~6.19.2": - version: 6.19.8 - resolution: "undici-types@npm:6.19.8" - checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 - languageName: node - linkType: hard - -"unload@npm:2.4.1": - version: 2.4.1 - resolution: "unload@npm:2.4.1" - checksum: 10c0/98bb7f276a217afc51b9ee330610a04324e4718649451b6068667a2b2f77504cdde54d344e80d2fc2843cf431e6c2ec8d57786551f296b03b51eaaca7cbdbe36 - languageName: node - linkType: hard - -"unplugin@npm:^1.12.2": - version: 1.12.2 - resolution: "unplugin@npm:1.12.2" - dependencies: - acorn: "npm:^8.12.1" - chokidar: "npm:^3.6.0" - webpack-sources: "npm:^3.2.3" - webpack-virtual-modules: "npm:^0.6.2" - checksum: 10c0/1ebdca5437adcf83f53ef715f336b9e5b85d671c40769c9fc4f3412e59c825c16bb56fb4e706b21991175db6addbc5fce10c8e2f67fb0387703431a8a1601c0d - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.0": - version: 1.1.0 - resolution: "update-browserslist-db@npm:1.1.0" - dependencies: - escalade: "npm:^3.1.2" - picocolors: "npm:^1.0.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 - languageName: node - linkType: hard - -"use-callback-ref@npm:^1.3.0": - version: 1.3.2 - resolution: "use-callback-ref@npm:1.3.2" - dependencies: - tslib: "npm:^2.0.0" - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/d232c37160fe3970c99255da19b5fb5299fb5926a5d6141d928a87feb47732c323d29be2f8137d3b1e5499c70d284cd1d9cfad703cc58179db8be24d7dd8f1f2 - languageName: node - linkType: hard - -"use-sidecar@npm:^1.1.2": - version: 1.1.2 - resolution: "use-sidecar@npm:1.1.2" - dependencies: - detect-node-es: "npm:^1.1.0" - tslib: "npm:^2.0.0" - peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/89f0018fd9aee1fc17c85ac18c4bf8944d460d453d0d0e04ddbc8eaddf3fa591e9c74a1f8a438a1bff368a7a2417fab380bdb3df899d2194c4375b0982736de0 - languageName: node - linkType: hard - -"use-sync-external-store@npm:^1.2.2": - version: 1.2.2 - resolution: "use-sync-external-store@npm:1.2.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/23b1597c10adf15b26ade9e8c318d8cc0abc9ec0ab5fc7ca7338da92e89c2536abd150a5891bf076836c352fdfa104fc7231fb48f806fd9960e0cbe03601abaf - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.2": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 - languageName: node - linkType: hard - -"valid-url@npm:^1.0.9": - version: 1.0.9 - resolution: "valid-url@npm:1.0.9" - checksum: 10c0/3995e65f9942dbcb1621754c0f9790335cec61e9e9310c0a809e9ae0e2ae91bb7fc6a471fba788e979db0418d9806639f681ecebacc869bc8c3de88efa562ee6 - languageName: node - linkType: hard - -"victory-vendor@npm:^36.6.8": - version: 36.9.2 - resolution: "victory-vendor@npm:36.9.2" - dependencies: - "@types/d3-array": "npm:^3.0.3" - "@types/d3-ease": "npm:^3.0.0" - "@types/d3-interpolate": "npm:^3.0.1" - "@types/d3-scale": "npm:^4.0.2" - "@types/d3-shape": "npm:^3.1.0" - "@types/d3-time": "npm:^3.0.0" - "@types/d3-timer": "npm:^3.0.0" - d3-array: "npm:^3.1.6" - d3-ease: "npm:^3.0.1" - d3-interpolate: "npm:^3.0.1" - d3-scale: "npm:^4.0.2" - d3-shape: "npm:^3.1.0" - d3-time: "npm:^3.0.0" - d3-timer: "npm:^3.0.1" - checksum: 10c0/bad36de3bf4d406834743c2e99a8281d786af324d7e84b7f7a2fc02c27a3779034fb0c3c4707d4c8e68683334d924a67100cfa13985235565e83b9877f8e2ffd - languageName: node - linkType: hard - -"vite-plugin-favicons-inject@npm:^2.2.0": - version: 2.2.0 - resolution: "vite-plugin-favicons-inject@npm:2.2.0" - dependencies: - favicons: "npm:^7.0.0-beta.4" - checksum: 10c0/52588b36dc0707ce349211f422b62ebfa3e43186f81f5f56763063a583b4b3f0bfacc31d4019d3e2bf4cede20357b7505b79a2309ff89546d2683e1f437c5aa6 - languageName: node - linkType: hard - -"vite-tsconfig-paths@npm:^4.3.1": - version: 4.3.2 - resolution: "vite-tsconfig-paths@npm:4.3.2" - dependencies: - debug: "npm:^4.1.1" - globrex: "npm:^0.1.2" - tsconfck: "npm:^3.0.3" - peerDependencies: - vite: "*" - peerDependenciesMeta: - vite: - optional: true - checksum: 10c0/f390ac1d1c3992fc5ac50f9274c1090f8b55ab34a89ea88893db9a6924a3b26c9f64bc1163615150ad100749db73b6b2cf1d57f6cd60df6e762ceb5b8ad30024 - languageName: node - linkType: hard - -"vite@npm:^5.2.0": - version: 5.4.2 - resolution: "vite@npm:5.4.2" - dependencies: - esbuild: "npm:^0.21.3" - fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.41" - rollup: "npm:^4.20.0" - peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" - lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/23e347ca8aa6f0a774227e4eb7abae228f12c6806a727b046aa75e7ee37ffc2d68cff74360e12a42c347f79adc294e2363bc723b957bf4b382b5a8fb39e4df9d - languageName: node - linkType: hard - -"w3c-keyname@npm:^2.2.4": - version: 2.2.8 - resolution: "w3c-keyname@npm:2.2.8" - checksum: 10c0/37cf335c90efff31672ebb345577d681e2177f7ff9006a9ad47c68c5a9d265ba4a7b39d6c2599ceea639ca9315584ce4bd9c9fbf7a7217bfb7a599e71943c4c4 - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"webpack-sources@npm:^3.2.3": - version: 3.2.3 - resolution: "webpack-sources@npm:3.2.3" - checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e - languageName: node - linkType: hard - -"webpack-virtual-modules@npm:^0.6.2": - version: 0.6.2 - resolution: "webpack-virtual-modules@npm:0.6.2" - checksum: 10c0/5ffbddf0e84bf1562ff86cf6fcf039c74edf09d78358a6904a09bbd4484e8bb6812dc385fe14330b715031892dcd8423f7a88278b57c9f5002c84c2860179add - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"xml2js@npm:^0.6.1": - version: 0.6.2 - resolution: "xml2js@npm:0.6.2" - dependencies: - sax: "npm:>=0.6.0" - xmlbuilder: "npm:~11.0.0" - checksum: 10c0/e98a84e9c172c556ee2c5afa0fc7161b46919e8b53ab20de140eedea19903ed82f7cd5b1576fb345c84f0a18da1982ddf65908129b58fc3d7cbc658ae232108f - languageName: node - linkType: hard - -"xmlbuilder@npm:~11.0.0": - version: 11.0.1 - resolution: "xmlbuilder@npm:11.0.1" - checksum: 10c0/74b979f89a0a129926bc786b913459bdbcefa809afaa551c5ab83f89b1915bdaea14c11c759284bb9b931e3b53004dbc2181e21d3ca9553eeb0b2a7b4e40c35b - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yaml@npm:^2.3.4": - version: 2.5.0 - resolution: "yaml@npm:2.5.0" - bin: - yaml: bin.mjs - checksum: 10c0/771a1df083c8217cf04ef49f87244ae2dd7d7457094425e793b8f056159f167602ce172aa32d6bca21f787d24ec724aee3cecde938f6643564117bd151452631 - languageName: node - linkType: hard - -"zod@npm:^3.23.8": - version: 3.23.8 - resolution: "zod@npm:3.23.8" - checksum: 10c0/8f14c87d6b1b53c944c25ce7a28616896319d95bc46a9660fe441adc0ed0a81253b02b5abdaeffedbeb23bdd25a0bf1c29d2c12dd919aef6447652dd295e3e69 - languageName: node - linkType: hard diff --git a/packages/backend-embed/Cargo.toml b/packages/js-utils-embed/Cargo.toml similarity index 94% rename from packages/backend-embed/Cargo.toml rename to packages/js-utils-embed/Cargo.toml index f13591e3..c17f9c6e 100644 --- a/packages/backend-embed/Cargo.toml +++ b/packages/js-utils-embed/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "rivet-backend-embed" +name = "rivet-js-utils-embed" version = "0.1.0" build = "build.rs" license = "Apache-2.0" diff --git a/packages/backend-embed/build.rs b/packages/js-utils-embed/build.rs similarity index 66% rename from packages/backend-embed/build.rs rename to packages/js-utils-embed/build.rs index 48a9c875..a37cc70f 100644 --- a/packages/backend-embed/build.rs +++ b/packages/js-utils-embed/build.rs @@ -9,48 +9,41 @@ async fn main() -> Result<()> { let manifest_dir = std::env::var("CARGO_MANIFEST_DIR")?; let out_dir = std::env::var("OUT_DIR")?; - let mut script_path = PathBuf::from(manifest_dir.clone()); - script_path.push(".."); - script_path.push(".."); - script_path.push("scripts"); - script_path.push("backend"); - script_path.push("build_artifacts.ts"); + let mut js_utils_path = PathBuf::from(manifest_dir.clone()); + js_utils_path.pop(); + js_utils_path.push("js-utils"); - let mut backend_path = PathBuf::from(manifest_dir.clone()); - backend_path.pop(); - backend_path.push("backend"); - - // Copy backend directory to out_dir - let out_backend_path = Path::new(&out_dir).join("backend"); + // Copy js-utils directory to out_dir + let out_js_utils_path = Path::new(&out_dir).join("js-utils"); // Remove old dir - if out_backend_path.is_dir() { - fs::remove_dir_all(&out_backend_path).context("fs::remove_dir_all")?; + if out_js_utils_path.is_dir() { + fs::remove_dir_all(&out_js_utils_path).context("fs::remove_dir_all")?; } - // Copy backend directory to out_dir + // Copy js-utils directory to out_dir // TODO: This breaks deno check`` // let mut copy_options = CopyOptions::new(); // copy_options.overwrite = true; // copy_options.copy_inside = true; - // copy(&backend_path, &out_backend_path, ©_options).with_context(|| { + // copy(&js_utils_path, &out_js_utils_path, ©_options).with_context(|| { // format!( // "failed to copy directory from {} to {}", - // backend_path.display(), - // out_backend_path.display() + // js_utils_path.display(), + // out_js_utils_path.display() // ) // })?; let status = std::process::Command::new("cp") .arg("-R") - .arg(&backend_path) - .arg(&out_backend_path) + .arg(&js_utils_path) + .arg(&out_js_utils_path) .status() .with_context(|| { format!( "failed to copy directory from {} to {}", - backend_path.display(), - out_backend_path.display() + js_utils_path.display(), + out_js_utils_path.display() ) })?; if !status.success() { @@ -61,22 +54,6 @@ async fn main() -> Result<()> { let deno_dir = Path::new(&out_dir).join("deno"); let deno_exec = rivet_deno_embed::get_executable(&deno_dir).await?; - // Run build_artifacts.ts script after copying backend - let artifacts_target_dir = out_backend_path.join("artifacts"); - let status = Command::new(&deno_exec.executable_path) - .arg("run") - .arg("-A") - .arg(&script_path) - .current_dir(&out_backend_path) - .env( - "ARTIFACTS_TARGET_DIR", - artifacts_target_dir.to_str().unwrap(), - ) - .status()?; - if !status.success() { - panic!("build artifacts failed"); - } - // Prepare the directory for `include_dir!` let status = Command::new(&deno_exec.executable_path) .arg("task") @@ -86,7 +63,7 @@ async fn main() -> Result<()> { "DENO_V8_FLAGS", "--max-heap-size=8192,--max-old-space-size=8192", ) - .current_dir(&out_backend_path) + .current_dir(&out_js_utils_path) .status()?; if !status.success() { panic!("cache dependencies failed"); @@ -95,17 +72,16 @@ async fn main() -> Result<()> { // TODO: This doesn't work // Removes files that are not cross-platform & deletes // broken symlinks. - // strip_cross_platform(&out_backend_path)?; + // strip_cross_platform(&out_js_utils_path)?; - println!("cargo:rerun-if-changed={}", script_path.display()); - println!("cargo:rerun-if-changed={}", backend_path.display()); + println!("cargo:rerun-if-changed={}", js_utils_path.display()); println!( - "cargo:rustc-env=BACKEND_PATH={}", - out_backend_path.display() + "cargo:rustc-env=JS_UTILS_PATH={}", + out_js_utils_path.display() ); println!( - "cargo:rustc-env=BACKEND_HASH={}", - hash_directory(&out_backend_path)? + "cargo:rustc-env=JS_UTILS_HASH={}", + hash_directory(&out_js_utils_path)? ); Ok(()) diff --git a/packages/backend-embed/src/lib.rs b/packages/js-utils-embed/src/lib.rs similarity index 64% rename from packages/backend-embed/src/lib.rs rename to packages/js-utils-embed/src/lib.rs index 2d7d7f87..e3ac49bf 100644 --- a/packages/backend-embed/src/lib.rs +++ b/packages/js-utils-embed/src/lib.rs @@ -3,26 +3,26 @@ use include_dir::{include_dir, Dir}; use std::path::PathBuf; use tokio::fs; -const BACKEND_DIR: Dir = include_dir!("$BACKEND_PATH"); -const BACKEND_HASH: &'static str = env!("BACKEND_HASH"); +const JS_UTILS_DIR: Dir = include_dir!("$JS_UTILS_PATH"); +const JS_UTILS_HASH: &'static str = env!("JS_UTILS_HASH"); -/// Return a path for the backend. If one does not exist, the backend dir will automatically be +/// Return a path for the source dir. If one does not exist, the source dir will automatically be /// extracted and executables will be set. -pub async fn backend_dir(data_dir: &PathBuf) -> Result { - // Create path to backend based on hash - let backend_dir = data_dir.join("backend").join(BACKEND_HASH); +pub async fn src_path(data_dir: &PathBuf) -> Result { + // Create path to src based on hash + let src_dir = data_dir.join("js-utils").join(JS_UTILS_HASH); - // Write backend if does not exist - if !backend_dir.exists() { - fs::create_dir_all(&backend_dir).await?; - tokio::task::block_in_place(|| BACKEND_DIR.extract(&backend_dir))?; + // Write js-utils if does not exist + if !src_dir.exists() { + fs::create_dir_all(&src_dir).await?; + tokio::task::block_in_place(|| JS_UTILS_DIR.extract(&src_dir))?; // Update executables #[cfg(unix)] - set_executables(&BACKEND_DIR, &backend_dir).await?; + set_executables(&JS_UTILS_DIR, &src_dir).await?; } - Ok(backend_dir) + Ok(src_dir) } /// HACK: Make all binaries in `bin` folders executable. This is because diff --git a/packages/backend/deno.jsonc b/packages/js-utils/deno.jsonc similarity index 89% rename from packages/backend/deno.jsonc rename to packages/js-utils/deno.jsonc index e6b5da5c..459742af 100644 --- a/packages/backend/deno.jsonc +++ b/packages/js-utils/deno.jsonc @@ -4,16 +4,16 @@ "format": "deno fmt .", "format:check": "deno fmt --check .", - "check": "deno check cli/**/*.ts toolchain/**/*.ts runtime/**/*.ts", + "check": "deno check src/**/*.ts", // Remove old vendored files in order to ensure a consistent cache. "cache": "deno task cache:purge && deno task cache:download", "cache:purge": "rm -rf vendor node_modules", - "cache:download": "deno cache cli/tasks/**/*.ts", + "cache:download": "deno cache src/**/*.ts", - // Clear cache first in order to have as clean an environment as possible. - // Cache must be the last step in order to prevent unwanted extra cached - // files. Need to download cache before check in order to prevent error. + // Clear cache first in order to have as clean an environment as possible. + // Cache must be the last step in order to prevent unwanted extra cached + // files. Need to download cache before check in order to prevent error. "prepare": "deno clean && deno task format && deno task check && deno task cache", "lint": "deno lint cli/**/*.ts toolchain/**/*.ts runtime/**/*.ts", diff --git a/packages/js-utils/deno.lock b/packages/js-utils/deno.lock new file mode 100644 index 00000000..dcbe7e5a --- /dev/null +++ b/packages/js-utils/deno.lock @@ -0,0 +1,73 @@ +{ + "version": "3", + "packages": { + "specifiers": { + "jsr:@std/assert@^0.213.1": "jsr:@std/assert@0.213.1", + "jsr:@std/cli@^1.0.5": "jsr:@std/cli@1.0.6", + "jsr:@std/fmt@^1.0.1": "jsr:@std/fmt@1.0.2", + "jsr:@std/path@0.213": "jsr:@std/path@0.213.1", + "npm:zod-validation-error@^3.3.1": "npm:zod-validation-error@3.4.0_zod@3.23.8", + "npm:zod@^3.23.8": "npm:zod@3.23.8" + }, + "jsr": { + "@std/assert@0.213.1": { + "integrity": "24c28178b30c8e0782c18e8e94ea72b16282207569cdd10ffb9d1d26f2edebfe" + }, + "@std/cli@1.0.6": { + "integrity": "d22d8b38c66c666d7ad1f2a66c5b122da1704f985d3c47f01129f05abb6c5d3d" + }, + "@std/fmt@1.0.2": { + "integrity": "87e9dfcdd3ca7c066e0c3c657c1f987c82888eb8103a3a3baa62684ffeb0f7a7" + }, + "@std/path@0.213.1": { + "integrity": "f187bf278a172752e02fcbacf6bd78a335ed320d080a7ed3a5a59c3e88abc673", + "dependencies": [ + "jsr:@std/assert@^0.213.1" + ] + } + }, + "npm": { + "zod-validation-error@3.4.0_zod@3.23.8": { + "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==", + "dependencies": { + "zod": "zod@3.23.8" + } + }, + "zod@3.23.8": { + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dependencies": {} + } + } + }, + "remote": {}, + "workspace": { + "dependencies": [ + "jsr:@bartlomieju/postgres@^0.17.2", + "jsr:@cross/dir@^1.1.0", + "jsr:@hono/hono@^4.6.3", + "jsr:@rivet-gg/esbuild-deno-loader@^0.10.3-fork.3", + "jsr:@std/assert@0.213", + "jsr:@std/async@^1.0.4", + "jsr:@std/cli@^1.0.5", + "jsr:@std/collections@^1.0.5", + "jsr:@std/crypto@^1.0.3", + "jsr:@std/encoding@^1.0.3", + "jsr:@std/fmt@^1.0.1", + "jsr:@std/fs@0.213", + "jsr:@std/jsonc@0.213", + "jsr:@std/path@0.213", + "jsr:@ts-morph/ts-morph@^23.0.0", + "npm:@asteasolutions/zod-to-openapi@^7.1.1", + "npm:@cloudflare/workers-types", + "npm:dedent@^1.5.3", + "npm:esbuild-plugins-node-modules-polyfill@1.6.4", + "npm:esbuild@^0.20.2", + "npm:glob@^11.0.0", + "npm:nanoevents@^9.0.0", + "npm:tar@^7.4.3", + "npm:typescript-json-schema@^0.62.0", + "npm:zod-validation-error@^3.3.1", + "npm:zod@^3.23.8" + ] + } +} diff --git a/packages/js-utils/src/build/build.ts b/packages/js-utils/src/build/build.ts new file mode 100644 index 00000000..bcca0f14 --- /dev/null +++ b/packages/js-utils/src/build/build.ts @@ -0,0 +1,144 @@ +export async function build() { + // const bundledFile = projectDataPath(project, BUNDLE_PATH); + // + // // See Cloudflare Wrangler implementation: + // // + // // https://github.com/cloudflare/workers-sdk/blob/e8997b879605fb2eabc3e241086feb7aa219ef03/packages/wrangler/src/deployment-bundle/bundle.ts#L276 + // const analyzeResult = Deno.env.get("_BACKEND_ESBUILD_META") == "1"; + // const noMinify = Deno.env.get("_BACKEND_ESBUILD_NO_MINIFY") == "1"; + // const result = await esbuild.build({ + // entryPoints: [projectDataPath(project, ENTRYPOINT_PATH)], + // outfile: bundledFile, + // format: "esm", + // sourcemap: true, + // plugins: [ + // // Bundle Deno dependencies + // ...denoPlugins(), + // + // // HACK: esbuild-deno-loader does not play nice with + // // Windows paths, so we manually resolve any paths that + // // start with a Windows path separator (\) and resolve + // // them to the full path. + // { + // name: "fix-windows-paths", + // setup(build: esbuild.PluginBuild) { + // build.onResolve({ filter: /^\\.*/ }, (args) => { + // const resolvedPath = resolve(args.resolveDir, args.path); + // if (!exists(resolvedPath, { isFile: true })) { + // return { + // errors: [{ text: `File could not be resolved: ${resolvedPath}` }], + // }; + // } + // + // return { + // path: resolve(args.resolveDir, args.path), + // }; + // }); + // }, + // } satisfies esbuild.Plugin, + // + // // Remove unused Node imports + // nodeModulesPolyfillPlugin({ + // globals: { + // Buffer: true, + // process: true, + // }, + // modules: { + // // Not used: + // // https://github.com/brianc/node-postgres/blob/50c06f9bc6ff2ca1e8d7b7268b9af54ce49d72c1/packages/pg/lib/crypto/utils.js#L3 + // crypto: "empty", + // dns: "empty", + // events: true, + // fs: "empty", + // net: "empty", + // path: "empty", + // string_decoder: true, + // tls: "empty", + // buffer: true, + // }, + // }), + // ], + // define: { + // // HACK: Disable `process.domain` in order to correctly handle this edge case: + // // https://github.com/brianc/node-postgres/blob/50c06f9bc6ff2ca1e8d7b7268b9af54ce49d72c1/packages/pg/lib/native/query.js#L126 + // "process.domain": "undefined", + // }, + // external: [ + // // Check supported compat by Cloudflare Workers: + // // https://developers.cloudflare.com/workers/runtime-apis/nodejs/ + // "node:process", + // "node:stream", + // "node:util", + // + // // TODO: Why is node:crypto not working? Are any of these external imports working? + // // https://community.cloudflare.com/t/not-being-able-to-import-node-crypto/613973 + // // "node:crypto", + // + // // pg-native is overridden with pg-cloudflare at runtime + // "pg-native", + // + // // Wasm must be loaded as a separate file manually, cannot be bundled + // "*.wasm", + // "*.wasm?module", + // + // // This import only exists when running on cloudflare + // "cloudflare:*", + // ], + // bundle: true, + // minify: !noMinify, + // + // logLevel: analyzeResult ? "debug" : "error", + // metafile: analyzeResult, + // }); + // + // if (result.metafile) { + // console.log(await esbuild.analyzeMetafile(result.metafile)); + // } + // + // if (opts.runtime == Runtime.CloudflareWorkersPlatforms) { + // const bundleStr = await Deno.readTextFile(bundledFile); + // + // // TODO: Add ability for injecting WASM modules + // // // Find any `query-engine.wasm` + // // let wasmPath; + // // for (const module of project.modules.values()) { + // // const moduleWasmPath = resolve( + // // genPrismaOutputFolder(project, module), + // // "query_engine_bg.wasm", + // // ); + // // + // // if (await exists(moduleWasmPath)) { + // // wasmPath = moduleWasmPath; + // // break; + // // } + // // } + // // + // // // Check if wasm is actually required + // // if (wasmPath) { + // // // Make wasm import relative + // // bundleStr = bundleStr.replaceAll( + // // /file:[\w\\/\.\-]+query_engine_bg\.wasm/g, + // // "query-engine.wasm", + // // ); + // // } else if (/file:[\w\\/\.\-]+query_engine_bg\.wasm/.test(bundleStr)) { + // // throw new InternalError("Failed to find required query_engine_bg.wasm", { path: bundledFile }); + // // } + // + // await Deno.writeTextFile(bundledFile, bundleStr); + // + // // Write manifest of file paths for easier upload from Rivet CLI + // // + // // These modules are relative to the project root in case this was + // // generated from a Docker container. + // const manifest = { + // bundle: relative(project.path, bundledFile), + // wasm: undefined, + // // wasm: wasmPath ? relative(project.path, wasmPath) : undefined, + // }; + // + // await Deno.writeTextFile( + // projectDataPath(project, OUTPUT_MANIFEST_PATH), + // JSON.stringify(manifest), + // ); + // } +} diff --git a/packages/js-utils/src/build/task.ts b/packages/js-utils/src/build/task.ts new file mode 100644 index 00000000..48383210 --- /dev/null +++ b/packages/js-utils/src/build/task.ts @@ -0,0 +1,13 @@ +import { z } from "zod"; +import { globalOptsSchema } from "../task/common.ts"; +import { runTask } from "../task/task.ts"; +import { build } from "./build.ts"; + +export const inputSchema = z.object({}).merge(globalOptsSchema); + +runTask({ + inputSchema, + async run(input) { + await build(); + }, +}); diff --git a/packages/js-utils/src/task/common.ts b/packages/js-utils/src/task/common.ts new file mode 100644 index 00000000..5184452f --- /dev/null +++ b/packages/js-utils/src/task/common.ts @@ -0,0 +1,5 @@ +import { z } from "zod"; + +export const globalOptsSchema = z.object({}).catchall(z.unknown()); + +export type GlobalOpts = z.infer; diff --git a/packages/backend/toolchain/error/mod.ts b/packages/js-utils/src/task/error.ts similarity index 85% rename from packages/backend/toolchain/error/mod.ts rename to packages/js-utils/src/task/error.ts index b0b9300d..90ee4090 100644 --- a/packages/backend/toolchain/error/mod.ts +++ b/packages/js-utils/src/task/error.ts @@ -1,5 +1,4 @@ import { relative } from "@std/path"; -import { QualifiedPathPair } from "../../path_resolver/mod.ts"; import * as colors from "@std/fmt/colors"; import { fromError as fromValidationError } from "zod-validation-error"; @@ -130,16 +129,6 @@ export class ValidationError extends UserError { } } -export class RouteCollisionError extends KnownError { - public readonly routes: Set; - - constructor(routes: QualifiedPathPair[]) { - super("Route collision detected"); - this.name = "RouteCollisionError"; - this.routes = new Set(routes); - } -} - export function printError(error: unknown) { // Padding console.error(); @@ -240,25 +229,6 @@ export function printError(error: unknown) { } } - if (error instanceof RouteCollisionError) { - const routesArr = Array.from(error.routes); - - const moduleNameWidth = Math.max(...routesArr.map(({ module }) => module.length)) + 2; - const routeNameWidth = Math.max(...routesArr.map(({ route }) => route.length)) + 2; - - for (const { module, route, path } of routesArr) { - const moduleFmt = colors.green( - ("`" + module + "`").padStart(moduleNameWidth), - ); - const routeNameFmt = colors.green( - ("`" + route + "`").padStart(routeNameWidth), - ); - const routeType = path.isPrefix ? "prefix" : " exact"; - const pathFmt = colors.bold(colors.green("`" + path.path + "`")); - str += `\t- Route ${routeNameFmt} in module ${moduleFmt} - ${routeType} ${pathFmt}\n`; - } - } - console.error(str); } else if (error instanceof Error) { let str = `${colors.bold(colors.red("[UNCAUGHT] " + error.name))}: ${error.message}\n`; diff --git a/packages/backend/cli/task.ts b/packages/js-utils/src/task/task.ts similarity index 80% rename from packages/backend/cli/task.ts rename to packages/js-utils/src/task/task.ts index 1eae01f1..e8fa6560 100644 --- a/packages/backend/cli/task.ts +++ b/packages/js-utils/src/task/task.ts @@ -1,7 +1,5 @@ import { parseArgs } from "@std/cli/parse-args"; -import { runShutdown } from "../toolchain/utils/shutdown_handler.ts"; -import { printError, UserError } from "../toolchain/error/mod.ts"; -import { verbose } from "../toolchain/term/status.ts"; +import { printError, UserError } from "./error.ts"; import { z } from "zod"; export interface Task { @@ -11,8 +9,7 @@ export interface Task { export async function runTask(task: Task) { Deno.addSignalListener(Deno.build.os == "windows" ? "SIGBREAK" : "SIGINT", async () => { - verbose("Received shutdown signal"); - await runShutdown(); + console.log("Received shutdown signal"); Deno.exit(0); }); @@ -45,7 +42,7 @@ export async function runTask(task: Task) { printError(err); exitCode = 1; } finally { - await runShutdown(); + console.log("Exiting"); } Deno.exit(exitCode); diff --git a/packages/toolchain-ffi/Cargo.toml b/packages/toolchain-ffi/Cargo.toml deleted file mode 100644 index 0480088b..00000000 --- a/packages/toolchain-ffi/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "rivet-toolchain-ffi" -version = "0.1.0" -license = "Apache-2.0" -edition = "2021" -rust-version = "1.75" - -[lib] -crate-type = ["cdylib"] - -[dependencies] -lazy_static = "1.5.0" -serde_json = "1.0" -tokio = { version = "1.40.0", default-features = false, features = ["rt"] } -toolchain = { path = "../toolchain/", package = "rivet-toolchain" } - diff --git a/packages/toolchain-ffi/src/lib.rs b/packages/toolchain-ffi/src/lib.rs deleted file mode 100644 index d76e2fbc..00000000 --- a/packages/toolchain-ffi/src/lib.rs +++ /dev/null @@ -1,215 +0,0 @@ -mod runtime; - -use std::sync::mpsc::Receiver; -use std::sync::mpsc::TryRecvError; -use std::{ - collections::HashMap, - ffi::{CStr, CString}, - os::raw::c_char, - sync::atomic::{AtomicU64, Ordering}, - sync::{mpsc, Mutex}, -}; -use tokio::sync::mpsc as tokio_mpsc; -use toolchain::util::task; - -static TASK_ID_COUNTER: AtomicU64 = AtomicU64::new(1); -type TaskId = u64; - -struct TaskHandle { - abort_tx: tokio_mpsc::Sender<()>, - event_rx: Receiver, -} - -lazy_static::lazy_static! { - static ref TASK_HANDLES: Mutex> = Mutex::new(HashMap::new()); -} - -#[repr(u8)] -pub enum ErrorCode { - Success = 0, - NullPointer = 1, - ParseError = 2, - LockError = 3, - CStringNew = 4, - TaskNotFound = 5, -} - -#[repr(C)] -pub struct RunTaskResult { - task_id: TaskId, - error_code: u8, -} - -#[no_mangle] -pub extern "C" fn rivet_run_task(name: *const c_char, input_json: *const c_char) -> RunTaskResult { - match inner_run_task(name, input_json) { - Ok(task_id) => RunTaskResult { - task_id, - error_code: ErrorCode::Success as u8, - }, - Err(error_code) => RunTaskResult { - task_id: 0, - error_code: error_code as u8, - }, - } -} - -fn inner_run_task(name: *const c_char, input_json: *const c_char) -> Result { - // Handle null pointers - if name.is_null() || input_json.is_null() { - return Err(ErrorCode::NullPointer); - } - - // Parse input - let name = unsafe { CStr::from_ptr(name).to_str() } - .map_err(|_| ErrorCode::ParseError)? - .to_string(); - let input_json = unsafe { CStr::from_ptr(input_json).to_str() } - .map_err(|_| ErrorCode::ParseError)? - .to_string(); - - runtime::setup(); - - // Setup task - let task_id = TASK_ID_COUNTER.fetch_add(1, Ordering::SeqCst); - let (output_tx, output_rx) = mpsc::channel(); - let (run_config, mut handles) = task::RunConfig::build(); - - // Store abort sender and event receiver - TASK_HANDLES - .lock() - .map_err(|_| ErrorCode::LockError)? - .insert( - task_id, - TaskHandle { - abort_tx: handles.abort_tx.clone(), - event_rx: output_rx, - }, - ); - - // Run the task - runtime::spawn(Box::pin(async move { - // Spawn task - tokio::task::spawn(async move { - toolchain::tasks::run_task_json(run_config, &name, &input_json).await; - }); - - // Pass events to the sync context - while let Some(event) = handles.event_rx.recv().await { - match output_tx.send(event) { - Ok(_) => {} - Err(_) => { - // Abort on receiver dropped - break; - } - } - } - })); - - Ok(task_id) -} - -#[repr(C)] -pub struct TaskEvent { - task_id: TaskId, - event_json: *mut c_char, -} - -#[repr(C)] -pub struct PollTaskEventsResult { - count: usize, - error_code: u8, -} - -#[no_mangle] -pub extern "C" fn rivet_poll_task_events( - events: *mut TaskEvent, - max_events: usize, -) -> PollTaskEventsResult { - match inner_poll_task_events(events, max_events) { - Ok(count) => PollTaskEventsResult { - count, - error_code: ErrorCode::Success as u8, - }, - Err(error_code) => PollTaskEventsResult { - count: 0, - error_code: error_code as u8, - }, - } -} - -fn inner_poll_task_events(events: *mut TaskEvent, max_events: usize) -> Result { - let mut task_handles = TASK_HANDLES.lock().map_err(|_| ErrorCode::LockError)?; - - let mut count = 0; - let mut completed_tasks = Vec::new(); - - for (task_id, handle) in task_handles.iter_mut() { - match handle.event_rx.try_recv() { - Ok(event) => { - let event_json = - serde_json::to_string(&event).map_err(|_| ErrorCode::ParseError)?; - - // Store event in TaskEvent - let event_ptr = CString::new(event_json) - .map_err(|_| ErrorCode::CStringNew)? - .into_raw(); - unsafe { - if events.is_null() { - return Err(ErrorCode::NullPointer); - } - (*events.add(count)).task_id = *task_id; - (*events.add(count)).event_json = event_ptr; - } - - count += 1; - if count >= max_events { - break; - } - } - Err(TryRecvError::Empty) => continue, - Err(TryRecvError::Disconnected) => { - completed_tasks.push(*task_id); - } - } - } - - // Remove completed tasks - for task_id in completed_tasks { - task_handles.remove(&task_id); - } - - Ok(count) -} - -#[no_mangle] -pub extern "C" fn rivet_abort_task(task_id: TaskId) -> u8 { - match TASK_HANDLES.lock() { - Result::Ok(mut lock) => { - if let Some(handle) = lock.remove(&task_id) { - runtime::spawn(async move { - let _ = handle.abort_tx.send(()).await; - }); - ErrorCode::Success as u8 - } else { - ErrorCode::TaskNotFound as u8 - } - } - Err(_) => ErrorCode::LockError as u8, - } -} - -#[no_mangle] -pub extern "C" fn rivet_shutdown() { - runtime::shutdown(); -} - -#[no_mangle] -pub extern "C" fn rivet_free_rust_string(s: *mut c_char) { - unsafe { - if s.is_null() { - return; - } - let _ = CString::from_raw(s); - }; -} diff --git a/packages/toolchain-ffi/src/runtime.rs b/packages/toolchain-ffi/src/runtime.rs deleted file mode 100644 index 502f0cdd..00000000 --- a/packages/toolchain-ffi/src/runtime.rs +++ /dev/null @@ -1,46 +0,0 @@ -use lazy_static::lazy_static; -use std::{future::Future, sync::Mutex, time::Duration}; - -lazy_static! { - static ref RUNTIME: Mutex> = Mutex::new(None); -} - -/// Sets up the shared runtime. -pub fn setup() { - let mut runtime_lock = RUNTIME.lock().expect("failed to lock runtime"); - if runtime_lock.is_none() { - let runtime = tokio::runtime::Builder::new_multi_thread() - .worker_threads(2) - .enable_all() - .build() - .expect("failed to build runtime"); - *runtime_lock = Some(runtime); - } -} - -fn get_runtime() -> Option { - RUNTIME - .lock() - .expect("failed to lock runtime") - .as_ref() - .map(|runtime| runtime.handle().clone()) -} - -/// Spawns a new future -pub fn spawn(fut: impl Future + Send + 'static) { - if let Some(runtime) = get_runtime() { - runtime.spawn(fut); - } else { - eprintln!("runtime shut down, cannot spawn task") - } -} - -/// Shuts down the runtime. -pub fn shutdown() { - let mut runtime_lock = RUNTIME.lock().expect("failed to lock runtime"); - if let Some(runtime) = runtime_lock.take() { - runtime.shutdown_timeout(Duration::from_millis(100)); - } else { - eprintln!("runtime already shut down"); - } -} diff --git a/packages/toolchain/Cargo.toml b/packages/toolchain/Cargo.toml index a3b31960..49bac286 100644 --- a/packages/toolchain/Cargo.toml +++ b/packages/toolchain/Cargo.toml @@ -5,64 +5,43 @@ edition = "2021" build = "build.rs" license = "Apache-2.0" rust-version = "1.75" -description = "Managed game servers, matchmaking, and DDoS mitigation that lets you focus on building your game." +description = "Build & scale realtime applications" homepage = "https://rivet.gg" repository = "https://github.com/rivet-gg/cli" [dependencies] -# Disable less common file formats. Preserve TOML for backwards compatibility. -# This is pointing to a fork that contains a fix for Byte-order marks on Windows. -async-posthog = { git = "https://github.com/rivet-gg/posthog-rs.git", rev = "ef4e80e" } async-stream = "0.3.3" -config = { git = "https://github.com/rivet-gg/config-rs", rev = "0f3c89b4770276e8db72ce962974a9a72c59c97a", default-features = false, features = ["json", "async"] } console = "0.15" dirs = "5.0" -fs_extra = "1.2.0" futures-util = "0.3" -home = "0.5.3" humansize = "1.1" ignore = "0.4" indicatif = "0.17" lz4 = "1.24" mime_guess = "2.0" -open = "5.3.0" -rand = "0.8" regex = "1.10" reqwest = { version = "0.11", default-features = false, features = ["stream", "blocking", "rustls-tls"] } rivet-api = { package = "rivet-api-ee", path = "../../sdks/rust" } -sentry = { version = "0.32", default-features = false, feature = ["rustls"] } -serde = { version = "1.0", features = ["derive"] } +serde = { version = "1.0", features = ["derive", "rc"] } serde_json = { version = "1.0", features = ["raw_value"] } strum = { version = "0.24", features = ["derive"] } -sysinfo = "0.30.0" -portpicker = "0.1" -tabled = "0.8.0" tar = "0.4.40" tempfile = "3.13.0" -term_size = "0.3.2" -thiserror = "1.0" tokio = { version = "1.40.0", default-features = false, features = ["fs", "macros", "process", "rt", "io-util"] } tokio-util = { version = "0.7", default-features = false, features = ["io-util"] } -tower = "0.4.12" typed-path = "0.7.0" url = "2.5.0" uuid = { version = "1.3", features = ["v4"] } -webbrowser = "0.8.7" which = "5.0.0" zip = "0.5" const_format = "0.2.32" pkg-version = "1.0.0" anyhow = "1.0" rivet-deno-embed = { path = "../deno-embed" } -rivet-backend-embed = { path = "../backend-embed" } +rivet-js-utils-embed = { path = "../js-utils-embed" } lazy_static = "1.5.0" sha1 = "0.10.6" - -[dependencies.postgresql_embedded] -git = "https://github.com/rivet-gg/postgresql-embedded" -rev = "569e7f6b8e54511aee025bd85ad7178ab80ac6a2" -features = ["rustls-tls", "theseus", "bundled"] -default-features = false +jsonc-parser = { version = "0.26.2", features = ["serde"] } [target.'cfg(unix)'.dependencies] nix = { version = "0.27", default-features = false, features = ["user", "signal"] } diff --git a/packages/toolchain/src/backend/database.rs b/packages/toolchain/src/backend/database.rs deleted file mode 100644 index c2e65c6c..00000000 --- a/packages/toolchain/src/backend/database.rs +++ /dev/null @@ -1,61 +0,0 @@ -use anyhow::*; -use rivet_api::apis; -use uuid::Uuid; - -use crate::{config, paths, toolchain_ctx::ToolchainCtx, util::task}; - -pub async fn provision_database( - task: task::TaskCtx, - ctx: &ToolchainCtx, - env_id: Uuid, -) -> Result<()> { - task.log("[Provisioning Database]"); - - apis::ee_backend_api::ee_backend_provision_database( - &ctx.openapi_config_cloud, - &ctx.game_id.to_string(), - &env_id.to_string(), - ) - .await?; - - // Fetch remote DB URL - let mut env_config = config::meta::try_mutate_project(&paths::data_dir()?, |config| { - Ok(config - .cloud - .as_mut() - .context("config.cloud")? - .environments - .entry(env_id) - .or_default() - .clone()) - }) - .await?; - - if env_config.backend.db_url.is_none() { - task.log("[Fetching Connection]"); - - let db_url_res = apis::ee_backend_api::ee_backend_get_db_url( - &ctx.openapi_config_cloud, - &ctx.game_id.to_string(), - &env_id.to_string(), - ) - .await?; - - // Add missing db url - env_config.backend.db_url = db_url_res.url; - - // Update cache - config::meta::try_mutate_project(&paths::data_dir()?, |config| { - config - .cloud - .as_mut() - .context("config.cloud")? - .environments - .insert(env_id, env_config.clone()); - Ok(()) - }) - .await?; - } - - Ok(()) -} diff --git a/packages/toolchain/src/backend/mod.rs b/packages/toolchain/src/backend/mod.rs deleted file mode 100644 index 555a1053..00000000 --- a/packages/toolchain/src/backend/mod.rs +++ /dev/null @@ -1,211 +0,0 @@ -pub mod database; -pub mod project_manifest; - -use anyhow::*; -use lazy_static::lazy_static; -use rivet_api::{apis, models}; -use serde::Serialize; -use serde_json::json; -use std::{collections::HashMap, path::PathBuf, process::ExitCode, sync::Arc, time::Duration}; -use tokio::process::Command; -use uuid::Uuid; - -use crate::{ - config, - paths::{self, BackendDataType}, - postgres, - util::{process_manager::ProcessManager, task}, - ToolchainCtx, -}; - -lazy_static! { - pub static ref PROCESS_MANAGER_DEV: Arc = - ProcessManager::new("backend_dev", Duration::from_secs(2)); -} - -pub struct BackendCommandOpts { - pub task_path: &'static str, - pub input: serde_json::Value, - pub env: HashMap, - pub data_type: BackendDataType, -} - -async fn base_url() -> Result { - // Attempt to read from user or default - let base_url = if let Some(url) = - config::settings::try_read(&paths::data_dir()?, |x| Ok(x.backend.source_path.clone())) - .await? - { - url - } else { - rivet_backend_embed::backend_dir(&paths::data_dir()?) - .await? - .display() - .to_string() - }; - - let base_url = base_url.trim_end_matches('/').to_string(); - Ok(base_url) -} - -pub struct CommandRaw { - pub command: PathBuf, - pub args: Vec, - pub envs: HashMap, - pub current_dir: PathBuf, -} - -pub async fn build_backend_command_raw(mut opts: BackendCommandOpts) -> Result { - let base_url = base_url().await?; - - // Get data dir - let backend_data_dir = paths::backend_data_dir(&paths::data_dir()?, opts.data_type)?; - opts.env.insert( - "BACKEND_DATA_DIR".into(), - backend_data_dir.display().to_string(), - ); - opts.env - .insert("RIVET_BACKEND_TERM_COLOR".into(), "never".into()); - - // Add development Postgres URL if not already specified - // - // When deploying, this will already be specified - if !opts.env.contains_key("DATABASE_URL") { - let postgres = postgres::get(&paths::data_dir()?).await?; - let db_url = postgres.url("postgres").await; - opts.env.insert("DATABASE_URL".into(), db_url); - } - - // Get Deno executable - let deno = rivet_deno_embed::get_executable(&crate::paths::data_dir()?).await?; - - // Serialize command - let input_json = serde_json::to_string(&opts.input)?; - - // Run backend - Ok(CommandRaw { - command: deno.executable_path, - args: vec![ - "run".into(), - "--quiet".into(), - "--no-check".into(), - "--allow-net".into(), - "--allow-read".into(), - "--allow-env".into(), - "--allow-run".into(), - "--allow-write".into(), - "--allow-sys".into(), - "--config".into(), - format!("{base_url}/deno.jsonc"), - "--lock".into(), - format!("{base_url}/deno.lock"), - format!("{base_url}/cli/tasks/{}", opts.task_path), - "--input".into(), - input_json, - ], - envs: opts.env, - current_dir: paths::project_root()?, - }) -} - -pub async fn build_backend_command(opts: BackendCommandOpts) -> Result { - let cmd_raw = build_backend_command_raw(opts).await?; - let mut cmd = Command::new(cmd_raw.command); - cmd.args(cmd_raw.args) - .envs(cmd_raw.envs) - .current_dir(cmd_raw.current_dir); - - Ok(cmd) -} - -pub async fn run_backend_command_from_task( - task: task::TaskCtx, - opts: BackendCommandOpts, -) -> Result { - let cmd = build_backend_command(opts).await?; - let exit_code = task.spawn_cmd(cmd).await?; - Ok(exit_code.code().unwrap_or(0)) -} - -pub async fn run_backend_command_passthrough( - task_path: &'static str, - input: &impl Serialize, - data_type: BackendDataType, -) -> ExitCode { - let input_json = match serde_json::to_value(input) { - Result::Ok(x) => x, - Err(err) => { - eprintln!("Serialize failed: {err:?}"); - return ExitCode::FAILURE; - } - }; - - let mut cmd = match build_backend_command(BackendCommandOpts { - task_path, - input: input_json, - env: HashMap::new(), - data_type, - }) - .await - { - Result::Ok(x) => x, - Err(err) => { - eprintln!("Error building command: {err:?}"); - return ExitCode::FAILURE; - } - }; - - let exit_code = match cmd.status().await { - Result::Ok(x) => x, - Err(err) => { - eprintln!("Error running command: {err:?}"); - return ExitCode::FAILURE; - } - }; - - if exit_code.success() { - ExitCode::SUCCESS - } else { - ExitCode::FAILURE - } -} - -/// Gets or auto-creates a backend project for the game. -pub async fn get_or_create_backend( - ctx: &ToolchainCtx, - env_id: Uuid, -) -> Result { - // Get the project - let backend_res = apis::ee_backend_api::ee_backend_get( - &ctx.openapi_config_cloud, - &ctx.game_id.to_string(), - &env_id.to_string(), - None, - ) - .await; - - let backend = match backend_res { - Err(apis::Error::ResponseError(apis::ResponseContent { - entity: - Some(apis::ee_backend_api::EeBackendGetError::Status400(models::ErrorBody { - code, .. - })), - .. - })) if code == "BACKEND_NOT_FOUND" => create_backend(ctx, env_id).await?, - x => *x?.backend, - }; - - Ok(backend) -} - -async fn create_backend(ctx: &ToolchainCtx, env_id: Uuid) -> Result { - let res = apis::ee_backend_api::ee_backend_create( - &ctx.openapi_config_cloud, - &ctx.game_id.to_string(), - &env_id.to_string(), - json!({}), - ) - .await?; - - Ok(*res.backend) -} diff --git a/packages/toolchain/src/backend/project_manifest.rs b/packages/toolchain/src/backend/project_manifest.rs deleted file mode 100644 index 53f9cbcd..00000000 --- a/packages/toolchain/src/backend/project_manifest.rs +++ /dev/null @@ -1,49 +0,0 @@ -use anyhow::*; -use serde::Deserialize; -use std::{collections::HashMap, path::PathBuf}; - -use crate::paths; - -/// Partial serde struct representing data we need to read from `project_manifest.json`. -/// -/// See packages/backend/toolchain/build/project_manifest.ts -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct Meta { - pub sdks: Vec, - pub modules: HashMap, -} - -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct Sdk { - pub target: String, - pub output: String, -} - -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct Module { - pub config: ModuleConfig, -} - -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ModuleConfig { - pub name: String, -} - -pub fn path(data_dir: &PathBuf, data_type: paths::BackendDataType) -> Result { - Ok(paths::backend_data_dir(data_dir, data_type)?.join("project_manifest.json")) -} - -/// Reads the `project_manifest.json` from the filesystem. -pub async fn read(data_dir: &PathBuf, data_type: paths::BackendDataType) -> Result { - // Read meta - let manifest_path = path(data_dir, data_type)?; - tokio::task::block_in_place(|| { - let file = std::fs::File::open(&manifest_path)?; - let meta = serde_json::from_reader::<_, Meta>(&file)?; - Ok(meta) - }) -} diff --git a/packages/toolchain/src/build.rs b/packages/toolchain/src/build.rs new file mode 100644 index 00000000..0ab23a2d --- /dev/null +++ b/packages/toolchain/src/build.rs @@ -0,0 +1,4 @@ +pub mod tags { + pub const VERSION: &str = "version"; + pub const CURRENT: &str = "current"; +} diff --git a/packages/toolchain/src/config/build/docker.rs b/packages/toolchain/src/config/build/docker.rs new file mode 100644 index 00000000..6f24b90c --- /dev/null +++ b/packages/toolchain/src/config/build/docker.rs @@ -0,0 +1,79 @@ +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +use super::Compression; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Build { + /// Existing image tag to upload. + #[serde(skip_serializing_if = "Option::is_none")] + pub image: Option, + /// Dockerfile to build. + #[serde(skip_serializing_if = "Option::is_none")] + pub dockerfile: Option, + /// Directory to build the Docker image from. + #[serde(skip_serializing_if = "Option::is_none")] + pub build_path: Option, + /// Build target to upload. + #[serde(skip_serializing_if = "Option::is_none")] + pub build_target: Option, + /// Build arguments to pass to the build. + #[serde(skip_serializing_if = "Option::is_none")] + pub build_args: Option>, + /// Unstable features. + #[serde(skip_serializing_if = "Option::is_none")] + pub unstable: Option, +} + +impl Build { + pub fn unstable(&self) -> Unstable { + self.unstable.clone().unwrap_or_default() + } +} + +#[derive(Default, Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Unstable { + pub allow_root: Option, + pub build_method: Option, + pub bundle: Option, + pub compression: Option, +} + +impl Unstable { + pub fn allow_root(&self) -> bool { + self.allow_root.unwrap_or(false) + } + + pub fn build_method(&self) -> BuildMethod { + self.build_method.unwrap_or(BuildMethod::Buildx) + } + + pub fn bundle(&self) -> BundleKind { + self.bundle.unwrap_or(BundleKind::OciBundle) + } +} + +#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum BuildMethod { + /// Use the native Docker build command. Only used if Buildx is not available. + Buildx, + + /// Create & use a Buildx builder on this machine. Required for cross-platform compilation. + Native, +} + +#[derive(Debug, Copy, Clone, Serialize, Deserialize, strum::AsRefStr)] +pub enum BundleKind { + /// Legacy option. Docker image archive output from `docker save`. Slower lobby start + /// times. + #[strum(serialize = "docker_image")] + DockerImage, + + /// OCI bundle archive derived from a generated Docker image. Optimized for fast lobby start + /// times. + #[strum(serialize = "oci_bundle")] + OciBundle, +} diff --git a/packages/toolchain/src/config/build/javascript.rs b/packages/toolchain/src/config/build/javascript.rs new file mode 100644 index 00000000..3673eb79 --- /dev/null +++ b/packages/toolchain/src/config/build/javascript.rs @@ -0,0 +1,39 @@ +use serde::{Deserialize, Serialize}; + +use super::Compression; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Build { + pub path: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub mode: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub command: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub import_map: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub deno: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub bundle: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Deno { + pub config: String, + pub no_lock: bool, + pub no_remote: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Bundle { + pub minify: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Unstable { + pub compression: Compression, +} diff --git a/packages/toolchain/src/config/build/mod.rs b/packages/toolchain/src/config/build/mod.rs new file mode 100644 index 00000000..ffaa0aa2 --- /dev/null +++ b/packages/toolchain/src/config/build/mod.rs @@ -0,0 +1,32 @@ +use serde::{Deserialize, Serialize}; + +pub mod docker; +pub mod javascript; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "runtime")] +pub enum Runtime { + Docker(docker::Build), + #[serde(rename = "javascript")] + JavaScript(javascript::Build), +} + +#[derive(Debug, Copy, Clone, Serialize, Deserialize, strum::AsRefStr)] +pub enum Compression { + /// No compression. + #[strum(serialize = "none")] + None, + + /// LZ4 compression. Fast compression optimized for fast lobby start times. + #[strum(serialize = "lz4")] + Lz4, +} + +impl Compression { + pub fn default_from_bundle_kind(build_kind: docker::BundleKind) -> Self { + match build_kind { + docker::BundleKind::DockerImage => Compression::None, + docker::BundleKind::OciBundle => Compression::Lz4, + } + } +} diff --git a/packages/toolchain/src/config/mod.rs b/packages/toolchain/src/config/mod.rs index 02e8d173..a6ae4b8b 100644 --- a/packages/toolchain/src/config/mod.rs +++ b/packages/toolchain/src/config/mod.rs @@ -1,2 +1,76 @@ -pub mod meta; -pub mod settings; +use anyhow::*; +use serde::{Deserialize, Serialize}; +use std::sync::Arc; +use std::{collections::HashMap, ops::Deref, path::Path}; + +pub mod build; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config(Arc); + +impl Config { + pub async fn load(path: Option<&Path>) -> Result { + let path = path.unwrap_or_else(|| Path::new(".")); + let jsonc_path = path.join("rivet.jsonc"); + let json_path = path.join("rivet.json"); + + let (file_path, content) = match (jsonc_path.exists(), json_path.exists()) { + (true, true) => bail!("Both rivet.jsonc and rivet.json exist. Please remove one."), + (false, false) => bail!("Neither rivet.jsonc nor rivet.json exist."), + (true, false) => (&jsonc_path, tokio::fs::read_to_string(&jsonc_path).await?), + (false, true) => (&json_path, tokio::fs::read_to_string(&json_path).await?), + }; + + let parsed_value = jsonc_parser::parse_to_serde_value(&content, &Default::default()) + .map_err(|err| anyhow!("Failed to parse {}: {err}", file_path.display()))? + .with_context(|| format!("Config file is empty: {}", file_path.display()))?; + let root: Root = serde_json::from_value::(parsed_value) + .map_err(|err| anyhow!("Invalid config {}: {err}", file_path.display()))?; + + Ok(Config(Arc::new(root))) + } +} + +impl Deref for Config { + type Target = Root; + + fn deref(&self) -> &Self::Target { + self.0.as_ref() + } +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Root { + pub version: String, + pub builds: Vec, + pub unstable: Option, +} + +impl Root { + pub fn unstable(&self) -> Unstable { + self.unstable.clone().unwrap_or_default() + } +} + +// TODO: Add back `deny_unknown_fields` after https://github.com/serde-rs/serde/issues/1600 +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub struct Build { + pub tags: HashMap, + #[serde(flatten)] + pub runtime: build::Runtime, +} + +#[derive(Default, Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", deny_unknown_fields)] +pub struct Unstable { + #[serde(skip_serializing_if = "Option::is_none")] + pub multipart_enabled: Option, +} + +impl Unstable { + pub fn multipart_enabled(&self) -> bool { + self.multipart_enabled.unwrap_or(true) + } +} diff --git a/packages/toolchain/src/config/settings.rs b/packages/toolchain/src/config/settings.rs deleted file mode 100644 index 698efc9b..00000000 --- a/packages/toolchain/src/config/settings.rs +++ /dev/null @@ -1,188 +0,0 @@ -use anyhow::*; -use lazy_static::lazy_static; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; -use std::path::PathBuf; -use tokio::sync::Mutex; - -use crate::{ - paths, - util::docker::{build::DockerBuildMethod, BuildCompression, BuildKind}, -}; - -#[derive(Default, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct Settings { - #[serde(default)] - pub backend: BackendConfig, - #[serde(default)] - pub game_server: GameServerConfig, - #[serde(default)] - pub net: NetConfig, -} - -#[derive(Default, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct BackendConfig { - /// Env vars to pass to all backend commands. - #[serde(default)] - pub command_environment: HashMap, - #[serde(default)] - pub source_path: Option, - - #[serde(default)] - pub sdk: BackendSdkConfig, - #[serde(default)] - pub dev: BackendDevConfig, - #[serde(default)] - pub deploy: BackendDeployConfig, -} - -#[derive(Default, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct BackendSdkConfig { - /// Env vars to pass to the deploy backend commands. - #[serde(default)] - pub command_environment: HashMap, - #[serde(default)] - pub path: Option, -} - -#[derive(Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct BackendDevConfig { - /// Env vars to pass to the deploy backend commands. - #[serde(default)] - pub command_environment: HashMap, - /// Backend ocnfig to use when running backend config. - #[serde(default = "BackendDevConfig::default_config_path")] - pub config_path: String, -} - -impl Default for BackendDevConfig { - fn default() -> Self { - Self { - command_environment: HashMap::new(), - config_path: Self::default_config_path(), - } - } -} - -impl BackendDevConfig { - fn default_config_path() -> String { - "rivet.dev.json".to_string() - } -} - -#[derive(Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct BackendDeployConfig { - /// Env vars to pass to the deploy backend commands. - #[serde(default)] - pub command_environment: HashMap, - /// Backend ocnfig to use when running backend config. - #[serde(default = "BackendDeployConfig::default_config_path")] - pub config_path: String, -} - -impl Default for BackendDeployConfig { - fn default() -> Self { - Self { - command_environment: HashMap::new(), - config_path: Self::default_config_path(), - } - } -} - -impl BackendDeployConfig { - fn default_config_path() -> String { - "rivet.json".into() - } -} - -#[derive(Default, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct GameServerConfig { - #[serde(default)] - pub deploy: GameServerDeployConfig, -} - -#[derive(Default, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct GameServerDeployConfig { - #[serde(default)] - pub dockerfile_path: Option, - #[serde(default)] - pub docker_image: Option, - #[serde(default)] - pub build_args: Option>, - #[serde(default)] - pub allow_root: bool, - #[serde(default)] - pub build_method: DockerBuildMethod, - #[serde(default)] - pub build_kind: BuildKind, - // Default value depends on build_kind - #[serde(default)] - pub build_compression: Option, -} - -#[derive(Default, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -pub struct NetConfig { - #[serde(default)] - pub disable_upload_multipart: bool, -} - -lazy_static! { - static ref GLOBAL_SETTINGS: Mutex> = Mutex::new(HashMap::new()); -} - -async fn get_or_init(data_dir: &PathBuf, cb: F) -> Result -where - F: FnOnce(&mut Settings) -> Result, -{ - let mut global_settings = GLOBAL_SETTINGS.lock().await; - - if !global_settings.contains_key(data_dir) { - let mut config_builder = config::ConfigBuilder::::default(); - - if paths::user_settings_config_file(data_dir)?.exists() { - config_builder = config_builder.add_source(config::File::from( - paths::user_settings_config_file(data_dir)?, - )); - } - if paths::project_settings_config_file()?.exists() { - config_builder = config_builder - .add_source(config::File::from(paths::project_settings_config_file()?)); - } - - let config = config_builder.build().await.context("find settings")?; - let mut settings = config - .try_deserialize::() - .context("deserialize settings")?; - - let result = cb(&mut settings)?; - global_settings.insert(data_dir.clone(), settings); - Ok(result) - } else { - let settings = global_settings - .get_mut(data_dir) - .context("global_settings[data_dir]")?; - cb(settings) - } -} - -pub async fn try_read(data_dir: &PathBuf, cb: F) -> Result -where - F: FnOnce(&Settings) -> Result, -{ - get_or_init(data_dir, |settings| cb(settings)).await -} - -pub async fn try_mutate(data_dir: &PathBuf, cb: F) -> Result -where - F: FnOnce(&mut Settings) -> Result, -{ - get_or_init(data_dir, cb).await -} diff --git a/packages/toolchain/src/game_server.rs b/packages/toolchain/src/game_server.rs deleted file mode 100644 index 1e1bb2e5..00000000 --- a/packages/toolchain/src/game_server.rs +++ /dev/null @@ -1,13 +0,0 @@ -use lazy_static::lazy_static; -use std::{sync::Arc, time::Duration}; - -use crate::util::process_manager::ProcessManager; - -pub const VERSION_BUILD_TAG: &str = "version"; -pub const ENABLED_BUILD_TAG: &str = "enabled"; -pub const CURRENT_BUILD_TAG: &str = "current"; - -lazy_static! { - pub static ref PROCESS_MANAGER: Arc = - ProcessManager::new("game_server", Duration::from_secs(2)); -} diff --git a/packages/toolchain/src/lib.rs b/packages/toolchain/src/lib.rs index 981474fd..77effbc5 100644 --- a/packages/toolchain/src/lib.rs +++ b/packages/toolchain/src/lib.rs @@ -1,9 +1,8 @@ -pub mod backend; +pub mod build; pub mod config; -pub mod game; -pub mod game_server; +pub mod meta; pub mod paths; -pub mod postgres; +pub mod project; pub mod tasks; pub mod toolchain_ctx; pub mod util; diff --git a/packages/toolchain/src/config/meta.rs b/packages/toolchain/src/meta.rs similarity index 84% rename from packages/toolchain/src/config/meta.rs rename to packages/toolchain/src/meta.rs index 858daef6..3def985e 100644 --- a/packages/toolchain/src/config/meta.rs +++ b/packages/toolchain/src/meta.rs @@ -14,18 +14,6 @@ pub struct Meta { /// /// If not signed in, will be None. pub cloud: Option, - - /// Port which the dev server is running on for plugins. - #[serde(default)] - pub backend_port: Option, - - /// See `backend_port`. - #[serde(default)] - pub editor_port: Option, - - /// See `backend_port`. - #[serde(default)] - pub process_manager_state: HashMap, } #[derive(Serialize, Deserialize)] @@ -51,25 +39,7 @@ impl Cloud { } #[derive(Default, Clone, Serialize, Deserialize)] -pub struct Environment { - #[serde(default)] - pub backend: Backend, -} - -#[derive(Default, Clone, Serialize, Deserialize)] -pub struct Backend { - #[serde(default)] - pub db_url: Option, -} - -#[derive(Default, Clone, Serialize, Deserialize)] -pub struct ProcessManagerState { - /// Stores the PID of the current child process. - /// - /// We use this to kill the existing PID in case the parent process dies without gracefully - /// killing the children. - pub pid: Option, -} +pub struct Environment {} lazy_static! { /// List of all meta paths cached in memory. diff --git a/packages/toolchain/src/paths.rs b/packages/toolchain/src/paths.rs index aab6d4ae..82f814eb 100644 --- a/packages/toolchain/src/paths.rs +++ b/packages/toolchain/src/paths.rs @@ -22,7 +22,7 @@ pub fn project_path_hash() -> Result { let mut hasher = Sha1::new(); hasher.update(project_root.to_string_lossy().as_bytes()); let hash = format!("{:.16x}", hasher.finalize()); - + // Return a human-readable name Ok(format!("{}_{}", file_name, hash)) } @@ -37,16 +37,6 @@ pub fn user_config_dir(base_data_dir: &PathBuf) -> Result { Ok(base_data_dir.join("config")) } -/// Global user config file. -pub fn user_settings_config_file(base_data_dir: &PathBuf) -> Result { - Ok(user_config_dir(base_data_dir)?.join("settings.json")) -} - -/// Project user config file. -pub fn project_settings_config_file() -> Result { - Ok(project_root()?.join(".rivet").join("settings.json")) -} - /// Directory specific to this project. /// /// This is not stored within the project itself since it causes problems with version control & @@ -59,54 +49,3 @@ pub fn project_data_dir(base_data_dir: &PathBuf) -> Result { pub fn meta_config_file(base_data_dir: &PathBuf) -> Result { Ok(project_data_dir(base_data_dir)?.join("meta.json")) } - -/// Specifies which type of backend dir to use. -/// -/// We store different backend dirs since they need to be locked independently. -/// -/// This is akin to subdirectores in Rust `target` dirs. -pub enum BackendDataType { - Dev, - Deploy, -} - -impl BackendDataType { - fn as_str(&self) -> &str { - match self { - BackendDataType::Dev => "dev", - BackendDataType::Deploy => "deploy", - } - } -} - -/// Stores all backend-related data. -pub fn backend_data_dir(base_data_dir: &PathBuf, data_type: BackendDataType) -> Result { - Ok(project_data_dir(base_data_dir)? - .join("backend") - .join(data_type.as_str())) -} - -/// Stores Postgres-related data. -pub fn postgres_base(base_data_dir: &PathBuf) -> Result { - Ok(project_data_dir(base_data_dir)?.join("postgres")) -} - -/// Stores Postgres password data. -pub fn postgres_password_file(base_data_dir: &PathBuf) -> Result { - Ok(postgres_base(base_data_dir)?.join(".pgpass")) -} - -/// Stores Postgres config data. -pub fn postgres_state_file(base_data_dir: &PathBuf) -> Result { - Ok(postgres_base(base_data_dir)?.join("state.json")) -} - -/// Where Postgres gets installed. -pub fn postgres_install_dir(base_data_dir: &PathBuf) -> Result { - Ok(postgres_base(base_data_dir)?.join("install")) -} - -/// Stores postgres data. -pub fn postgres_data_dir(base_data_dir: &PathBuf) -> Result { - Ok(postgres_base(base_data_dir)?.join("data")) -} diff --git a/packages/toolchain/src/postgres.rs b/packages/toolchain/src/postgres.rs deleted file mode 100644 index d6a9076c..00000000 --- a/packages/toolchain/src/postgres.rs +++ /dev/null @@ -1,237 +0,0 @@ -use anyhow::*; -use lazy_static::lazy_static; -use postgresql_embedded::{PostgreSQL, Settings}; -use serde::{Deserialize, Serialize}; -use std::{collections::HashMap, fmt, path::PathBuf, sync::Arc, time::Duration}; -use tokio::{net::TcpStream, sync::Mutex}; - -use crate::paths; - -lazy_static! { - /// Holds the Postgres managers for each data dir. - static ref MANAGER_REGISTRY: Mutex>> = Mutex::new(HashMap::new()); -} - -pub async fn get(data_dir: &PathBuf) -> Result> { - let mut registry = MANAGER_REGISTRY.lock().await; - - if let Some(manager) = registry.get(data_dir) { - Ok(manager.clone()) - } else { - let manager = PostgresManager::new(data_dir).await?; - registry.insert(data_dir.clone(), manager.clone()); - Ok(manager) - } -} - -/// Helper function to get & start postgres. -pub async fn get_and_start(data_dir: &PathBuf) -> Result> { - let postgres = get(data_dir).await?; - postgres.start().await?; - Ok(postgres) -} - -pub struct PostgresManager { - data_dir: PathBuf, - postgresql: Mutex, -} - -impl PostgresManager { - async fn new(data_dir: &PathBuf) -> Result> { - // Read the port if the Postgres server is already running. If the port changes, the server - // will not be accessible. - let state = read_state(data_dir).await?; - - let mut settings = Settings::new(); - settings.installation_dir = paths::postgres_install_dir(data_dir)?; - settings.host = "127.0.0.1".into(); - if let Some(port) = state.port { - settings.port = port; - } - settings.temporary = false; - settings.password_file = paths::postgres_password_file(data_dir)?; - settings.data_dir = paths::postgres_data_dir(data_dir)?; - if let Some(password) = state.password { - settings.password = password; - } - - let postgresql = PostgreSQL::new(settings); - - Ok(Arc::new(Self { - data_dir: data_dir.clone(), - postgresql: Mutex::new(postgresql), - })) - } - - pub async fn start(&self) -> Result<()> { - ensure!( - !crate::util::os::is_root(), - "Cannot run this command as root.\n\nPlease run this command as a non-root user (using, e.g., \"su\").\n\nLearn more about user management here: https://linuxize.com/post/how-to-create-users-in-linux-using-the-useradd-command/#how-to-create-a-new-user-in-linux\n\nYou may need to run `rivet clean` before re-running this command as a non-root user.", - ); - - // Ensure data dir exists - tokio::fs::create_dir_all(paths::postgres_base(&self.data_dir)?).await?; - - // This is idempotent - let mut postgresql = self.postgresql.lock().await; - postgresql.setup().await.context("PostgreSQL::setup")?; - - // Otherwise, this will kill existing processes. - if !is_running(&postgresql).await { - // Start Postgres - postgresql.start().await.context("PostgreSQL::start")?; - - // Write new state - let port = postgresql.settings().port; - let password = postgresql.settings().password.clone(); - ensure!(port != 0, "postgres port still 0"); - mutate_state(&self.data_dir, |x| { - x.port = Some(port); - x.password = Some(password); - Result::Ok(()) - }) - .await?; - } - - Ok(()) - } - - pub async fn stop(&self) -> Result<()> { - let postgresql = self.postgresql.lock().await; - if is_running(&postgresql).await { - postgresql.stop().await.context("PostgreSQL::stop")?; - } - Ok(()) - } - - pub async fn reset(&self) -> Result<()> { - // Stop database - self.stop().await?; - - // Delete data dir - let pg_data_dir = paths::postgres_data_dir(&self.data_dir)?; - tokio::fs::remove_dir_all(&pg_data_dir).await?; - - Ok(()) - } - - pub async fn status(&self) -> Result { - let postgresql = self.postgresql.lock().await; - let status = match postgresql.status() { - postgresql_embedded::Status::NotInstalled => Status::NotInstalled, - postgresql_embedded::Status::Installed => Status::Installed, - postgresql_embedded::Status::Started => { - if is_connectable(&postgresql).await { - Status::Ready - } else { - Status::Started - } - } - postgresql_embedded::Status::Stopped => Status::Stopped, - }; - Ok(status) - } - - pub async fn bin_dir(&self) -> PathBuf { - self.postgresql.lock().await.settings().binary_dir() - } - - pub async fn url(&self, database_name: &str) -> String { - self.postgresql.lock().await.settings().url(database_name) - } -} - -/// Checks if Postgres is running. -/// -/// Adds an extra check if the port is connectable to cover the edge case where the process was -/// force killed (or the system restarted). -async fn is_running(postgresql: &PostgreSQL) -> bool { - postgresql.status() == postgresql_embedded::Status::Started && is_connectable(postgresql).await -} - -async fn is_connectable(postgresql: &PostgreSQL) -> bool { - probe_tcp_addr( - postgresql.settings().host.as_str(), - postgresql.settings().port, - ) - .await -} - -/// Checks if can connect to a TCP addr. -async fn probe_tcp_addr(host: &str, port: u16) -> bool { - // If port has not been chosen, fail immediately - if port == 0 { - return false; - } - - let connect_future = TcpStream::connect((host, port)); - let timeout_duration = Duration::from_secs(1); - - match tokio::time::timeout(timeout_duration, connect_future).await { - Result::Ok(Result::Ok(_)) => true, - _ => false, - } -} - -#[derive(Serialize, Deserialize, Default)] -struct PostgresState { - port: Option, - password: Option, -} - -async fn read_state(data_dir: &PathBuf) -> Result { - let state_path = paths::postgres_state_file(data_dir)?; - let state = match tokio::fs::read(&state_path).await { - Result::Ok(data) => serde_json::from_slice(&data).context("parse postgres state")?, - Err(_) => PostgresState::default(), - }; - Ok(state) -} - -/// Reads the state from the file system, passes it to a callback, and writes the changes back. -/// -/// We do this instead of storing it in memory since it will change if multiple processes are -/// accessing this state. -async fn mutate_state(data_dir: &PathBuf, cb: F) -> Result -where - F: FnOnce(&mut PostgresState) -> Result, -{ - let state_path = paths::postgres_state_file(data_dir)?; - let mut state = read_state(data_dir).await?; - - let res = cb(&mut state)?; - - let state_json = serde_json::to_string(&state)?; - tokio::fs::create_dir_all(paths::postgres_base(data_dir)?).await?; - tokio::fs::write(&state_path, state_json).await?; - - Ok(res) -} - -#[derive(Serialize)] -pub enum Status { - /// Archive not installed - NotInstalled, - /// Installation complete; not initialized - Installed, - /// Server started but not connectable - /// - /// This state may indicate that a PID file exists but there is no actual server running - Started, - /// Server connectable - Ready, - /// Server initialized and stopped - Stopped, -} - -impl fmt::Display for Status { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Status::NotInstalled => write!(f, "Stopped (Not Installed)"), - Status::Installed => write!(f, "Stopped (Installed)"), - Status::Started => write!(f, "Unkown (Started)"), - Status::Ready => write!(f, "Ready"), - Status::Stopped => write!(f, "Stopped (Not Running)"), - } - } -} diff --git a/packages/toolchain/src/game.rs b/packages/toolchain/src/project/environment.rs similarity index 93% rename from packages/toolchain/src/game.rs rename to packages/toolchain/src/project/environment.rs index f306b5ed..1926ea64 100644 --- a/packages/toolchain/src/game.rs +++ b/packages/toolchain/src/project/environment.rs @@ -3,7 +3,7 @@ use rivet_api::{apis, models}; use serde::Serialize; use uuid::Uuid; -use crate::toolchain_ctx::ToolchainCtx; +use crate::ToolchainCtx; // TODO: Replace this with a production API #[derive(Clone, Debug, Serialize)] @@ -39,7 +39,7 @@ impl From for TEMPEnvironment { pub async fn get_env(ctx: &ToolchainCtx, env_id: Uuid) -> Result { let res = apis::cloud_games_namespaces_api::cloud_games_namespaces_get_game_namespace_by_id( &ctx.openapi_config_cloud, - &ctx.game_id.to_string(), + &ctx.project.game_id.to_string(), &env_id.to_string(), ) .await?; diff --git a/packages/toolchain/src/project/mod.rs b/packages/toolchain/src/project/mod.rs new file mode 100644 index 00000000..640a7930 --- /dev/null +++ b/packages/toolchain/src/project/mod.rs @@ -0,0 +1 @@ +pub mod environment; diff --git a/packages/toolchain/src/tasks/auth/check_state.rs b/packages/toolchain/src/tasks/auth/check_state.rs index 655e8a33..28466abd 100644 --- a/packages/toolchain/src/tasks/auth/check_state.rs +++ b/packages/toolchain/src/tasks/auth/check_state.rs @@ -1,7 +1,7 @@ use anyhow::*; use serde::{Deserialize, Serialize}; -use crate::{config, paths, util::task}; +use crate::{meta, paths, util::task}; #[derive(Deserialize)] pub struct Input {} @@ -23,7 +23,7 @@ impl task::Task for Task { async fn run(_task: task::TaskCtx, _input: Input) -> Result { let signed_in = - config::meta::read_project(&paths::data_dir()?, |meta| meta.cloud.is_some()).await?; + meta::read_project(&paths::data_dir()?, |meta| meta.cloud.is_some()).await?; Ok(Output { signed_in }) } } diff --git a/packages/toolchain/src/tasks/auth/sign_out.rs b/packages/toolchain/src/tasks/auth/sign_out.rs index a007087c..a8fd78b8 100644 --- a/packages/toolchain/src/tasks/auth/sign_out.rs +++ b/packages/toolchain/src/tasks/auth/sign_out.rs @@ -1,7 +1,7 @@ use anyhow::*; use serde::{Deserialize, Serialize}; -use crate::{config, paths, util::task}; +use crate::{meta, paths, util::task}; #[derive(Deserialize)] pub struct Input {} @@ -20,7 +20,7 @@ impl task::Task for Task { } async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - config::meta::mutate_project(&paths::data_dir()?, |meta| { + meta::mutate_project(&paths::data_dir()?, |meta| { meta.cloud = None; }) .await?; diff --git a/packages/toolchain/src/tasks/auth/wait_for_sign_in.rs b/packages/toolchain/src/tasks/auth/wait_for_sign_in.rs index 6a98b8a3..ab7088e9 100644 --- a/packages/toolchain/src/tasks/auth/wait_for_sign_in.rs +++ b/packages/toolchain/src/tasks/auth/wait_for_sign_in.rs @@ -2,7 +2,7 @@ use anyhow::*; use rivet_api::apis; use serde::{Deserialize, Serialize}; -use crate::{config, paths, toolchain_ctx, util::task}; +use crate::{meta, paths, toolchain_ctx, util::task}; #[derive(Deserialize)] pub struct Input { @@ -64,8 +64,8 @@ impl task::Task for Task { ) .await?; - config::meta::mutate_project(&paths::data_dir()?, |meta| { - meta.cloud = Some(config::meta::Cloud::new(input.api_endpoint, token)) + meta::mutate_project(&paths::data_dir()?, |meta| { + meta.cloud = Some(meta::Cloud::new(input.api_endpoint, token)) }) .await?; diff --git a/packages/toolchain/src/tasks/backend/mod.rs b/packages/toolchain/src/tasks/backend/mod.rs deleted file mode 100644 index 99457f5f..00000000 --- a/packages/toolchain/src/tasks/backend/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod start; -pub mod stop; diff --git a/packages/toolchain/src/tasks/backend/start.rs b/packages/toolchain/src/tasks/backend/start.rs deleted file mode 100644 index a965bc3d..00000000 --- a/packages/toolchain/src/tasks/backend/start.rs +++ /dev/null @@ -1,247 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; -use std::time::{Duration, SystemTime}; - -use crate::{ - backend::{self, build_backend_command_raw, project_manifest}, - config::{self, meta}, - paths, postgres, - util::{ - process_manager::CommandOpts, - task::{self, backend_config_update}, - }, -}; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output { - pub exit_code: Option, -} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "backend.start" - } - - async fn run(task: task::TaskCtx, _input: Self::Input) -> Result { - postgres::get_and_start(&paths::data_dir()?).await?; - - // Set backend port in case the process is already running. This will result in a duplicate - // port dispatch if the backend is not running or crashed. - if let (Some(backend_port), Some(editor_port)) = - meta::read_project(&paths::data_dir()?, |x| (x.backend_port, x.editor_port)).await? - { - task.event(task::TaskEvent::PortUpdate { - backend_port, - editor_port, - }); - } - - // Start or hook to backend - let task_inner = task.clone(); - let pm_fut = backend::PROCESS_MANAGER_DEV.start(task.clone(), || async move { - // Pick dev port - let backend_port = portpicker::pick_unused_port().context("no free ports")?; - let editor_port = portpicker::pick_unused_port().context("no free ports")?; - meta::mutate_project(&paths::data_dir()?, |x| { - x.backend_port = Some(backend_port); - x.editor_port = Some(editor_port); - }) - .await?; - - // Build env - let (mut cmd_env, config_path) = - config::settings::try_read(&paths::data_dir()?, |settings| { - let mut env = settings.backend.command_environment.clone(); - env.extend(settings.backend.dev.command_environment.clone()); - Ok((env, settings.backend.dev.config_path.clone())) - }) - .await?; - cmd_env.insert("RIVET_BACKEND_PORT".into(), backend_port.to_string()); - cmd_env.insert("RIVET_BACKEND_HOSTNAME".into(), "0.0.0.0".to_string()); - cmd_env.insert("RIVET_EDITOR_PORT".into(), editor_port.to_string()); - - // Build command - let cmd = build_backend_command_raw(backend::BackendCommandOpts { - task_path: "dev.ts", - input: serde_json::json!({ - "project": config_path, - "nonInteractive": true - }), - env: cmd_env, - data_type: paths::BackendDataType::Dev, - }) - .await?; - - // Publish commandevent - task_inner.event(task::TaskEvent::PortUpdate { - backend_port, - editor_port, - }); - - Ok(CommandOpts { - command: cmd.command.display().to_string(), - args: cmd.args, - envs: cmd.envs.into_iter().collect(), - current_dir: cmd.current_dir.display().to_string(), - }) - }); - - // Poll for config file updates - let poll_config_fut = poll_config_file(task.clone()); - - // Wait futures - let exit_code = tokio::select! { - res = pm_fut => { - res? - } - res = poll_config_fut => { - res?; - bail!("poll_config_file exited unexpectedly"); - } - }; - - Ok(Output { exit_code }) - } -} - -async fn poll_config_file(task_ctx: task::TaskCtx) -> Result<()> { - let manifest_path = project_manifest::path(&paths::data_dir()?, paths::BackendDataType::Dev)?; - - // TODO: Switch to notify - // Poll the file for updates - // - // We do this instead of using a file watcher since file watchers are frequently broken across - // platform and will require extensive testing. - let mut interval = tokio::time::interval(Duration::from_secs(2)); - let mut last_file_modified = None; - let mut last_sdk_modified = None; - let mut last_editor_port = None; - loop { - interval.tick().await; - - // Check for file change - let editor_port = if let Some(editor_port) = - meta::read_project(&paths::data_dir()?, |x| x.editor_port).await? - { - editor_port - } else { - // The editor port has not been chosen yet. - continue; - }; - - // Check for file change - let file_modified = match tokio::fs::metadata(&manifest_path).await { - Result::Ok(metadata) => match metadata.modified() { - Result::Ok(x) => x, - Err(err) => { - task_ctx.log(format!("Failed to read file modification time: {err}")); - continue; - } - }, - Err(err) if err.kind() == std::io::ErrorKind::NotFound => { - // Config file does not exist yet. The backend likely has not written it. - continue; - } - Err(err) => { - task_ctx.log(format!("Failed to read file metadata: {err}")); - continue; - } - }; - - // Read manifest - let manifest = - project_manifest::read(&paths::data_dir()?, paths::BackendDataType::Dev).await?; - - // Check for most recent SDK change - let mut sdk_modified: Option = None; - for sdk in &manifest.sdks { - match tokio::fs::metadata(&sdk.output).await { - Result::Ok(metadata) => match metadata.modified() { - Result::Ok(x) => { - sdk_modified = Some(sdk_modified.map_or(x, |modified| modified.max(x))); - } - Err(err) => { - task_ctx.log(format!("Failed to read SDK modification time: {err}")); - continue; - } - }, - Err(err) if err.kind() == std::io::ErrorKind::NotFound => { - // SDK does not exist yet. The backend likely has not written it. - continue; - } - Err(err) => { - task_ctx.log(format!("Failed to read SDK metadata: {err}")); - continue; - } - } - } - - // Publish event if changed - let updated_file_modified = last_file_modified.map_or(true, |last| file_modified > last); - - let updated_sdk_modified = match (last_sdk_modified, sdk_modified) { - (Some(last), Some(current)) => current > last, - (None, None) => false, - _ => true, - }; - - let updated_editor_port = last_editor_port.map_or(true, |last| last != editor_port); - - if updated_file_modified || updated_sdk_modified || updated_editor_port { - last_file_modified = Some(file_modified); - last_sdk_modified = sdk_modified; - last_editor_port = Some(editor_port); - - match build_config_update_event(manifest, editor_port).await { - Result::Ok(event) => { - task_ctx.event(task::TaskEvent::BackendConfigUpdate(event)); - } - Err(err) => task_ctx.log(format!("failed to read backend manifest: {err}")), - } - } - } -} - -/// Converts project manifest to an event. -/// -/// Uses this intermediate step to convert the data in the toolchain instead of passing the direct -/// manifest to the plugin in order to: -/// - Ensure a consistent format -/// - Reduce overhead of updates (the config is massive) -/// - Enhance with any toolchain-specific data (e.g. edtor config url) -async fn build_config_update_event( - meta: project_manifest::Meta, - editor_port: u16, -) -> Result { - // Convert to event - let sdks = meta - .sdks - .into_iter() - .map(|x| backend_config_update::Sdk { - target: x.target, - output: x.output, - }) - .collect(); - - let mut modules = meta - .modules - .into_iter() - .map(|(slug, module)| backend_config_update::Module { - slug: slug.clone(), - name: module.config.name, - config_url: format!("http://127.0.0.1:{editor_port}/#{slug}"), - docs_url: format!("https://rivet.gg/modules/{slug}"), - }) - .collect::>(); - modules.sort_by_cached_key(|x| x.name.clone()); - - Ok(backend_config_update::Event { sdks, modules }) -} diff --git a/packages/toolchain/src/tasks/backend/stop.rs b/packages/toolchain/src/tasks/backend/stop.rs deleted file mode 100644 index 7a3725e2..00000000 --- a/packages/toolchain/src/tasks/backend/stop.rs +++ /dev/null @@ -1,26 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::{backend, util::task}; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output {} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "backend.stop" - } - - async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - backend::PROCESS_MANAGER_DEV.stop().await?; - Ok(Output {}) - } -} diff --git a/packages/toolchain/src/tasks/deploy/backend.rs b/packages/toolchain/src/tasks/deploy/backend.rs deleted file mode 100644 index e7bdafb4..00000000 --- a/packages/toolchain/src/tasks/deploy/backend.rs +++ /dev/null @@ -1,285 +0,0 @@ -use anyhow::*; -use futures_util::{StreamExt, TryStreamExt}; -use rivet_api::{apis, models}; -use serde::Deserialize; -use std::{collections::HashMap, path::PathBuf, sync::Arc}; -use tokio::fs; - -use crate::{ - backend, config, - game::TEMPEnvironment, - paths, - toolchain_ctx::ToolchainCtx, - util::{net::upload, task, term}, -}; - -pub struct DeployOpts { - pub env: TEMPEnvironment, - - /// The location of the project. - pub project_path: String, - - /// Skip the migration step. - pub skip_migrate: bool, -} - -pub async fn deploy(ctx: &ToolchainCtx, task: task::TaskCtx, opts: DeployOpts) -> Result<()> { - task.log("[Deploying Backend]"); - - let backend = backend::get_or_create_backend(ctx, opts.env.id).await?; - let game_id_str = ctx.game_id.to_string(); - let env_id_str = opts.env.id.to_string(); - let project_path = PathBuf::from(opts.project_path.clone()); - - // Build - task.log(format!("[Building Project] {}", project_path.display())); - let (cmd_env, config_path) = config::settings::try_read(&paths::data_dir()?, |settings| { - let mut env = settings.backend.command_environment.clone(); - env.extend(settings.backend.deploy.command_environment.clone()); - Ok((env, settings.backend.deploy.config_path.clone())) - }) - .await?; - let cmd = backend::run_backend_command_from_task( - task.clone(), - backend::BackendCommandOpts { - task_path: "build.ts", - input: serde_json::json!({ - "watch": false, - "runtime": "cloudflare_workers_platforms", - "outputFormat": "bundled", - "dbDriver": "neon_serverless", - "migrate": false, - "project": config_path, - }), - env: cmd_env, - data_type: paths::BackendDataType::Deploy, - }, - ) - .await?; - ensure!(cmd == 0, "Failed to build backend project"); - - backend::database::provision_database(task.clone(), ctx, opts.env.id).await?; - - let db_url = config::meta::try_read_project(&paths::data_dir()?, |config| { - let env_config = config - .cloud - .as_ref() - .context("config.cloud")? - .environments - .get(&opts.env.id) - .context("could not find environment")?; - Ok(env_config.backend.db_url.clone()) - }) - .await?; - - if !opts.skip_migrate { - task.log("[Migrating Database]"); - - // Migrate - let mut migrate_env = HashMap::new(); - migrate_env.insert( - "DATABASE_URL".to_string(), - db_url.context("no db url for env")?, - ); - - let migrate_cmd = backend::run_backend_command_from_task( - task.clone(), - backend::BackendCommandOpts { - task_path: "db/migrate/apply.ts", - input: serde_json::json!({ - "project": config_path, - }), - env: migrate_env, - data_type: paths::BackendDataType::Deploy, - }, - ) - .await?; - ensure!(migrate_cmd == 0, "Failed to migrate databases"); - } - - // Read files for upload - let gen_manifest = read_generated_manifest().await?; - let bundle_path = project_path.join(gen_manifest.bundle); - let wasm_path = gen_manifest.wasm.map(|x| project_path.join(x)); - let mut files = vec![upload::prepare_upload_file( - &bundle_path, - "bundle.js", - fs::metadata(&bundle_path).await?, - )?]; - if let Some(wasm) = wasm_path.as_ref() { - files.push(upload::prepare_upload_file( - wasm, - "query-engine.wasm", - fs::metadata(wasm).await?, - )?); - } - let total_len = files - .iter() - .fold(0, |acc, x| acc + x.prepared.content_length); - - task.log(format!( - "[Uploading Environment] {name} ({count} files, {size} total)", - name = &opts.env.name, - count = files.len(), - size = upload::format_file_size(total_len as u64)?, - )); - - task.log(format!("[Fetching Environment Variables]")); - // let variables = apis::ee_backend_api::ee_backend_get_variables( - // &ctx.openapi_config_cloud, - // &game_id_str, - // &env_id_str, - // ) - // .await? - // .variables; - let mut update_variables = HashMap::::new(); - // if !variables.contains_key("RIVET_BACKEND_PUBLIC_ENDPOINT") { - update_variables.insert( - "RIVET_BACKEND_PUBLIC_ENDPOINT".to_string(), - models::EeBackendUpdateVariable { - text: Some(backend.endpoint.clone()), - ..Default::default() - }, - ); - // } - // if !variables.contains_key("RIVET_API_ENDPOINT") { - update_variables.insert( - "RIVET_API_ENDPOINT".to_string(), - models::EeBackendUpdateVariable { - text: Some(ctx.api_endpoint.clone()), - ..Default::default() - }, - ); - // } - // if !variables.contains_key("RIVET_GAME_ID") { - update_variables.insert( - "RIVET_GAME_ID".to_string(), - models::EeBackendUpdateVariable { - text: Some(game_id_str.clone()), - ..Default::default() - }, - ); - // } - // if !variables.contains_key("RIVET_ENVIRONMENT_ID") { - update_variables.insert( - "RIVET_ENVIRONMENT_ID".to_string(), - models::EeBackendUpdateVariable { - text: Some(env_id_str.clone()), - ..Default::default() - }, - ); - // } - // if !variables.contains_key("RIVET_SERVICE_TOKEN") { - task.log(format!("[Creating Service Token]")); - let service_token = - apis::games_environments_tokens_api::games_environments_tokens_create_service_token( - &ctx.openapi_config_cloud, - &game_id_str, - &opts.env.id.to_string(), - ) - .await?; - update_variables.insert( - "RIVET_SERVICE_TOKEN".to_string(), - models::EeBackendUpdateVariable { - secret: Some(service_token.token), - ..Default::default() - }, - ); - // } - if !update_variables.is_empty() { - task.log(format!( - "[Updating Variables] {}", - update_variables - .keys() - .cloned() - .collect::>() - .join(", ") - )); - } - - let prepare_res = apis::ee_backend_api::ee_backend_prepare_deploy( - &ctx.openapi_config_cloud, - &game_id_str, - &env_id_str, - models::EeBackendPrepareDeployRequest { - files: files.iter().map(|f| f.prepared.clone()).collect(), - }, - ) - .await - .context("failed to prepare deploy")?; - - // Upload files - let reqwest_client = Arc::new(reqwest::Client::new()); - let pb = term::EitherProgressBar::Multi(term::multi_progress_bar(task.clone())); - - futures_util::stream::iter(prepare_res.presigned_requests) - .map(Ok) - .try_for_each_concurrent(8, |presigned_req| { - let task = task.clone(); - let pb = pb.clone(); - let files = files.clone(); - let reqwest_client = reqwest_client.clone(); - - async move { - // Find the matching prepared file - let file = files - .iter() - .find(|f| f.prepared.path == presigned_req.path) - .context("missing prepared file")?; - - upload::upload_file( - task.clone(), - &reqwest_client, - &presigned_req, - &file.absolute_path, - file.prepared.content_type.as_ref(), - pb, - ) - .await?; - - Result::<()>::Ok(()) - } - }) - .await?; - - task.log(format!("[Deploying Environment] {}", opts.env.name)); - - let deploy_res = apis::ee_backend_api::ee_backend_deploy( - &ctx.openapi_config_cloud, - &game_id_str, - &env_id_str, - models::EeBackendDeployRequest { - upload_id: prepare_res.upload_id, - variables: Some(update_variables), - }, - ) - .await?; - - task.log(format!( - "[Done] Backend API available at {}", - deploy_res.url - )); - - Ok(()) -} - -#[derive(Deserialize)] -struct GenManifest { - bundle: String, - wasm: Option, -} - -async fn read_generated_manifest() -> Result { - let manifest_path = - paths::backend_data_dir(&paths::data_dir()?, paths::BackendDataType::Deploy)? - .join("output_manifest.json"); - - // Read manifest - let manifest_str = fs::read_to_string(manifest_path) - .await - .context("read output manifest")?; - let manifest = serde_json::from_str::(&manifest_str) - .context(format!("parse output manifest:\n{}", manifest_str))?; - - Ok(manifest) -} diff --git a/packages/toolchain/src/tasks/deploy/docker.rs b/packages/toolchain/src/tasks/deploy/docker.rs new file mode 100644 index 00000000..945bc4e2 --- /dev/null +++ b/packages/toolchain/src/tasks/deploy/docker.rs @@ -0,0 +1,218 @@ +use anyhow::*; +use std::path::Path; +use uuid::Uuid; + +use crate::{ + config, paths, + project::environment::TEMPEnvironment, + toolchain_ctx::ToolchainCtx, + util::{ + cmd::{self, shell_cmd}, + docker::{self, generate_unique_image_tag}, + task, + }, +}; + +pub struct DeployBuildOpts { + pub env: TEMPEnvironment, + pub config: config::Config, + pub build_config: config::build::docker::Build, + pub version_name: String, +} + +/// Builds image if not specified and returns the build ID. +pub async fn build_and_upload( + ctx: &ToolchainCtx, + task: task::TaskCtx, + opts: DeployBuildOpts, +) -> Result { + task.log("[Build]"); + + let project_root = paths::project_root()?; + + // Determine build attributes + let build_config_unstable = opts.build_config.unstable(); + let bundle = build_config_unstable.bundle(); + let compression = build_config_unstable + .compression + .unwrap_or_else(|| config::build::Compression::default_from_bundle_kind(bundle)); + + // Deploy Docker build + let build_id = if let Some(image) = &opts.build_config.image { + let push_output = docker_push( + ctx, + task.clone(), + &DockerPushOpts { + config: opts.config.clone(), + env: opts.env, + name: Some(opts.version_name.to_string()), + docker_tag: image.clone(), + bundle, + compression, + allow_root: build_config_unstable.allow_root(), + }, + ) + .await?; + + task.log(format!("[Created Build] {}", push_output.build_id)); + + push_output.build_id + } else { + let dockerfile = opts + .build_config + .dockerfile + .unwrap_or_else(|| "Dockerfile".to_string()); + + let path = opts + .build_config + .build_path + .as_ref() + .map(|x| x.as_str()) + .unwrap_or("."); + + let push_output = docker_build_and_push( + ctx, + task.clone(), + &project_root.join(path), + &DockerBuildPushOpts { + config: opts.config.clone(), + env: opts.env.clone(), + dockerfile: dockerfile.clone(), + name: Some(opts.version_name.clone()), + build_args: Some( + opts.build_config + .build_args + .iter() + .flatten() + .map(|(k, v)| format!("{k}={v}")) + .collect(), + ), + build_target: opts.build_config.build_target.clone(), + build_method: build_config_unstable.build_method(), + bundle, + compression, + allow_root: build_config_unstable.allow_root(), + }, + ) + .await?; + + task.log(format!("[Created Build] {}", push_output.build_id)); + + push_output.build_id + }; + + Ok(build_id) +} + +pub struct DockerBuildPushOpts { + pub config: config::Config, + pub env: TEMPEnvironment, + pub name: Option, + + /// Path to Dockerfile + pub dockerfile: String, + + /// Docker build args + pub build_args: Option>, + + /// Target build stage to build. + pub build_target: Option, + + pub build_method: config::build::docker::BuildMethod, + pub bundle: config::build::docker::BundleKind, + pub compression: config::build::Compression, + pub allow_root: bool, +} + +/// Build and push a Dockerfile. +pub async fn docker_build_and_push( + ctx: &ToolchainCtx, + task: task::TaskCtx, + current_dir: &Path, + push_opts: &DockerBuildPushOpts, +) -> Result { + // Build image + let build_output = docker::build::build_image( + ctx, + task.clone(), + current_dir, + &Path::new(&push_opts.dockerfile), + push_opts.build_method, + push_opts.bundle, + push_opts.compression, + push_opts.build_args.as_ref().map(|x| x.as_slice()), + push_opts.build_target.as_ref().map(String::as_str), + push_opts.allow_root, + ) + .await?; + + // Upload build + docker::push::push_tar( + ctx, + task.clone(), + &docker::push::PushOpts { + config: push_opts.config.clone(), + env: push_opts.env.clone(), + path: build_output.path.to_owned(), + docker_tag: build_output.tag, + name: push_opts.name.clone(), + bundle: push_opts.bundle, + compression: push_opts.compression, + }, + ) + .await +} + +pub struct DockerPushOpts { + pub config: config::Config, + pub env: TEMPEnvironment, + pub name: Option, + + pub docker_tag: String, + + pub bundle: config::build::docker::BundleKind, + pub compression: config::build::Compression, + pub allow_root: bool, +} + +/// Push an image that's already built. +pub async fn docker_push( + ctx: &ToolchainCtx, + task: task::TaskCtx, + push_opts: &DockerPushOpts, +) -> Result { + // Re-tag image with unique tag + let unique_image_tag = generate_unique_image_tag(); + let mut tag_cmd = shell_cmd("docker"); + tag_cmd + .arg("image") + .arg("tag") + .arg(&push_opts.docker_tag) + .arg(&unique_image_tag); + cmd::execute_docker_cmd_silent(tag_cmd, "failed to tag Docker image").await?; + + // Archive image + let archive_path = docker::archive::create_archive( + task.clone(), + &unique_image_tag, + push_opts.bundle, + push_opts.compression, + push_opts.allow_root, + ) + .await?; + + docker::push::push_tar( + ctx, + task.clone(), + &docker::push::PushOpts { + config: push_opts.config.clone(), + env: push_opts.env.clone(), + path: archive_path.to_owned(), + docker_tag: unique_image_tag, + name: push_opts.name.clone(), + bundle: push_opts.bundle, + compression: push_opts.compression, + }, + ) + .await +} diff --git a/packages/toolchain/src/tasks/deploy/game_server.rs b/packages/toolchain/src/tasks/deploy/game_server.rs deleted file mode 100644 index 77fc2c44..00000000 --- a/packages/toolchain/src/tasks/deploy/game_server.rs +++ /dev/null @@ -1,272 +0,0 @@ -use anyhow::*; -use rivet_api::apis; -use serde::Serialize; -use std::{collections::HashMap, path::Path}; -use uuid::Uuid; - -use crate::{ - config, - game::TEMPEnvironment, - game_server, paths, - toolchain_ctx::ToolchainCtx, - util::{ - cmd::{self, shell_cmd}, - docker::{self, generate_unique_image_tag, BuildCompression}, - task, - }, -}; - -pub struct DeployOpts { - pub env: TEMPEnvironment, - pub build_dir: String, - // pub build_args: Option>, - // pub dockerfile: Option, - // pub image: Option, -} - -#[derive(Serialize)] -pub struct DeployOutput { - pub image_id: Uuid, - pub version_name: String, -} - -/// Builds image if not specified and returns the image ID. -/// -/// The image ID is chosen in order of priority: -/// -/// - `dockerfile` Build the Dockerfile -/// - `image` Upload a prebuilt image -/// -/// If none are true, `None` is returned. -pub async fn deploy( - ctx: &ToolchainCtx, - task: task::TaskCtx, - opts: DeployOpts, -) -> Result { - task.log("[Deploying Game Server]"); - - let deploy_config = - config::settings::try_read(&paths::data_dir()?, |x| Ok(x.game_server.deploy.clone())) - .await?; - - // Reserve image name - let reserve_res = apis::cloud_games_versions_api::cloud_games_versions_reserve_version_name( - &ctx.openapi_config_cloud, - &ctx.game_id, - ) - .await?; - let version_name = reserve_res.version_display_name; - - // Build tags - // - // ## version - // - // Unique ident for this build. Used for figuring out which server to start when - // passing dynamic version from client. - // - // ## active - // - // If this build can be used to start a new server. Remove this tag to disable client-side - // joining this version. - // - // This is not exclusive. - // - // ## latest - // - // Indicates the latest build to use for this environment. Used if not providing a client-side - // version. - let tags = HashMap::from([ - ( - game_server::VERSION_BUILD_TAG.to_string(), - version_name.clone(), - ), - ( - game_server::ENABLED_BUILD_TAG.to_string(), - "true".to_string(), - ), - ( - game_server::CURRENT_BUILD_TAG.to_string(), - "true".to_string(), - ), - ]); - let exclusive_tags = vec![ - game_server::VERSION_BUILD_TAG.to_string(), - game_server::CURRENT_BUILD_TAG.to_string(), - ]; - - // Deploy Docker image - let image_id = if let Some(docker_image) = deploy_config.docker_image.as_ref() { - let push_output = push( - ctx, - task.clone(), - &PushOpts { - env_id: opts.env.id, - name: Some(version_name.to_string()), - tags, - exclusive_tags, - docker_tag: docker_image.clone(), - }, - ) - .await?; - - task.log(format!("[Created Build] {}", push_output.image_id)); - - push_output.image_id - } else { - let dockerfile = deploy_config - .dockerfile_path - .unwrap_or_else(|| "game_server.Dockerfile".to_string()); - - let push_output = build_and_push( - ctx, - task.clone(), - &Path::new(&opts.build_dir), - &BuildPushOpts { - env_id: opts.env.id, - tags, - exclusive_tags, - dockerfile: dockerfile.clone(), - name: Some(version_name.clone()), - build_args: Some( - deploy_config - .build_args - .iter() - .flatten() - .map(|(k, v)| format!("{k}={v}")) - .collect(), - ), - }, - ) - .await?; - - task.log(format!("[Created Build] {}", push_output.image_id)); - - push_output.image_id - }; - - Ok(DeployOutput { - image_id, - version_name, - }) -} - -pub struct BuildPushOpts { - pub env_id: Uuid, - pub name: Option, - pub tags: HashMap, - pub exclusive_tags: Vec, - - /// Path to Dockerfile - pub dockerfile: String, - - /// Docker build args - pub build_args: Option>, -} - -/// Build and push a Dockerfile. -pub async fn build_and_push( - ctx: &ToolchainCtx, - task: task::TaskCtx, - current_dir: &Path, - push_opts: &BuildPushOpts, -) -> Result { - let (build_kind, build_compression) = config::settings::try_read(&paths::data_dir()?, |x| { - Ok(( - x.game_server.deploy.build_kind.clone(), - x.game_server.deploy.build_compression.clone(), - )) - }) - .await?; - let build_compression = - build_compression.unwrap_or_else(|| BuildCompression::default_from_build_kind(build_kind)); - - // Build image - let build_output = docker::build::build_image( - ctx, - task.clone(), - current_dir, - &Path::new(&push_opts.dockerfile), - build_kind, - build_compression, - push_opts.build_args.as_ref().map(|x| x.as_slice()), - ) - .await?; - - // Upload build - docker::push::push_tar( - ctx, - task.clone(), - &docker::push::PushOpts { - env_id: push_opts.env_id, - path: build_output.path.to_owned(), - tags: push_opts.tags.clone(), - exclusive_tags: push_opts.exclusive_tags.clone(), - docker_tag: build_output.tag, - name: push_opts.name.clone(), - kind: build_kind, - compression: build_compression, - }, - ) - .await -} - -pub struct PushOpts { - pub env_id: Uuid, - pub name: Option, - pub tags: HashMap, - pub exclusive_tags: Vec, - - pub docker_tag: String, -} - -/// Push an image that's already built. -pub async fn push( - ctx: &ToolchainCtx, - task: task::TaskCtx, - push_opts: &PushOpts, -) -> Result { - let (build_kind, build_compression) = config::settings::try_read(&paths::data_dir()?, |x| { - Ok(( - x.game_server.deploy.build_kind.clone(), - x.game_server.deploy.build_compression.clone(), - )) - }) - .await?; - let build_compression = - build_compression.unwrap_or_else(|| BuildCompression::default_from_build_kind(build_kind)); - - // Re-tag image with unique tag - let unique_image_tag = generate_unique_image_tag(); - let mut tag_cmd = shell_cmd("docker"); - tag_cmd - .arg("image") - .arg("tag") - .arg(&push_opts.docker_tag) - .arg(&unique_image_tag); - cmd::execute_docker_cmd_silent(tag_cmd, "failed to tag Docker image").await?; - - // Archive image - let archive_path = docker::archive::create_archive( - task.clone(), - &unique_image_tag, - build_kind, - build_compression, - ) - .await?; - - docker::push::push_tar( - ctx, - task.clone(), - &docker::push::PushOpts { - env_id: push_opts.env_id, - path: archive_path.to_owned(), - tags: push_opts.tags.clone(), - exclusive_tags: push_opts.exclusive_tags.clone(), - docker_tag: unique_image_tag, - name: push_opts.name.clone(), - kind: build_kind, - compression: build_compression, - }, - ) - .await -} diff --git a/packages/toolchain/src/tasks/deploy/mod.rs b/packages/toolchain/src/tasks/deploy/mod.rs index 23c5bd0d..1dcc62dc 100644 --- a/packages/toolchain/src/tasks/deploy/mod.rs +++ b/packages/toolchain/src/tasks/deploy/mod.rs @@ -1,26 +1,27 @@ -mod backend; -mod game_server; +use std::collections::HashMap; use anyhow::*; -use serde::{Deserialize, Serialize}; +use rivet_api::apis; +use rivet_api::models; +use serde::Deserialize; +use serde::Serialize; use uuid::Uuid; -use crate::util::task; +use crate::build; +use crate::project::environment::TEMPEnvironment; +use crate::ToolchainCtx; +use crate::{config, util::task}; + +mod docker; #[derive(Deserialize)] pub struct Input { - pub cwd: String, + pub config: config::Config, pub environment_id: Uuid, - pub game_server: bool, - pub backend: bool, - #[serde(default)] - pub backend_skip_migrate: bool, } #[derive(Serialize)] -pub struct Output { - game_server: Option, -} +pub struct Output {} pub struct Task; @@ -33,49 +34,107 @@ impl task::Task for Task { } async fn run(task: task::TaskCtx, input: Self::Input) -> Result { - // Deploy the backend before the game server in order to ensure that new APIs are exposed - // before the new game server is deployed. - let ctx = crate::toolchain_ctx::load().await?; - let env = crate::game::get_env(&ctx, input.environment_id).await?; + let env = crate::project::environment::get_env(&ctx, input.environment_id).await?; + + // Reserve version name + let reserve_res = + apis::cloud_games_versions_api::cloud_games_versions_reserve_version_name( + &ctx.openapi_config_cloud, + &ctx.project.game_id.to_string(), + ) + .await?; + let version_name = reserve_res.version_display_name; - if input.backend { - backend::deploy( + for build in &input.config.builds { + let _build_id = build_and_upload( &ctx, task.clone(), - backend::DeployOpts { - env: env.clone(), - project_path: input.cwd.clone(), - skip_migrate: input.backend_skip_migrate, - }, + input.config.clone(), + &env, + &version_name, + build, ) .await?; } - let game_server = if input.game_server { - // TODO: Add support for configuring in project config. - // Should support multiple dockerfiles and passing from args/env. + task.log(""); + task.log("[Deploy Finished]"); - // Game server - let deploy = game_server::deploy( + Ok(Output {}) + } +} + +/// Builds the required resources and uploads it to Rivet. +/// +/// Returns the resulting build ID. +async fn build_and_upload( + ctx: &ToolchainCtx, + task: task::TaskCtx, + config: config::Config, + env: &TEMPEnvironment, + version_name: &str, + build: &config::Build, +) -> Result { + // Build tags + // + // **version** + // + // Unique ident for this build. Used for figuring out which server to start when + // passing dynamic version from client. + // + // **latest** + // + // Indicates the latest build to use for this environment. Used if not providing a client-side + // version. + let tags = HashMap::from([ + (build::tags::VERSION.to_string(), version_name.to_string()), + (build::tags::CURRENT.to_string(), "true".to_string()), + ]); + let exclusive_tags = vec![ + build::tags::VERSION.to_string(), + build::tags::CURRENT.to_string(), + ]; + + // Deploy build + let build_id = match &build.runtime { + config::build::Runtime::Docker(docker) => { + docker::build_and_upload( &ctx, task.clone(), - game_server::DeployOpts { + docker::DeployBuildOpts { env: env.clone(), - build_dir: input.cwd.clone(), + config: config.clone(), + build_config: docker.clone(), + version_name: version_name.to_string(), }, ) - .await?; - - Some(deploy) - } else { - None - }; + .await? + } + config::build::Runtime::JavaScript(js) => { + todo!() + } + }; + + // Tag build + let complete_res = apis::actor_builds_api::actor_builds_patch_tags( + &ctx.openapi_config_cloud, + &build_id.to_string(), + models::ActorPatchBuildTagsRequest { + tags: Some(serde_json::to_value(&tags)?), + exclusive_tags: Some(exclusive_tags.clone()), + }, + Some(&ctx.project.name_id), + Some(&env.slug), + ) + .await; + if let Err(err) = complete_res.as_ref() { + task.log(format!("{err:?}")); + } + complete_res.context("complete_res")?; - task.log(""); - task.log("[Deploy Finished]"); + task.log(format!("[Build Upload Complete] {build_id}")); - Ok(Output { game_server }) - } + Ok(build_id) } diff --git a/packages/toolchain/src/tasks/exec_command.rs b/packages/toolchain/src/tasks/exec_command.rs deleted file mode 100644 index 6da09630..00000000 --- a/packages/toolchain/src/tasks/exec_command.rs +++ /dev/null @@ -1,36 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::util::{cmd::shell_cmd, task}; - -#[derive(Deserialize)] -pub struct Input { - pub cwd: String, - pub cmd: String, - pub args: Vec, -} - -#[derive(Serialize)] -pub struct Output { - exit_code: i32, -} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "exec_command" - } - - async fn run(task: task::TaskCtx, input: Self::Input) -> Result { - let mut cmd = shell_cmd(&input.cmd); - cmd.args(&input.args).current_dir(input.cwd); - let exit_code = task.spawn_cmd(cmd).await?; - Ok(Output { - exit_code: exit_code.code().unwrap_or(0), - }) - } -} diff --git a/packages/toolchain/src/tasks/game_server/hook.rs b/packages/toolchain/src/tasks/game_server/hook.rs deleted file mode 100644 index ccc9722a..00000000 --- a/packages/toolchain/src/tasks/game_server/hook.rs +++ /dev/null @@ -1,32 +0,0 @@ -use std::collections::HashMap; - -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::util::task; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output { - exit_code: Option, -} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "game_server.hook" - } - - async fn run(task: task::TaskCtx, _input: Self::Input) -> Result { - let exit_code = crate::game_server::PROCESS_MANAGER - .hook(task.clone()) - .await?; - Ok(Output { exit_code }) - } -} diff --git a/packages/toolchain/src/tasks/game_server/mod.rs b/packages/toolchain/src/tasks/game_server/mod.rs deleted file mode 100644 index dc6c021e..00000000 --- a/packages/toolchain/src/tasks/game_server/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod hook; -pub mod start; -pub mod stop; diff --git a/packages/toolchain/src/tasks/game_server/start.rs b/packages/toolchain/src/tasks/game_server/start.rs deleted file mode 100644 index 3ce0e694..00000000 --- a/packages/toolchain/src/tasks/game_server/start.rs +++ /dev/null @@ -1,44 +0,0 @@ -use std::collections::HashMap; - -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::util::{process_manager::CommandOpts, task}; - -#[derive(Deserialize)] -pub struct Input { - pub cmd: String, - pub args: Vec, - pub cwd: String, - pub envs: HashMap, -} - -#[derive(Serialize)] -pub struct Output { - exit_code: Option, -} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "game_server.start" - } - - async fn run(task: task::TaskCtx, input: Self::Input) -> Result { - let exit_code = crate::game_server::PROCESS_MANAGER - .start(task.clone(), move || async move { - Ok(CommandOpts { - command: input.cmd, - args: input.args, - envs: input.envs.into_iter().collect(), - current_dir: input.cwd, - }) - }) - .await?; - Ok(Output { exit_code }) - } -} diff --git a/packages/toolchain/src/tasks/game_server/stop.rs b/packages/toolchain/src/tasks/game_server/stop.rs deleted file mode 100644 index cffef569..00000000 --- a/packages/toolchain/src/tasks/game_server/stop.rs +++ /dev/null @@ -1,26 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::util::task; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output {} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "game_server.stop" - } - - async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - crate::game_server::PROCESS_MANAGER.stop().await?; - Ok(Output {}) - } -} diff --git a/packages/toolchain/src/tasks/get_bootstrap_data.rs b/packages/toolchain/src/tasks/get_bootstrap_data.rs index 6b1a5469..f0775572 100644 --- a/packages/toolchain/src/tasks/get_bootstrap_data.rs +++ b/packages/toolchain/src/tasks/get_bootstrap_data.rs @@ -1,12 +1,8 @@ use anyhow::*; -use futures_util::{StreamExt, TryStreamExt}; -use rivet_api::{apis, models}; +use rivet_api::apis; use serde::{Deserialize, Serialize}; -use serde_json::json; -use std::collections::HashMap; -use uuid::Uuid; -use crate::{backend, game::TEMPEnvironment, game_server, util::task}; +use crate::{project::environment::TEMPEnvironment, util::task}; #[derive(Deserialize)] pub struct Input {} @@ -20,10 +16,7 @@ pub struct Output { pub struct CloudData { pub token: String, pub api_endpoint: String, - pub game_id: String, pub envs: Vec, - pub backends: HashMap, - pub current_builds: HashMap, } pub struct Task; @@ -39,77 +32,22 @@ impl task::Task for Task { async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { let cloud = if let Some(ctx) = crate::toolchain_ctx::try_load().await? { // HACK: Map ns to temporary env data structure - // Get or create backend project let envs = apis::cloud_games_api::cloud_games_get_game_by_id( &ctx.openapi_config_cloud, - &ctx.game_id.to_string(), + &ctx.project.game_id.to_string(), None, ) .await? .game .namespaces .into_iter() - .map(crate::game::TEMPEnvironment::from) + .map(TEMPEnvironment::from) .collect::>(); - // Get all backends in parallel - let backends_fut = futures_util::stream::iter(envs.iter().cloned()) - .map({ - |env| { - let ctx = ctx.clone(); - async move { - let backend = backend::get_or_create_backend(&ctx, env.id).await?; - Result::<_, anyhow::Error>::Ok((env.id, backend)) - } - } - }) - .buffer_unordered(4) - .try_collect::>(); - - // Get all current builds in parallel - let current_builds_fut = futures_util::stream::iter(envs.iter().cloned()) - .map({ - |env| { - let ctx = ctx.clone(); - async move { - // Fetch build with the current tag & select first one - let tags = serde_json::to_string(&json!({ - game_server::CURRENT_BUILD_TAG: "true" - }))?; - let current_build = apis::servers_builds_api::servers_builds_list( - &ctx.openapi_config_cloud, - &ctx.game_id.to_string(), - &env.id.to_string(), - Some(&tags), - ) - .await?; - if let Some(build) = current_build.builds.into_iter().next() { - Result::<_, anyhow::Error>::Ok(Some((env.id, build))) - } else { - Result::<_, anyhow::Error>::Ok(None) - } - } - } - }) - .buffer_unordered(4) - .try_collect::>>(); - - // Query in parallel - let (backends, current_builds) = tokio::try_join!(backends_fut, current_builds_fut)?; - - // Convert to map - let current_builds = current_builds - .into_iter() - .filter_map(|x| x) - .collect::>(); - Some(CloudData { token: ctx.access_token.clone(), api_endpoint: ctx.api_endpoint.clone(), - game_id: ctx.game_id.clone(), envs, - backends, - current_builds, }) } else { None diff --git a/packages/toolchain/src/tasks/get_settings_paths.rs b/packages/toolchain/src/tasks/get_settings_paths.rs deleted file mode 100644 index 7d17ee1a..00000000 --- a/packages/toolchain/src/tasks/get_settings_paths.rs +++ /dev/null @@ -1,32 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; -use std::path::PathBuf; - -use crate::{paths, util::task}; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output { - pub project_path: PathBuf, - pub user_path: PathBuf, -} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "get_settings_path" - } - - async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - Ok(Output { - project_path: paths::project_settings_config_file()?, - user_path: paths::user_settings_config_file(&paths::data_dir()?)?, - }) - } -} diff --git a/packages/toolchain/src/tasks/mod.rs b/packages/toolchain/src/tasks/mod.rs index c6ed1ae6..38d275a8 100644 --- a/packages/toolchain/src/tasks/mod.rs +++ b/packages/toolchain/src/tasks/mod.rs @@ -1,32 +1,12 @@ pub mod auth; -pub mod backend; pub mod deploy; -pub mod exec_command; -pub mod game_server; pub mod get_bootstrap_data; -pub mod get_settings_paths; -pub mod open; -pub mod postgres; -pub mod show_term; crate::task_registry!( auth::check_state::Task, auth::sign_out::Task, auth::start_sign_in::Task, auth::wait_for_sign_in::Task, - backend::start::Task, - backend::stop::Task, deploy::Task, - exec_command::Task, - game_server::hook::Task, - game_server::start::Task, - game_server::stop::Task, get_bootstrap_data::Task, - get_settings_paths::Task, - open::Task, - postgres::reset::Task, - postgres::start::Task, - postgres::status::Task, - postgres::stop::Task, - show_term::Task, ); diff --git a/packages/toolchain/src/tasks/open.rs b/packages/toolchain/src/tasks/open.rs deleted file mode 100644 index 8dd86fa2..00000000 --- a/packages/toolchain/src/tasks/open.rs +++ /dev/null @@ -1,28 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::util::task; - -#[derive(Deserialize)] -pub struct Input { - path: String, -} - -#[derive(Serialize)] -pub struct Output {} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "open" - } - - async fn run(_task: task::TaskCtx, input: Self::Input) -> Result { - open::that_detached(input.path)?; - Ok(Output {}) - } -} diff --git a/packages/toolchain/src/tasks/postgres/mod.rs b/packages/toolchain/src/tasks/postgres/mod.rs deleted file mode 100644 index 43f3c97e..00000000 --- a/packages/toolchain/src/tasks/postgres/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod reset; -pub mod start; -pub mod status; -pub mod stop; diff --git a/packages/toolchain/src/tasks/postgres/reset.rs b/packages/toolchain/src/tasks/postgres/reset.rs deleted file mode 100644 index e38a56dc..00000000 --- a/packages/toolchain/src/tasks/postgres/reset.rs +++ /dev/null @@ -1,26 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::{paths, postgres, util::task}; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output {} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "postgres.reset" - } - - async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - postgres::get(&paths::data_dir()?).await?.reset().await?; - Ok(Output {}) - } -} diff --git a/packages/toolchain/src/tasks/postgres/start.rs b/packages/toolchain/src/tasks/postgres/start.rs deleted file mode 100644 index 01e8c37b..00000000 --- a/packages/toolchain/src/tasks/postgres/start.rs +++ /dev/null @@ -1,26 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::{paths, postgres, util::task}; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output {} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "postgres.start" - } - - async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - postgres::get(&paths::data_dir()?).await?.start().await?; - Ok(Output {}) - } -} diff --git a/packages/toolchain/src/tasks/postgres/status.rs b/packages/toolchain/src/tasks/postgres/status.rs deleted file mode 100644 index c9b23e52..00000000 --- a/packages/toolchain/src/tasks/postgres/status.rs +++ /dev/null @@ -1,28 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::{paths, postgres, util::task}; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output { - pub status: postgres::Status, -} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "postgres.status" - } - - async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - let status = postgres::get(&paths::data_dir()?).await?.status().await?; - Ok(Output { status }) - } -} diff --git a/packages/toolchain/src/tasks/postgres/stop.rs b/packages/toolchain/src/tasks/postgres/stop.rs deleted file mode 100644 index d080dfb9..00000000 --- a/packages/toolchain/src/tasks/postgres/stop.rs +++ /dev/null @@ -1,26 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::{paths, postgres, util::task}; - -#[derive(Deserialize)] -pub struct Input {} - -#[derive(Serialize)] -pub struct Output {} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "postgres.stop" - } - - async fn run(_task: task::TaskCtx, _input: Self::Input) -> Result { - postgres::get(&paths::data_dir()?).await?.stop().await?; - Ok(Output {}) - } -} diff --git a/packages/toolchain/src/tasks/show_term.rs b/packages/toolchain/src/tasks/show_term.rs deleted file mode 100644 index 57d40ac9..00000000 --- a/packages/toolchain/src/tasks/show_term.rs +++ /dev/null @@ -1,33 +0,0 @@ -use anyhow::*; -use serde::{Deserialize, Serialize}; - -use crate::{util, util::task}; - -#[derive(Deserialize)] -pub struct Input { - pub command: String, - pub args: Vec, -} - -#[derive(Serialize)] -pub struct Output {} - -pub struct Task; - -impl task::Task for Task { - type Input = Input; - type Output = Output; - - fn name() -> &'static str { - "show_term" - } - - async fn run(_task: task::TaskCtx, input: Self::Input) -> Result { - let mut command = Vec::new(); - command.push(input.command); - command.extend(input.args); - util::show_term::show_term(&command).await?; - - Ok(Output {}) - } -} diff --git a/packages/toolchain/src/toolchain_ctx.rs b/packages/toolchain/src/toolchain_ctx.rs index bd4c12ed..49f29fe5 100644 --- a/packages/toolchain/src/toolchain_ctx.rs +++ b/packages/toolchain/src/toolchain_ctx.rs @@ -1,9 +1,9 @@ use anyhow::*; use pkg_version::{pkg_version_major, pkg_version_minor, pkg_version_patch}; -use rivet_api::apis; +use rivet_api::{apis, models}; use std::{env, sync::Arc}; -use crate::{config, paths}; +use crate::{meta, paths}; pub const VERSION: &str = { const MAJOR: u32 = pkg_version_major!(); @@ -22,7 +22,7 @@ pub type ToolchainCtx = Arc; pub struct CtxInner { pub api_endpoint: String, pub access_token: String, - pub game_id: String, + pub project: models::CloudGameFull, /// Domains that host parts of Rivet pub bootstrap: rivet_api::models::CloudBootstrapResponse, @@ -31,7 +31,7 @@ pub struct CtxInner { } pub async fn try_load() -> Result> { - let data = config::meta::read_project(&paths::data_dir()?, |x| { + let data = meta::read_project(&paths::data_dir()?, |x| { x.cloud .as_ref() .map(|cloud| (cloud.api_endpoint.clone(), cloud.cloud_token.clone())) @@ -46,7 +46,7 @@ pub async fn try_load() -> Result> { } pub async fn load() -> Result { - let (api_endpoint, token) = config::meta::try_read_project(&paths::data_dir()?, |x| { + let (api_endpoint, token) = meta::try_read_project(&paths::data_dir()?, |x| { let cloud = x.cloud.as_ref().context("not signed in")?; Ok((cloud.api_endpoint.clone(), cloud.cloud_token.clone())) }) @@ -93,16 +93,24 @@ pub async fn init(api_endpoint: String, cloud_token: String) -> Result Result { task.log(format!( "[Archiving Image] {} {}", @@ -29,8 +28,12 @@ pub async fn create_archive( // Build archive let build_tar_path = match build_kind { - BuildKind::DockerImage => archive_docker_image(task, &image_tag).await?, - BuildKind::OciBundle => archive_oci_bundle(task, &image_tag).await?, + config::build::docker::BundleKind::DockerImage => { + archive_docker_image(task, &image_tag).await? + } + config::build::docker::BundleKind::OciBundle => { + archive_oci_bundle(task, &image_tag, allow_root).await? + } }; // Compress archive @@ -62,7 +65,11 @@ async fn archive_docker_image(task: task::TaskCtx, image_tag: &str) -> Result Result { +async fn archive_oci_bundle( + task: task::TaskCtx, + image_tag: &str, + allow_root: bool, +) -> Result { // Create OCI bundle let oci_bundle_tar_file = tempfile::NamedTempFile::new()?; let mut oci_bundle_archive = tar::Builder::new(oci_bundle_tar_file); @@ -219,10 +226,6 @@ async fn archive_oci_bundle(task: task::TaskCtx, image_tag: &str) -> Result Result { // Compress the bundle let build_tar_compressed_file = tempfile::NamedTempFile::new()?; let build_tar_compressed_path = build_tar_compressed_file.into_temp_path(); match compression { - BuildCompression::None => { + config::build::Compression::None => { tokio::fs::rename(&build_tar_path, &build_tar_compressed_path).await?; } - BuildCompression::Lz4 => { + config::build::Compression::Lz4 => { let build_tar_path = build_tar_path.to_owned(); let build_tar_compressed_path = build_tar_compressed_path.to_owned(); tokio::task::spawn_blocking(move || { diff --git a/packages/toolchain/src/util/docker/build.rs b/packages/toolchain/src/util/docker/build.rs index c8fdde55..e31d0708 100644 --- a/packages/toolchain/src/util/docker/build.rs +++ b/packages/toolchain/src/util/docker/build.rs @@ -1,9 +1,8 @@ use anyhow::*; -use serde::{Deserialize, Serialize}; use std::{collections::HashMap, path::Path}; use crate::{ - config, paths, + config::{self}, toolchain_ctx::ToolchainCtx, util::{ cmd::{self, shell_cmd}, @@ -11,48 +10,6 @@ use crate::{ }, }; -#[derive(PartialEq, Serialize, Deserialize, Clone)] -pub enum DockerBuildMethod { - /// Create & use a Buildx builder on this machine. Required for cross-platform compliation. - Buildx, - - /// Use the native Docker build command. Only used if Buildx is not available. - Native, -} - -impl Default for DockerBuildMethod { - fn default() -> Self { - Self::Buildx - } -} - -impl DockerBuildMethod { - pub async fn from_env(task: task::TaskCtx) -> Result { - // Determine build method from env - let build_method = config::settings::try_read(&paths::data_dir()?, |x| { - Ok(x.game_server.deploy.build_method.clone()) - }) - .await?; - - if build_method == DockerBuildMethod::Buildx { - // Validate that Buildx is installed - let mut buildx_version_cmd = shell_cmd("docker"); - buildx_version_cmd.args(&["buildx", "version"]); - let buildx_version = - cmd::execute_docker_cmd_silent_fallible(buildx_version_cmd).await?; - - if buildx_version.status.success() { - Ok(DockerBuildMethod::Buildx) - } else { - task.log("Docker Buildx not installed. Falling back to native build method.\n\nPlease install Buildx here: https://github.com/docker/buildx#installing"); - Ok(DockerBuildMethod::Native) - } - } else { - Ok(build_method) - } - } -} - pub struct BuildImageOutput { pub tag: String, pub path: tempfile::TempPath, @@ -62,17 +19,35 @@ pub struct BuildImageOutput { pub async fn build_image( ctx: &ToolchainCtx, task: task::TaskCtx, - current_dir: &Path, + build_path: &Path, dockerfile: &Path, - build_kind: super::BuildKind, - build_compression: super::BuildCompression, + build_method: config::build::docker::BuildMethod, + build_kind: config::build::docker::BundleKind, + build_compression: config::build::Compression, build_args: Option<&[String]>, + build_target: Option<&str>, + allow_root: bool, ) -> Result { - let build_method = DockerBuildMethod::from_env(task.clone()).await?; + // Determine build method + let build_method = if build_method == config::build::docker::BuildMethod::Buildx { + // Validate that Buildx is installed + let mut buildx_version_cmd = shell_cmd("docker"); + buildx_version_cmd.args(&["buildx", "version"]); + let buildx_version = cmd::execute_docker_cmd_silent_fallible(buildx_version_cmd).await?; + + if buildx_version.status.success() { + config::build::docker::BuildMethod::Buildx + } else { + task.log("Docker Buildx not installed. Falling back to native build method.\n\nPlease install Buildx here: https://github.com/docker/buildx#installing"); + config::build::docker::BuildMethod::Native + } + } else { + build_method + }; let buildx_info = match build_method { - DockerBuildMethod::Native => " (with native)", - DockerBuildMethod::Buildx => " (with buildx)", + config::build::docker::BuildMethod::Native => " (with native)", + config::build::docker::BuildMethod::Buildx => " (with buildx)", }; task.log(format!( "[Building Image] {}{buildx_info}", @@ -98,7 +73,7 @@ pub async fn build_image( // Build image let image_tag = super::generate_unique_image_tag(); match build_method { - DockerBuildMethod::Native => { + config::build::docker::BuildMethod::Native => { let mut build_cmd = shell_cmd("docker"); build_cmd .arg("build") @@ -113,8 +88,11 @@ pub async fn build_image( .iter() .map(|(k, v)| format!("--build-arg={}={}", k, v)) .collect::>(), - ) - .arg(current_dir); + ); + if let Some(build_target) = build_target { + build_cmd.arg("--target").arg(build_target); + } + build_cmd.arg(build_path); cmd::execute_docker_cmd( task.clone(), build_cmd, @@ -122,7 +100,7 @@ pub async fn build_image( ) .await?; } - DockerBuildMethod::Buildx => { + config::build::docker::BuildMethod::Buildx => { let builder_name = "rivet_toolchain"; // Determine if needs to create a new builder @@ -181,8 +159,11 @@ pub async fn build_image( .collect::>(), ) .arg("--output") - .arg("type=docker") - .arg("."); + .arg("type=docker"); + if let Some(build_target) = build_target { + build_cmd.arg("--target").arg(build_target); + } + build_cmd.arg(build_path); cmd::execute_docker_cmd( task.clone(), build_cmd, @@ -193,9 +174,14 @@ pub async fn build_image( } // Build archive - let build_tar_path = - super::archive::create_archive(task.clone(), &image_tag, build_kind, build_compression) - .await?; + let build_tar_path = super::archive::create_archive( + task.clone(), + &image_tag, + build_kind, + build_compression, + allow_root, + ) + .await?; // Clean up image from the registry let mut remove_img_cmd = shell_cmd("docker"); diff --git a/packages/toolchain/src/util/docker/mod.rs b/packages/toolchain/src/util/docker/mod.rs index 1751251c..666f2fb9 100644 --- a/packages/toolchain/src/util/docker/mod.rs +++ b/packages/toolchain/src/util/docker/mod.rs @@ -3,48 +3,8 @@ pub mod build; pub mod push; pub mod users; -use serde::{Deserialize, Serialize}; use uuid::Uuid; -#[derive(Copy, Clone, Serialize, Deserialize, strum::AsRefStr)] -pub enum BuildCompression { - /// No compression. - #[strum(serialize = "none")] - None, - - /// LZ4 compression. Fast compression optimized for fast lobby start times. - #[strum(serialize = "lz4")] - Lz4, -} - -impl BuildCompression { - pub fn default_from_build_kind(build_kind: BuildKind) -> Self { - match build_kind { - BuildKind::DockerImage => BuildCompression::None, - BuildKind::OciBundle => BuildCompression::Lz4, - } - } -} - -#[derive(Copy, Clone, Serialize, Deserialize, strum::AsRefStr)] -pub enum BuildKind { - /// Legacy option. Docker image archive output from `docker save`. Slower lobby start - /// times. - #[strum(serialize = "docker-image")] - DockerImage, - - /// OCI bundle archive derived from a generated Docker image. Optimized for fast lobby start - /// times. - #[strum(serialize = "oci-bundle")] - OciBundle, -} - -impl Default for BuildKind { - fn default() -> Self { - Self::OciBundle - } -} - /// Generates a unique image tag for the image being pushed or built. pub fn generate_unique_image_tag() -> String { format!("rivet-game:{}", Uuid::new_v4()) diff --git a/packages/toolchain/src/util/docker/push.rs b/packages/toolchain/src/util/docker/push.rs index db0ba030..f03f538c 100644 --- a/packages/toolchain/src/util/docker/push.rs +++ b/packages/toolchain/src/util/docker/push.rs @@ -2,41 +2,38 @@ use anyhow::*; use futures_util::stream::{StreamExt, TryStreamExt}; use rivet_api::{apis, models}; use serde::Serialize; -use std::{collections::HashMap, path::PathBuf, sync::Arc}; +use std::{path::PathBuf, sync::Arc}; use tokio::fs; use uuid::Uuid; use crate::{ - config, paths, + config, + project::environment::TEMPEnvironment, toolchain_ctx::ToolchainCtx, util::{net::upload, task, term}, }; -use super::{BuildCompression, BuildKind}; - pub struct PushOpts { - pub env_id: Uuid, + pub config: config::Config, + pub env: TEMPEnvironment, /// Path to already created tar. pub path: PathBuf, - pub tags: HashMap, - pub exclusive_tags: Vec, - /// Docker inside the image. pub docker_tag: String, /// Name of the image pub name: Option, - pub kind: BuildKind, + pub bundle: config::build::docker::BundleKind, - pub compression: BuildCompression, + pub compression: config::build::Compression, } #[derive(Serialize)] pub struct PushOutput { - pub image_id: Uuid, + pub build_id: Uuid, } pub async fn push_tar( @@ -44,15 +41,10 @@ pub async fn push_tar( task: task::TaskCtx, push_opts: &PushOpts, ) -> Result { - let multipart_enabled = - config::settings::try_read(&paths::data_dir()?, |x| Ok(!x.net.disable_upload_multipart)) - .await?; + let multipart_enabled: bool = push_opts.config.unstable().multipart_enabled(); let reqwest_client = Arc::new(reqwest::Client::new()); - let game_id_str = ctx.game_id.to_string(); - let env_id_str = push_opts.env_id.to_string(); - // Inspect the image let image_file_meta = fs::metadata(&push_opts.path).await?; ensure!(image_file_meta.len() > 0, "docker image archive is empty"); @@ -70,11 +62,9 @@ pub async fn push_tar( size = upload::format_file_size(image_file_meta.len())? )); - let build_res = apis::servers_builds_api::servers_builds_prepare( + let build_res = apis::actor_builds_api::actor_builds_prepare( &ctx.openapi_config_cloud, - &game_id_str, - &env_id_str, - models::ServersCreateBuildRequest { + models::ActorPrepareBuildRequest { name: display_name.clone(), image_tag: push_opts.docker_tag.clone(), image_file: Box::new(models::UploadPrepareFile { @@ -82,23 +72,29 @@ pub async fn push_tar( content_type: Some(content_type.into()), content_length: image_file_meta.len() as i64, }), - kind: Some(match push_opts.kind { - BuildKind::DockerImage => models::ServersBuildKind::DockerImage, - BuildKind::OciBundle => models::ServersBuildKind::OciBundle, + kind: Some(match push_opts.bundle { + config::build::docker::BundleKind::DockerImage => { + models::ActorBuildKind::DockerImage + } + config::build::docker::BundleKind::OciBundle => models::ActorBuildKind::OciBundle, }), compression: Some(match push_opts.compression { - BuildCompression::None => models::ServersBuildCompression::None, - BuildCompression::Lz4 => models::ServersBuildCompression::Lz4, + config::build::Compression::None => models::ActorBuildCompression::None, + config::build::Compression::Lz4 => models::ActorBuildCompression::Lz4, }), multipart_upload: Some(multipart_enabled), + // TODO: + prewarm_regions: None, }, + Some(&ctx.project.name_id), + Some(&push_opts.env.slug), ) .await; if let Err(err) = build_res.as_ref() { task.log(format!("{err:?}")) } let build_res = build_res.context("build_res")?; - let image_id = build_res.build; + let build_id = build_res.build; let pb = term::EitherProgressBar::Multi(term::multi_progress_bar(task.clone())); if multipart_enabled { @@ -137,27 +133,11 @@ pub async fn push_tar( .await?; } - let complete_res = apis::servers_builds_api::servers_builds_complete( - &ctx.openapi_config_cloud, - &game_id_str, - &env_id_str, - &build_res.build.to_string(), - ) - .await; - if let Err(err) = complete_res.as_ref() { - task.log(format!("{err:?}")); - } - complete_res.context("complete_res")?; - - let complete_res = apis::servers_builds_api::servers_builds_patch_tags( + let complete_res = apis::actor_builds_api::actor_builds_complete( &ctx.openapi_config_cloud, - &game_id_str, - &env_id_str, &build_res.build.to_string(), - models::ServersPatchBuildTagsRequest { - tags: Some(serde_json::to_value(&push_opts.tags)?), - exclusive_tags: Some(push_opts.exclusive_tags.clone()), - }, + Some(&ctx.project.name_id), + Some(&push_opts.env.slug), ) .await; if let Err(err) = complete_res.as_ref() { @@ -165,9 +145,7 @@ pub async fn push_tar( } complete_res.context("complete_res")?; - task.log(format!("[Image Upload Complete] {image_id}")); - Ok(PushOutput { - image_id: image_id.to_owned(), + build_id: build_id.to_owned(), }) } diff --git a/packages/toolchain/src/util/js_utils/mod.rs b/packages/toolchain/src/util/js_utils/mod.rs new file mode 100644 index 00000000..56b619c2 --- /dev/null +++ b/packages/toolchain/src/util/js_utils/mod.rs @@ -0,0 +1,126 @@ +use anyhow::*; +use serde::Serialize; +use std::{collections::HashMap, path::PathBuf, process::ExitCode}; +use tokio::process::Command; + +use crate::{paths, util::task}; + +pub struct CommandOpts { + pub task_path: &'static str, + pub input: serde_json::Value, + pub env: HashMap, +} + +async fn base_url() -> Result { + // Attempt to read from user or default + let base_url = if let Some(url) = std::env::var("_RIVET_JS_UTILS_SRC_DIR").ok() { + url + } else { + rivet_js_utils_embed::src_path(&paths::data_dir()?) + .await? + .display() + .to_string() + }; + + let base_url = base_url.trim_end_matches('/').to_string(); + Ok(base_url) +} + +pub struct CommandRaw { + pub command: PathBuf, + pub args: Vec, + pub envs: HashMap, + pub current_dir: PathBuf, +} + +pub async fn build_backend_command_raw(opts: CommandOpts) -> Result { + let base_url = base_url().await?; + + // Get Deno executable + let deno = rivet_deno_embed::get_executable(&crate::paths::data_dir()?).await?; + + // Serialize command + let input_json = serde_json::to_string(&opts.input)?; + + // Run backend + Ok(CommandRaw { + command: deno.executable_path, + args: vec![ + "run".into(), + "--quiet".into(), + "--no-check".into(), + "--allow-net".into(), + "--allow-read".into(), + "--allow-env".into(), + "--allow-run".into(), + "--allow-write".into(), + "--allow-sys".into(), + "--config".into(), + format!("{base_url}/deno.jsonc"), + "--lock".into(), + format!("{base_url}/deno.lock"), + format!("{base_url}/cli/tasks/{}", opts.task_path), + "--input".into(), + input_json, + ], + envs: opts.env, + current_dir: paths::project_root()?, + }) +} + +pub async fn build_backend_command(opts: CommandOpts) -> Result { + let cmd_raw = build_backend_command_raw(opts).await?; + let mut cmd = Command::new(cmd_raw.command); + cmd.args(cmd_raw.args) + .envs(cmd_raw.envs) + .current_dir(cmd_raw.current_dir); + + Ok(cmd) +} + +pub async fn run_backend_command_from_task(task: task::TaskCtx, opts: CommandOpts) -> Result { + let cmd = build_backend_command(opts).await?; + let exit_code = task.spawn_cmd(cmd).await?; + Ok(exit_code.code().unwrap_or(0)) +} + +pub async fn run_backend_command_passthrough( + task_path: &'static str, + input: &impl Serialize, +) -> ExitCode { + let input_json = match serde_json::to_value(input) { + Result::Ok(x) => x, + Err(err) => { + eprintln!("Serialize failed: {err:?}"); + return ExitCode::FAILURE; + } + }; + + let mut cmd = match build_backend_command(CommandOpts { + task_path, + input: input_json, + env: HashMap::new(), + }) + .await + { + Result::Ok(x) => x, + Err(err) => { + eprintln!("Error building command: {err:?}"); + return ExitCode::FAILURE; + } + }; + + let exit_code = match cmd.status().await { + Result::Ok(x) => x, + Err(err) => { + eprintln!("Error running command: {err:?}"); + return ExitCode::FAILURE; + } + }; + + if exit_code.success() { + ExitCode::SUCCESS + } else { + ExitCode::FAILURE + } +} diff --git a/packages/toolchain/src/util/mod.rs b/packages/toolchain/src/util/mod.rs index 88e8f27a..cb0470ef 100644 --- a/packages/toolchain/src/util/mod.rs +++ b/packages/toolchain/src/util/mod.rs @@ -1,10 +1,10 @@ pub mod api; pub mod cmd; pub mod docker; +pub mod js_utils; pub mod lz4; pub mod net; pub mod os; -pub mod process_manager; pub mod show_term; pub mod task; pub mod term; diff --git a/packages/toolchain/src/util/process_manager/mod.rs b/packages/toolchain/src/util/process_manager/mod.rs deleted file mode 100644 index 371e419e..00000000 --- a/packages/toolchain/src/util/process_manager/mod.rs +++ /dev/null @@ -1,444 +0,0 @@ -use anyhow::*; -use std::{collections::VecDeque, future::Future, process::Stdio, sync::Arc, time::Duration}; -use tokio::{ - io::{AsyncBufReadExt, BufReader}, - process::Command, - sync::{broadcast, mpsc, watch, Mutex}, -}; - -use crate::{config::meta, paths, util::task::TaskCtx}; - -#[cfg(unix)] -mod unix; -#[cfg(windows)] -mod windows; - -#[cfg(unix)] -use unix as os; -#[cfg(windows)] -use windows as os; - -const MAX_LOG_HISTORY: usize = 512; - -#[derive(Debug, Clone)] -enum ProcessStatus { - /// This procsss has not been started yet. - NotRunning, - - /// Process is starting but the PID has not been determined yet. - Starting, - - /// Currently running. - #[allow(dead_code)] - Running { pid: u32 }, - - /// Currently stopping. - Stopping, - - /// Process exited. - Exited { - exit_code: Option, - error: Option, - }, -} - -impl ProcessStatus { - fn is_running(&self) -> bool { - matches!( - self, - ProcessStatus::Starting | ProcessStatus::Running { .. } | ProcessStatus::Stopping - ) - } -} - -#[derive(Debug, Clone)] -enum ProcessEvent { - Log(ProcessLog), -} - -#[derive(Debug, Clone)] -enum ProcessLog { - Stdout(String), - Stderr(String), -} - -pub struct CommandOpts { - pub command: String, - pub args: Vec, - pub envs: Vec<(String, String)>, - pub current_dir: String, -} - -/// Manages the state of a process that's detached from the parent. -/// -/// Allows for processes to stay running even if the engine restarts. -pub struct ProcessManager { - pub key: &'static str, - pub kill_grace: Duration, - - /// Sends a stop request to the process. - stop_tx: Mutex>>, - - /// Watch process status. - status_tx: watch::Sender, - status_rx: watch::Receiver, - - /// Broadcast process events. - event_tx: broadcast::Sender, - - /// Hold unused broadcast receiver so the sender does cancel. - /// - /// All receivers will use `event_tx.subscribe()` - _event_rx: broadcast::Receiver, - - /// History of logs. - logs: Mutex>, -} - -impl ProcessManager { - pub fn new(key: &'static str, kill_grace: Duration) -> Arc { - let (status_tx, status_rx) = watch::channel(ProcessStatus::NotRunning); - let (event_tx, event_rx) = broadcast::channel(1024); - Arc::new(Self { - key, - kill_grace, - stop_tx: Mutex::new(None), - status_tx, - status_rx, - event_tx, - _event_rx: event_rx, - logs: Mutex::new(VecDeque::new()), - }) - } - - /// Starts a new task or hooks in to the existing task. - pub async fn start( - self: &Arc, - task_ctx: TaskCtx, - command_builder: impl FnOnce() -> CommandFut, - ) -> Result> - where - CommandFut: Future>, - { - // Start new process if needed. Otherwise, will hook to the existing process. - // - // Clonign value required since this holds a read lock on the inner - // value. - if !self.status_rx.borrow().is_running() { - // Terminate the previous process if needed. This will kill any zombie process from a - // previous instance. - let old_pid = meta::mutate_project(&paths::data_dir()?, |x| { - x.process_manager_state - .get_mut(self.key) - .and_then(|x| x.pid) - }) - .await?; - if let Some(old_pid) = old_pid { - // Kill old PID - tokio::task::block_in_place(|| os::kill_process_tree(old_pid)); - - // Delete old pID - meta::mutate_project(&paths::data_dir()?, |x| { - x.process_manager_state.get_mut(self.key).map(|x| { - if x.pid == Some(old_pid) { - x.pid = None; - } - }) - }) - .await?; - } - - // Build command - // - // Do this before assigning process id in case the builder fails - let command_opts = command_builder().await?; - - // Spawn process - self.spawn_process(command_opts).await?; - }; - - self.hook_inner(task_ctx).await - } - - /// Hooks in to an existing task, if exists. - pub async fn hook(self: &Arc, task_ctx: TaskCtx) -> Result> { - // Check if task exists already - if !self.status_rx.borrow().is_running() { - return Ok(None); - } - - self.hook_inner(task_ctx).await - } - - async fn hook_inner(self: &Arc, task_ctx: TaskCtx) -> Result> { - // Write events to task - let mut event_rx = self.event_tx.subscribe(); - let log_fut = async { - // Write all log history - { - let logs = self.logs.lock().await; - for line in logs.iter().rev() { - match line { - ProcessLog::Stdout(line) => { - task_ctx.log(format!("[stdout] {line}")); - } - ProcessLog::Stderr(line) => { - task_ctx.log(format!("[stderr] {line}")); - } - } - } - } - - // Wait for events - loop { - match event_rx.recv().await { - Result::Ok(ProcessEvent::Log(ProcessLog::Stdout(line))) => { - task_ctx.log(format!("[stdout] {line}")); - } - Result::Ok(ProcessEvent::Log(ProcessLog::Stderr(line))) => { - task_ctx.log(format!("[stderr] {line}")); - } - Err(broadcast::error::RecvError::Lagged(amount)) => { - eprintln!("event_rx lagged by {amount}"); - } - Err(broadcast::error::RecvError::Closed) => { - break; - } - } - } - }; - - // Wait for process to exit - let mut status_rx = self.status_tx.subscribe(); - tokio::select! { - res = status_rx.wait_for(|x| matches!(x, ProcessStatus::Exited { .. })) => { - // Destructure exit - let ProcessStatus::Exited { exit_code, error } = res.context("wait for exit")?.clone() else { - bail!("unreachable"); - }; - - // Re-throw error - if let Some(error) = error { - bail!("process error: {error}"); - } - - Ok(exit_code) - } - _ = log_fut => { - bail!("log fut exited early"); - } - } - } - - pub async fn stop(&self) -> Result { - // Clonign value required since this holds a read lock on the inner - // value. - if matches!( - *self.status_rx.borrow(), - ProcessStatus::Running { .. } | ProcessStatus::Starting - ) { - let mut status_rx = self.status_tx.subscribe(); - - // Stop can only be sent once, so take the sender - let did_stop = { - let mut stop = self.stop_tx.lock().await; - if let Some(stop_tx) = stop.take() { - stop_tx.send(()).await?; - true - } else { - false - } - }; - - // Wait for stop - status_rx - .wait_for(|x| matches!(x, ProcessStatus::Exited { .. })) - .await?; - - Ok(did_stop) - } else { - Ok(false) - } - } - - pub async fn is_running(&self) -> Result { - Ok(self.status_rx.borrow().is_running()) - } - - async fn spawn_process(self: &Arc, command_opts: CommandOpts) -> Result<()> { - // Create new shutdown channel - let (stop_tx, stop_rx) = mpsc::channel(1); - { - *self.stop_tx.lock().await = Some(stop_tx); - } - - // Update status - self.status_tx.send(ProcessStatus::Starting)?; - - // Run inner and catch state - let _self = self.clone(); - tokio::spawn(async move { - match _self.spawn_process_inner(command_opts, stop_rx).await { - Result::Ok(_) => {} - Err(err) => { - eprintln!("Failed to spawn process: {err:?}"); - let _ = _self.status_tx.send(ProcessStatus::Exited { - exit_code: None, - error: Some(err.to_string()), - }); - let _ = _self.clear_logs().await; - } - } - }); - - Ok(()) - } - - async fn spawn_process_inner( - self: &Arc, - command_opts: CommandOpts, - mut stop_rx: mpsc::Receiver<()>, - ) -> Result<()> { - let mut cmd = Command::new(command_opts.command); - cmd.current_dir(command_opts.current_dir) - .args(command_opts.args) - .envs(command_opts.envs.iter().cloned()); - - // Required in case this task is cancelled - cmd.kill_on_drop(true); - - // Configure the command to pipe stdout and stderr - cmd.stdout(Stdio::piped()); - cmd.stderr(Stdio::piped()); - - #[cfg(windows)] - { - use ::windows::Win32::System::Threading::CREATE_NEW_PROCESS_GROUP; - cmd.creation_flags(CREATE_NEW_PROCESS_GROUP.0); - } - - // Spawn the command - let mut child = cmd.spawn()?; - let child_pid = child.id().expect("missing child pid"); - - // Save the PID - meta::mutate_project(&paths::data_dir()?, |x| { - x.process_manager_state - .entry(self.key.to_string()) - .or_default() - .pid = Some(child_pid); - }) - .await?; - - // Update state - self.status_tx - .send(ProcessStatus::Running { pid: child_pid }) - .context("send ProcessStatus::Running")?; - - // Setup log handlers - let stdout = child.stdout.take().expect("Failed to capture stdout"); - let stderr = child.stderr.take().expect("Failed to capture stderr"); - - let mut stdout_reader = BufReader::new(stdout).lines(); - let mut stderr_reader = BufReader::new(stderr).lines(); - - // Spawn tasks to handle stdout and stderr - let _self = self.clone(); - let stdout_handle = tokio::spawn(async move { - while let Result::Ok(Some(line)) = stdout_reader.next_line().await { - _self.add_log(ProcessLog::Stdout(line)).await?; - } - - Result::<()>::Ok(()) - }); - - let _self = self.clone(); - let stderr_handle = tokio::spawn(async move { - while let Result::Ok(Some(line)) = stderr_reader.next_line().await { - _self.add_log(ProcessLog::Stderr(line)).await?; - } - - Result::<()>::Ok(()) - }); - - // Wait for process - let exit_code = tokio::select! { - res = child.wait() => { - let status = res?; - status.code() - } - res = stop_rx.recv() => { - res.context("stop_rx.recv")?; - - // Update state - self.status_tx.send(ProcessStatus::Stopping).context("send ProcessStatus::Stopping")?; - - // Send SIGTERM to stop gracefully - tokio::task::block_in_place(|| os::send_terminate_signal(child_pid)); - - // Wait for process to exit - match tokio::time::timeout(self.kill_grace, child.wait()).await { - Result::Ok(Result::Ok(status)) => { - // Stopped gracefully - status.code() - } - Result::Ok(Err(err)) => { - // Error waiting for process - return Err(err.into()); - } - Err(_) => { - // Timed out, force kill - tokio::task::block_in_place(|| os::kill_process_tree(child_pid)); - - None - } - } - } - }; - - // Stop log tasks - stdout_handle.abort(); - stderr_handle.abort(); - - // Remove PID - meta::mutate_project(&paths::data_dir()?, |x| { - x.process_manager_state.get_mut(self.key).map(|x| { - if x.pid == Some(child_pid) { - x.pid = None; - } - }) - }) - .await?; - - // Update state - self.status_tx - .send(ProcessStatus::Exited { - exit_code, - error: None, - }) - .context("send ProcessStatus::Exited")?; - self.clear_logs().await?; - - Ok(()) - } - - async fn add_log(&self, log: ProcessLog) -> Result<()> { - // Write log - { - let mut logs = self.logs.lock().await; - logs.push_front(log.clone()); - logs.truncate(MAX_LOG_HISTORY); - } - - // Publish event - self.event_tx.send(ProcessEvent::Log(log))?; - - Ok(()) - } - - async fn clear_logs(&self) -> Result<()> { - let mut logs = self.logs.lock().await; - logs.clear(); - Ok(()) - } -} diff --git a/packages/toolchain/src/util/process_manager/unix.rs b/packages/toolchain/src/util/process_manager/unix.rs deleted file mode 100644 index d8e91182..00000000 --- a/packages/toolchain/src/util/process_manager/unix.rs +++ /dev/null @@ -1,97 +0,0 @@ -use anyhow::*; -use nix::{ - sys::signal::{kill, Signal}, - unistd::Pid, -}; - -pub fn send_terminate_signal(pid: u32) { - match kill(Pid::from_raw(pid as i32), Signal::SIGTERM) { - Result::Ok(_) => (), - Err(e) => eprintln!("Failed to send SIGTERM to process {}: {}", pid, e), - } -} - -/// Kill process tree using pkill on macOS. This is not portable to Linux distros. -#[cfg(target_os = "macos")] -pub fn kill_process_tree(pid: u32) { - use std::process::Command; - - // Kill the children - match Command::new("pkill") - .args(&["-9", "-P", &pid.to_string()]) - .status() - { - Result::Ok(status) => { - if !status.success() { - eprintln!("pkill failed to kill children: status {status}"); - } - } - Err(err) => { - eprintln!("pkill failed to kill children: {err}"); - } - } - - // Kill the parent - match Command::new("kill") - .args(&["-9", &pid.to_string()]) - .status() - { - Result::Ok(status) => { - if !status.success() { - eprintln!("kill failed to kill parent: status {status}"); - } - } - Err(err) => { - eprintln!("kill failed to kill parent: {err:?}"); - } - }; -} - -// TODO: Figure out how to make libproc work with osxcross -// #[cfg(target_os = "macos")] -// pub fn kill_process_tree(pid_raw: u32) { -// use libproc::processes::{pids_by_type, ProcFilter}; -// -// let pid = Pid::from_raw(pid_raw as i32); -// -// match pids_by_type(ProcFilter::ByParentProcess { ppid: pid_raw }) { -// Result::Ok(pids) => { -// for &child_pid in &pids { -// kill_process_tree(child_pid); -// } -// } -// Err(e) => { -// eprintln!("Failed to list child processes for {}: {}", pid_raw, e); -// } -// }; -// -// if let Err(e) = kill(pid, Signal::SIGKILL) { -// eprintln!("Failed to kill process {}: {}", pid_raw, e); -// } -// } - -/// Kill process tree using `/proc/` on Linux. -#[cfg(target_os = "linux")] -pub fn kill_process_tree(pid_raw: u32) { - use std::{fs, path::Path}; - - let pid = Pid::from_raw(pid_raw as i32); - - let proc_dir = format!("/proc/{}/task/{}/children", pid, pid); - if Path::new(&proc_dir).exists() { - match fs::read_to_string(&proc_dir) { - Result::Ok(children) => { - for child_pid in children.split_whitespace() { - if let Result::Ok(child_pid) = child_pid.parse::() { - kill_process_tree(child_pid); - } - } - } - Err(e) => eprintln!("Failed to read child processes for {}: {}", pid_raw, e), - } - } - - if let Err(e) = kill(pid, Signal::SIGKILL) { - eprintln!("Failed to kill process {}: {}", pid_raw, e); - } -} diff --git a/packages/toolchain/src/util/process_manager/windows.rs b/packages/toolchain/src/util/process_manager/windows.rs deleted file mode 100644 index 9b2e862a..00000000 --- a/packages/toolchain/src/util/process_manager/windows.rs +++ /dev/null @@ -1,69 +0,0 @@ -use anyhow::*; -use windows::Win32::{ - Foundation::{CloseHandle}, - System::{ - Console::{GenerateConsoleCtrlEvent, CTRL_BREAK_EVENT}, - Diagnostics::ToolHelp::{ - CreateToolhelp32Snapshot, Process32First, Process32Next, PROCESSENTRY32, - TH32CS_SNAPPROCESS, - }, - Threading::{OpenProcess, TerminateProcess, PROCESS_TERMINATE}, - }, -}; - -pub fn send_terminate_signal(pid: u32) { - unsafe { - // Attempt to terminate the process gracefully - if !GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, pid as u32).as_bool() { - eprintln!("failed to terminate process") - } - } -} - -pub fn kill_process_tree(pid: u32) { - unsafe { - // Kill children - match CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) { - Result::Ok(snapshot) => { - let mut process_entry = PROCESSENTRY32::default(); - process_entry.dwSize = std::mem::size_of::() as u32; - - if Process32First(snapshot, &mut process_entry).as_bool() { - loop { - if process_entry.th32ParentProcessID == pid { - kill_process_tree(process_entry.th32ProcessID); - } - if !Process32Next(snapshot, &mut process_entry).as_bool() { - break; - } - } - } - - CloseHandle(snapshot); - } - Err(e) => { - eprintln!("Failed to create process snapshot: {}", e); - } - } - - // Kill parent - match OpenProcess(PROCESS_TERMINATE, false, pid) { - Result::Ok(process_handle) => { - if process_handle.is_invalid() { - if TerminateProcess(process_handle, 1).as_bool() { - CloseHandle(process_handle); - } else { - let error = std::io::Error::last_os_error(); - CloseHandle(process_handle); - eprintln!("Failed to terminate process {}: {}", pid, error); - } - } else { - eprintln!("Failed to open process {}: Process may not exist", pid); - } - } - Err(err) => { - eprintln!("Failed to open process {}: {}", pid, err); - } - } - } -} diff --git a/packages/toolchain/src/util/task/event.rs b/packages/toolchain/src/util/task/event.rs index ec74275f..963f3cf9 100644 --- a/packages/toolchain/src/util/task/event.rs +++ b/packages/toolchain/src/util/task/event.rs @@ -8,32 +8,4 @@ pub enum TaskEvent { Result { result: Box, }, - #[serde(rename = "port_update")] - PortUpdate { backend_port: u16, editor_port: u16 }, - #[serde(rename = "backend_config_update")] - BackendConfigUpdate(backend_config_update::Event), -} - -pub mod backend_config_update { - use serde::Serialize; - - #[derive(Serialize, Debug)] - pub struct Event { - pub sdks: Vec, - pub modules: Vec, - } - - #[derive(Serialize, Debug)] - pub struct Sdk { - pub target: String, - pub output: String, - } - - #[derive(Serialize, Debug)] - pub struct Module { - pub slug: String, - pub name: String, - pub config_url: String, - pub docs_url: String, - } } diff --git a/packages/toolchain/src/util/task/mod.rs b/packages/toolchain/src/util/task/mod.rs index 6edfa94c..622ce374 100644 --- a/packages/toolchain/src/util/task/mod.rs +++ b/packages/toolchain/src/util/task/mod.rs @@ -1,11 +1,11 @@ mod ctx; pub mod event; -mod register; +mod registry; mod run; mod task; pub use ctx::*; pub use event::*; -pub use register::*; +pub use registry::*; pub use run::*; pub use task::*; diff --git a/packages/toolchain/src/util/task/register.rs b/packages/toolchain/src/util/task/registry.rs similarity index 100% rename from packages/toolchain/src/util/task/register.rs rename to packages/toolchain/src/util/task/registry.rs diff --git a/packages/toolchain/tests/process_manager.rs b/packages/toolchain/tests/process_manager.rs deleted file mode 100644 index 23be4abc..00000000 --- a/packages/toolchain/tests/process_manager.rs +++ /dev/null @@ -1,309 +0,0 @@ -use std::{sync::Arc, time::Duration}; - -use anyhow::*; -use rivet_toolchain::util::{ - process_manager::*, - task::{TaskCtx, TaskCtxInner, TaskEvent}, -}; -use tokio::{ - sync::{broadcast, mpsc}, - time::sleep, -}; - -async fn setup_test_environment() -> Result> { - Ok(ProcessManager::new("test_process", Duration::from_secs(5))) -} - -fn create_task_ctx() -> (TaskCtx, mpsc::UnboundedReceiver) { - let (log_tx, log_rx) = mpsc::unbounded_channel(); - let (_shutdown_tx, shutdown_rx) = broadcast::channel(1); - let task = TaskCtxInner::new(log_tx, shutdown_rx); - (task, log_rx) -} - -fn build_deno_cmd(script: &str) -> (String, Vec) { - ( - "deno".to_string(), - vec![ - "eval".to_string(), - "--quiet".to_string(), - script.to_string(), - ], - ) -} - -#[tokio::test(flavor = "multi_thread")] -async fn test_process_manager_lifecycle() -> Result<()> { - let process_manager = setup_test_environment().await?; - - // Create a TaskCtx - let (task, mut log_rx) = create_task_ctx(); - - // Build command - let script = r#" - console.log(`ENV_VAR: ${Deno.env.get("ENV_VAR")}`); - console.log("stdout test"); - console.error("stderr test"); - await new Promise(resolve => setTimeout(resolve, 2000)); - console.log("exiting now"); - Deno.exit(42); - "#; - - let (command, args) = build_deno_cmd(script); - - let envs = vec![("ENV_VAR".to_string(), "test_value".to_string())]; - let current_dir = std::env::current_dir()?.to_string_lossy().to_string(); - - // Start the process - let handle = tokio::spawn({ - let process_manager = process_manager.clone(); - async move { - process_manager - .start(task, move || async move { - Ok(CommandOpts { - command, - args, - envs, - current_dir, - }) - }) - .await - } - }); - - // Collect logs - let mut stdout_logs = Vec::new(); - let mut stderr_logs = Vec::new(); - while let Some(event) = log_rx.recv().await { - match event { - TaskEvent::Log(log) => { - if let Some(log) = log.strip_prefix("[stdout] ") { - stdout_logs.push(log.to_string()); - } else if let Some(log) = log.strip_prefix("[stderr] ") { - stderr_logs.push(log.to_string()); - } - } - TaskEvent::Result { .. } => break, - _ => {} - } - } - - // Wait for the process to finish and get the exit code - let exit_code = handle.await??; - - // Verify process is not running - assert!(!process_manager.is_running().await?); - - // Verify exit code - assert_eq!(exit_code, Some(42)); - - // Verify logs - assert_eq!( - stdout_logs, - vec!["ENV_VAR: test_value", "stdout test", "exiting now",] - ); - assert_eq!(stderr_logs, vec!["stderr test",]); - - // Restart the process - let script = r#" - console.log("Restarted process"); - await new Promise(resolve => setTimeout(resolve, 2000)); - Deno.exit(0); - "#; - - let (command, args) = build_deno_cmd(script); - - let envs = Vec::new(); - let current_dir = std::env::current_dir()?.to_string_lossy().to_string(); - - let (task, _log_rx) = create_task_ctx(); - let handle = tokio::spawn({ - let process_manager = process_manager.clone(); - async move { - process_manager - .start(task, move || async move { - Ok(CommandOpts { - command, - args, - envs, - current_dir, - }) - }) - .await - } - }); - - // Wait a bit to ensure the process has started - sleep(Duration::from_millis(200)).await; - - // Verify process is running - assert!(process_manager.is_running().await?); - - // Wait for the process to finish - let exit_code = handle.await??; - - // Verify exit code of restarted process - assert_eq!(exit_code, Some(0)); - - // Verify process is not running after completion - assert!(!process_manager.is_running().await?); - - Ok(()) -} - -#[tokio::test(flavor = "multi_thread")] -async fn test_process_manager_stop_graceful() -> Result<()> { - let process_manager = setup_test_environment().await?; - - // Create a TaskCtx - let (task, _log_rx) = create_task_ctx(); - - // Start a long-running process with custom exit code on SIGTERM - let script = r#" - const signal = Deno.build.os === "windows" ? "SIGBREAK" : "SIGTERM"; - Deno.addSignalListener(signal, () => { - console.log("Exiting with code 42"); - Deno.exit(42); - }); - console.log("Starting long process"); - while (true) { - await new Promise(resolve => setTimeout(resolve, 1000)); - } - "#; - - let (command, args) = build_deno_cmd(script); - - let envs = Vec::new(); - let current_dir = std::env::current_dir()?.to_string_lossy().to_string(); - - // Start the process - let handle = tokio::spawn({ - let process_manager = process_manager.clone(); - async move { - process_manager - .start(task, move || async move { - Ok(CommandOpts { - command, - args, - envs, - current_dir, - }) - }) - .await - } - }); - - // Wait a bit to ensure the process has started - sleep(Duration::from_millis(200)).await; - - // Verify process is running - assert!(process_manager.is_running().await?, "process not running"); - assert!(!handle.is_finished(), "handle not running"); - - // Stop the process - assert!(process_manager.stop().await?, "did not stop process"); - assert!( - !process_manager.stop().await?, - "stop should not return true if no process" - ); - - // Verify process is not running - assert!( - !process_manager.is_running().await?, - "process is still running" - ); - - // Wait for the process to finish and get the exit code with a 1 second timeout - let exit_code = tokio::time::timeout(Duration::from_secs(1), handle) - .await - .expect("timeout waiting for process to finish")??; - - // Verify custom exit code - assert_eq!(exit_code, Some(42)); - - Ok(()) -} - -#[tokio::test(flavor = "multi_thread")] -async fn test_process_manager_stop_timeout() -> Result<()> { - let process_manager = setup_test_environment().await?; - - // Create a TaskCtx - let (task, _log_rx) = create_task_ctx(); - - // Start a process that ignores SIGTERM - let script = r#" - const signal = Deno.build.os === "windows" ? "SIGBREAK" : "SIGTERM"; - Deno.addSignalListener(signal, () => { - console.log("Caught term, ignoring"); - }); - console.log("Starting process that ignores SIGTERM"); - while (true) { - await new Promise(resolve => setTimeout(resolve, 1000)); - } - "#; - - let (command, args) = build_deno_cmd(script); - - let envs = Vec::new(); - let current_dir = std::env::current_dir()?.to_string_lossy().to_string(); - - // Start the process - let handle = tokio::spawn({ - let process_manager = process_manager.clone(); - async move { - process_manager - .start(task, move || async move { - Ok(CommandOpts { - command, - args, - envs, - current_dir, - }) - }) - .await - } - }); - - // Wait a bit to ensure the process has started - sleep(Duration::from_millis(200)).await; - - // Verify process is running - assert!(process_manager.is_running().await?, "process not running"); - - // Attempt to stop the process in the background - let stop_handle = tokio::spawn({ - let process_manager = process_manager.clone(); - async move { process_manager.stop().await } - }); - - // Verify the process is still running before the end of the grace period - sleep(process_manager.kill_grace - Duration::from_millis(500)).await; - assert!( - process_manager.is_running().await?, - "process stopped too early" - ); - - // Verify process is killed after the grace period - // - // We've already slept `grace - 500ms` at this point, so we'll check - // 500ms after the expected kill - sleep(Duration::from_secs(1)).await; - assert!( - !process_manager.is_running().await?, - "process is still running" - ); - - // Wait for the stop task to complete and check its result - let stop_result = stop_handle.await?; - assert!(stop_result?, "did not stop process"); - - // Wait for the process to finish and get the exit code - let exit_code = handle.await??; - - // Verify exit code. This is None on Unix bc SIGKILL terminates immediately. - // This is Some(1) on Windows bc TerminateProcess exits with 1. - assert_eq!(exit_code, None, "Unexpected exit code"); - - Ok(()) -} diff --git a/packages/toolchain/tpl/ci/github/foot.yml b/packages/toolchain/tpl/ci/github/foot.yml deleted file mode 100644 index b36f937f..00000000 --- a/packages/toolchain/tpl/ci/github/foot.yml +++ /dev/null @@ -1,27 +0,0 @@ - deploy: - name: Deploy - needs: [prepare, __NEEDS_JOBS__] - runs-on: ubuntu-20.04 - defaults: - run: - shell: bash - env: - RIVET_API_ENDPOINT: "__RIVET_API_ENDPOINT__" - RIVET_TOKEN: ${{ secrets.RIVET_TOKEN }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Rivet CLI - run: | - export RIVET_CLI_VERSION="__RIVET_CLI_VERSION__" - curl -fsSL https://raw.githubusercontent.com/rivet-gg/cli/main/install/unix.sh | sh - - - name: Create Namespace - run: | - rivet namespace create --id "${{ needs.prepare.outputs.ns_name_id }}" --name "${{ needs.prepare.outputs.branch_name }}" - - - name: Deploy Version - run: | - rivet deploy '${{ needs.prepare.outputs.ns_name_id }}' --name '${{ needs.prepare.outputs.version_name }}' __DEPLOY_OVERRIDES__ - diff --git a/packages/toolchain/tpl/ci/github/head.yml b/packages/toolchain/tpl/ci/github/head.yml deleted file mode 100644 index 59bf3d16..00000000 --- a/packages/toolchain/tpl/ci/github/head.yml +++ /dev/null @@ -1,55 +0,0 @@ -# This GitHub Action workflow is auto-generated by the Rivet CLI -# (https://github.com/rivet-gg/cli). It is configured based on the rivet.yaml -# file. Instead of modifying directly, update your rivet.yaml and re-generate -# this config using `rivet ci generate github`. - -name: Deploy to Rivet - -on: - push: - branches: - - '**' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - prepare: - name: Prepare - runs-on: ubuntu-20.04 - outputs: - branch_name: ${{ steps.derive_names.outputs.branch_name }} - ns_name_id: ${{ steps.derive_names.outputs.ns_name_id }} - version_name: ${{ steps.derive_names.outputs.version_name }} - defaults: - run: - shell: bash - env: - RIVET_API_ENDPOINT: "__RIVET_API_ENDPOINT__" - RIVET_TOKEN: ${{ secrets.RIVET_TOKEN }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Rivet CLI - run: | - export RIVET_CLI_VERSION="__RIVET_CLI_VERSION__" - curl -fsSL https://raw.githubusercontent.com/rivet-gg/cli/main/install/unix.sh | sh - - - name: Derive names - id: derive_names - run: | - branch_name=${GITHUB_REF#refs/heads/} - # Max namespace length is 16 characters - ns_name_id=$(echo $branch_name | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]\+/-/g' | cut -c 1-16) - short_hash=$(git rev-parse --short HEAD) - version_name="${short_hash} (${branch_name})" - echo "branch_name=$branch_name" >> "$GITHUB_OUTPUT" - echo "ns_name_id=$ns_name_id" >> "$GITHUB_OUTPUT" - echo "version_name=$version_name" >> "$GITHUB_OUTPUT" - - - name: Validate config - run: | - rivet config validate --namespace '${{ steps.derive_names.outputs.ns_name_id }}' - diff --git a/packages/toolchain/tpl/ci/github/job-cdn.yml b/packages/toolchain/tpl/ci/github/job-cdn.yml deleted file mode 100644 index b143322b..00000000 --- a/packages/toolchain/tpl/ci/github/job-cdn.yml +++ /dev/null @@ -1,30 +0,0 @@ - build_cdn: - name: Build CDN Site - needs: prepare - runs-on: ubuntu-20.04 - outputs: - site_id: ${{ steps.build_cdn.outputs.site_id }} - defaults: - run: - shell: bash - env: - RIVET_API_ENDPOINT: "__RIVET_API_ENDPOINT__" - RIVET_TOKEN: ${{ secrets.RIVET_TOKEN }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Rivet CLI - run: | - export RIVET_CLI_VERSION="__RIVET_CLI_VERSION__" - curl -fsSL https://raw.githubusercontent.com/rivet-gg/cli/main/install/unix.sh | sh - - - name: Build CDN - id: build_cdn - env: - # CI always has a good internet connection, so we can increase the concurrent uploads to upload large numbers of files faster - RIVET_CONCURRENT_UPLOADS: 128 - run: | - output=$(rivet cdn build-push --format json-compact --name '${{ needs.prepare.outputs.ns_name_id }}' --command '__BUILD_COMMAND__' --path '__BUILD_OUTPUT__' | tail -n1) - echo "site_id=$(echo $output | jq -r '.site_id')" >> "$GITHUB_OUTPUT" - diff --git a/packages/toolchain/tpl/ci/github/job-image.yml b/packages/toolchain/tpl/ci/github/job-image.yml deleted file mode 100644 index 02199e60..00000000 --- a/packages/toolchain/tpl/ci/github/job-image.yml +++ /dev/null @@ -1,27 +0,0 @@ - __JOB_NAME__: - name: Build Docker Image (__DOCKERFILE_PATH__) - needs: prepare - runs-on: ubuntu-20.04 - outputs: - image_id: ${{ steps.build_image.outputs.image_id }} - defaults: - run: - shell: bash - env: - RIVET_API_ENDPOINT: "__RIVET_API_ENDPOINT__" - RIVET_TOKEN: ${{ secrets.RIVET_TOKEN }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Rivet CLI - run: | - export RIVET_CLI_VERSION="__RIVET_CLI_VERSION__" - curl -fsSL https://raw.githubusercontent.com/rivet-gg/cli/main/install/unix.sh | sh - - - name: Build Docker Image - id: build_image - run: | - output=$(rivet docker build-push --format json-compact --name '${{ needs.prepare.outputs.ns_name_id }}' --dockerfile '__DOCKERFILE_PATH__' | tail -n1) - echo "image_id=$(echo $output | jq -r '.image_id')" >> "$GITHUB_OUTPUT" - diff --git a/scripts/backend/build_artifacts.ts b/scripts/backend/build_artifacts.ts deleted file mode 100755 index 9283ae3b..00000000 --- a/scripts/backend/build_artifacts.ts +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env -S deno run -A - -import { DRIZZLE_ORM_PACKAGE } from "../../packages/backend/toolchain/drizzle_consts.ts"; -import { resolve } from "@std/path"; -import { copy, exists, ensureDir } from "@std/fs"; - -// Hack to allow Yarn to work on Windows -const YARN_COMMAND = Deno.build.os === "windows" ? "cmd" : "yarn"; -const YARN_ARGS = Deno.build.os === "windows" ? ["/c", "yarn"] : []; - -/** - * Path to the root of the repo. Used for reading & writing files to the - * project. - */ -export function projectRoot() { - const dirname = import.meta.dirname; - if (!dirname) throw new Error("Missing dirname"); - - return resolve(dirname, "..", "..", "packages", "backend"); -} - -async function getPackageExports( - moduleName: any, - excludedSymbols: string[], -): Promise { - const module = await import(moduleName); - const symbols = Object.keys(module).filter( - (key) => !excludedSymbols.includes(key), - ); - return symbols; -} - -/** - * Get the target directory from the environment variable or use a default - */ -function getTargetDirectory() { - return Deno.env.get("ARTIFACTS_TARGET_DIR") ?? resolve(projectRoot(), "artifacts"); -} - -async function generateDrizzleOrmArtifacts() { - const exports = { - drizzleOrm: await getPackageExports(DRIZZLE_ORM_PACKAGE, [ - "BaseName", - "Columns", - "ExtraConfigBuilder", - "ExtraConfigColumns", - "IsAlias", - "OriginalName", - "Schema", - "TableName", - "applyMixins", - "getTableLikeName", - "mapResultRow", - "mapUpdateSet", - "orderSelectedFields", - ]), - drizzleOrmPgCore: await getPackageExports( - `${DRIZZLE_ORM_PACKAGE}/pg-core`, - [ - "InlineForeignKeys", - "pgEnumWithSchema", - "pgMaterializedViewWithSchema", - "pgSequenceWithSchema", - "pgTableWithSchema", - "pgViewWithSchema", - ], - ), - }; - - const targetDir = getTargetDirectory(); - const outputPath = resolve(targetDir, "drizzle_orm.json"); - await ensureDir(targetDir); - await Deno.writeTextFile( - outputPath, - JSON.stringify({ exports }), - ); - console.log(`[drizzle] Wrote Drizzle ORM exports to ${outputPath}`); -} - -async function buildEditor() { - const EDITOR_PATH = resolve(import.meta.dirname!, "..", "..", "packages", "editor"); - - const editorOutDir = await Deno.makeTempDir(); - - console.log(`[editor] Installing packages`) - const installResult = await new Deno.Command(YARN_COMMAND, { - args: YARN_ARGS, - cwd: EDITOR_PATH, - env: { - "NODE_ENV": "production", - }, - stdout: "inherit", - stderr: "inherit", - }).output(); - - if (!installResult.success) { - throw new Error(`Failed to install packages`); - } - - console.log(`[editor] Building`) - const buildResult = await new Deno.Command(YARN_COMMAND, { - args: [ - ...YARN_ARGS, - "build", - ], - cwd: EDITOR_PATH, - env: { - "NODE_ENV": "production", - "TURBO_UI": "0", - "VITE_OUT_DIR": editorOutDir, - }, - stdout: "inherit", - stderr: "inherit", - }).output(); - - if (!buildResult.success) { - throw new Error(`Failed to build editor`); - } - - console.log(`[editor] Copying to artifacts`) - const targetDir = getTargetDirectory(); - const artifactsPath = resolve(targetDir, "editor"); - if (await exists(artifactsPath, { isDirectory: true })) { - await Deno.remove(artifactsPath, { recursive: true }); - } - await copy(editorOutDir, artifactsPath); -} - -async function main() { - const targetDir = getTargetDirectory(); - await ensureDir(targetDir); - await generateDrizzleOrmArtifacts(); - await buildEditor(); -} - -main(); diff --git a/sdks/rust/.openapi-generator/FILES b/sdks/rust/.openapi-generator/FILES index 0196de70..e17f6215 100644 --- a/sdks/rust/.openapi-generator/FILES +++ b/sdks/rust/.openapi-generator/FILES @@ -3,32 +3,42 @@ .travis.yml Cargo.toml README.md -docs/AdminApi.md -docs/AdminClustersApi.md -docs/AdminClustersBuildDeliveryMethod.md -docs/AdminClustersCluster.md -docs/AdminClustersCreateClusterRequest.md -docs/AdminClustersCreateClusterResponse.md -docs/AdminClustersCreateDatacenterRequest.md -docs/AdminClustersCreateDatacenterResponse.md -docs/AdminClustersDatacenter.md -docs/AdminClustersDatacentersApi.md -docs/AdminClustersHardware.md -docs/AdminClustersListClustersResponse.md -docs/AdminClustersListDatacentersResponse.md -docs/AdminClustersListServersResponse.md -docs/AdminClustersPool.md -docs/AdminClustersPoolType.md -docs/AdminClustersPoolUpdate.md -docs/AdminClustersProvider.md -docs/AdminClustersServer.md -docs/AdminClustersServersApi.md -docs/AdminClustersUpdateDatacenterRequest.md -docs/AdminLoginRequest.md -docs/AdminLoginResponse.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/ActorGameGuardRouting.md +docs/ActorGetActorLogsResponse.md +docs/ActorGetActorResponse.md +docs/ActorGetBuildResponse.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/AuthCompleteStatus.md -docs/AuthIdentityAccessTokenApi.md -docs/AuthIdentityCompleteAccessTokenVerificationRequest.md docs/AuthIdentityCompleteEmailVerificationRequest.md docs/AuthIdentityCompleteEmailVerificationResponse.md docs/AuthIdentityEmailApi.md @@ -298,50 +308,33 @@ docs/GroupPrepareAvatarUploadResponse.md docs/GroupProfile.md docs/GroupPublicity.md docs/GroupResolveJoinRequestRequest.md -docs/GroupSearchResponse.md docs/GroupSummary.md docs/GroupTransferOwnershipRequest.md docs/GroupUpdateProfileRequest.md docs/GroupValidateProfileRequest.md docs/GroupValidateProfileResponse.md -docs/IdentityAccessTokenLinkedAccount.md docs/IdentityActivitiesApi.md docs/IdentityApi.md -docs/IdentityCancelGameLinkRequest.md -docs/IdentityCompleteGameLinkRequest.md docs/IdentityDevState.md docs/IdentityEmailLinkedAccount.md docs/IdentityEventsApi.md docs/IdentityExternalLinks.md docs/IdentityGameActivity.md docs/IdentityGameLinkStatus.md -docs/IdentityGetGameLinkNewIdentity.md -docs/IdentityGetGameLinkResponse.md docs/IdentityGetHandlesResponse.md docs/IdentityGetProfileResponse.md docs/IdentityGetSummariesResponse.md docs/IdentityGlobalEvent.md docs/IdentityGlobalEventIdentityUpdate.md docs/IdentityGlobalEventKind.md -docs/IdentityGlobalEventMatchmakerLobbyJoin.md docs/IdentityGlobalEventNotification.md docs/IdentityGroup.md docs/IdentityHandle.md docs/IdentityLinkedAccount.md -docs/IdentityLinksApi.md docs/IdentityListActivitiesResponse.md -docs/IdentityListFollowersResponse.md -docs/IdentityListFollowingResponse.md -docs/IdentityListFriendsResponse.md -docs/IdentityListMutualFriendsResponse.md -docs/IdentityListRecentFollowersResponse.md docs/IdentityPrepareAvatarUploadRequest.md docs/IdentityPrepareAvatarUploadResponse.md -docs/IdentityPrepareGameLinkResponse.md -docs/IdentityPresence.md docs/IdentityProfile.md -docs/IdentityReportRequest.md -docs/IdentitySearchResponse.md docs/IdentitySetGameActivityRequest.md docs/IdentitySetupRequest.md docs/IdentitySetupResponse.md @@ -354,14 +347,6 @@ docs/IdentityUpdateStatusRequest.md docs/IdentityValidateProfileResponse.md docs/IdentityWatchEventsResponse.md docs/JobRunApi.md -docs/KvApi.md -docs/KvEntry.md -docs/KvGetBatchResponse.md -docs/KvGetResponse.md -docs/KvListResponse.md -docs/KvPutBatchRequest.md -docs/KvPutEntry.md -docs/KvPutRequest.md docs/MatchmakerCreateLobbyResponse.md docs/MatchmakerCustomLobbyPublicity.md docs/MatchmakerFindLobbyResponse.md @@ -434,11 +419,10 @@ docs/UploadPresignedRequest.md docs/ValidationError.md docs/WatchResponse.md git_push.sh -src/apis/admin_api.rs -src/apis/admin_clusters_api.rs -src/apis/admin_clusters_datacenters_api.rs -src/apis/admin_clusters_servers_api.rs -src/apis/auth_identity_access_token_api.rs +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 @@ -470,9 +454,7 @@ 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/identity_links_api.rs src/apis/job_run_api.rs -src/apis/kv_api.rs src/apis/matchmaker_lobbies_api.rs src/apis/matchmaker_players_api.rs src/apis/matchmaker_regions_api.rs @@ -485,27 +467,38 @@ src/apis/servers_builds_api.rs src/apis/servers_datacenters_api.rs src/apis/servers_logs_api.rs src/lib.rs -src/models/admin_clusters_build_delivery_method.rs -src/models/admin_clusters_cluster.rs -src/models/admin_clusters_create_cluster_request.rs -src/models/admin_clusters_create_cluster_response.rs -src/models/admin_clusters_create_datacenter_request.rs -src/models/admin_clusters_create_datacenter_response.rs -src/models/admin_clusters_datacenter.rs -src/models/admin_clusters_hardware.rs -src/models/admin_clusters_list_clusters_response.rs -src/models/admin_clusters_list_datacenters_response.rs -src/models/admin_clusters_list_servers_response.rs -src/models/admin_clusters_pool.rs -src/models/admin_clusters_pool_type.rs -src/models/admin_clusters_pool_update.rs -src/models/admin_clusters_provider.rs -src/models/admin_clusters_server.rs -src/models/admin_clusters_update_datacenter_request.rs -src/models/admin_login_request.rs -src/models/admin_login_response.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_game_guard_routing.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_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/auth_complete_status.rs -src/models/auth_identity_complete_access_token_verification_request.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 @@ -748,46 +741,30 @@ 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_search_response.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_access_token_linked_account.rs -src/models/identity_cancel_game_link_request.rs -src/models/identity_complete_game_link_request.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_game_link_new_identity.rs -src/models/identity_get_game_link_response.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_matchmaker_lobby_join.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_list_followers_response.rs -src/models/identity_list_following_response.rs -src/models/identity_list_friends_response.rs -src/models/identity_list_mutual_friends_response.rs -src/models/identity_list_recent_followers_response.rs src/models/identity_prepare_avatar_upload_request.rs src/models/identity_prepare_avatar_upload_response.rs -src/models/identity_prepare_game_link_response.rs -src/models/identity_presence.rs src/models/identity_profile.rs -src/models/identity_report_request.rs -src/models/identity_search_response.rs src/models/identity_set_game_activity_request.rs src/models/identity_setup_request.rs src/models/identity_setup_response.rs @@ -799,13 +776,6 @@ 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/kv_entry.rs -src/models/kv_get_batch_response.rs -src/models/kv_get_response.rs -src/models/kv_list_response.rs -src/models/kv_put_batch_request.rs -src/models/kv_put_entry.rs -src/models/kv_put_request.rs src/models/matchmaker_create_lobby_response.rs src/models/matchmaker_custom_lobby_publicity.rs src/models/matchmaker_find_lobby_response.rs diff --git a/sdks/rust/README.md b/sdks/rust/README.md index 7dc651ff..33f2f45d 100644 --- a/sdks/rust/README.md +++ b/sdks/rust/README.md @@ -25,16 +25,17 @@ All URIs are relative to *https://api.rivet.gg* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AdminApi* | [**admin_login**](docs/AdminApi.md#admin_login) | **POST** /admin/login | -*AdminClustersApi* | [**admin_clusters_create**](docs/AdminClustersApi.md#admin_clusters_create) | **POST** /admin/clusters | -*AdminClustersApi* | [**admin_clusters_list**](docs/AdminClustersApi.md#admin_clusters_list) | **GET** /admin/clusters | -*AdminClustersDatacentersApi* | [**admin_clusters_datacenters_create**](docs/AdminClustersDatacentersApi.md#admin_clusters_datacenters_create) | **POST** /admin/clusters/{cluster_id}/datacenters | -*AdminClustersDatacentersApi* | [**admin_clusters_datacenters_list**](docs/AdminClustersDatacentersApi.md#admin_clusters_datacenters_list) | **GET** /admin/clusters/{cluster_id}/datacenters | -*AdminClustersDatacentersApi* | [**admin_clusters_datacenters_update**](docs/AdminClustersDatacentersApi.md#admin_clusters_datacenters_update) | **PATCH** /admin/clusters/{cluster_id}/datacenters/{datacenter_id} | -*AdminClustersServersApi* | [**admin_clusters_servers_destroy**](docs/AdminClustersServersApi.md#admin_clusters_servers_destroy) | **POST** /admin/clusters/{cluster_id}/servers/destroy | -*AdminClustersServersApi* | [**admin_clusters_servers_list**](docs/AdminClustersServersApi.md#admin_clusters_servers_list) | **GET** /admin/clusters/{cluster_id}/servers | -*AdminClustersServersApi* | [**admin_clusters_servers_taint**](docs/AdminClustersServersApi.md#admin_clusters_servers_taint) | **POST** /admin/clusters/{cluster_id}/servers/taint | -*AuthIdentityAccessTokenApi* | [**auth_identity_access_token_complete_access_token_verification**](docs/AuthIdentityAccessTokenApi.md#auth_identity_access_token_complete_access_token_verification) | **POST** /auth/identity/access-token/complete-verification | +*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 | +*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 | @@ -118,7 +119,6 @@ Class | Method | HTTP request | Description *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_search**](docs/GroupApi.md#group_search) | **GET** /group/groups/search | *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 | @@ -129,44 +129,23 @@ Class | Method | HTTP request | Description *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_follow**](docs/IdentityApi.md#identity_follow) | **POST** /identity/identities/{identity_id}/follow | *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_ignore_recent_follower**](docs/IdentityApi.md#identity_ignore_recent_follower) | **POST** /identity/identities/self/recent-followers/{identity_id}/ignore | -*IdentityApi* | [**identity_list_followers**](docs/IdentityApi.md#identity_list_followers) | **GET** /identity/identities/{identity_id}/followers | -*IdentityApi* | [**identity_list_following**](docs/IdentityApi.md#identity_list_following) | **GET** /identity/identities/{identity_id}/following | -*IdentityApi* | [**identity_list_friends**](docs/IdentityApi.md#identity_list_friends) | **GET** /identity/identities/self/friends | -*IdentityApi* | [**identity_list_mutual_friends**](docs/IdentityApi.md#identity_list_mutual_friends) | **GET** /identity/identities/{identity_id}/mutual-friends | -*IdentityApi* | [**identity_list_recent_followers**](docs/IdentityApi.md#identity_list_recent_followers) | **GET** /identity/identities/self/recent-followers | *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_report**](docs/IdentityApi.md#identity_report) | **POST** /identity/identities/{identity_id}/report | -*IdentityApi* | [**identity_search**](docs/IdentityApi.md#identity_search) | **GET** /identity/identities/search | *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_unfollow**](docs/IdentityApi.md#identity_unfollow) | **DELETE** /identity/identities/{identity_id}/follow | *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 | -*IdentityLinksApi* | [**identity_links_cancel**](docs/IdentityLinksApi.md#identity_links_cancel) | **POST** /identity/game-links/cancel | -*IdentityLinksApi* | [**identity_links_complete**](docs/IdentityLinksApi.md#identity_links_complete) | **POST** /identity/game-links/complete | -*IdentityLinksApi* | [**identity_links_get**](docs/IdentityLinksApi.md#identity_links_get) | **GET** /identity/game-links | -*IdentityLinksApi* | [**identity_links_prepare**](docs/IdentityLinksApi.md#identity_links_prepare) | **POST** /identity/game-links | *JobRunApi* | [**job_run_cleanup**](docs/JobRunApi.md#job_run_cleanup) | **POST** /job/runs/cleanup | -*KvApi* | [**kv_delete**](docs/KvApi.md#kv_delete) | **DELETE** /kv/entries | -*KvApi* | [**kv_delete_batch**](docs/KvApi.md#kv_delete_batch) | **DELETE** /kv/entries/batch | -*KvApi* | [**kv_get**](docs/KvApi.md#kv_get) | **GET** /kv/entries | -*KvApi* | [**kv_get_batch**](docs/KvApi.md#kv_get_batch) | **GET** /kv/entries/batch | -*KvApi* | [**kv_list**](docs/KvApi.md#kv_list) | **GET** /kv/entries/list | -*KvApi* | [**kv_put**](docs/KvApi.md#kv_put) | **PUT** /kv/entries | -*KvApi* | [**kv_put_batch**](docs/KvApi.md#kv_put_batch) | **PUT** /kv/entries/batch | *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 | @@ -197,27 +176,38 @@ Class | Method | HTTP request | Description ## Documentation For Models - - [AdminClustersBuildDeliveryMethod](docs/AdminClustersBuildDeliveryMethod.md) - - [AdminClustersCluster](docs/AdminClustersCluster.md) - - [AdminClustersCreateClusterRequest](docs/AdminClustersCreateClusterRequest.md) - - [AdminClustersCreateClusterResponse](docs/AdminClustersCreateClusterResponse.md) - - [AdminClustersCreateDatacenterRequest](docs/AdminClustersCreateDatacenterRequest.md) - - [AdminClustersCreateDatacenterResponse](docs/AdminClustersCreateDatacenterResponse.md) - - [AdminClustersDatacenter](docs/AdminClustersDatacenter.md) - - [AdminClustersHardware](docs/AdminClustersHardware.md) - - [AdminClustersListClustersResponse](docs/AdminClustersListClustersResponse.md) - - [AdminClustersListDatacentersResponse](docs/AdminClustersListDatacentersResponse.md) - - [AdminClustersListServersResponse](docs/AdminClustersListServersResponse.md) - - [AdminClustersPool](docs/AdminClustersPool.md) - - [AdminClustersPoolType](docs/AdminClustersPoolType.md) - - [AdminClustersPoolUpdate](docs/AdminClustersPoolUpdate.md) - - [AdminClustersProvider](docs/AdminClustersProvider.md) - - [AdminClustersServer](docs/AdminClustersServer.md) - - [AdminClustersUpdateDatacenterRequest](docs/AdminClustersUpdateDatacenterRequest.md) - - [AdminLoginRequest](docs/AdminLoginRequest.md) - - [AdminLoginResponse](docs/AdminLoginResponse.md) + - [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) + - [ActorGameGuardRouting](docs/ActorGameGuardRouting.md) + - [ActorGetActorLogsResponse](docs/ActorGetActorLogsResponse.md) + - [ActorGetActorResponse](docs/ActorGetActorResponse.md) + - [ActorGetBuildResponse](docs/ActorGetBuildResponse.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) - [AuthCompleteStatus](docs/AuthCompleteStatus.md) - - [AuthIdentityCompleteAccessTokenVerificationRequest](docs/AuthIdentityCompleteAccessTokenVerificationRequest.md) - [AuthIdentityCompleteEmailVerificationRequest](docs/AuthIdentityCompleteEmailVerificationRequest.md) - [AuthIdentityCompleteEmailVerificationResponse](docs/AuthIdentityCompleteEmailVerificationResponse.md) - [AuthIdentityStartEmailVerificationRequest](docs/AuthIdentityStartEmailVerificationRequest.md) @@ -460,46 +450,30 @@ Class | Method | HTTP request | Description - [GroupProfile](docs/GroupProfile.md) - [GroupPublicity](docs/GroupPublicity.md) - [GroupResolveJoinRequestRequest](docs/GroupResolveJoinRequestRequest.md) - - [GroupSearchResponse](docs/GroupSearchResponse.md) - [GroupSummary](docs/GroupSummary.md) - [GroupTransferOwnershipRequest](docs/GroupTransferOwnershipRequest.md) - [GroupUpdateProfileRequest](docs/GroupUpdateProfileRequest.md) - [GroupValidateProfileRequest](docs/GroupValidateProfileRequest.md) - [GroupValidateProfileResponse](docs/GroupValidateProfileResponse.md) - - [IdentityAccessTokenLinkedAccount](docs/IdentityAccessTokenLinkedAccount.md) - - [IdentityCancelGameLinkRequest](docs/IdentityCancelGameLinkRequest.md) - - [IdentityCompleteGameLinkRequest](docs/IdentityCompleteGameLinkRequest.md) - [IdentityDevState](docs/IdentityDevState.md) - [IdentityEmailLinkedAccount](docs/IdentityEmailLinkedAccount.md) - [IdentityExternalLinks](docs/IdentityExternalLinks.md) - [IdentityGameActivity](docs/IdentityGameActivity.md) - [IdentityGameLinkStatus](docs/IdentityGameLinkStatus.md) - - [IdentityGetGameLinkNewIdentity](docs/IdentityGetGameLinkNewIdentity.md) - - [IdentityGetGameLinkResponse](docs/IdentityGetGameLinkResponse.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) - - [IdentityGlobalEventMatchmakerLobbyJoin](docs/IdentityGlobalEventMatchmakerLobbyJoin.md) - [IdentityGlobalEventNotification](docs/IdentityGlobalEventNotification.md) - [IdentityGroup](docs/IdentityGroup.md) - [IdentityHandle](docs/IdentityHandle.md) - [IdentityLinkedAccount](docs/IdentityLinkedAccount.md) - [IdentityListActivitiesResponse](docs/IdentityListActivitiesResponse.md) - - [IdentityListFollowersResponse](docs/IdentityListFollowersResponse.md) - - [IdentityListFollowingResponse](docs/IdentityListFollowingResponse.md) - - [IdentityListFriendsResponse](docs/IdentityListFriendsResponse.md) - - [IdentityListMutualFriendsResponse](docs/IdentityListMutualFriendsResponse.md) - - [IdentityListRecentFollowersResponse](docs/IdentityListRecentFollowersResponse.md) - [IdentityPrepareAvatarUploadRequest](docs/IdentityPrepareAvatarUploadRequest.md) - [IdentityPrepareAvatarUploadResponse](docs/IdentityPrepareAvatarUploadResponse.md) - - [IdentityPrepareGameLinkResponse](docs/IdentityPrepareGameLinkResponse.md) - - [IdentityPresence](docs/IdentityPresence.md) - [IdentityProfile](docs/IdentityProfile.md) - - [IdentityReportRequest](docs/IdentityReportRequest.md) - - [IdentitySearchResponse](docs/IdentitySearchResponse.md) - [IdentitySetGameActivityRequest](docs/IdentitySetGameActivityRequest.md) - [IdentitySetupRequest](docs/IdentitySetupRequest.md) - [IdentitySetupResponse](docs/IdentitySetupResponse.md) @@ -511,13 +485,6 @@ Class | Method | HTTP request | Description - [IdentityUpdateStatusRequest](docs/IdentityUpdateStatusRequest.md) - [IdentityValidateProfileResponse](docs/IdentityValidateProfileResponse.md) - [IdentityWatchEventsResponse](docs/IdentityWatchEventsResponse.md) - - [KvEntry](docs/KvEntry.md) - - [KvGetBatchResponse](docs/KvGetBatchResponse.md) - - [KvGetResponse](docs/KvGetResponse.md) - - [KvListResponse](docs/KvListResponse.md) - - [KvPutBatchRequest](docs/KvPutBatchRequest.md) - - [KvPutEntry](docs/KvPutEntry.md) - - [KvPutRequest](docs/KvPutRequest.md) - [MatchmakerCreateLobbyResponse](docs/MatchmakerCreateLobbyResponse.md) - [MatchmakerCustomLobbyPublicity](docs/MatchmakerCustomLobbyPublicity.md) - [MatchmakerFindLobbyResponse](docs/MatchmakerFindLobbyResponse.md) diff --git a/sdks/rust/docs/ActorActor.md b/sdks/rust/docs/ActorActor.md new file mode 100644 index 00000000..5274613e --- /dev/null +++ b/sdks/rust/docs/ActorActor.md @@ -0,0 +1,20 @@ +# ActorActor + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**created_at** | **i64** | | +**destroyed_at** | Option<**i64**> | | [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<**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/rust/docs/ActorApi.md b/sdks/rust/docs/ActorApi.md new file mode 100644 index 00000000..af471a70 --- /dev/null +++ b/sdks/rust/docs/ActorApi.md @@ -0,0 +1,141 @@ +# \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_create + +> crate::models::ActorCreateActorResponse actor_create(actor_create_actor_request) + + +Create a new dynamic actor. + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**actor_create_actor_request** | [**ActorCreateActorRequest**](ActorCreateActorRequest.md) | | [required] | + +### 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) + diff --git a/sdks/rust/docs/IdentityAccessTokenLinkedAccount.md b/sdks/rust/docs/ActorBuild.md similarity index 54% rename from sdks/rust/docs/IdentityAccessTokenLinkedAccount.md rename to sdks/rust/docs/ActorBuild.md index 364d1fe2..2b953553 100644 --- a/sdks/rust/docs/IdentityAccessTokenLinkedAccount.md +++ b/sdks/rust/docs/ActorBuild.md @@ -1,10 +1,14 @@ -# IdentityAccessTokenLinkedAccount +# 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/rust/docs/AdminClustersPoolType.md b/sdks/rust/docs/ActorBuildCompression.md similarity index 92% rename from sdks/rust/docs/AdminClustersPoolType.md rename to sdks/rust/docs/ActorBuildCompression.md index 8e5de0ca..2903bf51 100644 --- a/sdks/rust/docs/AdminClustersPoolType.md +++ b/sdks/rust/docs/ActorBuildCompression.md @@ -1,4 +1,4 @@ -# AdminClustersPoolType +# ActorBuildCompression ## Properties diff --git a/sdks/rust/docs/AdminClustersProvider.md b/sdks/rust/docs/ActorBuildKind.md similarity index 92% rename from sdks/rust/docs/AdminClustersProvider.md rename to sdks/rust/docs/ActorBuildKind.md index 736c0889..da74c362 100644 --- a/sdks/rust/docs/AdminClustersProvider.md +++ b/sdks/rust/docs/ActorBuildKind.md @@ -1,4 +1,4 @@ -# AdminClustersProvider +# ActorBuildKind ## Properties diff --git a/sdks/rust/docs/ActorBuildsApi.md b/sdks/rust/docs/ActorBuildsApi.md new file mode 100644 index 00000000..950559b5 --- /dev/null +++ b/sdks/rust/docs/ActorBuildsApi.md @@ -0,0 +1,173 @@ +# \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, 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 +------------- | ------------- | ------------- | ------------- | ------------- +**build** | **uuid::Uuid** | | [required] | +**project** | Option<**String**> | | | +**environment** | Option<**String**> | | | +**tags_json** | 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/rust/docs/IdentityGlobalEventMatchmakerLobbyJoin.md b/sdks/rust/docs/ActorCreateActorNetworkRequest.md similarity index 56% rename from sdks/rust/docs/IdentityGlobalEventMatchmakerLobbyJoin.md rename to sdks/rust/docs/ActorCreateActorNetworkRequest.md index 3f6fa0a7..878a0893 100644 --- a/sdks/rust/docs/IdentityGlobalEventMatchmakerLobbyJoin.md +++ b/sdks/rust/docs/ActorCreateActorNetworkRequest.md @@ -1,12 +1,11 @@ -# IdentityGlobalEventMatchmakerLobbyJoin +# ActorCreateActorNetworkRequest ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**lobby** | [**crate::models::MatchmakerJoinLobby**](MatchmakerJoinLobby.md) | | -**player** | [**crate::models::MatchmakerJoinPlayer**](MatchmakerJoinPlayer.md) | | -**ports** | [**::std::collections::HashMap**](MatchmakerJoinPort.md) | | +**mode** | Option<[**crate::models::ActorNetworkMode**](ActorNetworkMode.md)> | | [optional] +**ports** | [**::std::collections::HashMap**](ActorCreateActorPortRequest.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/rust/docs/ActorCreateActorPortRequest.md b/sdks/rust/docs/ActorCreateActorPortRequest.md new file mode 100644 index 00000000..5a057698 --- /dev/null +++ b/sdks/rust/docs/ActorCreateActorPortRequest.md @@ -0,0 +1,13 @@ +# 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/rust/docs/ActorCreateActorRequest.md b/sdks/rust/docs/ActorCreateActorRequest.md new file mode 100644 index 00000000..e2f5016b --- /dev/null +++ b/sdks/rust/docs/ActorCreateActorRequest.md @@ -0,0 +1,16 @@ +# ActorCreateActorRequest + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**lifecycle** | Option<[**crate::models::ActorLifecycle**](ActorLifecycle.md)> | | [optional] +**network** | [**crate::models::ActorCreateActorNetworkRequest**](ActorCreateActorNetworkRequest.md) | | +**region** | **String** | | +**resources** | [**crate::models::ActorResources**](ActorResources.md) | | +**runtime** | [**crate::models::ActorCreateActorRuntimeRequest**](ActorCreateActorRuntimeRequest.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/rust/docs/AdminClustersCreateClusterResponse.md b/sdks/rust/docs/ActorCreateActorResponse.md similarity index 75% rename from sdks/rust/docs/AdminClustersCreateClusterResponse.md rename to sdks/rust/docs/ActorCreateActorResponse.md index 96ef5fa1..03556ae3 100644 --- a/sdks/rust/docs/AdminClustersCreateClusterResponse.md +++ b/sdks/rust/docs/ActorCreateActorResponse.md @@ -1,10 +1,10 @@ -# AdminClustersCreateClusterResponse +# ActorCreateActorResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**cluster_id** | [**uuid::Uuid**](uuid::Uuid.md) | | +**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/rust/docs/AdminClustersCluster.md b/sdks/rust/docs/ActorCreateActorRuntimeRequest.md similarity index 54% rename from sdks/rust/docs/AdminClustersCluster.md rename to sdks/rust/docs/ActorCreateActorRuntimeRequest.md index 03e3a2c8..2f48f0ad 100644 --- a/sdks/rust/docs/AdminClustersCluster.md +++ b/sdks/rust/docs/ActorCreateActorRuntimeRequest.md @@ -1,13 +1,12 @@ -# AdminClustersCluster +# ActorCreateActorRuntimeRequest ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**cluster_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**create_ts** | **i64** | | -**name_id** | **String** | | -**owner_team_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] +**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/rust/docs/ActorGameGuardRouting.md b/sdks/rust/docs/ActorGameGuardRouting.md new file mode 100644 index 00000000..4e97cd2e --- /dev/null +++ b/sdks/rust/docs/ActorGameGuardRouting.md @@ -0,0 +1,11 @@ +# ActorGameGuardRouting + +## 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/rust/docs/KvGetBatchResponse.md b/sdks/rust/docs/ActorGetActorLogsResponse.md similarity index 71% rename from sdks/rust/docs/KvGetBatchResponse.md rename to sdks/rust/docs/ActorGetActorLogsResponse.md index 33ecbfdd..661ab3c4 100644 --- a/sdks/rust/docs/KvGetBatchResponse.md +++ b/sdks/rust/docs/ActorGetActorLogsResponse.md @@ -1,10 +1,11 @@ -# KvGetBatchResponse +# ActorGetActorLogsResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**entries** | [**Vec**](KvEntry.md) | | +**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/rust/docs/ActorGetActorResponse.md b/sdks/rust/docs/ActorGetActorResponse.md new file mode 100644 index 00000000..f13b8fd6 --- /dev/null +++ b/sdks/rust/docs/ActorGetActorResponse.md @@ -0,0 +1,11 @@ +# 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/rust/docs/ActorGetBuildResponse.md b/sdks/rust/docs/ActorGetBuildResponse.md new file mode 100644 index 00000000..8c5a50a1 --- /dev/null +++ b/sdks/rust/docs/ActorGetBuildResponse.md @@ -0,0 +1,11 @@ +# 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/rust/docs/ActorLifecycle.md b/sdks/rust/docs/ActorLifecycle.md new file mode 100644 index 00000000..aad23365 --- /dev/null +++ b/sdks/rust/docs/ActorLifecycle.md @@ -0,0 +1,11 @@ +# ActorLifecycle + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**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/rust/docs/KvListResponse.md b/sdks/rust/docs/ActorListActorsResponse.md similarity index 64% rename from sdks/rust/docs/KvListResponse.md rename to sdks/rust/docs/ActorListActorsResponse.md index 2315cef8..fd4b2983 100644 --- a/sdks/rust/docs/KvListResponse.md +++ b/sdks/rust/docs/ActorListActorsResponse.md @@ -1,10 +1,10 @@ -# KvListResponse +# ActorListActorsResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**entries** | [**Vec**](KvEntry.md) | | +**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/rust/docs/AdminClustersCreateClusterRequest.md b/sdks/rust/docs/ActorListBuildsResponse.md similarity index 63% rename from sdks/rust/docs/AdminClustersCreateClusterRequest.md rename to sdks/rust/docs/ActorListBuildsResponse.md index 41829e0a..3ce3baa5 100644 --- a/sdks/rust/docs/AdminClustersCreateClusterRequest.md +++ b/sdks/rust/docs/ActorListBuildsResponse.md @@ -1,11 +1,10 @@ -# AdminClustersCreateClusterRequest +# ActorListBuildsResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**name_id** | **String** | | -**owner_team_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] +**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/rust/docs/AdminClustersCreateDatacenterResponse.md b/sdks/rust/docs/ActorListRegionsResponse.md similarity index 73% rename from sdks/rust/docs/AdminClustersCreateDatacenterResponse.md rename to sdks/rust/docs/ActorListRegionsResponse.md index 19bba07c..93089dda 100644 --- a/sdks/rust/docs/AdminClustersCreateDatacenterResponse.md +++ b/sdks/rust/docs/ActorListRegionsResponse.md @@ -1,10 +1,10 @@ -# AdminClustersCreateDatacenterResponse +# ActorListRegionsResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**datacenter_id** | [**uuid::Uuid**](uuid::Uuid.md) | | +**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/rust/docs/AdminClustersBuildDeliveryMethod.md b/sdks/rust/docs/ActorLogStream.md similarity index 88% rename from sdks/rust/docs/AdminClustersBuildDeliveryMethod.md rename to sdks/rust/docs/ActorLogStream.md index bc344273..db06a741 100644 --- a/sdks/rust/docs/AdminClustersBuildDeliveryMethod.md +++ b/sdks/rust/docs/ActorLogStream.md @@ -1,4 +1,4 @@ -# AdminClustersBuildDeliveryMethod +# ActorLogStream ## Properties diff --git a/sdks/rust/docs/ActorLogsApi.md b/sdks/rust/docs/ActorLogsApi.md new file mode 100644 index 00000000..6e73bc65 --- /dev/null +++ b/sdks/rust/docs/ActorLogsApi.md @@ -0,0 +1,43 @@ +# \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/rust/docs/ActorNetwork.md b/sdks/rust/docs/ActorNetwork.md new file mode 100644 index 00000000..3b95d123 --- /dev/null +++ b/sdks/rust/docs/ActorNetwork.md @@ -0,0 +1,12 @@ +# ActorNetwork + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**mode** | Option<[**crate::models::ActorNetworkMode**](ActorNetworkMode.md)> | | [optional] +**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/rust/docs/ActorNetworkMode.md b/sdks/rust/docs/ActorNetworkMode.md new file mode 100644 index 00000000..844c412c --- /dev/null +++ b/sdks/rust/docs/ActorNetworkMode.md @@ -0,0 +1,10 @@ +# 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/rust/docs/ActorPatchBuildTagsRequest.md b/sdks/rust/docs/ActorPatchBuildTagsRequest.md new file mode 100644 index 00000000..bce9677c --- /dev/null +++ b/sdks/rust/docs/ActorPatchBuildTagsRequest.md @@ -0,0 +1,12 @@ +# 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/rust/docs/ActorPort.md b/sdks/rust/docs/ActorPort.md new file mode 100644 index 00000000..f157a2e8 --- /dev/null +++ b/sdks/rust/docs/ActorPort.md @@ -0,0 +1,15 @@ +# 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/rust/docs/ActorPortAuthorization.md b/sdks/rust/docs/ActorPortAuthorization.md new file mode 100644 index 00000000..4ba4fa9e --- /dev/null +++ b/sdks/rust/docs/ActorPortAuthorization.md @@ -0,0 +1,12 @@ +# 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/rust/docs/ActorPortProtocol.md b/sdks/rust/docs/ActorPortProtocol.md new file mode 100644 index 00000000..7e96d39c --- /dev/null +++ b/sdks/rust/docs/ActorPortProtocol.md @@ -0,0 +1,10 @@ +# 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/rust/docs/AdminClustersHardware.md b/sdks/rust/docs/ActorPortQueryAuthorization.md similarity index 76% rename from sdks/rust/docs/AdminClustersHardware.md rename to sdks/rust/docs/ActorPortQueryAuthorization.md index 5c09e0ce..a0d2f11c 100644 --- a/sdks/rust/docs/AdminClustersHardware.md +++ b/sdks/rust/docs/ActorPortQueryAuthorization.md @@ -1,10 +1,11 @@ -# AdminClustersHardware +# ActorPortQueryAuthorization ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**provider_hardware** | **String** | | +**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/rust/docs/ActorPortRouting.md b/sdks/rust/docs/ActorPortRouting.md new file mode 100644 index 00000000..d5878556 --- /dev/null +++ b/sdks/rust/docs/ActorPortRouting.md @@ -0,0 +1,12 @@ +# ActorPortRouting + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**game_guard** | Option<[**crate::models::ActorGameGuardRouting**](ActorGameGuardRouting.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/rust/docs/ActorPrepareBuildRequest.md b/sdks/rust/docs/ActorPrepareBuildRequest.md new file mode 100644 index 00000000..c8b10fa1 --- /dev/null +++ b/sdks/rust/docs/ActorPrepareBuildRequest.md @@ -0,0 +1,17 @@ +# ActorPrepareBuildRequest + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**compression** | Option<[**crate::models::ActorBuildCompression**](ActorBuildCompression.md)> | | [optional] +**image_file** | [**crate::models::UploadPrepareFile**](UploadPrepareFile.md) | | +**image_tag** | **String** | A tag given to the project build. | +**kind** | Option<[**crate::models::ActorBuildKind**](ActorBuildKind.md)> | | [optional] +**multipart_upload** | Option<**bool**> | | [optional] +**name** | **String** | | +**prewarm_regions** | Option<**Vec**> | | [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/rust/docs/ActorPrepareBuildResponse.md b/sdks/rust/docs/ActorPrepareBuildResponse.md new file mode 100644 index 00000000..5943b524 --- /dev/null +++ b/sdks/rust/docs/ActorPrepareBuildResponse.md @@ -0,0 +1,13 @@ +# ActorPrepareBuildResponse + +## 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/rust/docs/AdminLoginRequest.md b/sdks/rust/docs/ActorRegion.md similarity index 88% rename from sdks/rust/docs/AdminLoginRequest.md rename to sdks/rust/docs/ActorRegion.md index 9927921f..64bd99d8 100644 --- a/sdks/rust/docs/AdminLoginRequest.md +++ b/sdks/rust/docs/ActorRegion.md @@ -1,9 +1,10 @@ -# AdminLoginRequest +# 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/rust/docs/AdminApi.md b/sdks/rust/docs/ActorRegionsApi.md similarity index 59% rename from sdks/rust/docs/AdminApi.md rename to sdks/rust/docs/ActorRegionsApi.md index dd056c3f..87ffaefc 100644 --- a/sdks/rust/docs/AdminApi.md +++ b/sdks/rust/docs/ActorRegionsApi.md @@ -1,16 +1,16 @@ -# \AdminApi +# \ActorRegionsApi All URIs are relative to *https://api.rivet.gg* Method | HTTP request | Description ------------- | ------------- | ------------- -[**admin_login**](AdminApi.md#admin_login) | **POST** /admin/login | +[**actor_regions_list**](ActorRegionsApi.md#actor_regions_list) | **GET** /regions | -## admin_login +## actor_regions_list -> crate::models::AdminLoginResponse admin_login(admin_login_request) +> crate::models::ActorListRegionsResponse actor_regions_list(project, environment) ### Parameters @@ -18,11 +18,12 @@ Method | HTTP request | Description Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- -**admin_login_request** | [**AdminLoginRequest**](AdminLoginRequest.md) | | [required] | +**project** | Option<**String**> | | | +**environment** | Option<**String**> | | | ### Return type -[**crate::models::AdminLoginResponse**](AdminLoginResponse.md) +[**crate::models::ActorListRegionsResponse**](ActorListRegionsResponse.md) ### Authorization @@ -30,7 +31,7 @@ Name | Type | Description | Required | Notes ### HTTP request headers -- **Content-Type**: application/json +- **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/rust/docs/ActorResources.md b/sdks/rust/docs/ActorResources.md new file mode 100644 index 00000000..5fe5a114 --- /dev/null +++ b/sdks/rust/docs/ActorResources.md @@ -0,0 +1,12 @@ +# 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/rust/docs/ActorRuntime.md b/sdks/rust/docs/ActorRuntime.md new file mode 100644 index 00000000..00d4503b --- /dev/null +++ b/sdks/rust/docs/ActorRuntime.md @@ -0,0 +1,13 @@ +# 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/rust/docs/AdminClustersApi.md b/sdks/rust/docs/AdminClustersApi.md deleted file mode 100644 index f27fac55..00000000 --- a/sdks/rust/docs/AdminClustersApi.md +++ /dev/null @@ -1,67 +0,0 @@ -# \AdminClustersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**admin_clusters_create**](AdminClustersApi.md#admin_clusters_create) | **POST** /admin/clusters | -[**admin_clusters_list**](AdminClustersApi.md#admin_clusters_list) | **GET** /admin/clusters | - - - -## admin_clusters_create - -> crate::models::AdminClustersCreateClusterResponse admin_clusters_create(admin_clusters_create_cluster_request) - - -Create a new cluster - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**admin_clusters_create_cluster_request** | [**AdminClustersCreateClusterRequest**](AdminClustersCreateClusterRequest.md) | | [required] | - -### Return type - -[**crate::models::AdminClustersCreateClusterResponse**](AdminClustersCreateClusterResponse.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) - - -## admin_clusters_list - -> crate::models::AdminClustersListClustersResponse admin_clusters_list() - - -Get clusters - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::AdminClustersListClustersResponse**](AdminClustersListClustersResponse.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/rust/docs/AdminClustersCreateDatacenterRequest.md b/sdks/rust/docs/AdminClustersCreateDatacenterRequest.md deleted file mode 100644 index 68a4a442..00000000 --- a/sdks/rust/docs/AdminClustersCreateDatacenterRequest.md +++ /dev/null @@ -1,16 +0,0 @@ -# AdminClustersCreateDatacenterRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build_delivery_method** | [**crate::models::AdminClustersBuildDeliveryMethod**](AdminClustersBuildDeliveryMethod.md) | | -**display_name** | **String** | | -**name_id** | **String** | | -**prebakes_enabled** | **bool** | | -**provider** | [**crate::models::AdminClustersProvider**](AdminClustersProvider.md) | | -**provider_datacenter_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/rust/docs/AdminClustersDatacenter.md b/sdks/rust/docs/AdminClustersDatacenter.md deleted file mode 100644 index bd810083..00000000 --- a/sdks/rust/docs/AdminClustersDatacenter.md +++ /dev/null @@ -1,19 +0,0 @@ -# AdminClustersDatacenter - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**build_delivery_method** | [**crate::models::AdminClustersBuildDeliveryMethod**](AdminClustersBuildDeliveryMethod.md) | | -**cluster_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**datacenter_id** | [**uuid::Uuid**](uuid::Uuid.md) | | -**display_name** | **String** | | -**name_id** | **String** | | -**pools** | [**Vec**](AdminClustersPool.md) | | -**provider** | [**crate::models::AdminClustersProvider**](AdminClustersProvider.md) | | -**provider_api_token** | Option<**String**> | | [optional] -**provider_datacenter_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/rust/docs/AdminClustersDatacentersApi.md b/sdks/rust/docs/AdminClustersDatacentersApi.md deleted file mode 100644 index 5db9f51b..00000000 --- a/sdks/rust/docs/AdminClustersDatacentersApi.md +++ /dev/null @@ -1,100 +0,0 @@ -# \AdminClustersDatacentersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**admin_clusters_datacenters_create**](AdminClustersDatacentersApi.md#admin_clusters_datacenters_create) | **POST** /admin/clusters/{cluster_id}/datacenters | -[**admin_clusters_datacenters_list**](AdminClustersDatacentersApi.md#admin_clusters_datacenters_list) | **GET** /admin/clusters/{cluster_id}/datacenters | -[**admin_clusters_datacenters_update**](AdminClustersDatacentersApi.md#admin_clusters_datacenters_update) | **PATCH** /admin/clusters/{cluster_id}/datacenters/{datacenter_id} | - - - -## admin_clusters_datacenters_create - -> crate::models::AdminClustersCreateDatacenterResponse admin_clusters_datacenters_create(cluster_id, admin_clusters_create_datacenter_request) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cluster_id** | **uuid::Uuid** | | [required] | -**admin_clusters_create_datacenter_request** | [**AdminClustersCreateDatacenterRequest**](AdminClustersCreateDatacenterRequest.md) | | [required] | - -### Return type - -[**crate::models::AdminClustersCreateDatacenterResponse**](AdminClustersCreateDatacenterResponse.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) - - -## admin_clusters_datacenters_list - -> crate::models::AdminClustersListDatacentersResponse admin_clusters_datacenters_list(cluster_id) - - -Get datacenters of a cluster - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cluster_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::AdminClustersListDatacentersResponse**](AdminClustersListDatacentersResponse.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) - - -## admin_clusters_datacenters_update - -> admin_clusters_datacenters_update(cluster_id, datacenter_id, admin_clusters_update_datacenter_request) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cluster_id** | **uuid::Uuid** | | [required] | -**datacenter_id** | **uuid::Uuid** | | [required] | -**admin_clusters_update_datacenter_request** | [**AdminClustersUpdateDatacenterRequest**](AdminClustersUpdateDatacenterRequest.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/rust/docs/AdminClustersListClustersResponse.md b/sdks/rust/docs/AdminClustersListClustersResponse.md deleted file mode 100644 index 1eee53d0..00000000 --- a/sdks/rust/docs/AdminClustersListClustersResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# AdminClustersListClustersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**clusters** | [**Vec**](AdminClustersCluster.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/rust/docs/AdminClustersListDatacentersResponse.md b/sdks/rust/docs/AdminClustersListDatacentersResponse.md deleted file mode 100644 index 75f9d63a..00000000 --- a/sdks/rust/docs/AdminClustersListDatacentersResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# AdminClustersListDatacentersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**datacenters** | [**Vec**](AdminClustersDatacenter.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/rust/docs/AdminClustersListServersResponse.md b/sdks/rust/docs/AdminClustersListServersResponse.md deleted file mode 100644 index e40cafae..00000000 --- a/sdks/rust/docs/AdminClustersListServersResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# AdminClustersListServersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**servers** | [**Vec**](AdminClustersServer.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/rust/docs/AdminClustersPool.md b/sdks/rust/docs/AdminClustersPool.md deleted file mode 100644 index 85b3e153..00000000 --- a/sdks/rust/docs/AdminClustersPool.md +++ /dev/null @@ -1,16 +0,0 @@ -# AdminClustersPool - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**desired_count** | **i32** | | -**drain_timeout** | **i64** | | -**hardware** | [**Vec**](AdminClustersHardware.md) | | -**max_count** | **i32** | | -**min_count** | **i32** | | -**pool_type** | [**crate::models::AdminClustersPoolType**](AdminClustersPoolType.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/rust/docs/AdminClustersPoolUpdate.md b/sdks/rust/docs/AdminClustersPoolUpdate.md deleted file mode 100644 index 20ac9888..00000000 --- a/sdks/rust/docs/AdminClustersPoolUpdate.md +++ /dev/null @@ -1,16 +0,0 @@ -# AdminClustersPoolUpdate - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**desired_count** | Option<**i32**> | | [optional] -**drain_timeout** | Option<**i64**> | | [optional] -**hardware** | [**Vec**](AdminClustersHardware.md) | | -**max_count** | Option<**i32**> | | [optional] -**min_count** | Option<**i32**> | | [optional] -**pool_type** | [**crate::models::AdminClustersPoolType**](AdminClustersPoolType.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/rust/docs/AdminClustersServer.md b/sdks/rust/docs/AdminClustersServer.md deleted file mode 100644 index 08f7aa7f..00000000 --- a/sdks/rust/docs/AdminClustersServer.md +++ /dev/null @@ -1,12 +0,0 @@ -# AdminClustersServer - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**public_ip** | Option<**String**> | | [optional] -**server_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/rust/docs/AdminClustersServersApi.md b/sdks/rust/docs/AdminClustersServersApi.md deleted file mode 100644 index 78a82f91..00000000 --- a/sdks/rust/docs/AdminClustersServersApi.md +++ /dev/null @@ -1,107 +0,0 @@ -# \AdminClustersServersApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**admin_clusters_servers_destroy**](AdminClustersServersApi.md#admin_clusters_servers_destroy) | **POST** /admin/clusters/{cluster_id}/servers/destroy | -[**admin_clusters_servers_list**](AdminClustersServersApi.md#admin_clusters_servers_list) | **GET** /admin/clusters/{cluster_id}/servers | -[**admin_clusters_servers_taint**](AdminClustersServersApi.md#admin_clusters_servers_taint) | **POST** /admin/clusters/{cluster_id}/servers/taint | - - - -## admin_clusters_servers_destroy - -> admin_clusters_servers_destroy(cluster_id, server_id, datacenter, pool, public_ip) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cluster_id** | **uuid::Uuid** | | [required] | -**server_id** | Option<**String**> | | | -**datacenter** | Option<**String**> | | | -**pool** | Option<[**AdminClustersPoolType**](.md)> | | | -**public_ip** | 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) - - -## admin_clusters_servers_list - -> crate::models::AdminClustersListServersResponse admin_clusters_servers_list(cluster_id, server_id, datacenter, pool, public_ip) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cluster_id** | **uuid::Uuid** | | [required] | -**server_id** | Option<**String**> | | | -**datacenter** | Option<**String**> | | | -**pool** | Option<[**AdminClustersPoolType**](.md)> | | | -**public_ip** | Option<**String**> | | | - -### Return type - -[**crate::models::AdminClustersListServersResponse**](AdminClustersListServersResponse.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) - - -## admin_clusters_servers_taint - -> admin_clusters_servers_taint(cluster_id, server_id, datacenter, pool, public_ip) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**cluster_id** | **uuid::Uuid** | | [required] | -**server_id** | Option<**String**> | | | -**datacenter** | Option<**String**> | | | -**pool** | Option<[**AdminClustersPoolType**](.md)> | | | -**public_ip** | 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) - diff --git a/sdks/rust/docs/AdminClustersUpdateDatacenterRequest.md b/sdks/rust/docs/AdminClustersUpdateDatacenterRequest.md deleted file mode 100644 index 8709d3d1..00000000 --- a/sdks/rust/docs/AdminClustersUpdateDatacenterRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# AdminClustersUpdateDatacenterRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**pools** | [**Vec**](AdminClustersPoolUpdate.md) | | -**prebakes_enabled** | 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/rust/docs/AdminLoginResponse.md b/sdks/rust/docs/AdminLoginResponse.md deleted file mode 100644 index 78b88d9a..00000000 --- a/sdks/rust/docs/AdminLoginResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# AdminLoginResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**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/rust/docs/AuthIdentityAccessTokenApi.md b/sdks/rust/docs/AuthIdentityAccessTokenApi.md deleted file mode 100644 index 1db8141f..00000000 --- a/sdks/rust/docs/AuthIdentityAccessTokenApi.md +++ /dev/null @@ -1,39 +0,0 @@ -# \AuthIdentityAccessTokenApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**auth_identity_access_token_complete_access_token_verification**](AuthIdentityAccessTokenApi.md#auth_identity_access_token_complete_access_token_verification) | **POST** /auth/identity/access-token/complete-verification | - - - -## auth_identity_access_token_complete_access_token_verification - -> auth_identity_access_token_complete_access_token_verification(auth_identity_complete_access_token_verification_request) - - -Completes the access token verification process. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**auth_identity_complete_access_token_verification_request** | [**AuthIdentityCompleteAccessTokenVerificationRequest**](AuthIdentityCompleteAccessTokenVerificationRequest.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/rust/docs/AuthIdentityCompleteAccessTokenVerificationRequest.md b/sdks/rust/docs/AuthIdentityCompleteAccessTokenVerificationRequest.md deleted file mode 100644 index 0ee0e065..00000000 --- a/sdks/rust/docs/AuthIdentityCompleteAccessTokenVerificationRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# AuthIdentityCompleteAccessTokenVerificationRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**access_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/rust/docs/CloudBootstrapDomains.md b/sdks/rust/docs/CloudBootstrapDomains.md index 160289d1..890bbeb3 100644 --- a/sdks/rust/docs/CloudBootstrapDomains.md +++ b/sdks/rust/docs/CloudBootstrapDomains.md @@ -4,9 +4,8 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**cdn** | **String** | | -**job** | **String** | | -**main** | **String** | | +**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/rust/docs/CloudBootstrapLoginMethods.md b/sdks/rust/docs/CloudBootstrapLoginMethods.md index f9fee91d..873d1b3a 100644 --- a/sdks/rust/docs/CloudBootstrapLoginMethods.md +++ b/sdks/rust/docs/CloudBootstrapLoginMethods.md @@ -4,7 +4,6 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**access_token** | **bool** | | **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/rust/docs/CloudBootstrapResponse.md b/sdks/rust/docs/CloudBootstrapResponse.md index 59b6d5d8..1e52cfd0 100644 --- a/sdks/rust/docs/CloudBootstrapResponse.md +++ b/sdks/rust/docs/CloudBootstrapResponse.md @@ -7,7 +7,8 @@ Name | Type | Description | Notes **access** | [**crate::models::CloudBootstrapAccess**](CloudBootstrapAccess.md) | | **captcha** | [**crate::models::CloudBootstrapCaptcha**](CloudBootstrapCaptcha.md) | | **cluster** | [**crate::models::CloudBootstrapCluster**](CloudBootstrapCluster.md) | | -**domains** | Option<[**crate::models::CloudBootstrapDomains**](CloudBootstrapDomains.md)> | | [optional] +**deploy_hash** | **String** | | +**domains** | [**crate::models::CloudBootstrapDomains**](CloudBootstrapDomains.md) | | **login_methods** | [**crate::models::CloudBootstrapLoginMethods**](CloudBootstrapLoginMethods.md) | | **origins** | [**crate::models::CloudBootstrapOrigins**](CloudBootstrapOrigins.md) | | diff --git a/sdks/rust/docs/GroupApi.md b/sdks/rust/docs/GroupApi.md index b7042992..a57a5593 100644 --- a/sdks/rust/docs/GroupApi.md +++ b/sdks/rust/docs/GroupApi.md @@ -16,7 +16,6 @@ Method | HTTP request | Description [**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_search**](GroupApi.md#group_search) | **GET** /group/groups/search | [**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 | @@ -395,38 +394,6 @@ Name | Type | Description | Required | Notes [[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_search - -> crate::models::GroupSearchResponse group_search(query, anchor, limit) - - -Fuzzy search for groups. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**query** | **String** | The query to match group display names against. | [required] | -**anchor** | Option<**String**> | | | -**limit** | Option<**f64**> | Unsigned 32 bit integer. | | - -### Return type - -[**crate::models::GroupSearchResponse**](GroupSearchResponse.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_transfer_ownership > group_transfer_ownership(group_id, group_transfer_ownership_request) diff --git a/sdks/rust/docs/GroupSearchResponse.md b/sdks/rust/docs/GroupSearchResponse.md deleted file mode 100644 index d7d5b596..00000000 --- a/sdks/rust/docs/GroupSearchResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# GroupSearchResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | | [optional] -**groups** | [**Vec**](GroupHandle.md) | A list of group handles. | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/sdks/rust/docs/IdentityApi.md b/sdks/rust/docs/IdentityApi.md index ae0d5578..218946d9 100644 --- a/sdks/rust/docs/IdentityApi.md +++ b/sdks/rust/docs/IdentityApi.md @@ -5,26 +5,16 @@ 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_follow**](IdentityApi.md#identity_follow) | **POST** /identity/identities/{identity_id}/follow | [**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_ignore_recent_follower**](IdentityApi.md#identity_ignore_recent_follower) | **POST** /identity/identities/self/recent-followers/{identity_id}/ignore | -[**identity_list_followers**](IdentityApi.md#identity_list_followers) | **GET** /identity/identities/{identity_id}/followers | -[**identity_list_following**](IdentityApi.md#identity_list_following) | **GET** /identity/identities/{identity_id}/following | -[**identity_list_friends**](IdentityApi.md#identity_list_friends) | **GET** /identity/identities/self/friends | -[**identity_list_mutual_friends**](IdentityApi.md#identity_list_mutual_friends) | **GET** /identity/identities/{identity_id}/mutual-friends | -[**identity_list_recent_followers**](IdentityApi.md#identity_list_recent_followers) | **GET** /identity/identities/self/recent-followers | [**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_report**](IdentityApi.md#identity_report) | **POST** /identity/identities/{identity_id}/report | -[**identity_search**](IdentityApi.md#identity_search) | **GET** /identity/identities/search | [**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_unfollow**](IdentityApi.md#identity_unfollow) | **DELETE** /identity/identities/{identity_id}/follow | [**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 | @@ -62,36 +52,6 @@ Name | Type | Description | Required | Notes [[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_follow - -> identity_follow(identity_id) - - -Follows the given identity. In order for identities to be \"friends\", the other identity has to also follow this identity. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**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) - - ## identity_get_handles > crate::models::IdentityGetHandlesResponse identity_get_handles(identity_ids) @@ -213,182 +173,6 @@ Name | Type | Description | Required | Notes [[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_ignore_recent_follower - -> identity_ignore_recent_follower(identity_id) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**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) - - -## identity_list_followers - -> crate::models::IdentityListFollowersResponse identity_list_followers(identity_id, anchor, limit) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_id** | **uuid::Uuid** | | [required] | -**anchor** | Option<**String**> | | | -**limit** | Option<**String**> | Range is between 1 and 32 (inclusive). | | - -### Return type - -[**crate::models::IdentityListFollowersResponse**](IdentityListFollowersResponse.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_list_following - -> crate::models::IdentityListFollowingResponse identity_list_following(identity_id, anchor, limit) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_id** | **uuid::Uuid** | | [required] | -**anchor** | Option<**String**> | | | -**limit** | Option<**String**> | Range is between 1 and 32 (inclusive). | | - -### Return type - -[**crate::models::IdentityListFollowingResponse**](IdentityListFollowingResponse.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_list_friends - -> crate::models::IdentityListFriendsResponse identity_list_friends(anchor, limit) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | | | -**limit** | Option<**String**> | Range is between 1 and 32 (inclusive). | | - -### Return type - -[**crate::models::IdentityListFriendsResponse**](IdentityListFriendsResponse.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_list_mutual_friends - -> crate::models::IdentityListMutualFriendsResponse identity_list_mutual_friends(identity_id, anchor, limit) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_id** | **uuid::Uuid** | | [required] | -**anchor** | Option<**String**> | | | -**limit** | Option<**String**> | Range is between 1 and 32 (inclusive). | | - -### Return type - -[**crate::models::IdentityListMutualFriendsResponse**](IdentityListMutualFriendsResponse.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_list_recent_followers - -> crate::models::IdentityListRecentFollowersResponse identity_list_recent_followers(count, watch_index) - - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**count** | Option<**i32**> | | | -**watch_index** | Option<**String**> | | | - -### Return type - -[**crate::models::IdentityListRecentFollowersResponse**](IdentityListRecentFollowersResponse.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() @@ -471,69 +255,6 @@ This endpoint does not need any parameter. [[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_report - -> identity_report(identity_id, identity_report_request) - - -Creates an abuse report for an identity. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_id** | **uuid::Uuid** | | [required] | -**identity_report_request** | [**IdentityReportRequest**](IdentityReportRequest.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_search - -> crate::models::IdentitySearchResponse identity_search(query, anchor, limit) - - -Fuzzy search for identities. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**query** | **String** | The query to match identity display names and account numbers against. | [required] | -**anchor** | Option<**String**> | How many identities to offset the search by. | | -**limit** | Option<**i32**> | Amount of identities to return. Must be between 1 and 32 inclusive. | | - -### Return type - -[**crate::models::IdentitySearchResponse**](IdentitySearchResponse.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_set_game_activity > identity_set_game_activity(identity_set_game_activity_request) @@ -624,36 +345,6 @@ Name | Type | Description | Required | Notes [[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_unfollow - -> identity_unfollow(identity_id) - - -Unfollows the given identity. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**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) - - ## identity_unmark_deletion > identity_unmark_deletion() diff --git a/sdks/rust/docs/IdentityCancelGameLinkRequest.md b/sdks/rust/docs/IdentityCancelGameLinkRequest.md deleted file mode 100644 index fdc38ee3..00000000 --- a/sdks/rust/docs/IdentityCancelGameLinkRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityCancelGameLinkRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity_link_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/rust/docs/IdentityCompleteGameLinkRequest.md b/sdks/rust/docs/IdentityCompleteGameLinkRequest.md deleted file mode 100644 index 84a2a864..00000000 --- a/sdks/rust/docs/IdentityCompleteGameLinkRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityCompleteGameLinkRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity_link_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/rust/docs/IdentityGetGameLinkNewIdentity.md b/sdks/rust/docs/IdentityGetGameLinkNewIdentity.md deleted file mode 100644 index ca35a661..00000000 --- a/sdks/rust/docs/IdentityGetGameLinkNewIdentity.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityGetGameLinkNewIdentity - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**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/rust/docs/IdentityGetGameLinkResponse.md b/sdks/rust/docs/IdentityGetGameLinkResponse.md deleted file mode 100644 index 0c4da269..00000000 --- a/sdks/rust/docs/IdentityGetGameLinkResponse.md +++ /dev/null @@ -1,15 +0,0 @@ -# IdentityGetGameLinkResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**current_identity** | [**crate::models::IdentityHandle**](IdentityHandle.md) | | -**game** | [**crate::models::GameHandle**](GameHandle.md) | | -**new_identity** | Option<[**crate::models::IdentityGetGameLinkNewIdentity**](IdentityGetGameLinkNewIdentity.md)> | | [optional] -**status** | [**crate::models::IdentityGameLinkStatus**](IdentityGameLinkStatus.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/rust/docs/IdentityGlobalEventKind.md b/sdks/rust/docs/IdentityGlobalEventKind.md index 86d39444..0acac0e5 100644 --- a/sdks/rust/docs/IdentityGlobalEventKind.md +++ b/sdks/rust/docs/IdentityGlobalEventKind.md @@ -5,7 +5,6 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **identity_update** | Option<[**crate::models::IdentityGlobalEventIdentityUpdate**](IdentityGlobalEventIdentityUpdate.md)> | | [optional] -**matchmaker_lobby_join** | Option<[**crate::models::IdentityGlobalEventMatchmakerLobbyJoin**](IdentityGlobalEventMatchmakerLobbyJoin.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/rust/docs/IdentityHandle.md b/sdks/rust/docs/IdentityHandle.md index 62976440..dbddadf8 100644 --- a/sdks/rust/docs/IdentityHandle.md +++ b/sdks/rust/docs/IdentityHandle.md @@ -10,7 +10,6 @@ Name | Type | Description | Notes **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. | -**presence** | Option<[**crate::models::IdentityPresence**](IdentityPresence.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/rust/docs/IdentityLinkedAccount.md b/sdks/rust/docs/IdentityLinkedAccount.md index 3cb3fec9..1c62f5b2 100644 --- a/sdks/rust/docs/IdentityLinkedAccount.md +++ b/sdks/rust/docs/IdentityLinkedAccount.md @@ -4,7 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**access_token** | Option<[**crate::models::IdentityAccessTokenLinkedAccount**](IdentityAccessTokenLinkedAccount.md)> | | [optional] +**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/rust/docs/IdentityLinksApi.md b/sdks/rust/docs/IdentityLinksApi.md deleted file mode 100644 index c1988a16..00000000 --- a/sdks/rust/docs/IdentityLinksApi.md +++ /dev/null @@ -1,130 +0,0 @@ -# \IdentityLinksApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**identity_links_cancel**](IdentityLinksApi.md#identity_links_cancel) | **POST** /identity/game-links/cancel | -[**identity_links_complete**](IdentityLinksApi.md#identity_links_complete) | **POST** /identity/game-links/complete | -[**identity_links_get**](IdentityLinksApi.md#identity_links_get) | **GET** /identity/game-links | -[**identity_links_prepare**](IdentityLinksApi.md#identity_links_prepare) | **POST** /identity/game-links | - - - -## identity_links_cancel - -> identity_links_cancel(identity_cancel_game_link_request) - - -Cancels a game link. It can no longer be used to link after cancellation. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_cancel_game_link_request** | [**IdentityCancelGameLinkRequest**](IdentityCancelGameLinkRequest.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_links_complete - -> identity_links_complete(identity_complete_game_link_request) - - -Completes a game link process and returns whether or not the link is valid. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_complete_game_link_request** | [**IdentityCompleteGameLinkRequest**](IdentityCompleteGameLinkRequest.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_links_get - -> crate::models::IdentityGetGameLinkResponse identity_links_get(identity_link_token, watch_index) - - -Returns the current status of a linking process. Once `status` is `complete`, the identity's profile should be fetched again since they may have switched accounts. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**identity_link_token** | **String** | | [required] | -**watch_index** | Option<**String**> | | | - -### Return type - -[**crate::models::IdentityGetGameLinkResponse**](IdentityGetGameLinkResponse.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_links_prepare - -> crate::models::IdentityPrepareGameLinkResponse identity_links_prepare() - - -Begins the process for linking an identity with the Rivet Hub. # Importance of Linking Identities When an identity is created via `rivet.api.identity#SetupIdentity`, the identity is temporary and is not shared with other games the user plays. In order to make the identity permanent and synchronize the identity with other games, the identity must be linked with the hub. # Linking Process The linking process works by opening `identity_link_url` in a browser then polling `rivet.api.identity#GetGameLink` to wait for it to complete. This is designed to be as flexible as possible so `identity_link_url` can be opened on any device. For example, when playing a console game, the user can scan a QR code for `identity_link_url` to authenticate on their phone. - -### Parameters - -This endpoint does not need any parameter. - -### Return type - -[**crate::models::IdentityPrepareGameLinkResponse**](IdentityPrepareGameLinkResponse.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/rust/docs/IdentityListFollowersResponse.md b/sdks/rust/docs/IdentityListFollowersResponse.md deleted file mode 100644 index 6a90f8b2..00000000 --- a/sdks/rust/docs/IdentityListFollowersResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityListFollowersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | | [optional] -**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/rust/docs/IdentityListFollowingResponse.md b/sdks/rust/docs/IdentityListFollowingResponse.md deleted file mode 100644 index b703055b..00000000 --- a/sdks/rust/docs/IdentityListFollowingResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityListFollowingResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | | [optional] -**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/rust/docs/IdentityListFriendsResponse.md b/sdks/rust/docs/IdentityListFriendsResponse.md deleted file mode 100644 index 7b35a284..00000000 --- a/sdks/rust/docs/IdentityListFriendsResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityListFriendsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | | [optional] -**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/rust/docs/IdentityListMutualFriendsResponse.md b/sdks/rust/docs/IdentityListMutualFriendsResponse.md deleted file mode 100644 index be14e665..00000000 --- a/sdks/rust/docs/IdentityListMutualFriendsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentityListMutualFriendsResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | | [optional] -**identities** | [**Vec**](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/rust/docs/IdentityListRecentFollowersResponse.md b/sdks/rust/docs/IdentityListRecentFollowersResponse.md deleted file mode 100644 index 1c3a2793..00000000 --- a/sdks/rust/docs/IdentityListRecentFollowersResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityListRecentFollowersResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | | [optional] -**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/rust/docs/IdentityPrepareGameLinkResponse.md b/sdks/rust/docs/IdentityPrepareGameLinkResponse.md deleted file mode 100644 index dc6cd813..00000000 --- a/sdks/rust/docs/IdentityPrepareGameLinkResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityPrepareGameLinkResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**expire_ts** | **String** | RFC3339 timestamp | -**identity_link_token** | **String** | Pass this to `GetGameLink` to get the linking status. Valid for 15 minutes. | -**identity_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/rust/docs/IdentityPresence.md b/sdks/rust/docs/IdentityPresence.md deleted file mode 100644 index 66a71fd8..00000000 --- a/sdks/rust/docs/IdentityPresence.md +++ /dev/null @@ -1,13 +0,0 @@ -# IdentityPresence - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**game_activity** | Option<[**crate::models::IdentityGameActivity**](IdentityGameActivity.md)> | | [optional] -**status** | [**crate::models::IdentityStatus**](IdentityStatus.md) | | -**update_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/rust/docs/IdentityProfile.md b/sdks/rust/docs/IdentityProfile.md index 9c79c1ee..615f0859 100644 --- a/sdks/rust/docs/IdentityProfile.md +++ b/sdks/rust/docs/IdentityProfile.md @@ -24,7 +24,6 @@ Name | Type | Description | Notes **is_registered** | **bool** | Whether or not this identity is registered with a linked account. | **join_ts** | **String** | RFC3339 timestamp | **linked_accounts** | [**Vec**](IdentityLinkedAccount.md) | | -**presence** | Option<[**crate::models::IdentityPresence**](IdentityPresence.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/rust/docs/IdentityReportRequest.md b/sdks/rust/docs/IdentityReportRequest.md deleted file mode 100644 index d1b30227..00000000 --- a/sdks/rust/docs/IdentityReportRequest.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentityReportRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**reason** | 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/rust/docs/IdentitySearchResponse.md b/sdks/rust/docs/IdentitySearchResponse.md deleted file mode 100644 index 38b96983..00000000 --- a/sdks/rust/docs/IdentitySearchResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# IdentitySearchResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**anchor** | Option<**String**> | The pagination anchor. | [optional] -**identities** | [**Vec**](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/rust/docs/IdentitySummary.md b/sdks/rust/docs/IdentitySummary.md index 8b956b7a..2ccbb1ff 100644 --- a/sdks/rust/docs/IdentitySummary.md +++ b/sdks/rust/docs/IdentitySummary.md @@ -13,7 +13,6 @@ Name | Type | Description | Notes **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. | -**presence** | Option<[**crate::models::IdentityPresence**](IdentityPresence.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/rust/docs/KvApi.md b/sdks/rust/docs/KvApi.md deleted file mode 100644 index acb99b4f..00000000 --- a/sdks/rust/docs/KvApi.md +++ /dev/null @@ -1,232 +0,0 @@ -# \KvApi - -All URIs are relative to *https://api.rivet.gg* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**kv_delete**](KvApi.md#kv_delete) | **DELETE** /kv/entries | -[**kv_delete_batch**](KvApi.md#kv_delete_batch) | **DELETE** /kv/entries/batch | -[**kv_get**](KvApi.md#kv_get) | **GET** /kv/entries | -[**kv_get_batch**](KvApi.md#kv_get_batch) | **GET** /kv/entries/batch | -[**kv_list**](KvApi.md#kv_list) | **GET** /kv/entries/list | -[**kv_put**](KvApi.md#kv_put) | **PUT** /kv/entries | -[**kv_put_batch**](KvApi.md#kv_put_batch) | **PUT** /kv/entries/batch | - - - -## kv_delete - -> kv_delete(key, namespace_id) - - -Deletes a key-value entry by key. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**key** | **String** | | [required] | -**namespace_id** | Option<**uuid::Uuid**> | | | - -### 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) - - -## kv_delete_batch - -> kv_delete_batch(keys, namespace_id) - - -Deletes multiple key-value entries by key(s). - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**keys** | **String** | | [required] | -**namespace_id** | Option<**uuid::Uuid**> | | | - -### 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) - - -## kv_get - -> crate::models::KvGetResponse kv_get(key, watch_index, namespace_id) - - -Returns a specific key-value entry by key. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**key** | **String** | | [required] | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | -**namespace_id** | Option<**uuid::Uuid**> | | | - -### Return type - -[**crate::models::KvGetResponse**](KvGetResponse.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) - - -## kv_get_batch - -> crate::models::KvGetBatchResponse kv_get_batch(keys, watch_index, namespace_id) - - -Gets multiple key-value entries by key(s). - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**keys** | **String** | | [required] | -**watch_index** | Option<**String**> | A query parameter denoting the requests watch index. | | -**namespace_id** | Option<**uuid::Uuid**> | | | - -### Return type - -[**crate::models::KvGetBatchResponse**](KvGetBatchResponse.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) - - -## kv_list - -> crate::models::KvListResponse kv_list(directory, namespace_id) - - -Lists all keys in a directory. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**directory** | **String** | | [required] | -**namespace_id** | **uuid::Uuid** | | [required] | - -### Return type - -[**crate::models::KvListResponse**](KvListResponse.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) - - -## kv_put - -> kv_put(kv_put_request) - - -Puts (sets or overwrites) a key-value entry by key. - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**kv_put_request** | [**KvPutRequest**](KvPutRequest.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) - - -## kv_put_batch - -> kv_put_batch(kv_put_batch_request) - - -Puts (sets or overwrites) multiple key-value entries by key(s). - -### Parameters - - -Name | Type | Description | Required | Notes -------------- | ------------- | ------------- | ------------- | ------------- -**kv_put_batch_request** | [**KvPutBatchRequest**](KvPutBatchRequest.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/rust/docs/KvEntry.md b/sdks/rust/docs/KvEntry.md deleted file mode 100644 index 20324145..00000000 --- a/sdks/rust/docs/KvEntry.md +++ /dev/null @@ -1,13 +0,0 @@ -# KvEntry - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**deleted** | Option<**bool**> | | [optional] -**key** | **String** | A string representing a key in the key-value database. Maximum length of 512 characters. _Recommended Key Path Format_ Key path components are split by a slash (e.g. `a/b/c` has the path components `[\"a\", \"b\", \"c\"]`). Slashes can be escaped by using a backslash (e.g. `a/b/c/d` has the path components `[\"a\", \"b/c\", \"d\"]`). This format is not enforced by Rivet, but the tools built around Rivet KV work better if this format is used. | -**value** | Option<[**serde_json::Value**](.md)> | A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/sdks/rust/docs/KvGetResponse.md b/sdks/rust/docs/KvGetResponse.md deleted file mode 100644 index 323c9260..00000000 --- a/sdks/rust/docs/KvGetResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# KvGetResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**deleted** | Option<**bool**> | Whether or not the entry has been deleted. Only set when watching this endpoint. | [optional] -**value** | Option<[**serde_json::Value**](.md)> | A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. | -**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/rust/docs/KvPutBatchRequest.md b/sdks/rust/docs/KvPutBatchRequest.md deleted file mode 100644 index 07c4ee6c..00000000 --- a/sdks/rust/docs/KvPutBatchRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# KvPutBatchRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**entries** | [**Vec**](KvPutEntry.md) | | -**namespace_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/rust/docs/KvPutEntry.md b/sdks/rust/docs/KvPutEntry.md deleted file mode 100644 index 9e2d465b..00000000 --- a/sdks/rust/docs/KvPutEntry.md +++ /dev/null @@ -1,12 +0,0 @@ -# KvPutEntry - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**key** | **String** | A string representing a key in the key-value database. Maximum length of 512 characters. _Recommended Key Path Format_ Key path components are split by a slash (e.g. `a/b/c` has the path components `[\"a\", \"b\", \"c\"]`). Slashes can be escaped by using a backslash (e.g. `a/b/c/d` has the path components `[\"a\", \"b/c\", \"d\"]`). This format is not enforced by Rivet, but the tools built around Rivet KV work better if this format is used. | -**value** | Option<[**serde_json::Value**](.md)> | A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/sdks/rust/docs/KvPutRequest.md b/sdks/rust/docs/KvPutRequest.md deleted file mode 100644 index 44af60b3..00000000 --- a/sdks/rust/docs/KvPutRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# KvPutRequest - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**key** | **String** | A string representing a key in the key-value database. Maximum length of 512 characters. _Recommended Key Path Format_ Key path components are split by a slash (e.g. `a/b/c` has the path components `[\"a\", \"b\", \"c\"]`). Slashes can be escaped by using a backslash (e.g. `a/b/c/d` has the path components `[\"a\", \"b/c\", \"d\"]`). This format is not enforced by Rivet, but the tools built around Rivet KV work better if this format is used. | -**namespace_id** | Option<[**uuid::Uuid**](uuid::Uuid.md)> | | [optional] -**value** | Option<[**serde_json::Value**](.md)> | A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/sdks/rust/docs/ProvisionServersGetInfoResponse.md b/sdks/rust/docs/ProvisionServersGetInfoResponse.md index 7421f0d3..fd92faf0 100644 --- a/sdks/rust/docs/ProvisionServersGetInfoResponse.md +++ b/sdks/rust/docs/ProvisionServersGetInfoResponse.md @@ -7,6 +7,7 @@ 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** | | diff --git a/sdks/rust/docs/ServersCreateBuildRequest.md b/sdks/rust/docs/ServersCreateBuildRequest.md index aaa8cd7b..b0c55b0b 100644 --- a/sdks/rust/docs/ServersCreateBuildRequest.md +++ b/sdks/rust/docs/ServersCreateBuildRequest.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **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/rust/src/apis/identity_links_api.rs b/sdks/rust/src/apis/actor_api.rs similarity index 60% rename from sdks/rust/src/apis/identity_links_api.rs rename to sdks/rust/src/apis/actor_api.rs index 54f06431..5a1d259c 100644 --- a/sdks/rust/src/apis/identity_links_api.rs +++ b/sdks/rust/src/apis/actor_api.rs @@ -15,10 +15,10 @@ use crate::apis::ResponseContent; use super::{Error, configuration}; -/// struct for typed errors of method [`identity_links_cancel`] +/// struct for typed errors of method [`actor_create`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum IdentityLinksCancelError { +pub enum ActorCreateError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -28,10 +28,10 @@ pub enum IdentityLinksCancelError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`identity_links_complete`] +/// struct for typed errors of method [`actor_destroy`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum IdentityLinksCompleteError { +pub enum ActorDestroyError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -41,10 +41,10 @@ pub enum IdentityLinksCompleteError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`identity_links_get`] +/// struct for typed errors of method [`actor_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum IdentityLinksGetError { +pub enum ActorGetError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -54,10 +54,10 @@ pub enum IdentityLinksGetError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`identity_links_prepare`] +/// struct for typed errors of method [`actor_list`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum IdentityLinksPrepareError { +pub enum ActorListError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -68,13 +68,13 @@ pub enum IdentityLinksPrepareError { } -/// Cancels a game link. It can no longer be used to link after cancellation. -pub async fn identity_links_cancel(configuration: &configuration::Configuration, identity_cancel_game_link_request: crate::models::IdentityCancelGameLinkRequest) -> Result<(), Error> { +/// Create a new dynamic actor. +pub async fn actor_create(configuration: &configuration::Configuration, actor_create_actor_request: crate::models::ActorCreateActorRequest) -> Result> { let local_var_configuration = configuration; let local_var_client = &local_var_configuration.client; - let local_var_uri_str = format!("{}/identity/game-links/cancel", local_var_configuration.base_path); + 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_user_agent) = local_var_configuration.user_agent { @@ -83,7 +83,7 @@ pub async fn identity_links_cancel(configuration: &configuration::Configuration, 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_cancel_game_link_request); + 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?; @@ -92,30 +92,38 @@ pub async fn identity_links_cancel(configuration: &configuration::Configuration, let local_var_content = local_var_resp.text().await?; if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) + 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_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 link process and returns whether or not the link is valid. -pub async fn identity_links_complete(configuration: &configuration::Configuration, identity_complete_game_link_request: crate::models::IdentityCompleteGameLinkRequest) -> Result<(), 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!("{}/identity/game-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()); + 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()); }; - local_var_req_builder = local_var_req_builder.json(&identity_complete_game_link_request); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -124,26 +132,28 @@ pub async fn identity_links_complete(configuration: &configuration::Configuratio let local_var_content = local_var_resp.text().await?; if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) + 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_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 current status of a linking process. Once `status` is `complete`, the identity's profile should be fetched again since they may have switched accounts. -pub async fn identity_links_get(configuration: &configuration::Configuration, identity_link_token: &str, watch_index: Option<&str>) -> Result> { +/// 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!("{}/identity/game-links", local_var_configuration.base_path); + 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()); - local_var_req_builder = local_var_req_builder.query(&[("identity_link_token", &identity_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_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()); @@ -161,21 +171,36 @@ pub async fn identity_links_get(configuration: &configuration::Configuration, id 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_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)) } } -/// Begins the process for linking an identity with the Rivet Hub. # Importance of Linking Identities When an identity is created via `rivet.api.identity#SetupIdentity`, the identity is temporary and is not shared with other games the user plays. In order to make the identity permanent and synchronize the identity with other games, the identity must be linked with the hub. # Linking Process The linking process works by opening `identity_link_url` in a browser then polling `rivet.api.identity#GetGameLink` to wait for it to complete. This is designed to be as flexible as possible so `identity_link_url` can be opened on any device. For example, when playing a console game, the user can scan a QR code for `identity_link_url` to authenticate on their phone. -pub async fn identity_links_prepare(configuration: &configuration::Configuration, ) -> Result> { +/// 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!("{}/identity/game-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()); + 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()); } @@ -192,7 +217,7 @@ pub async fn identity_links_prepare(configuration: &configuration::Configuration 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_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/rust/src/apis/kv_api.rs b/sdks/rust/src/apis/actor_builds_api.rs similarity index 51% rename from sdks/rust/src/apis/kv_api.rs rename to sdks/rust/src/apis/actor_builds_api.rs index 101035e7..c137bfe1 100644 --- a/sdks/rust/src/apis/kv_api.rs +++ b/sdks/rust/src/apis/actor_builds_api.rs @@ -15,10 +15,10 @@ use crate::apis::ResponseContent; use super::{Error, configuration}; -/// struct for typed errors of method [`kv_delete`] +/// struct for typed errors of method [`actor_builds_complete`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum KvDeleteError { +pub enum ActorBuildsCompleteError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -28,10 +28,10 @@ pub enum KvDeleteError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`kv_delete_batch`] +/// struct for typed errors of method [`actor_builds_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum KvDeleteBatchError { +pub enum ActorBuildsGetError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -41,10 +41,10 @@ pub enum KvDeleteBatchError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`kv_get`] +/// struct for typed errors of method [`actor_builds_list`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum KvGetError { +pub enum ActorBuildsListError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -54,10 +54,10 @@ pub enum KvGetError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`kv_get_batch`] +/// struct for typed errors of method [`actor_builds_patch_tags`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum KvGetBatchError { +pub enum ActorBuildsPatchTagsError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -67,36 +67,10 @@ pub enum KvGetBatchError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`kv_list`] +/// struct for typed errors of method [`actor_builds_prepare`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum KvListError { - 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 [`kv_put`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum KvPutError { - 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 [`kv_put_batch`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum KvPutBatchError { +pub enum ActorBuildsPrepareError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -107,53 +81,20 @@ pub enum KvPutBatchError { } -/// Deletes a key-value entry by key. -pub async fn kv_delete(configuration: &configuration::Configuration, key: &str, namespace_id: Option<&str>) -> Result<(), Error> { +/// 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!("{}/kv/entries", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); + 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()); - local_var_req_builder = local_var_req_builder.query(&[("key", &key.to_string())]); - if let Some(ref local_var_str) = namespace_id { - local_var_req_builder = local_var_req_builder.query(&[("namespace_id", &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_str) = project { + local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.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()); - }; - - 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)) - } -} - -/// Deletes multiple key-value entries by key(s). -pub async fn kv_delete_batch(configuration: &configuration::Configuration, keys: &str, namespace_id: Option<&str>) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/kv/entries/batch", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str()); - - local_var_req_builder = local_var_req_builder.query(&[("keys", &keys.to_string())]); - if let Some(ref local_var_str) = namespace_id { - local_var_req_builder = local_var_req_builder.query(&[("namespace_id", &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()); @@ -171,27 +112,29 @@ pub async fn kv_delete_batch(configuration: &configuration::Configuration, keys: 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_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 specific key-value entry by key. -pub async fn kv_get(configuration: &configuration::Configuration, key: &str, watch_index: Option<&str>, namespace_id: Option<&str>) -> Result> { +/// 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_get(configuration: &configuration::Configuration, build: &str, 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!("{}/kv/entries", local_var_configuration.base_path); + 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()); - local_var_req_builder = local_var_req_builder.query(&[("key", &key.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_str) = project { + local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.to_string())]); } - if let Some(ref local_var_str) = namespace_id { - local_var_req_builder = local_var_req_builder.query(&[("namespace_id", &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()); @@ -209,27 +152,29 @@ pub async fn kv_get(configuration: &configuration::Configuration, key: &str, wat 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_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 multiple key-value entries by key(s). -pub async fn kv_get_batch(configuration: &configuration::Configuration, keys: &str, watch_index: Option<&str>, namespace_id: Option<&str>) -> Result> { +/// 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!("{}/kv/entries/batch", local_var_configuration.base_path); + 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()); - local_var_req_builder = local_var_req_builder.query(&[("keys", &keys.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_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) = namespace_id { - local_var_req_builder = local_var_req_builder.query(&[("namespace_id", &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()); @@ -247,29 +192,33 @@ pub async fn kv_get_batch(configuration: &configuration::Configuration, keys: &s 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_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 keys in a directory. -pub async fn kv_list(configuration: &configuration::Configuration, directory: &str, namespace_id: &str) -> Result> { +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!("{}/kv/entries/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()); + 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()); - local_var_req_builder = local_var_req_builder.query(&[("directory", &directory.to_string())]); - local_var_req_builder = local_var_req_builder.query(&[("namespace_id", &namespace_id.to_string())]); + 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?; @@ -280,60 +229,34 @@ pub async fn kv_list(configuration: &configuration::Configuration, directory: &s 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_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)) } } -/// Puts (sets or overwrites) a key-value entry by key. -pub async fn kv_put(configuration: &configuration::Configuration, kv_put_request: crate::models::KvPutRequest) -> Result<(), 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!("{}/kv/entries", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str()); + 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_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_str) = project { + local_var_req_builder = local_var_req_builder.query(&[("project", &local_var_str.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(&kv_put_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)) + if let Some(ref local_var_str) = environment { + local_var_req_builder = local_var_req_builder.query(&[("environment", &local_var_str.to_string())]); } -} - -/// Puts (sets or overwrites) multiple key-value entries by key(s). -pub async fn kv_put_batch(configuration: &configuration::Configuration, kv_put_batch_request: crate::models::KvPutBatchRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/kv/entries/batch", 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(&kv_put_batch_request); + 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?; @@ -342,9 +265,9 @@ pub async fn kv_put_batch(configuration: &configuration::Configuration, kv_put_b let local_var_content = local_var_resp.text().await?; if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) + 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_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/rust/src/apis/auth_identity_access_token_api.rs b/sdks/rust/src/apis/actor_logs_api.rs similarity index 56% rename from sdks/rust/src/apis/auth_identity_access_token_api.rs rename to sdks/rust/src/apis/actor_logs_api.rs index 94a8a43d..adfc8d44 100644 --- a/sdks/rust/src/apis/auth_identity_access_token_api.rs +++ b/sdks/rust/src/apis/actor_logs_api.rs @@ -15,10 +15,10 @@ use crate::apis::ResponseContent; use super::{Error, configuration}; -/// struct for typed errors of method [`auth_identity_access_token_complete_access_token_verification`] +/// struct for typed errors of method [`actor_logs_get`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum AuthIdentityAccessTokenCompleteAccessTokenVerificationError { +pub enum ActorLogsGetError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -29,22 +29,31 @@ pub enum AuthIdentityAccessTokenCompleteAccessTokenVerificationError { } -/// Completes the access token verification process. -pub async fn auth_identity_access_token_complete_access_token_verification(configuration: &configuration::Configuration, auth_identity_complete_access_token_verification_request: crate::models::AuthIdentityCompleteAccessTokenVerificationRequest) -> Result<(), Error> { +/// 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!("{}/auth/identity/access-token/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()); + 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()); }; - local_var_req_builder = local_var_req_builder.json(&auth_identity_complete_access_token_verification_request); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -53,9 +62,9 @@ pub async fn auth_identity_access_token_complete_access_token_verification(confi let local_var_content = local_var_resp.text().await?; if !local_var_status.is_client_error() && !local_var_status.is_server_error() { - Ok(()) + 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_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/rust/src/apis/admin_api.rs b/sdks/rust/src/apis/actor_regions_api.rs similarity index 67% rename from sdks/rust/src/apis/admin_api.rs rename to sdks/rust/src/apis/actor_regions_api.rs index a5e8e9e3..5b84b452 100644 --- a/sdks/rust/src/apis/admin_api.rs +++ b/sdks/rust/src/apis/actor_regions_api.rs @@ -15,10 +15,10 @@ use crate::apis::ResponseContent; use super::{Error, configuration}; -/// struct for typed errors of method [`admin_login`] +/// struct for typed errors of method [`actor_regions_list`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] -pub enum AdminLoginError { +pub enum ActorRegionsListError { Status400(crate::models::ErrorBody), Status403(crate::models::ErrorBody), Status404(crate::models::ErrorBody), @@ -29,21 +29,26 @@ pub enum AdminLoginError { } -pub async fn admin_login(configuration: &configuration::Configuration, admin_login_request: crate::models::AdminLoginRequest) -> Result> { +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!("{}/admin/login", local_var_configuration.base_path); - let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str()); + 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()); }; - local_var_req_builder = local_var_req_builder.json(&admin_login_request); let local_var_req = local_var_req_builder.build()?; let local_var_resp = local_var_client.execute(local_var_req).await?; @@ -54,7 +59,7 @@ pub async fn admin_login(configuration: &configuration::Configuration, admin_log 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_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/rust/src/apis/admin_clusters_api.rs b/sdks/rust/src/apis/admin_clusters_api.rs deleted file mode 100644 index d30d7729..00000000 --- a/sdks/rust/src/apis/admin_clusters_api.rs +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 [`admin_clusters_create`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersCreateError { - 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 [`admin_clusters_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersListError { - 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 cluster -pub async fn admin_clusters_create(configuration: &configuration::Configuration, admin_clusters_create_cluster_request: crate::models::AdminClustersCreateClusterRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters", 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(&admin_clusters_create_cluster_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 clusters -pub async fn admin_clusters_list(configuration: &configuration::Configuration, ) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters", 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/rust/src/apis/admin_clusters_datacenters_api.rs b/sdks/rust/src/apis/admin_clusters_datacenters_api.rs deleted file mode 100644 index 9953689c..00000000 --- a/sdks/rust/src/apis/admin_clusters_datacenters_api.rs +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 [`admin_clusters_datacenters_create`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersDatacentersCreateError { - 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 [`admin_clusters_datacenters_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersDatacentersListError { - 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 [`admin_clusters_datacenters_update`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersDatacentersUpdateError { - 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 admin_clusters_datacenters_create(configuration: &configuration::Configuration, cluster_id: &str, admin_clusters_create_datacenter_request: crate::models::AdminClustersCreateDatacenterRequest) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters/{cluster_id}/datacenters", local_var_configuration.base_path, cluster_id=crate::apis::urlencode(cluster_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(&admin_clusters_create_datacenter_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 datacenters of a cluster -pub async fn admin_clusters_datacenters_list(configuration: &configuration::Configuration, cluster_id: &str) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters/{cluster_id}/datacenters", local_var_configuration.base_path, cluster_id=crate::apis::urlencode(cluster_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 admin_clusters_datacenters_update(configuration: &configuration::Configuration, cluster_id: &str, datacenter_id: &str, admin_clusters_update_datacenter_request: crate::models::AdminClustersUpdateDatacenterRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters/{cluster_id}/datacenters/{datacenter_id}", local_var_configuration.base_path, cluster_id=crate::apis::urlencode(cluster_id), datacenter_id=crate::apis::urlencode(datacenter_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(&admin_clusters_update_datacenter_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/rust/src/apis/admin_clusters_servers_api.rs b/sdks/rust/src/apis/admin_clusters_servers_api.rs deleted file mode 100644 index d79e652a..00000000 --- a/sdks/rust/src/apis/admin_clusters_servers_api.rs +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 [`admin_clusters_servers_destroy`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersServersDestroyError { - 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 [`admin_clusters_servers_list`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersServersListError { - 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 [`admin_clusters_servers_taint`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum AdminClustersServersTaintError { - 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 admin_clusters_servers_destroy(configuration: &configuration::Configuration, cluster_id: &str, server_id: Option<&str>, datacenter: Option<&str>, pool: Option, public_ip: Option<&str>) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters/{cluster_id}/servers/destroy", local_var_configuration.base_path, cluster_id=crate::apis::urlencode(cluster_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_str) = server_id { - local_var_req_builder = local_var_req_builder.query(&[("server_id", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = datacenter { - local_var_req_builder = local_var_req_builder.query(&[("datacenter", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = pool { - local_var_req_builder = local_var_req_builder.query(&[("pool", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = public_ip { - local_var_req_builder = local_var_req_builder.query(&[("public_ip", &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)) - } -} - -pub async fn admin_clusters_servers_list(configuration: &configuration::Configuration, cluster_id: &str, server_id: Option<&str>, datacenter: Option<&str>, pool: Option, public_ip: Option<&str>) -> Result> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters/{cluster_id}/servers", local_var_configuration.base_path, cluster_id=crate::apis::urlencode(cluster_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) = server_id { - local_var_req_builder = local_var_req_builder.query(&[("server_id", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = datacenter { - local_var_req_builder = local_var_req_builder.query(&[("datacenter", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = pool { - local_var_req_builder = local_var_req_builder.query(&[("pool", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = public_ip { - local_var_req_builder = local_var_req_builder.query(&[("public_ip", &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 admin_clusters_servers_taint(configuration: &configuration::Configuration, cluster_id: &str, server_id: Option<&str>, datacenter: Option<&str>, pool: Option, public_ip: Option<&str>) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/admin/clusters/{cluster_id}/servers/taint", local_var_configuration.base_path, cluster_id=crate::apis::urlencode(cluster_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_str) = server_id { - local_var_req_builder = local_var_req_builder.query(&[("server_id", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = datacenter { - local_var_req_builder = local_var_req_builder.query(&[("datacenter", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = pool { - local_var_req_builder = local_var_req_builder.query(&[("pool", &local_var_str.to_string())]); - } - if let Some(ref local_var_str) = public_ip { - local_var_req_builder = local_var_req_builder.query(&[("public_ip", &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)) - } -} - diff --git a/sdks/rust/src/apis/group_api.rs b/sdks/rust/src/apis/group_api.rs index a6201d9e..4713c5a9 100644 --- a/sdks/rust/src/apis/group_api.rs +++ b/sdks/rust/src/apis/group_api.rs @@ -171,19 +171,6 @@ pub enum GroupPrepareAvatarUploadError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`group_search`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum GroupSearchError { - 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)] @@ -643,44 +630,6 @@ pub async fn group_prepare_avatar_upload(configuration: &configuration::Configur } } -/// Fuzzy search for groups. -pub async fn group_search(configuration: &configuration::Configuration, query: &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!("{}/group/groups/search", 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(&[("query", &query.to_string())]); - 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)) - } -} - /// 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; diff --git a/sdks/rust/src/apis/identity_api.rs b/sdks/rust/src/apis/identity_api.rs index 91ff1412..7ecab3f5 100644 --- a/sdks/rust/src/apis/identity_api.rs +++ b/sdks/rust/src/apis/identity_api.rs @@ -28,19 +28,6 @@ pub enum IdentityCompleteAvatarUploadError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`identity_follow`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityFollowError { - 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)] @@ -93,84 +80,6 @@ pub enum IdentityGetSummariesError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`identity_ignore_recent_follower`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityIgnoreRecentFollowerError { - 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_list_followers`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityListFollowersError { - 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_list_following`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityListFollowingError { - 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_list_friends`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityListFriendsError { - 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_list_mutual_friends`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityListMutualFriendsError { - 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_list_recent_followers`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityListRecentFollowersError { - 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)] @@ -210,32 +119,6 @@ pub enum IdentityRemoveGameActivityError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`identity_report`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityReportError { - 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_search`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentitySearchError { - 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)] @@ -275,19 +158,6 @@ pub enum IdentitySignupForBetaError { UnknownValue(serde_json::Value), } -/// struct for typed errors of method [`identity_unfollow`] -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum IdentityUnfollowError { - 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)] @@ -372,37 +242,6 @@ pub async fn identity_complete_avatar_upload(configuration: &configuration::Conf } } -/// Follows the given identity. In order for identities to be \"friends\", the other identity has to also follow this identity. -pub async fn identity_follow(configuration: &configuration::Configuration, identity_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/{identity_id}/follow", local_var_configuration.base_path, 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)) - } -} - /// Fetches a list of identity handles. pub async fn identity_get_handles(configuration: &configuration::Configuration, identity_ids: &str) -> Result> { let local_var_configuration = configuration; @@ -535,216 +374,6 @@ pub async fn identity_get_summaries(configuration: &configuration::Configuration } } -pub async fn identity_ignore_recent_follower(configuration: &configuration::Configuration, identity_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/self/recent-followers/{identity_id}/ignore", local_var_configuration.base_path, 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)) - } -} - -pub async fn identity_list_followers(configuration: &configuration::Configuration, identity_id: &str, anchor: Option<&str>, limit: 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}/followers", 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) = 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)) - } -} - -pub async fn identity_list_following(configuration: &configuration::Configuration, identity_id: &str, anchor: Option<&str>, limit: 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}/following", 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) = 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)) - } -} - -pub async fn identity_list_friends(configuration: &configuration::Configuration, anchor: Option<&str>, limit: 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/friends", 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) = 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)) - } -} - -pub async fn identity_list_mutual_friends(configuration: &configuration::Configuration, identity_id: &str, anchor: Option<&str>, limit: 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}/mutual-friends", 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) = 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)) - } -} - -pub async fn identity_list_recent_followers(configuration: &configuration::Configuration, 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!("{}/identity/identities/self/recent-followers", 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) = 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)) - } -} - pub async fn identity_mark_deletion(configuration: &configuration::Configuration, ) -> Result<(), Error> { let local_var_configuration = configuration; @@ -838,76 +467,6 @@ pub async fn identity_remove_game_activity(configuration: &configuration::Config } } -/// Creates an abuse report for an identity. -pub async fn identity_report(configuration: &configuration::Configuration, identity_id: &str, identity_report_request: crate::models::IdentityReportRequest) -> Result<(), Error> { - let local_var_configuration = configuration; - - let local_var_client = &local_var_configuration.client; - - let local_var_uri_str = format!("{}/identity/identities/{identity_id}/report", local_var_configuration.base_path, 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(&identity_report_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)) - } -} - -/// Fuzzy search for identities. -pub async fn identity_search(configuration: &configuration::Configuration, query: &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!("{}/identity/identities/search", 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(&[("query", &query.to_string())]); - 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)) - } -} - /// 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; @@ -1004,37 +563,6 @@ pub async fn identity_signup_for_beta(configuration: &configuration::Configurati } } -/// Unfollows the given identity. -pub async fn identity_unfollow(configuration: &configuration::Configuration, identity_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/{identity_id}/follow", local_var_configuration.base_path, 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 identity_unmark_deletion(configuration: &configuration::Configuration, ) -> Result<(), Error> { let local_var_configuration = configuration; diff --git a/sdks/rust/src/apis/mod.rs b/sdks/rust/src/apis/mod.rs index 37077900..5e61abe5 100644 --- a/sdks/rust/src/apis/mod.rs +++ b/sdks/rust/src/apis/mod.rs @@ -90,11 +90,10 @@ pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String unimplemented!("Only objects are supported with style=deepObject") } -pub mod admin_api; -pub mod admin_clusters_api; -pub mod admin_clusters_datacenters_api; -pub mod admin_clusters_servers_api; -pub mod auth_identity_access_token_api; +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; @@ -125,9 +124,7 @@ pub mod group_join_requests_api; pub mod identity_api; pub mod identity_activities_api; pub mod identity_events_api; -pub mod identity_links_api; pub mod job_run_api; -pub mod kv_api; pub mod matchmaker_lobbies_api; pub mod matchmaker_players_api; pub mod matchmaker_regions_api; diff --git a/sdks/rust/src/models/actor_actor.rs b/sdks/rust/src/models/actor_actor.rs new file mode 100644 index 00000000..25aca0e4 --- /dev/null +++ b/sdks/rust/src/models/actor_actor.rs @@ -0,0 +1,55 @@ +/* + * Rivet API EE + * + * No description provided (generated 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 { + #[serde(rename = "created_at")] + pub created_at: i64, + #[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, + #[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: i64, 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/rust/src/models/actor_build.rs b/sdks/rust/src/models/actor_build.rs new file mode 100644 index 00000000..c7b16680 --- /dev/null +++ b/sdks/rust/src/models/actor_build.rs @@ -0,0 +1,43 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/admin_clusters_pool_type.rs b/sdks/rust/src/models/actor_build_compression.rs similarity index 50% rename from sdks/rust/src/models/admin_clusters_pool_type.rs rename to sdks/rust/src/models/actor_build_compression.rs index 13c7dd0c..079f04e6 100644 --- a/sdks/rust/src/models/admin_clusters_pool_type.rs +++ b/sdks/rust/src/models/actor_build_compression.rs @@ -11,29 +11,26 @@ /// #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum AdminClustersPoolType { - #[serde(rename = "job")] - Job, - #[serde(rename = "gg")] - Gg, - #[serde(rename = "ats")] - Ats, +pub enum ActorBuildCompression { + #[serde(rename = "none")] + None, + #[serde(rename = "lz4")] + Lz4, } -impl ToString for AdminClustersPoolType { +impl ToString for ActorBuildCompression { fn to_string(&self) -> String { match self { - Self::Job => String::from("job"), - Self::Gg => String::from("gg"), - Self::Ats => String::from("ats"), + Self::None => String::from("none"), + Self::Lz4 => String::from("lz4"), } } } -impl Default for AdminClustersPoolType { - fn default() -> AdminClustersPoolType { - Self::Job +impl Default for ActorBuildCompression { + fn default() -> ActorBuildCompression { + Self::None } } diff --git a/sdks/rust/src/models/actor_build_kind.rs b/sdks/rust/src/models/actor_build_kind.rs new file mode 100644 index 00000000..b33fb331 --- /dev/null +++ b/sdks/rust/src/models/actor_build_kind.rs @@ -0,0 +1,42 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_create_actor_network_request.rs b/sdks/rust/src/models/actor_create_actor_network_request.rs new file mode 100644 index 00000000..38ac81e2 --- /dev/null +++ b/sdks/rust/src/models/actor_create_actor_network_request.rs @@ -0,0 +1,31 @@ +/* + * Rivet API EE + * + * No description provided (generated 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")] + pub ports: ::std::collections::HashMap, +} + +impl ActorCreateActorNetworkRequest { + pub fn new(ports: ::std::collections::HashMap) -> ActorCreateActorNetworkRequest { + ActorCreateActorNetworkRequest { + mode: None, + ports, + } + } +} + + diff --git a/sdks/rust/src/models/actor_create_actor_port_request.rs b/sdks/rust/src/models/actor_create_actor_port_request.rs new file mode 100644 index 00000000..d026df8b --- /dev/null +++ b/sdks/rust/src/models/actor_create_actor_port_request.rs @@ -0,0 +1,34 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_create_actor_request.rs b/sdks/rust/src/models/actor_create_actor_request.rs new file mode 100644 index 00000000..277e448c --- /dev/null +++ b/sdks/rust/src/models/actor_create_actor_request.rs @@ -0,0 +1,43 @@ +/* + * Rivet API EE + * + * No description provided (generated 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 = "lifecycle", skip_serializing_if = "Option::is_none")] + pub lifecycle: Option>, + #[serde(rename = "network")] + pub network: Box, + #[serde(rename = "region")] + pub region: String, + #[serde(rename = "resources")] + pub resources: Box, + #[serde(rename = "runtime")] + pub runtime: Box, + #[serde(rename = "tags", deserialize_with = "Option::deserialize")] + pub tags: Option, +} + +impl ActorCreateActorRequest { + pub fn new(network: crate::models::ActorCreateActorNetworkRequest, region: String, resources: crate::models::ActorResources, runtime: crate::models::ActorCreateActorRuntimeRequest, tags: Option) -> ActorCreateActorRequest { + ActorCreateActorRequest { + lifecycle: None, + network: Box::new(network), + region, + resources: Box::new(resources), + runtime: Box::new(runtime), + tags, + } + } +} + + diff --git a/sdks/rust/src/models/actor_create_actor_response.rs b/sdks/rust/src/models/actor_create_actor_response.rs new file mode 100644 index 00000000..4ec9b5b9 --- /dev/null +++ b/sdks/rust/src/models/actor_create_actor_response.rs @@ -0,0 +1,28 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_create_actor_runtime_request.rs b/sdks/rust/src/models/actor_create_actor_runtime_request.rs new file mode 100644 index 00000000..fb5f6490 --- /dev/null +++ b/sdks/rust/src/models/actor_create_actor_runtime_request.rs @@ -0,0 +1,34 @@ +/* + * Rivet API EE + * + * No description provided (generated 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 = "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 ActorCreateActorRuntimeRequest { + pub fn new(build: uuid::Uuid) -> ActorCreateActorRuntimeRequest { + ActorCreateActorRuntimeRequest { + arguments: None, + build, + environment: None, + } + } +} + + diff --git a/sdks/rust/src/models/admin_clusters_create_cluster_response.rs b/sdks/rust/src/models/actor_game_guard_routing.rs similarity index 50% rename from sdks/rust/src/models/admin_clusters_create_cluster_response.rs rename to sdks/rust/src/models/actor_game_guard_routing.rs index b3e73e0f..faa5e372 100644 --- a/sdks/rust/src/models/admin_clusters_create_cluster_response.rs +++ b/sdks/rust/src/models/actor_game_guard_routing.rs @@ -12,15 +12,15 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AdminClustersCreateClusterResponse { - #[serde(rename = "cluster_id")] - pub cluster_id: uuid::Uuid, +pub struct ActorGameGuardRouting { + #[serde(rename = "authorization", skip_serializing_if = "Option::is_none")] + pub authorization: Option>, } -impl AdminClustersCreateClusterResponse { - pub fn new(cluster_id: uuid::Uuid) -> AdminClustersCreateClusterResponse { - AdminClustersCreateClusterResponse { - cluster_id, +impl ActorGameGuardRouting { + pub fn new() -> ActorGameGuardRouting { + ActorGameGuardRouting { + authorization: None, } } } diff --git a/sdks/rust/src/models/actor_get_actor_logs_response.rs b/sdks/rust/src/models/actor_get_actor_logs_response.rs new file mode 100644 index 00000000..8aae3f63 --- /dev/null +++ b/sdks/rust/src/models/actor_get_actor_logs_response.rs @@ -0,0 +1,36 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/admin_login_response.rs b/sdks/rust/src/models/actor_get_actor_response.rs similarity index 53% rename from sdks/rust/src/models/admin_login_response.rs rename to sdks/rust/src/models/actor_get_actor_response.rs index 1783f090..b9750b5e 100644 --- a/sdks/rust/src/models/admin_login_response.rs +++ b/sdks/rust/src/models/actor_get_actor_response.rs @@ -12,15 +12,15 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AdminLoginResponse { - #[serde(rename = "url")] - pub url: String, +pub struct ActorGetActorResponse { + #[serde(rename = "actor")] + pub actor: Box, } -impl AdminLoginResponse { - pub fn new(url: String) -> AdminLoginResponse { - AdminLoginResponse { - url, +impl ActorGetActorResponse { + pub fn new(actor: crate::models::ActorActor) -> ActorGetActorResponse { + ActorGetActorResponse { + actor: Box::new(actor), } } } diff --git a/sdks/rust/src/models/identity_report_request.rs b/sdks/rust/src/models/actor_get_build_response.rs similarity index 53% rename from sdks/rust/src/models/identity_report_request.rs rename to sdks/rust/src/models/actor_get_build_response.rs index d21411f0..7a924854 100644 --- a/sdks/rust/src/models/identity_report_request.rs +++ b/sdks/rust/src/models/actor_get_build_response.rs @@ -12,15 +12,15 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityReportRequest { - #[serde(rename = "reason", skip_serializing_if = "Option::is_none")] - pub reason: Option, +pub struct ActorGetBuildResponse { + #[serde(rename = "build")] + pub build: Box, } -impl IdentityReportRequest { - pub fn new() -> IdentityReportRequest { - IdentityReportRequest { - reason: None, +impl ActorGetBuildResponse { + pub fn new(build: crate::models::ActorBuild) -> ActorGetBuildResponse { + ActorGetBuildResponse { + build: Box::new(build), } } } diff --git a/sdks/rust/src/models/actor_lifecycle.rs b/sdks/rust/src/models/actor_lifecycle.rs new file mode 100644 index 00000000..81419dcf --- /dev/null +++ b/sdks/rust/src/models/actor_lifecycle.rs @@ -0,0 +1,29 @@ +/* + * Rivet API EE + * + * No description provided (generated 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 { + /// 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 { + kill_timeout: None, + } + } +} + + diff --git a/sdks/rust/src/models/actor_list_actors_response.rs b/sdks/rust/src/models/actor_list_actors_response.rs new file mode 100644 index 00000000..37f05526 --- /dev/null +++ b/sdks/rust/src/models/actor_list_actors_response.rs @@ -0,0 +1,29 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_list_builds_response.rs b/sdks/rust/src/models/actor_list_builds_response.rs new file mode 100644 index 00000000..5a042fdf --- /dev/null +++ b/sdks/rust/src/models/actor_list_builds_response.rs @@ -0,0 +1,29 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/admin_clusters_hardware.rs b/sdks/rust/src/models/actor_list_regions_response.rs similarity index 52% rename from sdks/rust/src/models/admin_clusters_hardware.rs rename to sdks/rust/src/models/actor_list_regions_response.rs index 2883b076..f64c79ec 100644 --- a/sdks/rust/src/models/admin_clusters_hardware.rs +++ b/sdks/rust/src/models/actor_list_regions_response.rs @@ -12,15 +12,15 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AdminClustersHardware { - #[serde(rename = "provider_hardware")] - pub provider_hardware: String, +pub struct ActorListRegionsResponse { + #[serde(rename = "regions")] + pub regions: Vec, } -impl AdminClustersHardware { - pub fn new(provider_hardware: String) -> AdminClustersHardware { - AdminClustersHardware { - provider_hardware, +impl ActorListRegionsResponse { + pub fn new(regions: Vec) -> ActorListRegionsResponse { + ActorListRegionsResponse { + regions, } } } diff --git a/sdks/rust/src/models/actor_log_stream.rs b/sdks/rust/src/models/actor_log_stream.rs new file mode 100644 index 00000000..81535ab3 --- /dev/null +++ b/sdks/rust/src/models/actor_log_stream.rs @@ -0,0 +1,39 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_network.rs b/sdks/rust/src/models/actor_network.rs new file mode 100644 index 00000000..a86b30bd --- /dev/null +++ b/sdks/rust/src/models/actor_network.rs @@ -0,0 +1,31 @@ +/* + * Rivet API EE + * + * No description provided (generated 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", skip_serializing_if = "Option::is_none")] + pub mode: Option, + #[serde(rename = "ports")] + pub ports: ::std::collections::HashMap, +} + +impl ActorNetwork { + pub fn new(ports: ::std::collections::HashMap) -> ActorNetwork { + ActorNetwork { + mode: None, + ports, + } + } +} + + diff --git a/sdks/rust/src/models/admin_clusters_provider.rs b/sdks/rust/src/models/actor_network_mode.rs similarity index 55% rename from sdks/rust/src/models/admin_clusters_provider.rs rename to sdks/rust/src/models/actor_network_mode.rs index afd72888..10d53852 100644 --- a/sdks/rust/src/models/admin_clusters_provider.rs +++ b/sdks/rust/src/models/actor_network_mode.rs @@ -11,23 +11,26 @@ /// #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] -pub enum AdminClustersProvider { - #[serde(rename = "linode")] - Linode, +pub enum ActorNetworkMode { + #[serde(rename = "bridge")] + Bridge, + #[serde(rename = "host")] + Host, } -impl ToString for AdminClustersProvider { +impl ToString for ActorNetworkMode { fn to_string(&self) -> String { match self { - Self::Linode => String::from("linode"), + Self::Bridge => String::from("bridge"), + Self::Host => String::from("host"), } } } -impl Default for AdminClustersProvider { - fn default() -> AdminClustersProvider { - Self::Linode +impl Default for ActorNetworkMode { + fn default() -> ActorNetworkMode { + Self::Bridge } } diff --git a/sdks/rust/src/models/actor_patch_build_tags_request.rs b/sdks/rust/src/models/actor_patch_build_tags_request.rs new file mode 100644 index 00000000..025b3c0b --- /dev/null +++ b/sdks/rust/src/models/actor_patch_build_tags_request.rs @@ -0,0 +1,32 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_port.rs b/sdks/rust/src/models/actor_port.rs new file mode 100644 index 00000000..092bab9d --- /dev/null +++ b/sdks/rust/src/models/actor_port.rs @@ -0,0 +1,40 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_port_authorization.rs b/sdks/rust/src/models/actor_port_authorization.rs new file mode 100644 index 00000000..9ec332f5 --- /dev/null +++ b/sdks/rust/src/models/actor_port_authorization.rs @@ -0,0 +1,31 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_port_protocol.rs b/sdks/rust/src/models/actor_port_protocol.rs new file mode 100644 index 00000000..0f1afcba --- /dev/null +++ b/sdks/rust/src/models/actor_port_protocol.rs @@ -0,0 +1,48 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/admin_clusters_create_datacenter_response.rs b/sdks/rust/src/models/actor_port_query_authorization.rs similarity index 50% rename from sdks/rust/src/models/admin_clusters_create_datacenter_response.rs rename to sdks/rust/src/models/actor_port_query_authorization.rs index 8790529e..d9e1d6da 100644 --- a/sdks/rust/src/models/admin_clusters_create_datacenter_response.rs +++ b/sdks/rust/src/models/actor_port_query_authorization.rs @@ -12,15 +12,18 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AdminClustersCreateDatacenterResponse { - #[serde(rename = "datacenter_id")] - pub datacenter_id: uuid::Uuid, +pub struct ActorPortQueryAuthorization { + #[serde(rename = "key")] + pub key: String, + #[serde(rename = "value")] + pub value: String, } -impl AdminClustersCreateDatacenterResponse { - pub fn new(datacenter_id: uuid::Uuid) -> AdminClustersCreateDatacenterResponse { - AdminClustersCreateDatacenterResponse { - datacenter_id, +impl ActorPortQueryAuthorization { + pub fn new(key: String, value: String) -> ActorPortQueryAuthorization { + ActorPortQueryAuthorization { + key, + value, } } } diff --git a/sdks/rust/src/models/actor_port_routing.rs b/sdks/rust/src/models/actor_port_routing.rs new file mode 100644 index 00000000..c1eadf26 --- /dev/null +++ b/sdks/rust/src/models/actor_port_routing.rs @@ -0,0 +1,31 @@ +/* + * Rivet API EE + * + * No description provided (generated 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 = "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 ActorPortRouting { + pub fn new() -> ActorPortRouting { + ActorPortRouting { + game_guard: None, + host: None, + } + } +} + + diff --git a/sdks/rust/src/models/actor_prepare_build_request.rs b/sdks/rust/src/models/actor_prepare_build_request.rs new file mode 100644 index 00000000..7abbe687 --- /dev/null +++ b/sdks/rust/src/models/actor_prepare_build_request.rs @@ -0,0 +1,47 @@ +/* + * Rivet API EE + * + * No description provided (generated 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")] + 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_regions", skip_serializing_if = "Option::is_none")] + pub prewarm_regions: Option>, +} + +impl ActorPrepareBuildRequest { + pub fn new(image_file: crate::models::UploadPrepareFile, image_tag: String, name: String) -> ActorPrepareBuildRequest { + ActorPrepareBuildRequest { + compression: None, + image_file: Box::new(image_file), + image_tag, + kind: None, + multipart_upload: None, + name, + prewarm_regions: None, + } + } +} + + diff --git a/sdks/rust/src/models/actor_prepare_build_response.rs b/sdks/rust/src/models/actor_prepare_build_response.rs new file mode 100644 index 00000000..16041637 --- /dev/null +++ b/sdks/rust/src/models/actor_prepare_build_response.rs @@ -0,0 +1,34 @@ +/* + * Rivet API EE + * + * No description provided (generated 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 = "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 ActorPrepareBuildResponse { + pub fn new(build: uuid::Uuid) -> ActorPrepareBuildResponse { + ActorPrepareBuildResponse { + build, + image_presigned_request: None, + image_presigned_requests: None, + } + } +} + + diff --git a/sdks/rust/src/models/admin_login_request.rs b/sdks/rust/src/models/actor_region.rs similarity index 68% rename from sdks/rust/src/models/admin_login_request.rs rename to sdks/rust/src/models/actor_region.rs index fcf97b8a..353b79e6 100644 --- a/sdks/rust/src/models/admin_login_request.rs +++ b/sdks/rust/src/models/actor_region.rs @@ -12,14 +12,17 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct AdminLoginRequest { +pub struct ActorRegion { + #[serde(rename = "id")] + pub id: String, #[serde(rename = "name")] pub name: String, } -impl AdminLoginRequest { - pub fn new(name: String) -> AdminLoginRequest { - AdminLoginRequest { +impl ActorRegion { + pub fn new(id: String, name: String) -> ActorRegion { + ActorRegion { + id, name, } } diff --git a/sdks/rust/src/models/actor_resources.rs b/sdks/rust/src/models/actor_resources.rs new file mode 100644 index 00000000..2abe4f55 --- /dev/null +++ b/sdks/rust/src/models/actor_resources.rs @@ -0,0 +1,33 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/actor_runtime.rs b/sdks/rust/src/models/actor_runtime.rs new file mode 100644 index 00000000..df0d66a5 --- /dev/null +++ b/sdks/rust/src/models/actor_runtime.rs @@ -0,0 +1,34 @@ +/* + * Rivet API EE + * + * No description provided (generated 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/rust/src/models/admin_clusters_build_delivery_method.rs b/sdks/rust/src/models/admin_clusters_build_delivery_method.rs deleted file mode 100644 index 6de661fc..00000000 --- a/sdks/rust/src/models/admin_clusters_build_delivery_method.rs +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersBuildDeliveryMethod { - #[serde(rename = "traffic_server")] - TrafficServer, - #[serde(rename = "s3_direct")] - S3Direct, - -} - -impl ToString for AdminClustersBuildDeliveryMethod { - fn to_string(&self) -> String { - match self { - Self::TrafficServer => String::from("traffic_server"), - Self::S3Direct => String::from("s3_direct"), - } - } -} - -impl Default for AdminClustersBuildDeliveryMethod { - fn default() -> AdminClustersBuildDeliveryMethod { - Self::TrafficServer - } -} - - - - diff --git a/sdks/rust/src/models/admin_clusters_cluster.rs b/sdks/rust/src/models/admin_clusters_cluster.rs deleted file mode 100644 index 0f9ec6dc..00000000 --- a/sdks/rust/src/models/admin_clusters_cluster.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersCluster { - #[serde(rename = "cluster_id")] - pub cluster_id: uuid::Uuid, - #[serde(rename = "create_ts")] - pub create_ts: i64, - #[serde(rename = "name_id")] - pub name_id: String, - #[serde(rename = "owner_team_id", skip_serializing_if = "Option::is_none")] - pub owner_team_id: Option, -} - -impl AdminClustersCluster { - pub fn new(cluster_id: uuid::Uuid, create_ts: i64, name_id: String) -> AdminClustersCluster { - AdminClustersCluster { - cluster_id, - create_ts, - name_id, - owner_team_id: None, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_create_cluster_request.rs b/sdks/rust/src/models/admin_clusters_create_cluster_request.rs deleted file mode 100644 index dee83060..00000000 --- a/sdks/rust/src/models/admin_clusters_create_cluster_request.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersCreateClusterRequest { - #[serde(rename = "name_id")] - pub name_id: String, - #[serde(rename = "owner_team_id", skip_serializing_if = "Option::is_none")] - pub owner_team_id: Option, -} - -impl AdminClustersCreateClusterRequest { - pub fn new(name_id: String) -> AdminClustersCreateClusterRequest { - AdminClustersCreateClusterRequest { - name_id, - owner_team_id: None, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_create_datacenter_request.rs b/sdks/rust/src/models/admin_clusters_create_datacenter_request.rs deleted file mode 100644 index fd79c9de..00000000 --- a/sdks/rust/src/models/admin_clusters_create_datacenter_request.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersCreateDatacenterRequest { - #[serde(rename = "build_delivery_method")] - pub build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "name_id")] - pub name_id: String, - #[serde(rename = "prebakes_enabled")] - pub prebakes_enabled: bool, - #[serde(rename = "provider")] - pub provider: crate::models::AdminClustersProvider, - #[serde(rename = "provider_datacenter_id")] - pub provider_datacenter_id: String, -} - -impl AdminClustersCreateDatacenterRequest { - pub fn new(build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, display_name: String, name_id: String, prebakes_enabled: bool, provider: crate::models::AdminClustersProvider, provider_datacenter_id: String) -> AdminClustersCreateDatacenterRequest { - AdminClustersCreateDatacenterRequest { - build_delivery_method, - display_name, - name_id, - prebakes_enabled, - provider, - provider_datacenter_id, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_datacenter.rs b/sdks/rust/src/models/admin_clusters_datacenter.rs deleted file mode 100644 index 747bb9dd..00000000 --- a/sdks/rust/src/models/admin_clusters_datacenter.rs +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersDatacenter { - #[serde(rename = "build_delivery_method")] - pub build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, - #[serde(rename = "cluster_id")] - pub cluster_id: uuid::Uuid, - #[serde(rename = "datacenter_id")] - pub datacenter_id: uuid::Uuid, - #[serde(rename = "display_name")] - pub display_name: String, - #[serde(rename = "name_id")] - pub name_id: String, - #[serde(rename = "pools")] - pub pools: Vec, - #[serde(rename = "provider")] - pub provider: crate::models::AdminClustersProvider, - #[serde(rename = "provider_api_token", skip_serializing_if = "Option::is_none")] - pub provider_api_token: Option, - #[serde(rename = "provider_datacenter_id")] - pub provider_datacenter_id: String, -} - -impl AdminClustersDatacenter { - pub fn new(build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, cluster_id: uuid::Uuid, datacenter_id: uuid::Uuid, display_name: String, name_id: String, pools: Vec, provider: crate::models::AdminClustersProvider, provider_datacenter_id: String) -> AdminClustersDatacenter { - AdminClustersDatacenter { - build_delivery_method, - cluster_id, - datacenter_id, - display_name, - name_id, - pools, - provider, - provider_api_token: None, - provider_datacenter_id, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_list_clusters_response.rs b/sdks/rust/src/models/admin_clusters_list_clusters_response.rs deleted file mode 100644 index d3288174..00000000 --- a/sdks/rust/src/models/admin_clusters_list_clusters_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersListClustersResponse { - #[serde(rename = "clusters")] - pub clusters: Vec, -} - -impl AdminClustersListClustersResponse { - pub fn new(clusters: Vec) -> AdminClustersListClustersResponse { - AdminClustersListClustersResponse { - clusters, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_list_datacenters_response.rs b/sdks/rust/src/models/admin_clusters_list_datacenters_response.rs deleted file mode 100644 index 01308656..00000000 --- a/sdks/rust/src/models/admin_clusters_list_datacenters_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersListDatacentersResponse { - #[serde(rename = "datacenters")] - pub datacenters: Vec, -} - -impl AdminClustersListDatacentersResponse { - pub fn new(datacenters: Vec) -> AdminClustersListDatacentersResponse { - AdminClustersListDatacentersResponse { - datacenters, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_list_servers_response.rs b/sdks/rust/src/models/admin_clusters_list_servers_response.rs deleted file mode 100644 index 2c21599c..00000000 --- a/sdks/rust/src/models/admin_clusters_list_servers_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersListServersResponse { - #[serde(rename = "servers")] - pub servers: Vec, -} - -impl AdminClustersListServersResponse { - pub fn new(servers: Vec) -> AdminClustersListServersResponse { - AdminClustersListServersResponse { - servers, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_pool.rs b/sdks/rust/src/models/admin_clusters_pool.rs deleted file mode 100644 index 1ec666f1..00000000 --- a/sdks/rust/src/models/admin_clusters_pool.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersPool { - #[serde(rename = "desired_count")] - pub desired_count: i32, - #[serde(rename = "drain_timeout")] - pub drain_timeout: i64, - #[serde(rename = "hardware")] - pub hardware: Vec, - #[serde(rename = "max_count")] - pub max_count: i32, - #[serde(rename = "min_count")] - pub min_count: i32, - #[serde(rename = "pool_type")] - pub pool_type: crate::models::AdminClustersPoolType, -} - -impl AdminClustersPool { - pub fn new(desired_count: i32, drain_timeout: i64, hardware: Vec, max_count: i32, min_count: i32, pool_type: crate::models::AdminClustersPoolType) -> AdminClustersPool { - AdminClustersPool { - desired_count, - drain_timeout, - hardware, - max_count, - min_count, - pool_type, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_pool_update.rs b/sdks/rust/src/models/admin_clusters_pool_update.rs deleted file mode 100644 index 8c612f3b..00000000 --- a/sdks/rust/src/models/admin_clusters_pool_update.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersPoolUpdate { - #[serde(rename = "desired_count", skip_serializing_if = "Option::is_none")] - pub desired_count: Option, - #[serde(rename = "drain_timeout", skip_serializing_if = "Option::is_none")] - pub drain_timeout: Option, - #[serde(rename = "hardware")] - pub hardware: Vec, - #[serde(rename = "max_count", skip_serializing_if = "Option::is_none")] - pub max_count: Option, - #[serde(rename = "min_count", skip_serializing_if = "Option::is_none")] - pub min_count: Option, - #[serde(rename = "pool_type")] - pub pool_type: crate::models::AdminClustersPoolType, -} - -impl AdminClustersPoolUpdate { - pub fn new(hardware: Vec, pool_type: crate::models::AdminClustersPoolType) -> AdminClustersPoolUpdate { - AdminClustersPoolUpdate { - desired_count: None, - drain_timeout: None, - hardware, - max_count: None, - min_count: None, - pool_type, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_server.rs b/sdks/rust/src/models/admin_clusters_server.rs deleted file mode 100644 index 028b9710..00000000 --- a/sdks/rust/src/models/admin_clusters_server.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersServer { - #[serde(rename = "public_ip", skip_serializing_if = "Option::is_none")] - pub public_ip: Option, - #[serde(rename = "server_id")] - pub server_id: uuid::Uuid, -} - -impl AdminClustersServer { - pub fn new(server_id: uuid::Uuid) -> AdminClustersServer { - AdminClustersServer { - public_ip: None, - server_id, - } - } -} - - diff --git a/sdks/rust/src/models/admin_clusters_update_datacenter_request.rs b/sdks/rust/src/models/admin_clusters_update_datacenter_request.rs deleted file mode 100644 index 5a74cc40..00000000 --- a/sdks/rust/src/models/admin_clusters_update_datacenter_request.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AdminClustersUpdateDatacenterRequest { - #[serde(rename = "pools")] - pub pools: Vec, - #[serde(rename = "prebakes_enabled", skip_serializing_if = "Option::is_none")] - pub prebakes_enabled: Option, -} - -impl AdminClustersUpdateDatacenterRequest { - pub fn new(pools: Vec) -> AdminClustersUpdateDatacenterRequest { - AdminClustersUpdateDatacenterRequest { - pools, - prebakes_enabled: None, - } - } -} - - diff --git a/sdks/rust/src/models/auth_identity_complete_access_token_verification_request.rs b/sdks/rust/src/models/auth_identity_complete_access_token_verification_request.rs deleted file mode 100644 index a02a5743..00000000 --- a/sdks/rust/src/models/auth_identity_complete_access_token_verification_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 AuthIdentityCompleteAccessTokenVerificationRequest { - /// Documentation at https://jwt.io/ - #[serde(rename = "access_token")] - pub access_token: String, -} - -impl AuthIdentityCompleteAccessTokenVerificationRequest { - pub fn new(access_token: String) -> AuthIdentityCompleteAccessTokenVerificationRequest { - AuthIdentityCompleteAccessTokenVerificationRequest { - access_token, - } - } -} - - diff --git a/sdks/rust/src/models/cloud_bootstrap_access.rs b/sdks/rust/src/models/cloud_bootstrap_access.rs index b04bdb5a..d20a9ca1 100644 --- a/sdks/rust/src/models/cloud_bootstrap_access.rs +++ b/sdks/rust/src/models/cloud_bootstrap_access.rs @@ -16,6 +16,8 @@ pub enum CloudBootstrapAccess { Public, #[serde(rename = "private")] Private, + #[serde(rename = "development")] + Development, } @@ -24,6 +26,7 @@ impl ToString for CloudBootstrapAccess { match self { Self::Public => String::from("public"), Self::Private => String::from("private"), + Self::Development => String::from("development"), } } } diff --git a/sdks/rust/src/models/cloud_bootstrap_domains.rs b/sdks/rust/src/models/cloud_bootstrap_domains.rs index d6a59556..016d794f 100644 --- a/sdks/rust/src/models/cloud_bootstrap_domains.rs +++ b/sdks/rust/src/models/cloud_bootstrap_domains.rs @@ -14,23 +14,20 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] pub struct CloudBootstrapDomains { - #[serde(rename = "cdn")] - pub cdn: String, - #[serde(rename = "job")] - pub job: String, - #[serde(rename = "main")] - pub main: String, + #[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(cdn: String, job: String, main: String) -> CloudBootstrapDomains { + pub fn new() -> CloudBootstrapDomains { CloudBootstrapDomains { - cdn, - job, - main, + cdn: None, + job: None, opengb: None, } } diff --git a/sdks/rust/src/models/cloud_bootstrap_login_methods.rs b/sdks/rust/src/models/cloud_bootstrap_login_methods.rs index a9b5d259..6d594f0d 100644 --- a/sdks/rust/src/models/cloud_bootstrap_login_methods.rs +++ b/sdks/rust/src/models/cloud_bootstrap_login_methods.rs @@ -13,16 +13,13 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] pub struct CloudBootstrapLoginMethods { - #[serde(rename = "access_token")] - pub access_token: bool, #[serde(rename = "email")] pub email: bool, } impl CloudBootstrapLoginMethods { - pub fn new(access_token: bool, email: bool) -> CloudBootstrapLoginMethods { + pub fn new(email: bool) -> CloudBootstrapLoginMethods { CloudBootstrapLoginMethods { - access_token, email, } } diff --git a/sdks/rust/src/models/cloud_bootstrap_response.rs b/sdks/rust/src/models/cloud_bootstrap_response.rs index 88ac2030..aaa14833 100644 --- a/sdks/rust/src/models/cloud_bootstrap_response.rs +++ b/sdks/rust/src/models/cloud_bootstrap_response.rs @@ -19,8 +19,10 @@ pub struct CloudBootstrapResponse { pub captcha: Box, #[serde(rename = "cluster")] pub cluster: crate::models::CloudBootstrapCluster, - #[serde(rename = "domains", skip_serializing_if = "Option::is_none")] - pub domains: Option>, + #[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")] @@ -28,12 +30,13 @@ pub struct CloudBootstrapResponse { } impl CloudBootstrapResponse { - pub fn new(access: crate::models::CloudBootstrapAccess, captcha: crate::models::CloudBootstrapCaptcha, cluster: crate::models::CloudBootstrapCluster, login_methods: crate::models::CloudBootstrapLoginMethods, origins: crate::models::CloudBootstrapOrigins) -> 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, - domains: None, + deploy_hash, + domains: Box::new(domains), login_methods: Box::new(login_methods), origins: Box::new(origins), } diff --git a/sdks/rust/src/models/group_search_response.rs b/sdks/rust/src/models/group_search_response.rs deleted file mode 100644 index 21fe7920..00000000 --- a/sdks/rust/src/models/group_search_response.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 GroupSearchResponse { - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - /// A list of group handles. - #[serde(rename = "groups")] - pub groups: Vec, -} - -impl GroupSearchResponse { - pub fn new(groups: Vec) -> GroupSearchResponse { - GroupSearchResponse { - anchor: None, - groups, - } - } -} - - diff --git a/sdks/rust/src/models/identity_access_token_linked_account.rs b/sdks/rust/src/models/identity_access_token_linked_account.rs deleted file mode 100644 index ea4f290a..00000000 --- a/sdks/rust/src/models/identity_access_token_linked_account.rs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityAccessTokenLinkedAccount : An identity's access token identity. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityAccessTokenLinkedAccount { - #[serde(rename = "name")] - pub name: String, -} - -impl IdentityAccessTokenLinkedAccount { - /// An identity's access token identity. - pub fn new(name: String) -> IdentityAccessTokenLinkedAccount { - IdentityAccessTokenLinkedAccount { - name, - } - } -} - - diff --git a/sdks/rust/src/models/identity_cancel_game_link_request.rs b/sdks/rust/src/models/identity_cancel_game_link_request.rs deleted file mode 100644 index 9bc1c716..00000000 --- a/sdks/rust/src/models/identity_cancel_game_link_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityCancelGameLinkRequest { - /// Documentation at https://jwt.io/ - #[serde(rename = "identity_link_token")] - pub identity_link_token: String, -} - -impl IdentityCancelGameLinkRequest { - pub fn new(identity_link_token: String) -> IdentityCancelGameLinkRequest { - IdentityCancelGameLinkRequest { - identity_link_token, - } - } -} - - diff --git a/sdks/rust/src/models/identity_complete_game_link_request.rs b/sdks/rust/src/models/identity_complete_game_link_request.rs deleted file mode 100644 index a7606f3a..00000000 --- a/sdks/rust/src/models/identity_complete_game_link_request.rs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityCompleteGameLinkRequest { - /// Documentation at https://jwt.io/ - #[serde(rename = "identity_link_token")] - pub identity_link_token: String, -} - -impl IdentityCompleteGameLinkRequest { - pub fn new(identity_link_token: String) -> IdentityCompleteGameLinkRequest { - IdentityCompleteGameLinkRequest { - identity_link_token, - } - } -} - - diff --git a/sdks/rust/src/models/identity_get_game_link_new_identity.rs b/sdks/rust/src/models/identity_get_game_link_new_identity.rs deleted file mode 100644 index c2b51b9e..00000000 --- a/sdks/rust/src/models/identity_get_game_link_new_identity.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityGetGameLinkNewIdentity { - #[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 IdentityGetGameLinkNewIdentity { - pub fn new(identity: crate::models::IdentityProfile, identity_token: String, identity_token_expire_ts: String) -> IdentityGetGameLinkNewIdentity { - IdentityGetGameLinkNewIdentity { - identity: Box::new(identity), - identity_token, - identity_token_expire_ts, - } - } -} - - diff --git a/sdks/rust/src/models/identity_get_game_link_response.rs b/sdks/rust/src/models/identity_get_game_link_response.rs deleted file mode 100644 index b6da148f..00000000 --- a/sdks/rust/src/models/identity_get_game_link_response.rs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityGetGameLinkResponse { - #[serde(rename = "current_identity")] - pub current_identity: Box, - #[serde(rename = "game")] - pub game: Box, - #[serde(rename = "new_identity", skip_serializing_if = "Option::is_none")] - pub new_identity: Option>, - #[serde(rename = "status")] - pub status: crate::models::IdentityGameLinkStatus, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityGetGameLinkResponse { - pub fn new(current_identity: crate::models::IdentityHandle, game: crate::models::GameHandle, status: crate::models::IdentityGameLinkStatus, watch: crate::models::WatchResponse) -> IdentityGetGameLinkResponse { - IdentityGetGameLinkResponse { - current_identity: Box::new(current_identity), - game: Box::new(game), - new_identity: None, - status, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/rust/src/models/identity_global_event_kind.rs b/sdks/rust/src/models/identity_global_event_kind.rs index 12977855..33f0a3f5 100644 --- a/sdks/rust/src/models/identity_global_event_kind.rs +++ b/sdks/rust/src/models/identity_global_event_kind.rs @@ -15,15 +15,12 @@ pub struct IdentityGlobalEventKind { #[serde(rename = "identity_update", skip_serializing_if = "Option::is_none")] pub identity_update: Option>, - #[serde(rename = "matchmaker_lobby_join", skip_serializing_if = "Option::is_none")] - pub matchmaker_lobby_join: Option>, } impl IdentityGlobalEventKind { pub fn new() -> IdentityGlobalEventKind { IdentityGlobalEventKind { identity_update: None, - matchmaker_lobby_join: None, } } } diff --git a/sdks/rust/src/models/identity_global_event_matchmaker_lobby_join.rs b/sdks/rust/src/models/identity_global_event_matchmaker_lobby_join.rs deleted file mode 100644 index 76ad279c..00000000 --- a/sdks/rust/src/models/identity_global_event_matchmaker_lobby_join.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityGlobalEventMatchmakerLobbyJoin { - #[serde(rename = "lobby")] - pub lobby: Box, - #[serde(rename = "player")] - pub player: Box, - #[serde(rename = "ports")] - pub ports: ::std::collections::HashMap, -} - -impl IdentityGlobalEventMatchmakerLobbyJoin { - pub fn new(lobby: crate::models::MatchmakerJoinLobby, player: crate::models::MatchmakerJoinPlayer, ports: ::std::collections::HashMap) -> IdentityGlobalEventMatchmakerLobbyJoin { - IdentityGlobalEventMatchmakerLobbyJoin { - lobby: Box::new(lobby), - player: Box::new(player), - ports, - } - } -} - - diff --git a/sdks/rust/src/models/identity_handle.rs b/sdks/rust/src/models/identity_handle.rs index efef4cfe..2257f92c 100644 --- a/sdks/rust/src/models/identity_handle.rs +++ b/sdks/rust/src/models/identity_handle.rs @@ -29,8 +29,6 @@ pub struct IdentityHandle { /// Whether or not this identity is registered with a linked account. #[serde(rename = "is_registered")] pub is_registered: bool, - #[serde(rename = "presence", skip_serializing_if = "Option::is_none")] - pub presence: Option>, } impl IdentityHandle { @@ -43,7 +41,6 @@ impl IdentityHandle { external: Box::new(external), identity_id, is_registered, - presence: None, } } } diff --git a/sdks/rust/src/models/identity_linked_account.rs b/sdks/rust/src/models/identity_linked_account.rs index f44c2cbf..e31b7fa9 100644 --- a/sdks/rust/src/models/identity_linked_account.rs +++ b/sdks/rust/src/models/identity_linked_account.rs @@ -14,8 +14,8 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] pub struct IdentityLinkedAccount { - #[serde(rename = "access_token", skip_serializing_if = "Option::is_none")] - pub access_token: Option>, + #[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>, } @@ -24,7 +24,7 @@ impl IdentityLinkedAccount { /// A union representing an identity's linked accounts. pub fn new() -> IdentityLinkedAccount { IdentityLinkedAccount { - access_token: None, + default_user: None, email: None, } } diff --git a/sdks/rust/src/models/identity_list_followers_response.rs b/sdks/rust/src/models/identity_list_followers_response.rs deleted file mode 100644 index be0694d5..00000000 --- a/sdks/rust/src/models/identity_list_followers_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityListFollowersResponse { - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - #[serde(rename = "identities")] - pub identities: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityListFollowersResponse { - pub fn new(identities: Vec, watch: crate::models::WatchResponse) -> IdentityListFollowersResponse { - IdentityListFollowersResponse { - anchor: None, - identities, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/rust/src/models/identity_list_following_response.rs b/sdks/rust/src/models/identity_list_following_response.rs deleted file mode 100644 index 73481c4f..00000000 --- a/sdks/rust/src/models/identity_list_following_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityListFollowingResponse { - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - #[serde(rename = "identities")] - pub identities: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityListFollowingResponse { - pub fn new(identities: Vec, watch: crate::models::WatchResponse) -> IdentityListFollowingResponse { - IdentityListFollowingResponse { - anchor: None, - identities, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/rust/src/models/identity_list_friends_response.rs b/sdks/rust/src/models/identity_list_friends_response.rs deleted file mode 100644 index d1e8422e..00000000 --- a/sdks/rust/src/models/identity_list_friends_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityListFriendsResponse { - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - #[serde(rename = "identities")] - pub identities: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityListFriendsResponse { - pub fn new(identities: Vec, watch: crate::models::WatchResponse) -> IdentityListFriendsResponse { - IdentityListFriendsResponse { - anchor: None, - identities, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/rust/src/models/identity_list_mutual_friends_response.rs b/sdks/rust/src/models/identity_list_mutual_friends_response.rs deleted file mode 100644 index 2db3d6e2..00000000 --- a/sdks/rust/src/models/identity_list_mutual_friends_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityListMutualFriendsResponse { - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - #[serde(rename = "identities")] - pub identities: Vec, -} - -impl IdentityListMutualFriendsResponse { - pub fn new(identities: Vec) -> IdentityListMutualFriendsResponse { - IdentityListMutualFriendsResponse { - anchor: None, - identities, - } - } -} - - diff --git a/sdks/rust/src/models/identity_list_recent_followers_response.rs b/sdks/rust/src/models/identity_list_recent_followers_response.rs deleted file mode 100644 index 09d51398..00000000 --- a/sdks/rust/src/models/identity_list_recent_followers_response.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityListRecentFollowersResponse { - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - #[serde(rename = "identities")] - pub identities: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl IdentityListRecentFollowersResponse { - pub fn new(identities: Vec, watch: crate::models::WatchResponse) -> IdentityListRecentFollowersResponse { - IdentityListRecentFollowersResponse { - anchor: None, - identities, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/rust/src/models/identity_prepare_game_link_response.rs b/sdks/rust/src/models/identity_prepare_game_link_response.rs deleted file mode 100644 index 733d914c..00000000 --- a/sdks/rust/src/models/identity_prepare_game_link_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentityPrepareGameLinkResponse { - /// RFC3339 timestamp - #[serde(rename = "expire_ts")] - pub expire_ts: String, - /// Pass this to `GetGameLink` to get the linking status. Valid for 15 minutes. - #[serde(rename = "identity_link_token")] - pub identity_link_token: String, - #[serde(rename = "identity_link_url")] - pub identity_link_url: String, -} - -impl IdentityPrepareGameLinkResponse { - pub fn new(expire_ts: String, identity_link_token: String, identity_link_url: String) -> IdentityPrepareGameLinkResponse { - IdentityPrepareGameLinkResponse { - expire_ts, - identity_link_token, - identity_link_url, - } - } -} - - diff --git a/sdks/rust/src/models/identity_presence.rs b/sdks/rust/src/models/identity_presence.rs deleted file mode 100644 index e03ac17d..00000000 --- a/sdks/rust/src/models/identity_presence.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// IdentityPresence : Information about the identity's current status, party, and active game. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct IdentityPresence { - #[serde(rename = "game_activity", skip_serializing_if = "Option::is_none")] - pub game_activity: Option>, - #[serde(rename = "status")] - pub status: crate::models::IdentityStatus, - /// RFC3339 timestamp - #[serde(rename = "update_ts")] - pub update_ts: String, -} - -impl IdentityPresence { - /// Information about the identity's current status, party, and active game. - pub fn new(status: crate::models::IdentityStatus, update_ts: String) -> IdentityPresence { - IdentityPresence { - game_activity: None, - status, - update_ts, - } - } -} - - diff --git a/sdks/rust/src/models/identity_profile.rs b/sdks/rust/src/models/identity_profile.rs index 98f78fff..bb699c29 100644 --- a/sdks/rust/src/models/identity_profile.rs +++ b/sdks/rust/src/models/identity_profile.rs @@ -64,8 +64,6 @@ pub struct IdentityProfile { pub join_ts: String, #[serde(rename = "linked_accounts")] pub linked_accounts: Vec, - #[serde(rename = "presence", skip_serializing_if = "Option::is_none")] - pub presence: Option>, } impl IdentityProfile { @@ -92,7 +90,6 @@ impl IdentityProfile { is_registered, join_ts, linked_accounts, - presence: None, } } } diff --git a/sdks/rust/src/models/identity_search_response.rs b/sdks/rust/src/models/identity_search_response.rs deleted file mode 100644 index 7dd8a427..00000000 --- a/sdks/rust/src/models/identity_search_response.rs +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 IdentitySearchResponse { - /// The pagination anchor. - #[serde(rename = "anchor", skip_serializing_if = "Option::is_none")] - pub anchor: Option, - #[serde(rename = "identities")] - pub identities: Vec, -} - -impl IdentitySearchResponse { - pub fn new(identities: Vec) -> IdentitySearchResponse { - IdentitySearchResponse { - anchor: None, - identities, - } - } -} - - diff --git a/sdks/rust/src/models/identity_summary.rs b/sdks/rust/src/models/identity_summary.rs index c0088f01..f5b83f06 100644 --- a/sdks/rust/src/models/identity_summary.rs +++ b/sdks/rust/src/models/identity_summary.rs @@ -37,8 +37,6 @@ pub struct IdentitySummary { /// Whether or not this identity is registered with a linked account. #[serde(rename = "is_registered")] pub is_registered: bool, - #[serde(rename = "presence", skip_serializing_if = "Option::is_none")] - pub presence: Option>, } impl IdentitySummary { @@ -54,7 +52,6 @@ impl IdentitySummary { is_following_me, is_mutual_following, is_registered, - presence: None, } } } diff --git a/sdks/rust/src/models/kv_entry.rs b/sdks/rust/src/models/kv_entry.rs deleted file mode 100644 index 3ea12251..00000000 --- a/sdks/rust/src/models/kv_entry.rs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// KvEntry : A key-value entry. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct KvEntry { - #[serde(rename = "deleted", skip_serializing_if = "Option::is_none")] - pub deleted: Option, - /// A string representing a key in the key-value database. Maximum length of 512 characters. _Recommended Key Path Format_ Key path components are split by a slash (e.g. `a/b/c` has the path components `[\"a\", \"b\", \"c\"]`). Slashes can be escaped by using a backslash (e.g. `a/b/c/d` has the path components `[\"a\", \"b/c\", \"d\"]`). This format is not enforced by Rivet, but the tools built around Rivet KV work better if this format is used. - #[serde(rename = "key")] - pub key: String, - /// A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. - #[serde(rename = "value", deserialize_with = "Option::deserialize")] - pub value: Option, -} - -impl KvEntry { - /// A key-value entry. - pub fn new(key: String, value: Option) -> KvEntry { - KvEntry { - deleted: None, - key, - value, - } - } -} - - diff --git a/sdks/rust/src/models/kv_get_batch_response.rs b/sdks/rust/src/models/kv_get_batch_response.rs deleted file mode 100644 index ce2f8fe4..00000000 --- a/sdks/rust/src/models/kv_get_batch_response.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 KvGetBatchResponse { - #[serde(rename = "entries")] - pub entries: Vec, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl KvGetBatchResponse { - pub fn new(entries: Vec, watch: crate::models::WatchResponse) -> KvGetBatchResponse { - KvGetBatchResponse { - entries, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/rust/src/models/kv_get_response.rs b/sdks/rust/src/models/kv_get_response.rs deleted file mode 100644 index b052ce6e..00000000 --- a/sdks/rust/src/models/kv_get_response.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 KvGetResponse { - /// Whether or not the entry has been deleted. Only set when watching this endpoint. - #[serde(rename = "deleted", skip_serializing_if = "Option::is_none")] - pub deleted: Option, - /// A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. - #[serde(rename = "value", deserialize_with = "Option::deserialize")] - pub value: Option, - #[serde(rename = "watch")] - pub watch: Box, -} - -impl KvGetResponse { - pub fn new(value: Option, watch: crate::models::WatchResponse) -> KvGetResponse { - KvGetResponse { - deleted: None, - value, - watch: Box::new(watch), - } - } -} - - diff --git a/sdks/rust/src/models/kv_list_response.rs b/sdks/rust/src/models/kv_list_response.rs deleted file mode 100644 index 33a1ce67..00000000 --- a/sdks/rust/src/models/kv_list_response.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 KvListResponse { - #[serde(rename = "entries")] - pub entries: Vec, -} - -impl KvListResponse { - pub fn new(entries: Vec) -> KvListResponse { - KvListResponse { - entries, - } - } -} - - diff --git a/sdks/rust/src/models/kv_put_batch_request.rs b/sdks/rust/src/models/kv_put_batch_request.rs deleted file mode 100644 index 200342b1..00000000 --- a/sdks/rust/src/models/kv_put_batch_request.rs +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 KvPutBatchRequest { - #[serde(rename = "entries")] - pub entries: Vec, - #[serde(rename = "namespace_id", skip_serializing_if = "Option::is_none")] - pub namespace_id: Option, -} - -impl KvPutBatchRequest { - pub fn new(entries: Vec) -> KvPutBatchRequest { - KvPutBatchRequest { - entries, - namespace_id: None, - } - } -} - - diff --git a/sdks/rust/src/models/kv_put_entry.rs b/sdks/rust/src/models/kv_put_entry.rs deleted file mode 100644 index 504417b7..00000000 --- a/sdks/rust/src/models/kv_put_entry.rs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 0.0.1 - * - * Generated by: https://openapi-generator.tech - */ - -/// KvPutEntry : A new entry to insert into the key-value database. - - - -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] -pub struct KvPutEntry { - /// A string representing a key in the key-value database. Maximum length of 512 characters. _Recommended Key Path Format_ Key path components are split by a slash (e.g. `a/b/c` has the path components `[\"a\", \"b\", \"c\"]`). Slashes can be escaped by using a backslash (e.g. `a/b/c/d` has the path components `[\"a\", \"b/c\", \"d\"]`). This format is not enforced by Rivet, but the tools built around Rivet KV work better if this format is used. - #[serde(rename = "key")] - pub key: String, - /// A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. - #[serde(rename = "value", deserialize_with = "Option::deserialize")] - pub value: Option, -} - -impl KvPutEntry { - /// A new entry to insert into the key-value database. - pub fn new(key: String, value: Option) -> KvPutEntry { - KvPutEntry { - key, - value, - } - } -} - - diff --git a/sdks/rust/src/models/kv_put_request.rs b/sdks/rust/src/models/kv_put_request.rs deleted file mode 100644 index d6cd7c95..00000000 --- a/sdks/rust/src/models/kv_put_request.rs +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Rivet API EE - * - * No description provided (generated 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 KvPutRequest { - /// A string representing a key in the key-value database. Maximum length of 512 characters. _Recommended Key Path Format_ Key path components are split by a slash (e.g. `a/b/c` has the path components `[\"a\", \"b\", \"c\"]`). Slashes can be escaped by using a backslash (e.g. `a/b/c/d` has the path components `[\"a\", \"b/c\", \"d\"]`). This format is not enforced by Rivet, but the tools built around Rivet KV work better if this format is used. - #[serde(rename = "key")] - pub key: String, - #[serde(rename = "namespace_id", skip_serializing_if = "Option::is_none")] - pub namespace_id: Option, - /// A JSON object stored in the KV database. A `null` value indicates the entry is deleted. Maximum length of 262,144 bytes when encoded. - #[serde(rename = "value", deserialize_with = "Option::deserialize")] - pub value: Option, -} - -impl KvPutRequest { - pub fn new(key: String, value: Option) -> KvPutRequest { - KvPutRequest { - key, - namespace_id: None, - value, - } - } -} - - diff --git a/sdks/rust/src/models/mod.rs b/sdks/rust/src/models/mod.rs index 7589b313..e0003e75 100644 --- a/sdks/rust/src/models/mod.rs +++ b/sdks/rust/src/models/mod.rs @@ -1,45 +1,67 @@ -pub mod admin_clusters_build_delivery_method; -pub use self::admin_clusters_build_delivery_method::AdminClustersBuildDeliveryMethod; -pub mod admin_clusters_cluster; -pub use self::admin_clusters_cluster::AdminClustersCluster; -pub mod admin_clusters_create_cluster_request; -pub use self::admin_clusters_create_cluster_request::AdminClustersCreateClusterRequest; -pub mod admin_clusters_create_cluster_response; -pub use self::admin_clusters_create_cluster_response::AdminClustersCreateClusterResponse; -pub mod admin_clusters_create_datacenter_request; -pub use self::admin_clusters_create_datacenter_request::AdminClustersCreateDatacenterRequest; -pub mod admin_clusters_create_datacenter_response; -pub use self::admin_clusters_create_datacenter_response::AdminClustersCreateDatacenterResponse; -pub mod admin_clusters_datacenter; -pub use self::admin_clusters_datacenter::AdminClustersDatacenter; -pub mod admin_clusters_hardware; -pub use self::admin_clusters_hardware::AdminClustersHardware; -pub mod admin_clusters_list_clusters_response; -pub use self::admin_clusters_list_clusters_response::AdminClustersListClustersResponse; -pub mod admin_clusters_list_datacenters_response; -pub use self::admin_clusters_list_datacenters_response::AdminClustersListDatacentersResponse; -pub mod admin_clusters_list_servers_response; -pub use self::admin_clusters_list_servers_response::AdminClustersListServersResponse; -pub mod admin_clusters_pool; -pub use self::admin_clusters_pool::AdminClustersPool; -pub mod admin_clusters_pool_type; -pub use self::admin_clusters_pool_type::AdminClustersPoolType; -pub mod admin_clusters_pool_update; -pub use self::admin_clusters_pool_update::AdminClustersPoolUpdate; -pub mod admin_clusters_provider; -pub use self::admin_clusters_provider::AdminClustersProvider; -pub mod admin_clusters_server; -pub use self::admin_clusters_server::AdminClustersServer; -pub mod admin_clusters_update_datacenter_request; -pub use self::admin_clusters_update_datacenter_request::AdminClustersUpdateDatacenterRequest; -pub mod admin_login_request; -pub use self::admin_login_request::AdminLoginRequest; -pub mod admin_login_response; -pub use self::admin_login_response::AdminLoginResponse; +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_game_guard_routing; +pub use self::actor_game_guard_routing::ActorGameGuardRouting; +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_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 auth_complete_status; pub use self::auth_complete_status::AuthCompleteStatus; -pub mod auth_identity_complete_access_token_verification_request; -pub use self::auth_identity_complete_access_token_verification_request::AuthIdentityCompleteAccessTokenVerificationRequest; 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; @@ -524,8 +546,6 @@ 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_search_response; -pub use self::group_search_response::GroupSearchResponse; pub mod group_summary; pub use self::group_summary::GroupSummary; pub mod group_transfer_ownership_request; @@ -536,12 +556,6 @@ 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_access_token_linked_account; -pub use self::identity_access_token_linked_account::IdentityAccessTokenLinkedAccount; -pub mod identity_cancel_game_link_request; -pub use self::identity_cancel_game_link_request::IdentityCancelGameLinkRequest; -pub mod identity_complete_game_link_request; -pub use self::identity_complete_game_link_request::IdentityCompleteGameLinkRequest; pub mod identity_dev_state; pub use self::identity_dev_state::IdentityDevState; pub mod identity_email_linked_account; @@ -552,10 +566,6 @@ 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_game_link_new_identity; -pub use self::identity_get_game_link_new_identity::IdentityGetGameLinkNewIdentity; -pub mod identity_get_game_link_response; -pub use self::identity_get_game_link_response::IdentityGetGameLinkResponse; pub mod identity_get_handles_response; pub use self::identity_get_handles_response::IdentityGetHandlesResponse; pub mod identity_get_profile_response; @@ -568,8 +578,6 @@ 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_matchmaker_lobby_join; -pub use self::identity_global_event_matchmaker_lobby_join::IdentityGlobalEventMatchmakerLobbyJoin; pub mod identity_global_event_notification; pub use self::identity_global_event_notification::IdentityGlobalEventNotification; pub mod identity_group; @@ -580,30 +588,12 @@ 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_list_followers_response; -pub use self::identity_list_followers_response::IdentityListFollowersResponse; -pub mod identity_list_following_response; -pub use self::identity_list_following_response::IdentityListFollowingResponse; -pub mod identity_list_friends_response; -pub use self::identity_list_friends_response::IdentityListFriendsResponse; -pub mod identity_list_mutual_friends_response; -pub use self::identity_list_mutual_friends_response::IdentityListMutualFriendsResponse; -pub mod identity_list_recent_followers_response; -pub use self::identity_list_recent_followers_response::IdentityListRecentFollowersResponse; 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_prepare_game_link_response; -pub use self::identity_prepare_game_link_response::IdentityPrepareGameLinkResponse; -pub mod identity_presence; -pub use self::identity_presence::IdentityPresence; pub mod identity_profile; pub use self::identity_profile::IdentityProfile; -pub mod identity_report_request; -pub use self::identity_report_request::IdentityReportRequest; -pub mod identity_search_response; -pub use self::identity_search_response::IdentitySearchResponse; pub mod identity_set_game_activity_request; pub use self::identity_set_game_activity_request::IdentitySetGameActivityRequest; pub mod identity_setup_request; @@ -626,20 +616,6 @@ 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 kv_entry; -pub use self::kv_entry::KvEntry; -pub mod kv_get_batch_response; -pub use self::kv_get_batch_response::KvGetBatchResponse; -pub mod kv_get_response; -pub use self::kv_get_response::KvGetResponse; -pub mod kv_list_response; -pub use self::kv_list_response::KvListResponse; -pub mod kv_put_batch_request; -pub use self::kv_put_batch_request::KvPutBatchRequest; -pub mod kv_put_entry; -pub use self::kv_put_entry::KvPutEntry; -pub mod kv_put_request; -pub use self::kv_put_request::KvPutRequest; pub mod matchmaker_create_lobby_response; pub use self::matchmaker_create_lobby_response::MatchmakerCreateLobbyResponse; pub mod matchmaker_custom_lobby_publicity; diff --git a/sdks/rust/src/models/provision_servers_get_info_response.rs b/sdks/rust/src/models/provision_servers_get_info_response.rs index 7d581a75..8ddd9c7b 100644 --- a/sdks/rust/src/models/provision_servers_get_info_response.rs +++ b/sdks/rust/src/models/provision_servers_get_info_response.rs @@ -19,6 +19,8 @@ pub struct ProvisionServersGetInfoResponse { 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")] @@ -26,11 +28,12 @@ pub struct ProvisionServersGetInfoResponse { } impl ProvisionServersGetInfoResponse { - pub fn new(cluster_id: uuid::Uuid, datacenter_id: uuid::Uuid, name: String, server_id: uuid::Uuid, vlan_ip: String) -> 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/rust/src/models/servers_create_build_request.rs b/sdks/rust/src/models/servers_create_build_request.rs index 4fd3d10a..f89c2c3e 100644 --- a/sdks/rust/src/models/servers_create_build_request.rs +++ b/sdks/rust/src/models/servers_create_build_request.rs @@ -26,6 +26,8 @@ pub struct ServersCreateBuildRequest { 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 { @@ -37,6 +39,7 @@ impl ServersCreateBuildRequest { kind: None, multipart_upload: None, name, + prewarm_datacenters: None, } } }