From 01a868f54bde2cef3cc5c38b9322fba2b01899cb Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Tue, 14 Apr 2026 23:18:26 -0700 Subject: [PATCH] Configure TLS trust roots for rustls clients --- CLAUDE.md | 7 + Cargo.lock | 69 +- Cargo.toml | 3 +- engine/packages/pools/Cargo.toml | 1 - examples/sandbox/package.json | 1 + examples/sandbox/vite.config.ts | 1 + pnpm-lock.yaml | 68 +- rivetkit-rust/Cargo.lock | 573 +-- rivetkit-rust/packages/client/Cargo.toml | 5 +- .../packages/client/src/remote_manager.rs | 20 +- .../engine-runner-protocol/src/index.ts | 3400 ++++++++--------- website/src/content/docs/self-hosting/tls.mdx | 19 + website/src/sitemap/mod.ts | 4 + 13 files changed, 1797 insertions(+), 2374 deletions(-) create mode 100644 website/src/content/docs/self-hosting/tls.mdx diff --git a/CLAUDE.md b/CLAUDE.md index 1ddf643a58..d1ee82e50a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -350,6 +350,13 @@ let error_with_meta = ApiRateLimited { limit: 100, reset_at: 1234567890 }.build( - Never build a new reqwest client from scratch. Use `rivet_pools::reqwest::client().await?` to access an existing reqwest client instance. +## TLS Trust Roots + +- For rustls-based outbound TLS clients (`tokio-tungstenite`, `reqwest`), always enable BOTH `rustls-tls-native-roots` and `rustls-tls-webpki-roots` together so the crates build a union root store — operator-installed corporate CAs work via native, and empty native stores (Distroless / Cloud Run / Alpine without `ca-certificates`) fall through to the bundled Mozilla list. +- Pinned in workspace `Cargo.toml` (`tokio-tungstenite`) and in `rivetkit-rust/packages/client/Cargo.toml` (`reqwest` + `tokio-tungstenite`). Never enable only one: native-only breaks on Distroless, webpki-only silently breaks corporate CAs. +- Engine-internal HTTPS clients on `hyper-tls` / `native-tls` (workspace `reqwest`, ClickHouse pool, guard HTTP proxy) intentionally stay on OpenSSL — they run in operator-controlled containers and already honor the system trust store. +- Bump `webpki-roots` periodically so the bundled Mozilla CA list does not go stale. + ## Documentation - When talking about "Rivet Actors" make sure to capitalize "Rivet Actor" as a proper noun and lowercase "actor" as a generic noun diff --git a/Cargo.lock b/Cargo.lock index 043aaad33d..5e48fa1c56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -666,7 +666,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -2062,7 +2062,7 @@ checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" dependencies = [ "cfg-if", "libc", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -2953,17 +2953,17 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.14" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", "openssl", - "openssl-probe 0.1.6", + "openssl-probe 0.2.1", "openssl-sys", "schannel", - "security-framework 2.11.1", + "security-framework 3.6.0", "security-framework-sys", "tempfile", ] @@ -3198,9 +3198,9 @@ checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "bfe4646e360ec77dff7dde40ed3d6c5fee52d156ef4a62f53973d38294dad87f" dependencies = [ "bitflags", "cfg-if", @@ -3236,9 +3236,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "ad2f2c0eba47118757e4c6d2bff2838f3e0523380021356e7875e858372ce644" dependencies = [ "cc", "libc", @@ -4909,7 +4909,6 @@ dependencies = [ "tempfile", "thiserror 1.0.69", "tokio", - "tokio-native-tls", "tokio-util", "tracing", "tracing-logfmt", @@ -5345,7 +5344,7 @@ dependencies = [ "openssl-probe 0.2.1", "rustls-pki-types", "schannel", - "security-framework 3.5.1", + "security-framework 3.6.0", ] [[package]] @@ -5449,11 +5448,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5539,9 +5538,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.5.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" dependencies = [ "bitflags", "core-foundation 0.10.1", @@ -5552,9 +5551,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -6547,6 +6546,7 @@ dependencies = [ "tokio", "tokio-rustls", "tungstenite", + "webpki-roots 0.26.11", ] [[package]] @@ -7432,7 +7432,7 @@ dependencies = [ "windows-collections", "windows-core 0.61.2", "windows-future", - "windows-link", + "windows-link 0.1.3", "windows-numerics", ] @@ -7466,7 +7466,7 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement 0.60.0", "windows-interface 0.59.1", - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -7478,7 +7478,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", "windows-threading", ] @@ -7532,6 +7532,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-numerics" version = "0.2.0" @@ -7539,7 +7545,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -7548,7 +7554,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -7568,7 +7574,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -7587,7 +7593,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -7626,6 +7632,15 @@ dependencies = [ "windows-targets 0.53.2", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -7679,7 +7694,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 3c6cb3ece4..06117b9241 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -134,7 +134,6 @@ members = [ testcontainers = "0.24" thiserror = "1.0.64" tokio-cron-scheduler = "0.13.0" - tokio-native-tls = "0.3.1" tokio-stream = "0.1.15" tokio-util = "0.7" tower = "0.5" @@ -147,7 +146,7 @@ members = [ [workspace.dependencies.tokio-tungstenite] version = "0.26.0" - features = [ "rustls-tls-native-roots" ] + features = [ "rustls-tls-native-roots", "rustls-tls-webpki-roots" ] [workspace.dependencies.vergen] version = "9.0.4" diff --git a/engine/packages/pools/Cargo.toml b/engine/packages/pools/Cargo.toml index f8433f10b2..48b51f554a 100644 --- a/engine/packages/pools/Cargo.toml +++ b/engine/packages/pools/Cargo.toml @@ -21,7 +21,6 @@ rivet-util.workspace = true serde.workspace = true tempfile.workspace = true thiserror.workspace = true -tokio-native-tls.workspace = true tokio-util.workspace = true tokio.workspace = true tracing-logfmt.workspace = true diff --git a/examples/sandbox/package.json b/examples/sandbox/package.json index e71fb925e3..97fd284de6 100644 --- a/examples/sandbox/package.json +++ b/examples/sandbox/package.json @@ -29,6 +29,7 @@ "@hono/node-server": "^1.19.7", "@hono/node-ws": "^1.3.0", "@rivetkit/react": "*", + "@rivetkit/rivetkit-native": "*", "ai": "^4.0.38", "fdb-tuple": "^1.0.0", "hono": "^4.11.3", diff --git a/examples/sandbox/vite.config.ts b/examples/sandbox/vite.config.ts index d6411dd196..e27b91c045 100644 --- a/examples/sandbox/vite.config.ts +++ b/examples/sandbox/vite.config.ts @@ -19,5 +19,6 @@ export default defineConfig({ plugins: [react(), sqlRawPlugin(), ...srvx({ entry: "src/server.ts" })], ssr: { noExternal: true, + external: ["@rivetkit/rivetkit-native", "@rivetkit/rivetkit-native/wrapper"], }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d789970d9..0495468498 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,8 +69,6 @@ importers: specifier: ^8.8.5 version: 8.8.5 - engine: {} - engine/sdks/typescript/api-full: dependencies: form-data: @@ -1387,22 +1385,6 @@ importers: specifier: ^3.1.1 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.10)(@vitest/ui@3.1.1)(less@4.4.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@22.19.10)(typescript@5.9.3))(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0) - examples/global-smoke-test: - dependencies: - rivetkit: - specifier: workspace:* - version: link:../../rivetkit-typescript/packages/rivetkit - devDependencies: - '@types/node': - specifier: ^22.13.9 - version: 22.19.15 - tsx: - specifier: ^4.7.1 - version: 4.21.0 - typescript: - specifier: ^5.5.2 - version: 5.9.3 - examples/hello-world: dependencies: '@rivetkit/react': @@ -2701,6 +2683,9 @@ importers: '@rivetkit/react': specifier: workspace:* version: link:../../rivetkit-typescript/packages/react + '@rivetkit/rivetkit-native': + specifier: workspace:* + version: link:../../rivetkit-typescript/packages/rivetkit-native ai: specifier: ^4.0.38 version: 4.3.19(react@19.1.0)(zod@3.25.76) @@ -4546,46 +4531,6 @@ importers: specifier: ^8.5.0 version: 8.5.1(@microsoft/api-extractor@7.53.2(@types/node@22.19.10))(@swc/core@1.15.11(@swc/helpers@0.5.17))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) - rivetkit-typescript/packages/sqlite-native: - devDependencies: - '@napi-rs/cli': - specifier: ^2.18.0 - version: 2.18.4 - - rivetkit-typescript/packages/sqlite-vfs: - dependencies: - '@rivetkit/bare-ts': - specifier: ^0.6.2 - version: 0.6.2 - '@rivetkit/sqlite': - specifier: ^0.1.1 - version: 0.1.1 - vbare: - specifier: ^0.0.4 - version: 0.0.4 - devDependencies: - '@bare-ts/tools': - specifier: ^0.13.0 - version: 0.13.0(@bare-ts/lib@0.6.0) - '@types/node': - specifier: ^22.13.1 - version: 22.19.15 - commander: - specifier: ^12.0.0 - version: 12.1.0 - tsup: - specifier: ^8.4.0 - version: 8.5.1(@microsoft/api-extractor@7.53.2(@types/node@22.19.15))(@swc/core@1.15.11(@swc/helpers@0.5.17))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) - tsx: - specifier: ^4.7.0 - version: 4.21.0 - typescript: - specifier: ^5.7.3 - version: 5.9.3 - vitest: - specifier: ^3.1.1 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.15)(less@4.4.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@22.19.15)(typescript@5.9.3))(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0) - rivetkit-typescript/packages/traces: dependencies: '@rivetkit/bare-ts': @@ -9592,9 +9537,6 @@ packages: resolution: {integrity: sha512-5RC9Ze/wTKqSlJvopdCgr+EfyV93+iiH8Thog0QXrl8PT1unuBNw/jadXNMtwgAxrIaCJL+JLaHQH9w7rqpMDw==} engines: {node: '>=20'} - '@rivetkit/sqlite@0.1.1': - resolution: {integrity: sha512-NE7ZBy/hQhOrWzMZFjkHX9SoXxf+ILcDvVV+mNbUYPgiy/fsDzlXdK0+JDTGnko5f4Xl6/KVCoCozz9gkwkq8A==} - '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -14130,9 +14072,11 @@ packages: freestyle-sandboxes@0.0.66: resolution: {integrity: sha512-3rgkjq5bU2pwe2kfX58gcuHtCoP9RfHx3Zbh4BCPxlzJntyPG/VTtXR1e9z12JLt3lnGdUsEqs/sfhMso1Lslw==} + deprecated: This package has been deprecated. Please use freestyle instead. freestyle-sandboxes@0.0.95: resolution: {integrity: sha512-Wsw8i8EE6f1vfJVZNsS/5c/Lp5Cx2DUiOy+3HjU3R+mA8296fIQs+6pNMg0T0nNZaEgqTNEDQqMoBckNZz+gWA==} + deprecated: This package has been deprecated. Please use freestyle instead. fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} @@ -25508,8 +25452,6 @@ snapshots: '@rivetkit/on-change@6.0.2-rc.1': {} - '@rivetkit/sqlite@0.1.1': {} - '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/pluginutils@5.3.0(rollup@4.57.1)': diff --git a/rivetkit-rust/Cargo.lock b/rivetkit-rust/Cargo.lock index 86a22c717a..3c3c96645b 100644 --- a/rivetkit-rust/Cargo.lock +++ b/rivetkit-rust/Cargo.lock @@ -23,12 +23,6 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -78,6 +72,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "core-foundation" version = "0.9.4" @@ -175,23 +175,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "eventsource-client" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee53bc484c1ff2390bbf8744b4f8c405fccadb38700de6ed43c8f22b8da9280c" -dependencies = [ - "base64 0.22.1", - "futures", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "hyper-timeout", - "log", - "pin-project", - "rand 0.8.5", - "tokio", -] - [[package]] name = "fastrand" version = "2.4.1" @@ -216,21 +199,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -246,21 +214,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" -[[package]] -name = "futures" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - [[package]] name = "futures-channel" version = "0.3.32" @@ -268,7 +221,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -277,23 +229,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" -[[package]] -name = "futures-executor" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" - [[package]] name = "futures-macro" version = "0.3.32" @@ -323,13 +258,10 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ - "futures-channel", "futures-core", - "futures-io", "futures-macro", "futures-sink", "futures-task", - "memchr", "pin-project-lite", "slab", ] @@ -351,8 +283,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -362,9 +296,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 5.3.0", "wasip2", + "wasm-bindgen", ] [[package]] @@ -380,25 +316,6 @@ dependencies = [ "wasip3", ] -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.13" @@ -410,7 +327,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http", "indexmap", "slab", "tokio", @@ -445,17 +362,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.4.0" @@ -466,17 +372,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -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" @@ -484,7 +379,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http", ] [[package]] @@ -495,8 +390,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", - "http-body 1.0.1", + "http", + "http-body", "pin-project-lite", ] @@ -506,36 +401,6 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.9.0" @@ -546,9 +411,9 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.13", - "http 1.4.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "httparse", "itoa", "pin-project-lite", @@ -557,63 +422,21 @@ dependencies = [ "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.32", - "log", - "rustls 0.21.12", - "rustls-native-certs", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2b52f86d1d4bc0d6b4e6826d960b1b333217e07d36b882dca570a5e1c48895b" dependencies = [ - "http 1.4.0", - "hyper 1.9.0", - "hyper-util", - "rustls 0.23.38", - "tokio", - "tokio-rustls 0.26.4", - "tower-service", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper 0.14.32", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper 1.9.0", + "http", + "hyper", "hyper-util", - "native-tls", + "rustls", + "rustls-native-certs", "tokio", - "tokio-native-tls", + "tokio-rustls", "tower-service", + "webpki-roots 1.0.6", ] [[package]] @@ -622,13 +445,13 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-util", - "http 1.4.0", - "http-body 1.0.1", - "hyper 1.9.0", + "http", + "http-body", + "hyper", "ipnet", "libc", "percent-encoding", @@ -841,6 +664,12 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "matchers" version = "0.2.0" @@ -873,23 +702,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "native-tls" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe 0.2.1", - "openssl-sys", - "schannel", - "security-framework 3.7.0", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -905,56 +717,12 @@ version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -[[package]] -name = "openssl" -version = "0.10.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe4646e360ec77dff7dde40ed3d6c5fee52d156ef4a62f53973d38294dad87f" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-sys" -version = "0.9.113" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad2f2c0eba47118757e4c6d2bff2838f3e0523380021356e7875e858372ce644" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "parking_lot" version = "0.12.5" @@ -984,38 +752,12 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "pin-project" -version = "1.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "pin-project-lite" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "pkg-config" -version = "0.3.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" - [[package]] name = "portpicker" version = "0.1.1" @@ -1062,6 +804,61 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2 0.5.10", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.3", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.10", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.45" @@ -1174,31 +971,32 @@ version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", - "h2 0.4.13", - "http 1.4.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "http-body-util", - "hyper 1.9.0", - "hyper-rustls 0.27.8", - "hyper-tls", + "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", "mime", - "native-tls", "percent-encoding", "pin-project-lite", + "quinn", + "rustls", + "rustls-native-certs", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-native-tls", + "tokio-rustls", "tower", "tower-http", "tower-service", @@ -1206,6 +1004,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webpki-roots 1.0.6", ] [[package]] @@ -1227,8 +1026,7 @@ name = "rivetkit-client" version = "0.9.0-rc.2" dependencies = [ "anyhow", - "base64 0.22.1", - "eventsource-client", + "base64", "fs_extra", "futures-util", "portpicker", @@ -1246,6 +1044,12 @@ dependencies = [ "urlencoding", ] +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + [[package]] name = "rustix" version = "1.1.4" @@ -1259,18 +1063,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.23.38" @@ -1278,31 +1070,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21" dependencies = [ "once_cell", + "ring", "rustls-pki-types", - "rustls-webpki 0.103.11", + "rustls-webpki", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.6.3" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe 0.1.6", - "rustls-pemfile", + "openssl-probe", + "rustls-pki-types", "schannel", - "security-framework 2.11.1", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", + "security-framework", ] [[package]] @@ -1311,19 +1095,10 @@ version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ + "web-time", "zeroize", ] -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.103.11" @@ -1362,29 +1137,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -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", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - [[package]] name = "security-framework" version = "3.7.0" @@ -1663,6 +1415,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.51.1" @@ -1680,16 +1447,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "tokio-io-timeout" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd86198d9ee903fedd2f9a2e72014287c0d9167e4ae43b5853007205dda1b76" -dependencies = [ - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-macros" version = "2.7.0" @@ -1701,33 +1458,13 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-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.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.38", + "rustls", "tokio", ] @@ -1761,10 +1498,13 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "native-tls", + "rustls", + "rustls-native-certs", + "rustls-pki-types", "tokio", - "tokio-native-tls", + "tokio-rustls", "tungstenite", + "webpki-roots 0.26.11", ] [[package]] @@ -1804,8 +1544,8 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http 1.4.0", - "http-body 1.0.1", + "http", + "http-body", "iri-string", "pin-project-lite", "tower", @@ -1900,11 +1640,12 @@ checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ "bytes", "data-encoding", - "http 1.4.0", + "http", "httparse", "log", - "native-tls", "rand 0.9.3", + "rustls", + "rustls-pki-types", "sha1", "thiserror", "utf-8", @@ -1970,12 +1711,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -2114,6 +1849,34 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.6", +] + +[[package]] +name = "webpki-roots" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "windows-link" version = "0.2.1" diff --git a/rivetkit-rust/packages/client/Cargo.toml b/rivetkit-rust/packages/client/Cargo.toml index 113a559a6b..8815e6eb69 100644 --- a/rivetkit-rust/packages/client/Cargo.toml +++ b/rivetkit-rust/packages/client/Cargo.toml @@ -11,14 +11,13 @@ repository = "https://github.com/rivet-dev/rivet" [dependencies] anyhow = "1.0" base64 = "0.22.1" -eventsource-client = "0.14.0" futures-util = "0.3.31" -reqwest = { version = "0.12.12", features = ["json"] } +reqwest = { version = "0.12.12", default-features = false, features = ["json", "charset", "http2", "macos-system-configuration", "rustls-tls-native-roots", "rustls-tls-webpki-roots"] } serde = { version = "1.0", features = ["derive"] } serde_cbor = "0.11.2" serde_json = "1.0" tokio = { version = "1", features = ["full"] } -tokio-tungstenite = { version = "0.26.1", features = ["native-tls", "handshake"] } +tokio-tungstenite = { version = "0.26.1", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots", "handshake"] } tracing = "0.1.41" tungstenite = "0.26.2" urlencoding = "2.1.3" diff --git a/rivetkit-rust/packages/client/src/remote_manager.rs b/rivetkit-rust/packages/client/src/remote_manager.rs index 8c107e93b8..94876fcef9 100644 --- a/rivetkit-rust/packages/client/src/remote_manager.rs +++ b/rivetkit-rust/packages/client/src/remote_manager.rs @@ -20,6 +20,7 @@ use crate::{ pub struct RemoteManager { endpoint: String, token: Option, + client: reqwest::Client, } #[derive(Debug, Serialize, Deserialize)] @@ -66,14 +67,14 @@ impl RemoteManager { Self { endpoint: endpoint.to_string(), token, + client: reqwest::Client::new(), } } pub async fn get_for_id(&self, name: &str, actor_id: &str) -> Result> { let url = format!("{}/actors?name={}&actor_ids={}", self.endpoint, urlencoding::encode(name), urlencoding::encode(actor_id)); - let client = reqwest::Client::new(); - let mut req = client.get(&url).header(USER_AGENT, USER_AGENT_VALUE); + let mut req = self.client.get(&url).header(USER_AGENT, USER_AGENT_VALUE); if let Some(token) = &self.token { req = req.header(HEADER_RIVET_TOKEN, token); @@ -102,8 +103,7 @@ impl RemoteManager { let key_str = serde_json::to_string(key)?; let url = format!("{}/actors?name={}&key={}", self.endpoint, urlencoding::encode(name), urlencoding::encode(&key_str)); - let client = reqwest::Client::new(); - let mut req = client.get(&url).header(USER_AGENT, USER_AGENT_VALUE); + let mut req = self.client.get(&url).header(USER_AGENT, USER_AGENT_VALUE); if let Some(token) = &self.token { req = req.header(HEADER_RIVET_TOKEN, token); @@ -148,8 +148,8 @@ impl RemoteManager { input: input_encoded, }; - let client = reqwest::Client::new(); - let mut req = client + let mut req = self + .client .put(format!("{}/actors", self.endpoint)) .header(USER_AGENT, USER_AGENT_VALUE) .json(&request_body); @@ -189,8 +189,8 @@ impl RemoteManager { input: input_encoded, }; - let client = reqwest::Client::new(); - let mut req = client + let mut req = self + .client .post(format!("{}/actors", self.endpoint)) .header(USER_AGENT, USER_AGENT_VALUE) .json(&request_body); @@ -246,8 +246,8 @@ impl RemoteManager { ) -> Result { let url = format!("{}{}", self.endpoint, path); - let client = reqwest::Client::new(); - let mut req = client + let mut req = self + .client .request( reqwest::Method::from_bytes(method.as_bytes())?, &url, diff --git a/rivetkit-typescript/packages/engine-runner-protocol/src/index.ts b/rivetkit-typescript/packages/engine-runner-protocol/src/index.ts index adb913efdd..1ee90bbfd4 100644 --- a/rivetkit-typescript/packages/engine-runner-protocol/src/index.ts +++ b/rivetkit-typescript/packages/engine-runner-protocol/src/index.ts @@ -1,2515 +1,2189 @@ // @generated - post-processed by build.rs -import * as bare from "@rivetkit/bare-ts"; +import * as bare from "@rivetkit/bare-ts" -const DEFAULT_CONFIG = /* @__PURE__ */ bare.Config({}); +const DEFAULT_CONFIG = /* @__PURE__ */ bare.Config({}) -export type i64 = bigint; -export type u16 = number; -export type u32 = number; -export type u64 = bigint; +export type i64 = bigint +export type u16 = number +export type u32 = number +export type u64 = bigint -export type Id = string; +export type Id = string export function readId(bc: bare.ByteCursor): Id { - return bare.readString(bc); + return bare.readString(bc) } export function writeId(bc: bare.ByteCursor, x: Id): void { - bare.writeString(bc, x); + bare.writeString(bc, x) } -export type Json = string; +export type Json = string export function readJson(bc: bare.ByteCursor): Json { - return bare.readString(bc); + return bare.readString(bc) } export function writeJson(bc: bare.ByteCursor, x: Json): void { - bare.writeString(bc, x); + bare.writeString(bc, x) } -export type GatewayId = ArrayBuffer; +export type GatewayId = ArrayBuffer export function readGatewayId(bc: bare.ByteCursor): GatewayId { - return bare.readFixedData(bc, 4); + return bare.readFixedData(bc, 4) } export function writeGatewayId(bc: bare.ByteCursor, x: GatewayId): void { - assert(x.byteLength === 4); - bare.writeFixedData(bc, x); + assert(x.byteLength === 4) + bare.writeFixedData(bc, x) } -export type RequestId = ArrayBuffer; +export type RequestId = ArrayBuffer export function readRequestId(bc: bare.ByteCursor): RequestId { - return bare.readFixedData(bc, 4); + return bare.readFixedData(bc, 4) } export function writeRequestId(bc: bare.ByteCursor, x: RequestId): void { - assert(x.byteLength === 4); - bare.writeFixedData(bc, x); + assert(x.byteLength === 4) + bare.writeFixedData(bc, x) } -export type MessageIndex = u16; +export type MessageIndex = u16 export function readMessageIndex(bc: bare.ByteCursor): MessageIndex { - return bare.readU16(bc); + return bare.readU16(bc) } export function writeMessageIndex(bc: bare.ByteCursor, x: MessageIndex): void { - bare.writeU16(bc, x); + bare.writeU16(bc, x) } /** * Basic types */ -export type KvKey = ArrayBuffer; +export type KvKey = ArrayBuffer export function readKvKey(bc: bare.ByteCursor): KvKey { - return bare.readData(bc); + return bare.readData(bc) } export function writeKvKey(bc: bare.ByteCursor, x: KvKey): void { - bare.writeData(bc, x); + bare.writeData(bc, x) } -export type KvValue = ArrayBuffer; +export type KvValue = ArrayBuffer export function readKvValue(bc: bare.ByteCursor): KvValue { - return bare.readData(bc); + return bare.readData(bc) } export function writeKvValue(bc: bare.ByteCursor, x: KvValue): void { - bare.writeData(bc, x); + bare.writeData(bc, x) } export type KvMetadata = { - readonly version: ArrayBuffer; - readonly updateTs: i64; -}; + readonly version: ArrayBuffer + readonly updateTs: i64 +} export function readKvMetadata(bc: bare.ByteCursor): KvMetadata { - return { - version: bare.readData(bc), - updateTs: bare.readI64(bc), - }; + return { + version: bare.readData(bc), + updateTs: bare.readI64(bc), + } } export function writeKvMetadata(bc: bare.ByteCursor, x: KvMetadata): void { - bare.writeData(bc, x.version); - bare.writeI64(bc, x.updateTs); + bare.writeData(bc, x.version) + bare.writeI64(bc, x.updateTs) } /** * Query types */ -export type KvListAllQuery = null; +export type KvListAllQuery = null export type KvListRangeQuery = { - readonly start: KvKey; - readonly end: KvKey; - readonly exclusive: boolean; -}; + readonly start: KvKey + readonly end: KvKey + readonly exclusive: boolean +} export function readKvListRangeQuery(bc: bare.ByteCursor): KvListRangeQuery { - return { - start: readKvKey(bc), - end: readKvKey(bc), - exclusive: bare.readBool(bc), - }; + return { + start: readKvKey(bc), + end: readKvKey(bc), + exclusive: bare.readBool(bc), + } } -export function writeKvListRangeQuery( - bc: bare.ByteCursor, - x: KvListRangeQuery, -): void { - writeKvKey(bc, x.start); - writeKvKey(bc, x.end); - bare.writeBool(bc, x.exclusive); +export function writeKvListRangeQuery(bc: bare.ByteCursor, x: KvListRangeQuery): void { + writeKvKey(bc, x.start) + writeKvKey(bc, x.end) + bare.writeBool(bc, x.exclusive) } export type KvListPrefixQuery = { - readonly key: KvKey; -}; + readonly key: KvKey +} export function readKvListPrefixQuery(bc: bare.ByteCursor): KvListPrefixQuery { - return { - key: readKvKey(bc), - }; + return { + key: readKvKey(bc), + } } -export function writeKvListPrefixQuery( - bc: bare.ByteCursor, - x: KvListPrefixQuery, -): void { - writeKvKey(bc, x.key); +export function writeKvListPrefixQuery(bc: bare.ByteCursor, x: KvListPrefixQuery): void { + writeKvKey(bc, x.key) } export type KvListQuery = - | { readonly tag: "KvListAllQuery"; readonly val: KvListAllQuery } - | { readonly tag: "KvListRangeQuery"; readonly val: KvListRangeQuery } - | { readonly tag: "KvListPrefixQuery"; readonly val: KvListPrefixQuery }; + | { readonly tag: "KvListAllQuery"; readonly val: KvListAllQuery } + | { readonly tag: "KvListRangeQuery"; readonly val: KvListRangeQuery } + | { readonly tag: "KvListPrefixQuery"; readonly val: KvListPrefixQuery } export function readKvListQuery(bc: bare.ByteCursor): KvListQuery { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "KvListAllQuery", val: null }; - case 1: - return { tag: "KvListRangeQuery", val: readKvListRangeQuery(bc) }; - case 2: - return { tag: "KvListPrefixQuery", val: readKvListPrefixQuery(bc) }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "KvListAllQuery", val: null } + case 1: + return { tag: "KvListRangeQuery", val: readKvListRangeQuery(bc) } + case 2: + return { tag: "KvListPrefixQuery", val: readKvListPrefixQuery(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeKvListQuery(bc: bare.ByteCursor, x: KvListQuery): void { - switch (x.tag) { - case "KvListAllQuery": { - bare.writeU8(bc, 0); - break; - } - case "KvListRangeQuery": { - bare.writeU8(bc, 1); - writeKvListRangeQuery(bc, x.val); - break; - } - case "KvListPrefixQuery": { - bare.writeU8(bc, 2); - writeKvListPrefixQuery(bc, x.val); - break; - } - } + switch (x.tag) { + case "KvListAllQuery": { + bare.writeU8(bc, 0) + break + } + case "KvListRangeQuery": { + bare.writeU8(bc, 1) + writeKvListRangeQuery(bc, x.val) + break + } + case "KvListPrefixQuery": { + bare.writeU8(bc, 2) + writeKvListPrefixQuery(bc, x.val) + break + } + } } function read0(bc: bare.ByteCursor): readonly KvKey[] { - const len = bare.readUintSafe(bc); - if (len === 0) { - return []; - } - const result = [readKvKey(bc)]; - for (let i = 1; i < len; i++) { - result[i] = readKvKey(bc); - } - return result; + const len = bare.readUintSafe(bc) + if (len === 0) { + return [] + } + const result = [readKvKey(bc)] + for (let i = 1; i < len; i++) { + result[i] = readKvKey(bc) + } + return result } function write0(bc: bare.ByteCursor, x: readonly KvKey[]): void { - bare.writeUintSafe(bc, x.length); - for (let i = 0; i < x.length; i++) { - writeKvKey(bc, x[i]); - } + bare.writeUintSafe(bc, x.length) + for (let i = 0; i < x.length; i++) { + writeKvKey(bc, x[i]) + } } /** * Request types */ export type KvGetRequest = { - readonly keys: readonly KvKey[]; -}; + readonly keys: readonly KvKey[] +} export function readKvGetRequest(bc: bare.ByteCursor): KvGetRequest { - return { - keys: read0(bc), - }; + return { + keys: read0(bc), + } } export function writeKvGetRequest(bc: bare.ByteCursor, x: KvGetRequest): void { - write0(bc, x.keys); + write0(bc, x.keys) } function read1(bc: bare.ByteCursor): boolean | null { - return bare.readBool(bc) ? bare.readBool(bc) : null; + return bare.readBool(bc) ? bare.readBool(bc) : null } function write1(bc: bare.ByteCursor, x: boolean | null): void { - bare.writeBool(bc, x != null); - if (x != null) { - bare.writeBool(bc, x); - } + bare.writeBool(bc, x != null) + if (x != null) { + bare.writeBool(bc, x) + } } function read2(bc: bare.ByteCursor): u64 | null { - return bare.readBool(bc) ? bare.readU64(bc) : null; + return bare.readBool(bc) ? bare.readU64(bc) : null } function write2(bc: bare.ByteCursor, x: u64 | null): void { - bare.writeBool(bc, x != null); - if (x != null) { - bare.writeU64(bc, x); - } + bare.writeBool(bc, x != null) + if (x != null) { + bare.writeU64(bc, x) + } } export type KvListRequest = { - readonly query: KvListQuery; - readonly reverse: boolean | null; - readonly limit: u64 | null; -}; + readonly query: KvListQuery + readonly reverse: boolean | null + readonly limit: u64 | null +} export function readKvListRequest(bc: bare.ByteCursor): KvListRequest { - return { - query: readKvListQuery(bc), - reverse: read1(bc), - limit: read2(bc), - }; + return { + query: readKvListQuery(bc), + reverse: read1(bc), + limit: read2(bc), + } } -export function writeKvListRequest( - bc: bare.ByteCursor, - x: KvListRequest, -): void { - writeKvListQuery(bc, x.query); - write1(bc, x.reverse); - write2(bc, x.limit); +export function writeKvListRequest(bc: bare.ByteCursor, x: KvListRequest): void { + writeKvListQuery(bc, x.query) + write1(bc, x.reverse) + write2(bc, x.limit) } function read3(bc: bare.ByteCursor): readonly KvValue[] { - const len = bare.readUintSafe(bc); - if (len === 0) { - return []; - } - const result = [readKvValue(bc)]; - for (let i = 1; i < len; i++) { - result[i] = readKvValue(bc); - } - return result; + const len = bare.readUintSafe(bc) + if (len === 0) { + return [] + } + const result = [readKvValue(bc)] + for (let i = 1; i < len; i++) { + result[i] = readKvValue(bc) + } + return result } function write3(bc: bare.ByteCursor, x: readonly KvValue[]): void { - bare.writeUintSafe(bc, x.length); - for (let i = 0; i < x.length; i++) { - writeKvValue(bc, x[i]); - } + bare.writeUintSafe(bc, x.length) + for (let i = 0; i < x.length; i++) { + writeKvValue(bc, x[i]) + } } export type KvPutRequest = { - readonly keys: readonly KvKey[]; - readonly values: readonly KvValue[]; -}; + readonly keys: readonly KvKey[] + readonly values: readonly KvValue[] +} export function readKvPutRequest(bc: bare.ByteCursor): KvPutRequest { - return { - keys: read0(bc), - values: read3(bc), - }; + return { + keys: read0(bc), + values: read3(bc), + } } export function writeKvPutRequest(bc: bare.ByteCursor, x: KvPutRequest): void { - write0(bc, x.keys); - write3(bc, x.values); + write0(bc, x.keys) + write3(bc, x.values) } export type KvDeleteRequest = { - readonly keys: readonly KvKey[]; -}; + readonly keys: readonly KvKey[] +} export function readKvDeleteRequest(bc: bare.ByteCursor): KvDeleteRequest { - return { - keys: read0(bc), - }; + return { + keys: read0(bc), + } } -export function writeKvDeleteRequest( - bc: bare.ByteCursor, - x: KvDeleteRequest, -): void { - write0(bc, x.keys); +export function writeKvDeleteRequest(bc: bare.ByteCursor, x: KvDeleteRequest): void { + write0(bc, x.keys) } export type KvDeleteRangeRequest = { - readonly start: KvKey; - readonly end: KvKey; -}; + readonly start: KvKey + readonly end: KvKey +} -export function readKvDeleteRangeRequest( - bc: bare.ByteCursor, -): KvDeleteRangeRequest { - return { - start: readKvKey(bc), - end: readKvKey(bc), - }; +export function readKvDeleteRangeRequest(bc: bare.ByteCursor): KvDeleteRangeRequest { + return { + start: readKvKey(bc), + end: readKvKey(bc), + } } -export function writeKvDeleteRangeRequest( - bc: bare.ByteCursor, - x: KvDeleteRangeRequest, -): void { - writeKvKey(bc, x.start); - writeKvKey(bc, x.end); +export function writeKvDeleteRangeRequest(bc: bare.ByteCursor, x: KvDeleteRangeRequest): void { + writeKvKey(bc, x.start) + writeKvKey(bc, x.end) } -export type KvDropRequest = null; +export type KvDropRequest = null /** * Response types */ export type KvErrorResponse = { - readonly message: string; -}; + readonly message: string +} export function readKvErrorResponse(bc: bare.ByteCursor): KvErrorResponse { - return { - message: bare.readString(bc), - }; + return { + message: bare.readString(bc), + } } -export function writeKvErrorResponse( - bc: bare.ByteCursor, - x: KvErrorResponse, -): void { - bare.writeString(bc, x.message); +export function writeKvErrorResponse(bc: bare.ByteCursor, x: KvErrorResponse): void { + bare.writeString(bc, x.message) } function read4(bc: bare.ByteCursor): readonly KvMetadata[] { - const len = bare.readUintSafe(bc); - if (len === 0) { - return []; - } - const result = [readKvMetadata(bc)]; - for (let i = 1; i < len; i++) { - result[i] = readKvMetadata(bc); - } - return result; + const len = bare.readUintSafe(bc) + if (len === 0) { + return [] + } + const result = [readKvMetadata(bc)] + for (let i = 1; i < len; i++) { + result[i] = readKvMetadata(bc) + } + return result } function write4(bc: bare.ByteCursor, x: readonly KvMetadata[]): void { - bare.writeUintSafe(bc, x.length); - for (let i = 0; i < x.length; i++) { - writeKvMetadata(bc, x[i]); - } + bare.writeUintSafe(bc, x.length) + for (let i = 0; i < x.length; i++) { + writeKvMetadata(bc, x[i]) + } } export type KvGetResponse = { - readonly keys: readonly KvKey[]; - readonly values: readonly KvValue[]; - readonly metadata: readonly KvMetadata[]; -}; + readonly keys: readonly KvKey[] + readonly values: readonly KvValue[] + readonly metadata: readonly KvMetadata[] +} export function readKvGetResponse(bc: bare.ByteCursor): KvGetResponse { - return { - keys: read0(bc), - values: read3(bc), - metadata: read4(bc), - }; + return { + keys: read0(bc), + values: read3(bc), + metadata: read4(bc), + } } -export function writeKvGetResponse( - bc: bare.ByteCursor, - x: KvGetResponse, -): void { - write0(bc, x.keys); - write3(bc, x.values); - write4(bc, x.metadata); +export function writeKvGetResponse(bc: bare.ByteCursor, x: KvGetResponse): void { + write0(bc, x.keys) + write3(bc, x.values) + write4(bc, x.metadata) } export type KvListResponse = { - readonly keys: readonly KvKey[]; - readonly values: readonly KvValue[]; - readonly metadata: readonly KvMetadata[]; -}; + readonly keys: readonly KvKey[] + readonly values: readonly KvValue[] + readonly metadata: readonly KvMetadata[] +} export function readKvListResponse(bc: bare.ByteCursor): KvListResponse { - return { - keys: read0(bc), - values: read3(bc), - metadata: read4(bc), - }; + return { + keys: read0(bc), + values: read3(bc), + metadata: read4(bc), + } } -export function writeKvListResponse( - bc: bare.ByteCursor, - x: KvListResponse, -): void { - write0(bc, x.keys); - write3(bc, x.values); - write4(bc, x.metadata); +export function writeKvListResponse(bc: bare.ByteCursor, x: KvListResponse): void { + write0(bc, x.keys) + write3(bc, x.values) + write4(bc, x.metadata) } -export type KvPutResponse = null; +export type KvPutResponse = null -export type KvDeleteResponse = null; +export type KvDeleteResponse = null -export type KvDropResponse = null; +export type KvDropResponse = null /** * Request/Response unions */ export type KvRequestData = - | { readonly tag: "KvGetRequest"; readonly val: KvGetRequest } - | { readonly tag: "KvListRequest"; readonly val: KvListRequest } - | { readonly tag: "KvPutRequest"; readonly val: KvPutRequest } - | { readonly tag: "KvDeleteRequest"; readonly val: KvDeleteRequest } - | { - readonly tag: "KvDeleteRangeRequest"; - readonly val: KvDeleteRangeRequest; - } - | { readonly tag: "KvDropRequest"; readonly val: KvDropRequest }; + | { readonly tag: "KvGetRequest"; readonly val: KvGetRequest } + | { readonly tag: "KvListRequest"; readonly val: KvListRequest } + | { readonly tag: "KvPutRequest"; readonly val: KvPutRequest } + | { readonly tag: "KvDeleteRequest"; readonly val: KvDeleteRequest } + | { readonly tag: "KvDeleteRangeRequest"; readonly val: KvDeleteRangeRequest } + | { readonly tag: "KvDropRequest"; readonly val: KvDropRequest } export function readKvRequestData(bc: bare.ByteCursor): KvRequestData { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "KvGetRequest", val: readKvGetRequest(bc) }; - case 1: - return { tag: "KvListRequest", val: readKvListRequest(bc) }; - case 2: - return { tag: "KvPutRequest", val: readKvPutRequest(bc) }; - case 3: - return { tag: "KvDeleteRequest", val: readKvDeleteRequest(bc) }; - case 4: - return { - tag: "KvDeleteRangeRequest", - val: readKvDeleteRangeRequest(bc), - }; - case 5: - return { tag: "KvDropRequest", val: null }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } -} - -export function writeKvRequestData( - bc: bare.ByteCursor, - x: KvRequestData, -): void { - switch (x.tag) { - case "KvGetRequest": { - bare.writeU8(bc, 0); - writeKvGetRequest(bc, x.val); - break; - } - case "KvListRequest": { - bare.writeU8(bc, 1); - writeKvListRequest(bc, x.val); - break; - } - case "KvPutRequest": { - bare.writeU8(bc, 2); - writeKvPutRequest(bc, x.val); - break; - } - case "KvDeleteRequest": { - bare.writeU8(bc, 3); - writeKvDeleteRequest(bc, x.val); - break; - } - case "KvDeleteRangeRequest": { - bare.writeU8(bc, 4); - writeKvDeleteRangeRequest(bc, x.val); - break; - } - case "KvDropRequest": { - bare.writeU8(bc, 5); - break; - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "KvGetRequest", val: readKvGetRequest(bc) } + case 1: + return { tag: "KvListRequest", val: readKvListRequest(bc) } + case 2: + return { tag: "KvPutRequest", val: readKvPutRequest(bc) } + case 3: + return { tag: "KvDeleteRequest", val: readKvDeleteRequest(bc) } + case 4: + return { tag: "KvDeleteRangeRequest", val: readKvDeleteRangeRequest(bc) } + case 5: + return { tag: "KvDropRequest", val: null } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } +} + +export function writeKvRequestData(bc: bare.ByteCursor, x: KvRequestData): void { + switch (x.tag) { + case "KvGetRequest": { + bare.writeU8(bc, 0) + writeKvGetRequest(bc, x.val) + break + } + case "KvListRequest": { + bare.writeU8(bc, 1) + writeKvListRequest(bc, x.val) + break + } + case "KvPutRequest": { + bare.writeU8(bc, 2) + writeKvPutRequest(bc, x.val) + break + } + case "KvDeleteRequest": { + bare.writeU8(bc, 3) + writeKvDeleteRequest(bc, x.val) + break + } + case "KvDeleteRangeRequest": { + bare.writeU8(bc, 4) + writeKvDeleteRangeRequest(bc, x.val) + break + } + case "KvDropRequest": { + bare.writeU8(bc, 5) + break + } + } } export type KvResponseData = - | { readonly tag: "KvErrorResponse"; readonly val: KvErrorResponse } - | { readonly tag: "KvGetResponse"; readonly val: KvGetResponse } - | { readonly tag: "KvListResponse"; readonly val: KvListResponse } - | { readonly tag: "KvPutResponse"; readonly val: KvPutResponse } - | { readonly tag: "KvDeleteResponse"; readonly val: KvDeleteResponse } - | { readonly tag: "KvDropResponse"; readonly val: KvDropResponse }; + | { readonly tag: "KvErrorResponse"; readonly val: KvErrorResponse } + | { readonly tag: "KvGetResponse"; readonly val: KvGetResponse } + | { readonly tag: "KvListResponse"; readonly val: KvListResponse } + | { readonly tag: "KvPutResponse"; readonly val: KvPutResponse } + | { readonly tag: "KvDeleteResponse"; readonly val: KvDeleteResponse } + | { readonly tag: "KvDropResponse"; readonly val: KvDropResponse } export function readKvResponseData(bc: bare.ByteCursor): KvResponseData { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "KvErrorResponse", val: readKvErrorResponse(bc) }; - case 1: - return { tag: "KvGetResponse", val: readKvGetResponse(bc) }; - case 2: - return { tag: "KvListResponse", val: readKvListResponse(bc) }; - case 3: - return { tag: "KvPutResponse", val: null }; - case 4: - return { tag: "KvDeleteResponse", val: null }; - case 5: - return { tag: "KvDropResponse", val: null }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } -} - -export function writeKvResponseData( - bc: bare.ByteCursor, - x: KvResponseData, -): void { - switch (x.tag) { - case "KvErrorResponse": { - bare.writeU8(bc, 0); - writeKvErrorResponse(bc, x.val); - break; - } - case "KvGetResponse": { - bare.writeU8(bc, 1); - writeKvGetResponse(bc, x.val); - break; - } - case "KvListResponse": { - bare.writeU8(bc, 2); - writeKvListResponse(bc, x.val); - break; - } - case "KvPutResponse": { - bare.writeU8(bc, 3); - break; - } - case "KvDeleteResponse": { - bare.writeU8(bc, 4); - break; - } - case "KvDropResponse": { - bare.writeU8(bc, 5); - break; - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "KvErrorResponse", val: readKvErrorResponse(bc) } + case 1: + return { tag: "KvGetResponse", val: readKvGetResponse(bc) } + case 2: + return { tag: "KvListResponse", val: readKvListResponse(bc) } + case 3: + return { tag: "KvPutResponse", val: null } + case 4: + return { tag: "KvDeleteResponse", val: null } + case 5: + return { tag: "KvDropResponse", val: null } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } +} + +export function writeKvResponseData(bc: bare.ByteCursor, x: KvResponseData): void { + switch (x.tag) { + case "KvErrorResponse": { + bare.writeU8(bc, 0) + writeKvErrorResponse(bc, x.val) + break + } + case "KvGetResponse": { + bare.writeU8(bc, 1) + writeKvGetResponse(bc, x.val) + break + } + case "KvListResponse": { + bare.writeU8(bc, 2) + writeKvListResponse(bc, x.val) + break + } + case "KvPutResponse": { + bare.writeU8(bc, 3) + break + } + case "KvDeleteResponse": { + bare.writeU8(bc, 4) + break + } + case "KvDropResponse": { + bare.writeU8(bc, 5) + break + } + } } /** * Core */ export enum StopCode { - Ok = "Ok", - Error = "Error", + Ok = "Ok", + Error = "Error", } export function readStopCode(bc: bare.ByteCursor): StopCode { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return StopCode.Ok; - case 1: - return StopCode.Error; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return StopCode.Ok + case 1: + return StopCode.Error + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeStopCode(bc: bare.ByteCursor, x: StopCode): void { - switch (x) { - case StopCode.Ok: { - bare.writeU8(bc, 0); - break; - } - case StopCode.Error: { - bare.writeU8(bc, 1); - break; - } - } + switch (x) { + case StopCode.Ok: { + bare.writeU8(bc, 0) + break + } + case StopCode.Error: { + bare.writeU8(bc, 1) + break + } + } } export type ActorName = { - readonly metadata: Json; -}; + readonly metadata: Json +} export function readActorName(bc: bare.ByteCursor): ActorName { - return { - metadata: readJson(bc), - }; + return { + metadata: readJson(bc), + } } export function writeActorName(bc: bare.ByteCursor, x: ActorName): void { - writeJson(bc, x.metadata); + writeJson(bc, x.metadata) } function read5(bc: bare.ByteCursor): string | null { - return bare.readBool(bc) ? bare.readString(bc) : null; + return bare.readBool(bc) ? bare.readString(bc) : null } function write5(bc: bare.ByteCursor, x: string | null): void { - bare.writeBool(bc, x != null); - if (x != null) { - bare.writeString(bc, x); - } + bare.writeBool(bc, x != null) + if (x != null) { + bare.writeString(bc, x) + } } function read6(bc: bare.ByteCursor): ArrayBuffer | null { - return bare.readBool(bc) ? bare.readData(bc) : null; + return bare.readBool(bc) ? bare.readData(bc) : null } function write6(bc: bare.ByteCursor, x: ArrayBuffer | null): void { - bare.writeBool(bc, x != null); - if (x != null) { - bare.writeData(bc, x); - } + bare.writeBool(bc, x != null) + if (x != null) { + bare.writeData(bc, x) + } } export type ActorConfig = { - readonly name: string; - readonly key: string | null; - readonly createTs: i64; - readonly input: ArrayBuffer | null; -}; + readonly name: string + readonly key: string | null + readonly createTs: i64 + readonly input: ArrayBuffer | null +} export function readActorConfig(bc: bare.ByteCursor): ActorConfig { - return { - name: bare.readString(bc), - key: read5(bc), - createTs: bare.readI64(bc), - input: read6(bc), - }; + return { + name: bare.readString(bc), + key: read5(bc), + createTs: bare.readI64(bc), + input: read6(bc), + } } export function writeActorConfig(bc: bare.ByteCursor, x: ActorConfig): void { - bare.writeString(bc, x.name); - write5(bc, x.key); - bare.writeI64(bc, x.createTs); - write6(bc, x.input); + bare.writeString(bc, x.name) + write5(bc, x.key) + bare.writeI64(bc, x.createTs) + write6(bc, x.input) } export type ActorCheckpoint = { - readonly actorId: Id; - readonly generation: u32; - readonly index: i64; -}; + readonly actorId: Id + readonly generation: u32 + readonly index: i64 +} export function readActorCheckpoint(bc: bare.ByteCursor): ActorCheckpoint { - return { - actorId: readId(bc), - generation: bare.readU32(bc), - index: bare.readI64(bc), - }; + return { + actorId: readId(bc), + generation: bare.readU32(bc), + index: bare.readI64(bc), + } } -export function writeActorCheckpoint( - bc: bare.ByteCursor, - x: ActorCheckpoint, -): void { - writeId(bc, x.actorId); - bare.writeU32(bc, x.generation); - bare.writeI64(bc, x.index); +export function writeActorCheckpoint(bc: bare.ByteCursor, x: ActorCheckpoint): void { + writeId(bc, x.actorId) + bare.writeU32(bc, x.generation) + bare.writeI64(bc, x.index) } /** * Intent */ -export type ActorIntentSleep = null; +export type ActorIntentSleep = null -export type ActorIntentStop = null; +export type ActorIntentStop = null export type ActorIntent = - | { readonly tag: "ActorIntentSleep"; readonly val: ActorIntentSleep } - | { readonly tag: "ActorIntentStop"; readonly val: ActorIntentStop }; + | { readonly tag: "ActorIntentSleep"; readonly val: ActorIntentSleep } + | { readonly tag: "ActorIntentStop"; readonly val: ActorIntentStop } export function readActorIntent(bc: bare.ByteCursor): ActorIntent { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "ActorIntentSleep", val: null }; - case 1: - return { tag: "ActorIntentStop", val: null }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ActorIntentSleep", val: null } + case 1: + return { tag: "ActorIntentStop", val: null } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeActorIntent(bc: bare.ByteCursor, x: ActorIntent): void { - switch (x.tag) { - case "ActorIntentSleep": { - bare.writeU8(bc, 0); - break; - } - case "ActorIntentStop": { - bare.writeU8(bc, 1); - break; - } - } + switch (x.tag) { + case "ActorIntentSleep": { + bare.writeU8(bc, 0) + break + } + case "ActorIntentStop": { + bare.writeU8(bc, 1) + break + } + } } /** * State */ -export type ActorStateRunning = null; +export type ActorStateRunning = null export type ActorStateStopped = { - readonly code: StopCode; - readonly message: string | null; -}; + readonly code: StopCode + readonly message: string | null +} export function readActorStateStopped(bc: bare.ByteCursor): ActorStateStopped { - return { - code: readStopCode(bc), - message: read5(bc), - }; + return { + code: readStopCode(bc), + message: read5(bc), + } } -export function writeActorStateStopped( - bc: bare.ByteCursor, - x: ActorStateStopped, -): void { - writeStopCode(bc, x.code); - write5(bc, x.message); +export function writeActorStateStopped(bc: bare.ByteCursor, x: ActorStateStopped): void { + writeStopCode(bc, x.code) + write5(bc, x.message) } export type ActorState = - | { readonly tag: "ActorStateRunning"; readonly val: ActorStateRunning } - | { readonly tag: "ActorStateStopped"; readonly val: ActorStateStopped }; + | { readonly tag: "ActorStateRunning"; readonly val: ActorStateRunning } + | { readonly tag: "ActorStateStopped"; readonly val: ActorStateStopped } export function readActorState(bc: bare.ByteCursor): ActorState { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "ActorStateRunning", val: null }; - case 1: - return { tag: "ActorStateStopped", val: readActorStateStopped(bc) }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ActorStateRunning", val: null } + case 1: + return { tag: "ActorStateStopped", val: readActorStateStopped(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeActorState(bc: bare.ByteCursor, x: ActorState): void { - switch (x.tag) { - case "ActorStateRunning": { - bare.writeU8(bc, 0); - break; - } - case "ActorStateStopped": { - bare.writeU8(bc, 1); - writeActorStateStopped(bc, x.val); - break; - } - } + switch (x.tag) { + case "ActorStateRunning": { + bare.writeU8(bc, 0) + break + } + case "ActorStateStopped": { + bare.writeU8(bc, 1) + writeActorStateStopped(bc, x.val) + break + } + } } /** * MARK: Events */ export type EventActorIntent = { - readonly intent: ActorIntent; -}; + readonly intent: ActorIntent +} export function readEventActorIntent(bc: bare.ByteCursor): EventActorIntent { - return { - intent: readActorIntent(bc), - }; + return { + intent: readActorIntent(bc), + } } -export function writeEventActorIntent( - bc: bare.ByteCursor, - x: EventActorIntent, -): void { - writeActorIntent(bc, x.intent); +export function writeEventActorIntent(bc: bare.ByteCursor, x: EventActorIntent): void { + writeActorIntent(bc, x.intent) } export type EventActorStateUpdate = { - readonly state: ActorState; -}; + readonly state: ActorState +} -export function readEventActorStateUpdate( - bc: bare.ByteCursor, -): EventActorStateUpdate { - return { - state: readActorState(bc), - }; +export function readEventActorStateUpdate(bc: bare.ByteCursor): EventActorStateUpdate { + return { + state: readActorState(bc), + } } -export function writeEventActorStateUpdate( - bc: bare.ByteCursor, - x: EventActorStateUpdate, -): void { - writeActorState(bc, x.state); +export function writeEventActorStateUpdate(bc: bare.ByteCursor, x: EventActorStateUpdate): void { + writeActorState(bc, x.state) } function read7(bc: bare.ByteCursor): i64 | null { - return bare.readBool(bc) ? bare.readI64(bc) : null; + return bare.readBool(bc) ? bare.readI64(bc) : null } function write7(bc: bare.ByteCursor, x: i64 | null): void { - bare.writeBool(bc, x != null); - if (x != null) { - bare.writeI64(bc, x); - } + bare.writeBool(bc, x != null) + if (x != null) { + bare.writeI64(bc, x) + } } export type EventActorSetAlarm = { - readonly alarmTs: i64 | null; -}; + readonly alarmTs: i64 | null +} -export function readEventActorSetAlarm( - bc: bare.ByteCursor, -): EventActorSetAlarm { - return { - alarmTs: read7(bc), - }; +export function readEventActorSetAlarm(bc: bare.ByteCursor): EventActorSetAlarm { + return { + alarmTs: read7(bc), + } } -export function writeEventActorSetAlarm( - bc: bare.ByteCursor, - x: EventActorSetAlarm, -): void { - write7(bc, x.alarmTs); +export function writeEventActorSetAlarm(bc: bare.ByteCursor, x: EventActorSetAlarm): void { + write7(bc, x.alarmTs) } export type Event = - | { readonly tag: "EventActorIntent"; readonly val: EventActorIntent } - | { - readonly tag: "EventActorStateUpdate"; - readonly val: EventActorStateUpdate; - } - | { readonly tag: "EventActorSetAlarm"; readonly val: EventActorSetAlarm }; + | { readonly tag: "EventActorIntent"; readonly val: EventActorIntent } + | { readonly tag: "EventActorStateUpdate"; readonly val: EventActorStateUpdate } + | { readonly tag: "EventActorSetAlarm"; readonly val: EventActorSetAlarm } export function readEvent(bc: bare.ByteCursor): Event { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "EventActorIntent", val: readEventActorIntent(bc) }; - case 1: - return { - tag: "EventActorStateUpdate", - val: readEventActorStateUpdate(bc), - }; - case 2: - return { - tag: "EventActorSetAlarm", - val: readEventActorSetAlarm(bc), - }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "EventActorIntent", val: readEventActorIntent(bc) } + case 1: + return { tag: "EventActorStateUpdate", val: readEventActorStateUpdate(bc) } + case 2: + return { tag: "EventActorSetAlarm", val: readEventActorSetAlarm(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeEvent(bc: bare.ByteCursor, x: Event): void { - switch (x.tag) { - case "EventActorIntent": { - bare.writeU8(bc, 0); - writeEventActorIntent(bc, x.val); - break; - } - case "EventActorStateUpdate": { - bare.writeU8(bc, 1); - writeEventActorStateUpdate(bc, x.val); - break; - } - case "EventActorSetAlarm": { - bare.writeU8(bc, 2); - writeEventActorSetAlarm(bc, x.val); - break; - } - } + switch (x.tag) { + case "EventActorIntent": { + bare.writeU8(bc, 0) + writeEventActorIntent(bc, x.val) + break + } + case "EventActorStateUpdate": { + bare.writeU8(bc, 1) + writeEventActorStateUpdate(bc, x.val) + break + } + case "EventActorSetAlarm": { + bare.writeU8(bc, 2) + writeEventActorSetAlarm(bc, x.val) + break + } + } } export type EventWrapper = { - readonly checkpoint: ActorCheckpoint; - readonly inner: Event; -}; + readonly checkpoint: ActorCheckpoint + readonly inner: Event +} export function readEventWrapper(bc: bare.ByteCursor): EventWrapper { - return { - checkpoint: readActorCheckpoint(bc), - inner: readEvent(bc), - }; + return { + checkpoint: readActorCheckpoint(bc), + inner: readEvent(bc), + } } export function writeEventWrapper(bc: bare.ByteCursor, x: EventWrapper): void { - writeActorCheckpoint(bc, x.checkpoint); - writeEvent(bc, x.inner); + writeActorCheckpoint(bc, x.checkpoint) + writeEvent(bc, x.inner) } export type HibernatingRequest = { - readonly gatewayId: GatewayId; - readonly requestId: RequestId; -}; + readonly gatewayId: GatewayId + readonly requestId: RequestId +} -export function readHibernatingRequest( - bc: bare.ByteCursor, -): HibernatingRequest { - return { - gatewayId: readGatewayId(bc), - requestId: readRequestId(bc), - }; +export function readHibernatingRequest(bc: bare.ByteCursor): HibernatingRequest { + return { + gatewayId: readGatewayId(bc), + requestId: readRequestId(bc), + } } -export function writeHibernatingRequest( - bc: bare.ByteCursor, - x: HibernatingRequest, -): void { - writeGatewayId(bc, x.gatewayId); - writeRequestId(bc, x.requestId); +export function writeHibernatingRequest(bc: bare.ByteCursor, x: HibernatingRequest): void { + writeGatewayId(bc, x.gatewayId) + writeRequestId(bc, x.requestId) } function read8(bc: bare.ByteCursor): readonly HibernatingRequest[] { - const len = bare.readUintSafe(bc); - if (len === 0) { - return []; - } - const result = [readHibernatingRequest(bc)]; - for (let i = 1; i < len; i++) { - result[i] = readHibernatingRequest(bc); - } - return result; + const len = bare.readUintSafe(bc) + if (len === 0) { + return [] + } + const result = [readHibernatingRequest(bc)] + for (let i = 1; i < len; i++) { + result[i] = readHibernatingRequest(bc) + } + return result } function write8(bc: bare.ByteCursor, x: readonly HibernatingRequest[]): void { - bare.writeUintSafe(bc, x.length); - for (let i = 0; i < x.length; i++) { - writeHibernatingRequest(bc, x[i]); - } + bare.writeUintSafe(bc, x.length) + for (let i = 0; i < x.length; i++) { + writeHibernatingRequest(bc, x[i]) + } } export type CommandStartActor = { - readonly config: ActorConfig; - readonly hibernatingRequests: readonly HibernatingRequest[]; -}; + readonly config: ActorConfig + readonly hibernatingRequests: readonly HibernatingRequest[] +} export function readCommandStartActor(bc: bare.ByteCursor): CommandStartActor { - return { - config: readActorConfig(bc), - hibernatingRequests: read8(bc), - }; + return { + config: readActorConfig(bc), + hibernatingRequests: read8(bc), + } } -export function writeCommandStartActor( - bc: bare.ByteCursor, - x: CommandStartActor, -): void { - writeActorConfig(bc, x.config); - write8(bc, x.hibernatingRequests); +export function writeCommandStartActor(bc: bare.ByteCursor, x: CommandStartActor): void { + writeActorConfig(bc, x.config) + write8(bc, x.hibernatingRequests) } -export type CommandStopActor = null; +export type CommandStopActor = null export type Command = - | { readonly tag: "CommandStartActor"; readonly val: CommandStartActor } - | { readonly tag: "CommandStopActor"; readonly val: CommandStopActor }; + | { readonly tag: "CommandStartActor"; readonly val: CommandStartActor } + | { readonly tag: "CommandStopActor"; readonly val: CommandStopActor } export function readCommand(bc: bare.ByteCursor): Command { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "CommandStartActor", val: readCommandStartActor(bc) }; - case 1: - return { tag: "CommandStopActor", val: null }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "CommandStartActor", val: readCommandStartActor(bc) } + case 1: + return { tag: "CommandStopActor", val: null } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeCommand(bc: bare.ByteCursor, x: Command): void { - switch (x.tag) { - case "CommandStartActor": { - bare.writeU8(bc, 0); - writeCommandStartActor(bc, x.val); - break; - } - case "CommandStopActor": { - bare.writeU8(bc, 1); - break; - } - } + switch (x.tag) { + case "CommandStartActor": { + bare.writeU8(bc, 0) + writeCommandStartActor(bc, x.val) + break + } + case "CommandStopActor": { + bare.writeU8(bc, 1) + break + } + } } export type CommandWrapper = { - readonly checkpoint: ActorCheckpoint; - readonly inner: Command; -}; + readonly checkpoint: ActorCheckpoint + readonly inner: Command +} export function readCommandWrapper(bc: bare.ByteCursor): CommandWrapper { - return { - checkpoint: readActorCheckpoint(bc), - inner: readCommand(bc), - }; + return { + checkpoint: readActorCheckpoint(bc), + inner: readCommand(bc), + } } -export function writeCommandWrapper( - bc: bare.ByteCursor, - x: CommandWrapper, -): void { - writeActorCheckpoint(bc, x.checkpoint); - writeCommand(bc, x.inner); +export function writeCommandWrapper(bc: bare.ByteCursor, x: CommandWrapper): void { + writeActorCheckpoint(bc, x.checkpoint) + writeCommand(bc, x.inner) } /** * We redeclare this so its top level */ export type ActorCommandKeyData = - | { readonly tag: "CommandStartActor"; readonly val: CommandStartActor } - | { readonly tag: "CommandStopActor"; readonly val: CommandStopActor }; - -export function readActorCommandKeyData( - bc: bare.ByteCursor, -): ActorCommandKeyData { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "CommandStartActor", val: readCommandStartActor(bc) }; - case 1: - return { tag: "CommandStopActor", val: null }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } -} - -export function writeActorCommandKeyData( - bc: bare.ByteCursor, - x: ActorCommandKeyData, -): void { - switch (x.tag) { - case "CommandStartActor": { - bare.writeU8(bc, 0); - writeCommandStartActor(bc, x.val); - break; - } - case "CommandStopActor": { - bare.writeU8(bc, 1); - break; - } - } -} - -export function encodeActorCommandKeyData( - x: ActorCommandKeyData, - config?: Partial, -): Uint8Array { - const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG; - const bc = new bare.ByteCursor( - new Uint8Array(fullConfig.initialBufferLength), - fullConfig, - ); - writeActorCommandKeyData(bc, x); - return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset); -} - -export function decodeActorCommandKeyData( - bytes: Uint8Array, -): ActorCommandKeyData { - const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG); - const result = readActorCommandKeyData(bc); - if (bc.offset < bc.view.byteLength) { - throw new bare.BareError(bc.offset, "remaining bytes"); - } - return result; + | { readonly tag: "CommandStartActor"; readonly val: CommandStartActor } + | { readonly tag: "CommandStopActor"; readonly val: CommandStopActor } + +export function readActorCommandKeyData(bc: bare.ByteCursor): ActorCommandKeyData { + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "CommandStartActor", val: readCommandStartActor(bc) } + case 1: + return { tag: "CommandStopActor", val: null } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } +} + +export function writeActorCommandKeyData(bc: bare.ByteCursor, x: ActorCommandKeyData): void { + switch (x.tag) { + case "CommandStartActor": { + bare.writeU8(bc, 0) + writeCommandStartActor(bc, x.val) + break + } + case "CommandStopActor": { + bare.writeU8(bc, 1) + break + } + } +} + +export function encodeActorCommandKeyData(x: ActorCommandKeyData, config?: Partial): Uint8Array { + const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG + const bc = new bare.ByteCursor( + new Uint8Array(fullConfig.initialBufferLength), + fullConfig, + ) + writeActorCommandKeyData(bc, x) + return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset) +} + +export function decodeActorCommandKeyData(bytes: Uint8Array): ActorCommandKeyData { + const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG) + const result = readActorCommandKeyData(bc) + if (bc.offset < bc.view.byteLength) { + throw new bare.BareError(bc.offset, "remaining bytes") + } + return result } export type MessageId = { - /** - * Globally unique ID - */ - readonly gatewayId: GatewayId; - /** - * Unique ID to the gateway - */ - readonly requestId: RequestId; - /** - * Unique ID to the request - */ - readonly messageIndex: MessageIndex; -}; + /** + * Globally unique ID + */ + readonly gatewayId: GatewayId + /** + * Unique ID to the gateway + */ + readonly requestId: RequestId + /** + * Unique ID to the request + */ + readonly messageIndex: MessageIndex +} export function readMessageId(bc: bare.ByteCursor): MessageId { - return { - gatewayId: readGatewayId(bc), - requestId: readRequestId(bc), - messageIndex: readMessageIndex(bc), - }; + return { + gatewayId: readGatewayId(bc), + requestId: readRequestId(bc), + messageIndex: readMessageIndex(bc), + } } export function writeMessageId(bc: bare.ByteCursor, x: MessageId): void { - writeGatewayId(bc, x.gatewayId); - writeRequestId(bc, x.requestId); - writeMessageIndex(bc, x.messageIndex); + writeGatewayId(bc, x.gatewayId) + writeRequestId(bc, x.requestId) + writeMessageIndex(bc, x.messageIndex) } function read9(bc: bare.ByteCursor): ReadonlyMap { - const len = bare.readUintSafe(bc); - const result = new Map(); - for (let i = 0; i < len; i++) { - const offset = bc.offset; - const key = bare.readString(bc); - if (result.has(key)) { - bc.offset = offset; - throw new bare.BareError(offset, "duplicated key"); - } - result.set(key, bare.readString(bc)); - } - return result; + const len = bare.readUintSafe(bc) + const result = new Map() + for (let i = 0; i < len; i++) { + const offset = bc.offset + const key = bare.readString(bc) + if (result.has(key)) { + bc.offset = offset + throw new bare.BareError(offset, "duplicated key") + } + result.set(key, bare.readString(bc)) + } + return result } function write9(bc: bare.ByteCursor, x: ReadonlyMap): void { - bare.writeUintSafe(bc, x.size); - for (const kv of x) { - bare.writeString(bc, kv[0]); - bare.writeString(bc, kv[1]); - } + bare.writeUintSafe(bc, x.size) + for (const kv of x) { + bare.writeString(bc, kv[0]) + bare.writeString(bc, kv[1]) + } } /** * HTTP */ export type ToClientRequestStart = { - readonly actorId: Id; - readonly method: string; - readonly path: string; - readonly headers: ReadonlyMap; - readonly body: ArrayBuffer | null; - readonly stream: boolean; -}; - -export function readToClientRequestStart( - bc: bare.ByteCursor, -): ToClientRequestStart { - return { - actorId: readId(bc), - method: bare.readString(bc), - path: bare.readString(bc), - headers: read9(bc), - body: read6(bc), - stream: bare.readBool(bc), - }; -} - -export function writeToClientRequestStart( - bc: bare.ByteCursor, - x: ToClientRequestStart, -): void { - writeId(bc, x.actorId); - bare.writeString(bc, x.method); - bare.writeString(bc, x.path); - write9(bc, x.headers); - write6(bc, x.body); - bare.writeBool(bc, x.stream); + readonly actorId: Id + readonly method: string + readonly path: string + readonly headers: ReadonlyMap + readonly body: ArrayBuffer | null + readonly stream: boolean +} + +export function readToClientRequestStart(bc: bare.ByteCursor): ToClientRequestStart { + return { + actorId: readId(bc), + method: bare.readString(bc), + path: bare.readString(bc), + headers: read9(bc), + body: read6(bc), + stream: bare.readBool(bc), + } +} + +export function writeToClientRequestStart(bc: bare.ByteCursor, x: ToClientRequestStart): void { + writeId(bc, x.actorId) + bare.writeString(bc, x.method) + bare.writeString(bc, x.path) + write9(bc, x.headers) + write6(bc, x.body) + bare.writeBool(bc, x.stream) } export type ToClientRequestChunk = { - readonly body: ArrayBuffer; - readonly finish: boolean; -}; + readonly body: ArrayBuffer + readonly finish: boolean +} -export function readToClientRequestChunk( - bc: bare.ByteCursor, -): ToClientRequestChunk { - return { - body: bare.readData(bc), - finish: bare.readBool(bc), - }; +export function readToClientRequestChunk(bc: bare.ByteCursor): ToClientRequestChunk { + return { + body: bare.readData(bc), + finish: bare.readBool(bc), + } } -export function writeToClientRequestChunk( - bc: bare.ByteCursor, - x: ToClientRequestChunk, -): void { - bare.writeData(bc, x.body); - bare.writeBool(bc, x.finish); +export function writeToClientRequestChunk(bc: bare.ByteCursor, x: ToClientRequestChunk): void { + bare.writeData(bc, x.body) + bare.writeBool(bc, x.finish) } -export type ToClientRequestAbort = null; +export type ToClientRequestAbort = null export type ToServerResponseStart = { - readonly status: u16; - readonly headers: ReadonlyMap; - readonly body: ArrayBuffer | null; - readonly stream: boolean; -}; - -export function readToServerResponseStart( - bc: bare.ByteCursor, -): ToServerResponseStart { - return { - status: bare.readU16(bc), - headers: read9(bc), - body: read6(bc), - stream: bare.readBool(bc), - }; -} - -export function writeToServerResponseStart( - bc: bare.ByteCursor, - x: ToServerResponseStart, -): void { - bare.writeU16(bc, x.status); - write9(bc, x.headers); - write6(bc, x.body); - bare.writeBool(bc, x.stream); + readonly status: u16 + readonly headers: ReadonlyMap + readonly body: ArrayBuffer | null + readonly stream: boolean +} + +export function readToServerResponseStart(bc: bare.ByteCursor): ToServerResponseStart { + return { + status: bare.readU16(bc), + headers: read9(bc), + body: read6(bc), + stream: bare.readBool(bc), + } +} + +export function writeToServerResponseStart(bc: bare.ByteCursor, x: ToServerResponseStart): void { + bare.writeU16(bc, x.status) + write9(bc, x.headers) + write6(bc, x.body) + bare.writeBool(bc, x.stream) } export type ToServerResponseChunk = { - readonly body: ArrayBuffer; - readonly finish: boolean; -}; + readonly body: ArrayBuffer + readonly finish: boolean +} -export function readToServerResponseChunk( - bc: bare.ByteCursor, -): ToServerResponseChunk { - return { - body: bare.readData(bc), - finish: bare.readBool(bc), - }; +export function readToServerResponseChunk(bc: bare.ByteCursor): ToServerResponseChunk { + return { + body: bare.readData(bc), + finish: bare.readBool(bc), + } } -export function writeToServerResponseChunk( - bc: bare.ByteCursor, - x: ToServerResponseChunk, -): void { - bare.writeData(bc, x.body); - bare.writeBool(bc, x.finish); +export function writeToServerResponseChunk(bc: bare.ByteCursor, x: ToServerResponseChunk): void { + bare.writeData(bc, x.body) + bare.writeBool(bc, x.finish) } -export type ToServerResponseAbort = null; +export type ToServerResponseAbort = null /** * WebSocket */ export type ToClientWebSocketOpen = { - readonly actorId: Id; - readonly path: string; - readonly headers: ReadonlyMap; -}; - -export function readToClientWebSocketOpen( - bc: bare.ByteCursor, -): ToClientWebSocketOpen { - return { - actorId: readId(bc), - path: bare.readString(bc), - headers: read9(bc), - }; -} - -export function writeToClientWebSocketOpen( - bc: bare.ByteCursor, - x: ToClientWebSocketOpen, -): void { - writeId(bc, x.actorId); - bare.writeString(bc, x.path); - write9(bc, x.headers); + readonly actorId: Id + readonly path: string + readonly headers: ReadonlyMap +} + +export function readToClientWebSocketOpen(bc: bare.ByteCursor): ToClientWebSocketOpen { + return { + actorId: readId(bc), + path: bare.readString(bc), + headers: read9(bc), + } +} + +export function writeToClientWebSocketOpen(bc: bare.ByteCursor, x: ToClientWebSocketOpen): void { + writeId(bc, x.actorId) + bare.writeString(bc, x.path) + write9(bc, x.headers) } export type ToClientWebSocketMessage = { - readonly data: ArrayBuffer; - readonly binary: boolean; -}; + readonly data: ArrayBuffer + readonly binary: boolean +} -export function readToClientWebSocketMessage( - bc: bare.ByteCursor, -): ToClientWebSocketMessage { - return { - data: bare.readData(bc), - binary: bare.readBool(bc), - }; +export function readToClientWebSocketMessage(bc: bare.ByteCursor): ToClientWebSocketMessage { + return { + data: bare.readData(bc), + binary: bare.readBool(bc), + } } -export function writeToClientWebSocketMessage( - bc: bare.ByteCursor, - x: ToClientWebSocketMessage, -): void { - bare.writeData(bc, x.data); - bare.writeBool(bc, x.binary); +export function writeToClientWebSocketMessage(bc: bare.ByteCursor, x: ToClientWebSocketMessage): void { + bare.writeData(bc, x.data) + bare.writeBool(bc, x.binary) } function read10(bc: bare.ByteCursor): u16 | null { - return bare.readBool(bc) ? bare.readU16(bc) : null; + return bare.readBool(bc) ? bare.readU16(bc) : null } function write10(bc: bare.ByteCursor, x: u16 | null): void { - bare.writeBool(bc, x != null); - if (x != null) { - bare.writeU16(bc, x); - } + bare.writeBool(bc, x != null) + if (x != null) { + bare.writeU16(bc, x) + } } export type ToClientWebSocketClose = { - readonly code: u16 | null; - readonly reason: string | null; -}; + readonly code: u16 | null + readonly reason: string | null +} -export function readToClientWebSocketClose( - bc: bare.ByteCursor, -): ToClientWebSocketClose { - return { - code: read10(bc), - reason: read5(bc), - }; +export function readToClientWebSocketClose(bc: bare.ByteCursor): ToClientWebSocketClose { + return { + code: read10(bc), + reason: read5(bc), + } } -export function writeToClientWebSocketClose( - bc: bare.ByteCursor, - x: ToClientWebSocketClose, -): void { - write10(bc, x.code); - write5(bc, x.reason); +export function writeToClientWebSocketClose(bc: bare.ByteCursor, x: ToClientWebSocketClose): void { + write10(bc, x.code) + write5(bc, x.reason) } export type ToServerWebSocketOpen = { - readonly canHibernate: boolean; -}; + readonly canHibernate: boolean +} -export function readToServerWebSocketOpen( - bc: bare.ByteCursor, -): ToServerWebSocketOpen { - return { - canHibernate: bare.readBool(bc), - }; +export function readToServerWebSocketOpen(bc: bare.ByteCursor): ToServerWebSocketOpen { + return { + canHibernate: bare.readBool(bc), + } } -export function writeToServerWebSocketOpen( - bc: bare.ByteCursor, - x: ToServerWebSocketOpen, -): void { - bare.writeBool(bc, x.canHibernate); +export function writeToServerWebSocketOpen(bc: bare.ByteCursor, x: ToServerWebSocketOpen): void { + bare.writeBool(bc, x.canHibernate) } export type ToServerWebSocketMessage = { - readonly data: ArrayBuffer; - readonly binary: boolean; -}; + readonly data: ArrayBuffer + readonly binary: boolean +} -export function readToServerWebSocketMessage( - bc: bare.ByteCursor, -): ToServerWebSocketMessage { - return { - data: bare.readData(bc), - binary: bare.readBool(bc), - }; +export function readToServerWebSocketMessage(bc: bare.ByteCursor): ToServerWebSocketMessage { + return { + data: bare.readData(bc), + binary: bare.readBool(bc), + } } -export function writeToServerWebSocketMessage( - bc: bare.ByteCursor, - x: ToServerWebSocketMessage, -): void { - bare.writeData(bc, x.data); - bare.writeBool(bc, x.binary); +export function writeToServerWebSocketMessage(bc: bare.ByteCursor, x: ToServerWebSocketMessage): void { + bare.writeData(bc, x.data) + bare.writeBool(bc, x.binary) } export type ToServerWebSocketMessageAck = { - readonly index: MessageIndex; -}; + readonly index: MessageIndex +} -export function readToServerWebSocketMessageAck( - bc: bare.ByteCursor, -): ToServerWebSocketMessageAck { - return { - index: readMessageIndex(bc), - }; +export function readToServerWebSocketMessageAck(bc: bare.ByteCursor): ToServerWebSocketMessageAck { + return { + index: readMessageIndex(bc), + } } -export function writeToServerWebSocketMessageAck( - bc: bare.ByteCursor, - x: ToServerWebSocketMessageAck, -): void { - writeMessageIndex(bc, x.index); +export function writeToServerWebSocketMessageAck(bc: bare.ByteCursor, x: ToServerWebSocketMessageAck): void { + writeMessageIndex(bc, x.index) } export type ToServerWebSocketClose = { - readonly code: u16 | null; - readonly reason: string | null; - readonly hibernate: boolean; -}; - -export function readToServerWebSocketClose( - bc: bare.ByteCursor, -): ToServerWebSocketClose { - return { - code: read10(bc), - reason: read5(bc), - hibernate: bare.readBool(bc), - }; -} - -export function writeToServerWebSocketClose( - bc: bare.ByteCursor, - x: ToServerWebSocketClose, -): void { - write10(bc, x.code); - write5(bc, x.reason); - bare.writeBool(bc, x.hibernate); + readonly code: u16 | null + readonly reason: string | null + readonly hibernate: boolean +} + +export function readToServerWebSocketClose(bc: bare.ByteCursor): ToServerWebSocketClose { + return { + code: read10(bc), + reason: read5(bc), + hibernate: bare.readBool(bc), + } +} + +export function writeToServerWebSocketClose(bc: bare.ByteCursor, x: ToServerWebSocketClose): void { + write10(bc, x.code) + write5(bc, x.reason) + bare.writeBool(bc, x.hibernate) } /** * To Server */ export type ToServerTunnelMessageKind = - /** - * HTTP - */ - | { - readonly tag: "ToServerResponseStart"; - readonly val: ToServerResponseStart; - } - | { - readonly tag: "ToServerResponseChunk"; - readonly val: ToServerResponseChunk; - } - | { - readonly tag: "ToServerResponseAbort"; - readonly val: ToServerResponseAbort; - } - /** - * WebSocket - */ - | { - readonly tag: "ToServerWebSocketOpen"; - readonly val: ToServerWebSocketOpen; - } - | { - readonly tag: "ToServerWebSocketMessage"; - readonly val: ToServerWebSocketMessage; - } - | { - readonly tag: "ToServerWebSocketMessageAck"; - readonly val: ToServerWebSocketMessageAck; - } - | { - readonly tag: "ToServerWebSocketClose"; - readonly val: ToServerWebSocketClose; - }; - -export function readToServerTunnelMessageKind( - bc: bare.ByteCursor, -): ToServerTunnelMessageKind { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { - tag: "ToServerResponseStart", - val: readToServerResponseStart(bc), - }; - case 1: - return { - tag: "ToServerResponseChunk", - val: readToServerResponseChunk(bc), - }; - case 2: - return { tag: "ToServerResponseAbort", val: null }; - case 3: - return { - tag: "ToServerWebSocketOpen", - val: readToServerWebSocketOpen(bc), - }; - case 4: - return { - tag: "ToServerWebSocketMessage", - val: readToServerWebSocketMessage(bc), - }; - case 5: - return { - tag: "ToServerWebSocketMessageAck", - val: readToServerWebSocketMessageAck(bc), - }; - case 6: - return { - tag: "ToServerWebSocketClose", - val: readToServerWebSocketClose(bc), - }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } -} - -export function writeToServerTunnelMessageKind( - bc: bare.ByteCursor, - x: ToServerTunnelMessageKind, -): void { - switch (x.tag) { - case "ToServerResponseStart": { - bare.writeU8(bc, 0); - writeToServerResponseStart(bc, x.val); - break; - } - case "ToServerResponseChunk": { - bare.writeU8(bc, 1); - writeToServerResponseChunk(bc, x.val); - break; - } - case "ToServerResponseAbort": { - bare.writeU8(bc, 2); - break; - } - case "ToServerWebSocketOpen": { - bare.writeU8(bc, 3); - writeToServerWebSocketOpen(bc, x.val); - break; - } - case "ToServerWebSocketMessage": { - bare.writeU8(bc, 4); - writeToServerWebSocketMessage(bc, x.val); - break; - } - case "ToServerWebSocketMessageAck": { - bare.writeU8(bc, 5); - writeToServerWebSocketMessageAck(bc, x.val); - break; - } - case "ToServerWebSocketClose": { - bare.writeU8(bc, 6); - writeToServerWebSocketClose(bc, x.val); - break; - } - } + /** + * HTTP + */ + | { readonly tag: "ToServerResponseStart"; readonly val: ToServerResponseStart } + | { readonly tag: "ToServerResponseChunk"; readonly val: ToServerResponseChunk } + | { readonly tag: "ToServerResponseAbort"; readonly val: ToServerResponseAbort } + /** + * WebSocket + */ + | { readonly tag: "ToServerWebSocketOpen"; readonly val: ToServerWebSocketOpen } + | { readonly tag: "ToServerWebSocketMessage"; readonly val: ToServerWebSocketMessage } + | { readonly tag: "ToServerWebSocketMessageAck"; readonly val: ToServerWebSocketMessageAck } + | { readonly tag: "ToServerWebSocketClose"; readonly val: ToServerWebSocketClose } + +export function readToServerTunnelMessageKind(bc: bare.ByteCursor): ToServerTunnelMessageKind { + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ToServerResponseStart", val: readToServerResponseStart(bc) } + case 1: + return { tag: "ToServerResponseChunk", val: readToServerResponseChunk(bc) } + case 2: + return { tag: "ToServerResponseAbort", val: null } + case 3: + return { tag: "ToServerWebSocketOpen", val: readToServerWebSocketOpen(bc) } + case 4: + return { tag: "ToServerWebSocketMessage", val: readToServerWebSocketMessage(bc) } + case 5: + return { tag: "ToServerWebSocketMessageAck", val: readToServerWebSocketMessageAck(bc) } + case 6: + return { tag: "ToServerWebSocketClose", val: readToServerWebSocketClose(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } +} + +export function writeToServerTunnelMessageKind(bc: bare.ByteCursor, x: ToServerTunnelMessageKind): void { + switch (x.tag) { + case "ToServerResponseStart": { + bare.writeU8(bc, 0) + writeToServerResponseStart(bc, x.val) + break + } + case "ToServerResponseChunk": { + bare.writeU8(bc, 1) + writeToServerResponseChunk(bc, x.val) + break + } + case "ToServerResponseAbort": { + bare.writeU8(bc, 2) + break + } + case "ToServerWebSocketOpen": { + bare.writeU8(bc, 3) + writeToServerWebSocketOpen(bc, x.val) + break + } + case "ToServerWebSocketMessage": { + bare.writeU8(bc, 4) + writeToServerWebSocketMessage(bc, x.val) + break + } + case "ToServerWebSocketMessageAck": { + bare.writeU8(bc, 5) + writeToServerWebSocketMessageAck(bc, x.val) + break + } + case "ToServerWebSocketClose": { + bare.writeU8(bc, 6) + writeToServerWebSocketClose(bc, x.val) + break + } + } } export type ToServerTunnelMessage = { - readonly messageId: MessageId; - readonly messageKind: ToServerTunnelMessageKind; -}; + readonly messageId: MessageId + readonly messageKind: ToServerTunnelMessageKind +} -export function readToServerTunnelMessage( - bc: bare.ByteCursor, -): ToServerTunnelMessage { - return { - messageId: readMessageId(bc), - messageKind: readToServerTunnelMessageKind(bc), - }; +export function readToServerTunnelMessage(bc: bare.ByteCursor): ToServerTunnelMessage { + return { + messageId: readMessageId(bc), + messageKind: readToServerTunnelMessageKind(bc), + } } -export function writeToServerTunnelMessage( - bc: bare.ByteCursor, - x: ToServerTunnelMessage, -): void { - writeMessageId(bc, x.messageId); - writeToServerTunnelMessageKind(bc, x.messageKind); +export function writeToServerTunnelMessage(bc: bare.ByteCursor, x: ToServerTunnelMessage): void { + writeMessageId(bc, x.messageId) + writeToServerTunnelMessageKind(bc, x.messageKind) } /** * To Client */ export type ToClientTunnelMessageKind = - /** - * HTTP - */ - | { - readonly tag: "ToClientRequestStart"; - readonly val: ToClientRequestStart; - } - | { - readonly tag: "ToClientRequestChunk"; - readonly val: ToClientRequestChunk; - } - | { - readonly tag: "ToClientRequestAbort"; - readonly val: ToClientRequestAbort; - } - /** - * WebSocket - */ - | { - readonly tag: "ToClientWebSocketOpen"; - readonly val: ToClientWebSocketOpen; - } - | { - readonly tag: "ToClientWebSocketMessage"; - readonly val: ToClientWebSocketMessage; - } - | { - readonly tag: "ToClientWebSocketClose"; - readonly val: ToClientWebSocketClose; - }; - -export function readToClientTunnelMessageKind( - bc: bare.ByteCursor, -): ToClientTunnelMessageKind { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { - tag: "ToClientRequestStart", - val: readToClientRequestStart(bc), - }; - case 1: - return { - tag: "ToClientRequestChunk", - val: readToClientRequestChunk(bc), - }; - case 2: - return { tag: "ToClientRequestAbort", val: null }; - case 3: - return { - tag: "ToClientWebSocketOpen", - val: readToClientWebSocketOpen(bc), - }; - case 4: - return { - tag: "ToClientWebSocketMessage", - val: readToClientWebSocketMessage(bc), - }; - case 5: - return { - tag: "ToClientWebSocketClose", - val: readToClientWebSocketClose(bc), - }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } -} - -export function writeToClientTunnelMessageKind( - bc: bare.ByteCursor, - x: ToClientTunnelMessageKind, -): void { - switch (x.tag) { - case "ToClientRequestStart": { - bare.writeU8(bc, 0); - writeToClientRequestStart(bc, x.val); - break; - } - case "ToClientRequestChunk": { - bare.writeU8(bc, 1); - writeToClientRequestChunk(bc, x.val); - break; - } - case "ToClientRequestAbort": { - bare.writeU8(bc, 2); - break; - } - case "ToClientWebSocketOpen": { - bare.writeU8(bc, 3); - writeToClientWebSocketOpen(bc, x.val); - break; - } - case "ToClientWebSocketMessage": { - bare.writeU8(bc, 4); - writeToClientWebSocketMessage(bc, x.val); - break; - } - case "ToClientWebSocketClose": { - bare.writeU8(bc, 5); - writeToClientWebSocketClose(bc, x.val); - break; - } - } + /** + * HTTP + */ + | { readonly tag: "ToClientRequestStart"; readonly val: ToClientRequestStart } + | { readonly tag: "ToClientRequestChunk"; readonly val: ToClientRequestChunk } + | { readonly tag: "ToClientRequestAbort"; readonly val: ToClientRequestAbort } + /** + * WebSocket + */ + | { readonly tag: "ToClientWebSocketOpen"; readonly val: ToClientWebSocketOpen } + | { readonly tag: "ToClientWebSocketMessage"; readonly val: ToClientWebSocketMessage } + | { readonly tag: "ToClientWebSocketClose"; readonly val: ToClientWebSocketClose } + +export function readToClientTunnelMessageKind(bc: bare.ByteCursor): ToClientTunnelMessageKind { + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ToClientRequestStart", val: readToClientRequestStart(bc) } + case 1: + return { tag: "ToClientRequestChunk", val: readToClientRequestChunk(bc) } + case 2: + return { tag: "ToClientRequestAbort", val: null } + case 3: + return { tag: "ToClientWebSocketOpen", val: readToClientWebSocketOpen(bc) } + case 4: + return { tag: "ToClientWebSocketMessage", val: readToClientWebSocketMessage(bc) } + case 5: + return { tag: "ToClientWebSocketClose", val: readToClientWebSocketClose(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } +} + +export function writeToClientTunnelMessageKind(bc: bare.ByteCursor, x: ToClientTunnelMessageKind): void { + switch (x.tag) { + case "ToClientRequestStart": { + bare.writeU8(bc, 0) + writeToClientRequestStart(bc, x.val) + break + } + case "ToClientRequestChunk": { + bare.writeU8(bc, 1) + writeToClientRequestChunk(bc, x.val) + break + } + case "ToClientRequestAbort": { + bare.writeU8(bc, 2) + break + } + case "ToClientWebSocketOpen": { + bare.writeU8(bc, 3) + writeToClientWebSocketOpen(bc, x.val) + break + } + case "ToClientWebSocketMessage": { + bare.writeU8(bc, 4) + writeToClientWebSocketMessage(bc, x.val) + break + } + case "ToClientWebSocketClose": { + bare.writeU8(bc, 5) + writeToClientWebSocketClose(bc, x.val) + break + } + } } export type ToClientTunnelMessage = { - readonly messageId: MessageId; - readonly messageKind: ToClientTunnelMessageKind; -}; + readonly messageId: MessageId + readonly messageKind: ToClientTunnelMessageKind +} -export function readToClientTunnelMessage( - bc: bare.ByteCursor, -): ToClientTunnelMessage { - return { - messageId: readMessageId(bc), - messageKind: readToClientTunnelMessageKind(bc), - }; +export function readToClientTunnelMessage(bc: bare.ByteCursor): ToClientTunnelMessage { + return { + messageId: readMessageId(bc), + messageKind: readToClientTunnelMessageKind(bc), + } } -export function writeToClientTunnelMessage( - bc: bare.ByteCursor, - x: ToClientTunnelMessage, -): void { - writeMessageId(bc, x.messageId); - writeToClientTunnelMessageKind(bc, x.messageKind); +export function writeToClientTunnelMessage(bc: bare.ByteCursor, x: ToClientTunnelMessage): void { + writeMessageId(bc, x.messageId) + writeToClientTunnelMessageKind(bc, x.messageKind) } export type ToClientPing = { - readonly ts: i64; -}; + readonly ts: i64 +} export function readToClientPing(bc: bare.ByteCursor): ToClientPing { - return { - ts: bare.readI64(bc), - }; + return { + ts: bare.readI64(bc), + } } export function writeToClientPing(bc: bare.ByteCursor, x: ToClientPing): void { - bare.writeI64(bc, x.ts); + bare.writeI64(bc, x.ts) } function read11(bc: bare.ByteCursor): ReadonlyMap { - const len = bare.readUintSafe(bc); - const result = new Map(); - for (let i = 0; i < len; i++) { - const offset = bc.offset; - const key = bare.readString(bc); - if (result.has(key)) { - bc.offset = offset; - throw new bare.BareError(offset, "duplicated key"); - } - result.set(key, readActorName(bc)); - } - return result; + const len = bare.readUintSafe(bc) + const result = new Map() + for (let i = 0; i < len; i++) { + const offset = bc.offset + const key = bare.readString(bc) + if (result.has(key)) { + bc.offset = offset + throw new bare.BareError(offset, "duplicated key") + } + result.set(key, readActorName(bc)) + } + return result } function write11(bc: bare.ByteCursor, x: ReadonlyMap): void { - bare.writeUintSafe(bc, x.size); - for (const kv of x) { - bare.writeString(bc, kv[0]); - writeActorName(bc, kv[1]); - } + bare.writeUintSafe(bc, x.size) + for (const kv of x) { + bare.writeString(bc, kv[0]) + writeActorName(bc, kv[1]) + } } function read12(bc: bare.ByteCursor): ReadonlyMap | null { - return bare.readBool(bc) ? read11(bc) : null; + return bare.readBool(bc) ? read11(bc) : null } -function write12( - bc: bare.ByteCursor, - x: ReadonlyMap | null, -): void { - bare.writeBool(bc, x != null); - if (x != null) { - write11(bc, x); - } +function write12(bc: bare.ByteCursor, x: ReadonlyMap | null): void { + bare.writeBool(bc, x != null) + if (x != null) { + write11(bc, x) + } } function read13(bc: bare.ByteCursor): Json | null { - return bare.readBool(bc) ? readJson(bc) : null; + return bare.readBool(bc) ? readJson(bc) : null } function write13(bc: bare.ByteCursor, x: Json | null): void { - bare.writeBool(bc, x != null); - if (x != null) { - writeJson(bc, x); - } + bare.writeBool(bc, x != null) + if (x != null) { + writeJson(bc, x) + } } /** * MARK: To Server */ export type ToServerInit = { - readonly name: string; - readonly version: u32; - readonly totalSlots: u32; - readonly prepopulateActorNames: ReadonlyMap | null; - readonly metadata: Json | null; -}; + readonly name: string + readonly version: u32 + readonly totalSlots: u32 + readonly prepopulateActorNames: ReadonlyMap | null + readonly metadata: Json | null +} export function readToServerInit(bc: bare.ByteCursor): ToServerInit { - return { - name: bare.readString(bc), - version: bare.readU32(bc), - totalSlots: bare.readU32(bc), - prepopulateActorNames: read12(bc), - metadata: read13(bc), - }; + return { + name: bare.readString(bc), + version: bare.readU32(bc), + totalSlots: bare.readU32(bc), + prepopulateActorNames: read12(bc), + metadata: read13(bc), + } } export function writeToServerInit(bc: bare.ByteCursor, x: ToServerInit): void { - bare.writeString(bc, x.name); - bare.writeU32(bc, x.version); - bare.writeU32(bc, x.totalSlots); - write12(bc, x.prepopulateActorNames); - write13(bc, x.metadata); + bare.writeString(bc, x.name) + bare.writeU32(bc, x.version) + bare.writeU32(bc, x.totalSlots) + write12(bc, x.prepopulateActorNames) + write13(bc, x.metadata) } -export type ToServerEvents = readonly EventWrapper[]; +export type ToServerEvents = readonly EventWrapper[] export function readToServerEvents(bc: bare.ByteCursor): ToServerEvents { - const len = bare.readUintSafe(bc); - if (len === 0) { - return []; - } - const result = [readEventWrapper(bc)]; - for (let i = 1; i < len; i++) { - result[i] = readEventWrapper(bc); - } - return result; -} - -export function writeToServerEvents( - bc: bare.ByteCursor, - x: ToServerEvents, -): void { - bare.writeUintSafe(bc, x.length); - for (let i = 0; i < x.length; i++) { - writeEventWrapper(bc, x[i]); - } + const len = bare.readUintSafe(bc) + if (len === 0) { + return [] + } + const result = [readEventWrapper(bc)] + for (let i = 1; i < len; i++) { + result[i] = readEventWrapper(bc) + } + return result +} + +export function writeToServerEvents(bc: bare.ByteCursor, x: ToServerEvents): void { + bare.writeUintSafe(bc, x.length) + for (let i = 0; i < x.length; i++) { + writeEventWrapper(bc, x[i]) + } } function read14(bc: bare.ByteCursor): readonly ActorCheckpoint[] { - const len = bare.readUintSafe(bc); - if (len === 0) { - return []; - } - const result = [readActorCheckpoint(bc)]; - for (let i = 1; i < len; i++) { - result[i] = readActorCheckpoint(bc); - } - return result; + const len = bare.readUintSafe(bc) + if (len === 0) { + return [] + } + const result = [readActorCheckpoint(bc)] + for (let i = 1; i < len; i++) { + result[i] = readActorCheckpoint(bc) + } + return result } function write14(bc: bare.ByteCursor, x: readonly ActorCheckpoint[]): void { - bare.writeUintSafe(bc, x.length); - for (let i = 0; i < x.length; i++) { - writeActorCheckpoint(bc, x[i]); - } + bare.writeUintSafe(bc, x.length) + for (let i = 0; i < x.length; i++) { + writeActorCheckpoint(bc, x[i]) + } } export type ToServerAckCommands = { - readonly lastCommandCheckpoints: readonly ActorCheckpoint[]; -}; + readonly lastCommandCheckpoints: readonly ActorCheckpoint[] +} -export function readToServerAckCommands( - bc: bare.ByteCursor, -): ToServerAckCommands { - return { - lastCommandCheckpoints: read14(bc), - }; +export function readToServerAckCommands(bc: bare.ByteCursor): ToServerAckCommands { + return { + lastCommandCheckpoints: read14(bc), + } } -export function writeToServerAckCommands( - bc: bare.ByteCursor, - x: ToServerAckCommands, -): void { - write14(bc, x.lastCommandCheckpoints); +export function writeToServerAckCommands(bc: bare.ByteCursor, x: ToServerAckCommands): void { + write14(bc, x.lastCommandCheckpoints) } -export type ToServerStopping = null; +export type ToServerStopping = null export type ToServerPong = { - readonly ts: i64; -}; + readonly ts: i64 +} export function readToServerPong(bc: bare.ByteCursor): ToServerPong { - return { - ts: bare.readI64(bc), - }; + return { + ts: bare.readI64(bc), + } } export function writeToServerPong(bc: bare.ByteCursor, x: ToServerPong): void { - bare.writeI64(bc, x.ts); + bare.writeI64(bc, x.ts) } export type ToServerKvRequest = { - readonly actorId: Id; - readonly requestId: u32; - readonly data: KvRequestData; -}; + readonly actorId: Id + readonly requestId: u32 + readonly data: KvRequestData +} export function readToServerKvRequest(bc: bare.ByteCursor): ToServerKvRequest { - return { - actorId: readId(bc), - requestId: bare.readU32(bc), - data: readKvRequestData(bc), - }; + return { + actorId: readId(bc), + requestId: bare.readU32(bc), + data: readKvRequestData(bc), + } } -export function writeToServerKvRequest( - bc: bare.ByteCursor, - x: ToServerKvRequest, -): void { - writeId(bc, x.actorId); - bare.writeU32(bc, x.requestId); - writeKvRequestData(bc, x.data); +export function writeToServerKvRequest(bc: bare.ByteCursor, x: ToServerKvRequest): void { + writeId(bc, x.actorId) + bare.writeU32(bc, x.requestId) + writeKvRequestData(bc, x.data) } export type ToServer = - | { readonly tag: "ToServerInit"; readonly val: ToServerInit } - | { readonly tag: "ToServerEvents"; readonly val: ToServerEvents } - | { readonly tag: "ToServerAckCommands"; readonly val: ToServerAckCommands } - | { readonly tag: "ToServerStopping"; readonly val: ToServerStopping } - | { readonly tag: "ToServerPong"; readonly val: ToServerPong } - | { readonly tag: "ToServerKvRequest"; readonly val: ToServerKvRequest } - | { - readonly tag: "ToServerTunnelMessage"; - readonly val: ToServerTunnelMessage; - }; + | { readonly tag: "ToServerInit"; readonly val: ToServerInit } + | { readonly tag: "ToServerEvents"; readonly val: ToServerEvents } + | { readonly tag: "ToServerAckCommands"; readonly val: ToServerAckCommands } + | { readonly tag: "ToServerStopping"; readonly val: ToServerStopping } + | { readonly tag: "ToServerPong"; readonly val: ToServerPong } + | { readonly tag: "ToServerKvRequest"; readonly val: ToServerKvRequest } + | { readonly tag: "ToServerTunnelMessage"; readonly val: ToServerTunnelMessage } export function readToServer(bc: bare.ByteCursor): ToServer { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "ToServerInit", val: readToServerInit(bc) }; - case 1: - return { tag: "ToServerEvents", val: readToServerEvents(bc) }; - case 2: - return { - tag: "ToServerAckCommands", - val: readToServerAckCommands(bc), - }; - case 3: - return { tag: "ToServerStopping", val: null }; - case 4: - return { tag: "ToServerPong", val: readToServerPong(bc) }; - case 5: - return { tag: "ToServerKvRequest", val: readToServerKvRequest(bc) }; - case 6: - return { - tag: "ToServerTunnelMessage", - val: readToServerTunnelMessage(bc), - }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ToServerInit", val: readToServerInit(bc) } + case 1: + return { tag: "ToServerEvents", val: readToServerEvents(bc) } + case 2: + return { tag: "ToServerAckCommands", val: readToServerAckCommands(bc) } + case 3: + return { tag: "ToServerStopping", val: null } + case 4: + return { tag: "ToServerPong", val: readToServerPong(bc) } + case 5: + return { tag: "ToServerKvRequest", val: readToServerKvRequest(bc) } + case 6: + return { tag: "ToServerTunnelMessage", val: readToServerTunnelMessage(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeToServer(bc: bare.ByteCursor, x: ToServer): void { - switch (x.tag) { - case "ToServerInit": { - bare.writeU8(bc, 0); - writeToServerInit(bc, x.val); - break; - } - case "ToServerEvents": { - bare.writeU8(bc, 1); - writeToServerEvents(bc, x.val); - break; - } - case "ToServerAckCommands": { - bare.writeU8(bc, 2); - writeToServerAckCommands(bc, x.val); - break; - } - case "ToServerStopping": { - bare.writeU8(bc, 3); - break; - } - case "ToServerPong": { - bare.writeU8(bc, 4); - writeToServerPong(bc, x.val); - break; - } - case "ToServerKvRequest": { - bare.writeU8(bc, 5); - writeToServerKvRequest(bc, x.val); - break; - } - case "ToServerTunnelMessage": { - bare.writeU8(bc, 6); - writeToServerTunnelMessage(bc, x.val); - break; - } - } -} - -export function encodeToServer( - x: ToServer, - config?: Partial, -): Uint8Array { - const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG; - const bc = new bare.ByteCursor( - new Uint8Array(fullConfig.initialBufferLength), - fullConfig, - ); - writeToServer(bc, x); - return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset); + switch (x.tag) { + case "ToServerInit": { + bare.writeU8(bc, 0) + writeToServerInit(bc, x.val) + break + } + case "ToServerEvents": { + bare.writeU8(bc, 1) + writeToServerEvents(bc, x.val) + break + } + case "ToServerAckCommands": { + bare.writeU8(bc, 2) + writeToServerAckCommands(bc, x.val) + break + } + case "ToServerStopping": { + bare.writeU8(bc, 3) + break + } + case "ToServerPong": { + bare.writeU8(bc, 4) + writeToServerPong(bc, x.val) + break + } + case "ToServerKvRequest": { + bare.writeU8(bc, 5) + writeToServerKvRequest(bc, x.val) + break + } + case "ToServerTunnelMessage": { + bare.writeU8(bc, 6) + writeToServerTunnelMessage(bc, x.val) + break + } + } +} + +export function encodeToServer(x: ToServer, config?: Partial): Uint8Array { + const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG + const bc = new bare.ByteCursor( + new Uint8Array(fullConfig.initialBufferLength), + fullConfig, + ) + writeToServer(bc, x) + return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset) } export function decodeToServer(bytes: Uint8Array): ToServer { - const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG); - const result = readToServer(bc); - if (bc.offset < bc.view.byteLength) { - throw new bare.BareError(bc.offset, "remaining bytes"); - } - return result; + const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG) + const result = readToServer(bc) + if (bc.offset < bc.view.byteLength) { + throw new bare.BareError(bc.offset, "remaining bytes") + } + return result } /** * MARK: To Client */ export type ProtocolMetadata = { - readonly runnerLostThreshold: i64; - readonly actorStopThreshold: i64; - readonly serverlessDrainGracePeriod: i64 | null; -}; + readonly runnerLostThreshold: i64 + readonly actorStopThreshold: i64 + readonly serverlessDrainGracePeriod: i64 | null +} export function readProtocolMetadata(bc: bare.ByteCursor): ProtocolMetadata { - return { - runnerLostThreshold: bare.readI64(bc), - actorStopThreshold: bare.readI64(bc), - serverlessDrainGracePeriod: read7(bc), - }; + return { + runnerLostThreshold: bare.readI64(bc), + actorStopThreshold: bare.readI64(bc), + serverlessDrainGracePeriod: read7(bc), + } } -export function writeProtocolMetadata( - bc: bare.ByteCursor, - x: ProtocolMetadata, -): void { - bare.writeI64(bc, x.runnerLostThreshold); - bare.writeI64(bc, x.actorStopThreshold); - write7(bc, x.serverlessDrainGracePeriod); +export function writeProtocolMetadata(bc: bare.ByteCursor, x: ProtocolMetadata): void { + bare.writeI64(bc, x.runnerLostThreshold) + bare.writeI64(bc, x.actorStopThreshold) + write7(bc, x.serverlessDrainGracePeriod) } export type ToClientInit = { - readonly runnerId: Id; - readonly metadata: ProtocolMetadata; -}; + readonly runnerId: Id + readonly metadata: ProtocolMetadata +} export function readToClientInit(bc: bare.ByteCursor): ToClientInit { - return { - runnerId: readId(bc), - metadata: readProtocolMetadata(bc), - }; + return { + runnerId: readId(bc), + metadata: readProtocolMetadata(bc), + } } export function writeToClientInit(bc: bare.ByteCursor, x: ToClientInit): void { - writeId(bc, x.runnerId); - writeProtocolMetadata(bc, x.metadata); + writeId(bc, x.runnerId) + writeProtocolMetadata(bc, x.metadata) } -export type ToClientCommands = readonly CommandWrapper[]; +export type ToClientCommands = readonly CommandWrapper[] export function readToClientCommands(bc: bare.ByteCursor): ToClientCommands { - const len = bare.readUintSafe(bc); - if (len === 0) { - return []; - } - const result = [readCommandWrapper(bc)]; - for (let i = 1; i < len; i++) { - result[i] = readCommandWrapper(bc); - } - return result; -} - -export function writeToClientCommands( - bc: bare.ByteCursor, - x: ToClientCommands, -): void { - bare.writeUintSafe(bc, x.length); - for (let i = 0; i < x.length; i++) { - writeCommandWrapper(bc, x[i]); - } + const len = bare.readUintSafe(bc) + if (len === 0) { + return [] + } + const result = [readCommandWrapper(bc)] + for (let i = 1; i < len; i++) { + result[i] = readCommandWrapper(bc) + } + return result +} + +export function writeToClientCommands(bc: bare.ByteCursor, x: ToClientCommands): void { + bare.writeUintSafe(bc, x.length) + for (let i = 0; i < x.length; i++) { + writeCommandWrapper(bc, x[i]) + } } export type ToClientAckEvents = { - readonly lastEventCheckpoints: readonly ActorCheckpoint[]; -}; + readonly lastEventCheckpoints: readonly ActorCheckpoint[] +} export function readToClientAckEvents(bc: bare.ByteCursor): ToClientAckEvents { - return { - lastEventCheckpoints: read14(bc), - }; + return { + lastEventCheckpoints: read14(bc), + } } -export function writeToClientAckEvents( - bc: bare.ByteCursor, - x: ToClientAckEvents, -): void { - write14(bc, x.lastEventCheckpoints); +export function writeToClientAckEvents(bc: bare.ByteCursor, x: ToClientAckEvents): void { + write14(bc, x.lastEventCheckpoints) } export type ToClientKvResponse = { - readonly requestId: u32; - readonly data: KvResponseData; -}; + readonly requestId: u32 + readonly data: KvResponseData +} -export function readToClientKvResponse( - bc: bare.ByteCursor, -): ToClientKvResponse { - return { - requestId: bare.readU32(bc), - data: readKvResponseData(bc), - }; +export function readToClientKvResponse(bc: bare.ByteCursor): ToClientKvResponse { + return { + requestId: bare.readU32(bc), + data: readKvResponseData(bc), + } } -export function writeToClientKvResponse( - bc: bare.ByteCursor, - x: ToClientKvResponse, -): void { - bare.writeU32(bc, x.requestId); - writeKvResponseData(bc, x.data); +export function writeToClientKvResponse(bc: bare.ByteCursor, x: ToClientKvResponse): void { + bare.writeU32(bc, x.requestId) + writeKvResponseData(bc, x.data) } export type ToClient = - | { readonly tag: "ToClientInit"; readonly val: ToClientInit } - | { readonly tag: "ToClientCommands"; readonly val: ToClientCommands } - | { readonly tag: "ToClientAckEvents"; readonly val: ToClientAckEvents } - | { readonly tag: "ToClientKvResponse"; readonly val: ToClientKvResponse } - | { - readonly tag: "ToClientTunnelMessage"; - readonly val: ToClientTunnelMessage; - } - | { readonly tag: "ToClientPing"; readonly val: ToClientPing }; + | { readonly tag: "ToClientInit"; readonly val: ToClientInit } + | { readonly tag: "ToClientCommands"; readonly val: ToClientCommands } + | { readonly tag: "ToClientAckEvents"; readonly val: ToClientAckEvents } + | { readonly tag: "ToClientKvResponse"; readonly val: ToClientKvResponse } + | { readonly tag: "ToClientTunnelMessage"; readonly val: ToClientTunnelMessage } + | { readonly tag: "ToClientPing"; readonly val: ToClientPing } export function readToClient(bc: bare.ByteCursor): ToClient { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "ToClientInit", val: readToClientInit(bc) }; - case 1: - return { tag: "ToClientCommands", val: readToClientCommands(bc) }; - case 2: - return { tag: "ToClientAckEvents", val: readToClientAckEvents(bc) }; - case 3: - return { - tag: "ToClientKvResponse", - val: readToClientKvResponse(bc), - }; - case 4: - return { - tag: "ToClientTunnelMessage", - val: readToClientTunnelMessage(bc), - }; - case 5: - return { tag: "ToClientPing", val: readToClientPing(bc) }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ToClientInit", val: readToClientInit(bc) } + case 1: + return { tag: "ToClientCommands", val: readToClientCommands(bc) } + case 2: + return { tag: "ToClientAckEvents", val: readToClientAckEvents(bc) } + case 3: + return { tag: "ToClientKvResponse", val: readToClientKvResponse(bc) } + case 4: + return { tag: "ToClientTunnelMessage", val: readToClientTunnelMessage(bc) } + case 5: + return { tag: "ToClientPing", val: readToClientPing(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeToClient(bc: bare.ByteCursor, x: ToClient): void { - switch (x.tag) { - case "ToClientInit": { - bare.writeU8(bc, 0); - writeToClientInit(bc, x.val); - break; - } - case "ToClientCommands": { - bare.writeU8(bc, 1); - writeToClientCommands(bc, x.val); - break; - } - case "ToClientAckEvents": { - bare.writeU8(bc, 2); - writeToClientAckEvents(bc, x.val); - break; - } - case "ToClientKvResponse": { - bare.writeU8(bc, 3); - writeToClientKvResponse(bc, x.val); - break; - } - case "ToClientTunnelMessage": { - bare.writeU8(bc, 4); - writeToClientTunnelMessage(bc, x.val); - break; - } - case "ToClientPing": { - bare.writeU8(bc, 5); - writeToClientPing(bc, x.val); - break; - } - } -} - -export function encodeToClient( - x: ToClient, - config?: Partial, -): Uint8Array { - const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG; - const bc = new bare.ByteCursor( - new Uint8Array(fullConfig.initialBufferLength), - fullConfig, - ); - writeToClient(bc, x); - return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset); + switch (x.tag) { + case "ToClientInit": { + bare.writeU8(bc, 0) + writeToClientInit(bc, x.val) + break + } + case "ToClientCommands": { + bare.writeU8(bc, 1) + writeToClientCommands(bc, x.val) + break + } + case "ToClientAckEvents": { + bare.writeU8(bc, 2) + writeToClientAckEvents(bc, x.val) + break + } + case "ToClientKvResponse": { + bare.writeU8(bc, 3) + writeToClientKvResponse(bc, x.val) + break + } + case "ToClientTunnelMessage": { + bare.writeU8(bc, 4) + writeToClientTunnelMessage(bc, x.val) + break + } + case "ToClientPing": { + bare.writeU8(bc, 5) + writeToClientPing(bc, x.val) + break + } + } +} + +export function encodeToClient(x: ToClient, config?: Partial): Uint8Array { + const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG + const bc = new bare.ByteCursor( + new Uint8Array(fullConfig.initialBufferLength), + fullConfig, + ) + writeToClient(bc, x) + return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset) } export function decodeToClient(bytes: Uint8Array): ToClient { - const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG); - const result = readToClient(bc); - if (bc.offset < bc.view.byteLength) { - throw new bare.BareError(bc.offset, "remaining bytes"); - } - return result; + const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG) + const result = readToClient(bc) + if (bc.offset < bc.view.byteLength) { + throw new bare.BareError(bc.offset, "remaining bytes") + } + return result } /** * MARK: To Runner */ export type ToRunnerPing = { - readonly gatewayId: GatewayId; - readonly requestId: RequestId; - readonly ts: i64; -}; + readonly gatewayId: GatewayId + readonly requestId: RequestId + readonly ts: i64 +} export function readToRunnerPing(bc: bare.ByteCursor): ToRunnerPing { - return { - gatewayId: readGatewayId(bc), - requestId: readRequestId(bc), - ts: bare.readI64(bc), - }; + return { + gatewayId: readGatewayId(bc), + requestId: readRequestId(bc), + ts: bare.readI64(bc), + } } export function writeToRunnerPing(bc: bare.ByteCursor, x: ToRunnerPing): void { - writeGatewayId(bc, x.gatewayId); - writeRequestId(bc, x.requestId); - bare.writeI64(bc, x.ts); + writeGatewayId(bc, x.gatewayId) + writeRequestId(bc, x.requestId) + bare.writeI64(bc, x.ts) } -export type ToRunnerClose = null; +export type ToRunnerClose = null /** * We have to re-declare the entire union since BARE will not generate the * ser/de for ToClient if it's not a top-level type */ export type ToRunner = - | { readonly tag: "ToRunnerPing"; readonly val: ToRunnerPing } - | { readonly tag: "ToRunnerClose"; readonly val: ToRunnerClose } - | { readonly tag: "ToClientCommands"; readonly val: ToClientCommands } - | { readonly tag: "ToClientAckEvents"; readonly val: ToClientAckEvents } - | { - readonly tag: "ToClientTunnelMessage"; - readonly val: ToClientTunnelMessage; - }; + | { readonly tag: "ToRunnerPing"; readonly val: ToRunnerPing } + | { readonly tag: "ToRunnerClose"; readonly val: ToRunnerClose } + | { readonly tag: "ToClientCommands"; readonly val: ToClientCommands } + | { readonly tag: "ToClientAckEvents"; readonly val: ToClientAckEvents } + | { readonly tag: "ToClientTunnelMessage"; readonly val: ToClientTunnelMessage } export function readToRunner(bc: bare.ByteCursor): ToRunner { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "ToRunnerPing", val: readToRunnerPing(bc) }; - case 1: - return { tag: "ToRunnerClose", val: null }; - case 2: - return { tag: "ToClientCommands", val: readToClientCommands(bc) }; - case 3: - return { tag: "ToClientAckEvents", val: readToClientAckEvents(bc) }; - case 4: - return { - tag: "ToClientTunnelMessage", - val: readToClientTunnelMessage(bc), - }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ToRunnerPing", val: readToRunnerPing(bc) } + case 1: + return { tag: "ToRunnerClose", val: null } + case 2: + return { tag: "ToClientCommands", val: readToClientCommands(bc) } + case 3: + return { tag: "ToClientAckEvents", val: readToClientAckEvents(bc) } + case 4: + return { tag: "ToClientTunnelMessage", val: readToClientTunnelMessage(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeToRunner(bc: bare.ByteCursor, x: ToRunner): void { - switch (x.tag) { - case "ToRunnerPing": { - bare.writeU8(bc, 0); - writeToRunnerPing(bc, x.val); - break; - } - case "ToRunnerClose": { - bare.writeU8(bc, 1); - break; - } - case "ToClientCommands": { - bare.writeU8(bc, 2); - writeToClientCommands(bc, x.val); - break; - } - case "ToClientAckEvents": { - bare.writeU8(bc, 3); - writeToClientAckEvents(bc, x.val); - break; - } - case "ToClientTunnelMessage": { - bare.writeU8(bc, 4); - writeToClientTunnelMessage(bc, x.val); - break; - } - } -} - -export function encodeToRunner( - x: ToRunner, - config?: Partial, -): Uint8Array { - const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG; - const bc = new bare.ByteCursor( - new Uint8Array(fullConfig.initialBufferLength), - fullConfig, - ); - writeToRunner(bc, x); - return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset); + switch (x.tag) { + case "ToRunnerPing": { + bare.writeU8(bc, 0) + writeToRunnerPing(bc, x.val) + break + } + case "ToRunnerClose": { + bare.writeU8(bc, 1) + break + } + case "ToClientCommands": { + bare.writeU8(bc, 2) + writeToClientCommands(bc, x.val) + break + } + case "ToClientAckEvents": { + bare.writeU8(bc, 3) + writeToClientAckEvents(bc, x.val) + break + } + case "ToClientTunnelMessage": { + bare.writeU8(bc, 4) + writeToClientTunnelMessage(bc, x.val) + break + } + } +} + +export function encodeToRunner(x: ToRunner, config?: Partial): Uint8Array { + const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG + const bc = new bare.ByteCursor( + new Uint8Array(fullConfig.initialBufferLength), + fullConfig, + ) + writeToRunner(bc, x) + return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset) } export function decodeToRunner(bytes: Uint8Array): ToRunner { - const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG); - const result = readToRunner(bc); - if (bc.offset < bc.view.byteLength) { - throw new bare.BareError(bc.offset, "remaining bytes"); - } - return result; + const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG) + const result = readToRunner(bc) + if (bc.offset < bc.view.byteLength) { + throw new bare.BareError(bc.offset, "remaining bytes") + } + return result } /** * MARK: To Gateway */ export type ToGatewayPong = { - readonly requestId: RequestId; - readonly ts: i64; -}; + readonly requestId: RequestId + readonly ts: i64 +} export function readToGatewayPong(bc: bare.ByteCursor): ToGatewayPong { - return { - requestId: readRequestId(bc), - ts: bare.readI64(bc), - }; + return { + requestId: readRequestId(bc), + ts: bare.readI64(bc), + } } -export function writeToGatewayPong( - bc: bare.ByteCursor, - x: ToGatewayPong, -): void { - writeRequestId(bc, x.requestId); - bare.writeI64(bc, x.ts); +export function writeToGatewayPong(bc: bare.ByteCursor, x: ToGatewayPong): void { + writeRequestId(bc, x.requestId) + bare.writeI64(bc, x.ts) } export type ToGateway = - | { readonly tag: "ToGatewayPong"; readonly val: ToGatewayPong } - | { - readonly tag: "ToServerTunnelMessage"; - readonly val: ToServerTunnelMessage; - }; + | { readonly tag: "ToGatewayPong"; readonly val: ToGatewayPong } + | { readonly tag: "ToServerTunnelMessage"; readonly val: ToServerTunnelMessage } export function readToGateway(bc: bare.ByteCursor): ToGateway { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { tag: "ToGatewayPong", val: readToGatewayPong(bc) }; - case 1: - return { - tag: "ToServerTunnelMessage", - val: readToServerTunnelMessage(bc), - }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ToGatewayPong", val: readToGatewayPong(bc) } + case 1: + return { tag: "ToServerTunnelMessage", val: readToServerTunnelMessage(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } export function writeToGateway(bc: bare.ByteCursor, x: ToGateway): void { - switch (x.tag) { - case "ToGatewayPong": { - bare.writeU8(bc, 0); - writeToGatewayPong(bc, x.val); - break; - } - case "ToServerTunnelMessage": { - bare.writeU8(bc, 1); - writeToServerTunnelMessage(bc, x.val); - break; - } - } -} - -export function encodeToGateway( - x: ToGateway, - config?: Partial, -): Uint8Array { - const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG; - const bc = new bare.ByteCursor( - new Uint8Array(fullConfig.initialBufferLength), - fullConfig, - ); - writeToGateway(bc, x); - return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset); + switch (x.tag) { + case "ToGatewayPong": { + bare.writeU8(bc, 0) + writeToGatewayPong(bc, x.val) + break + } + case "ToServerTunnelMessage": { + bare.writeU8(bc, 1) + writeToServerTunnelMessage(bc, x.val) + break + } + } +} + +export function encodeToGateway(x: ToGateway, config?: Partial): Uint8Array { + const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG + const bc = new bare.ByteCursor( + new Uint8Array(fullConfig.initialBufferLength), + fullConfig, + ) + writeToGateway(bc, x) + return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset) } export function decodeToGateway(bytes: Uint8Array): ToGateway { - const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG); - const result = readToGateway(bc); - if (bc.offset < bc.view.byteLength) { - throw new bare.BareError(bc.offset, "remaining bytes"); - } - return result; + const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG) + const result = readToGateway(bc) + if (bc.offset < bc.view.byteLength) { + throw new bare.BareError(bc.offset, "remaining bytes") + } + return result } /** * MARK: Serverless */ export type ToServerlessServerInit = { - readonly runnerId: Id; - readonly runnerProtocolVersion: u16; -}; - -export function readToServerlessServerInit( - bc: bare.ByteCursor, -): ToServerlessServerInit { - return { - runnerId: readId(bc), - runnerProtocolVersion: bare.readU16(bc), - }; -} - -export function writeToServerlessServerInit( - bc: bare.ByteCursor, - x: ToServerlessServerInit, -): void { - writeId(bc, x.runnerId); - bare.writeU16(bc, x.runnerProtocolVersion); -} - -export type ToServerlessServer = { - readonly tag: "ToServerlessServerInit"; - readonly val: ToServerlessServerInit; -}; - -export function readToServerlessServer( - bc: bare.ByteCursor, -): ToServerlessServer { - const offset = bc.offset; - const tag = bare.readU8(bc); - switch (tag) { - case 0: - return { - tag: "ToServerlessServerInit", - val: readToServerlessServerInit(bc), - }; - default: { - bc.offset = offset; - throw new bare.BareError(offset, "invalid tag"); - } - } -} - -export function writeToServerlessServer( - bc: bare.ByteCursor, - x: ToServerlessServer, -): void { - switch (x.tag) { - case "ToServerlessServerInit": { - bare.writeU8(bc, 0); - writeToServerlessServerInit(bc, x.val); - break; - } - } -} - -export function encodeToServerlessServer( - x: ToServerlessServer, - config?: Partial, -): Uint8Array { - const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG; - const bc = new bare.ByteCursor( - new Uint8Array(fullConfig.initialBufferLength), - fullConfig, - ); - writeToServerlessServer(bc, x); - return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset); -} - -export function decodeToServerlessServer( - bytes: Uint8Array, -): ToServerlessServer { - const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG); - const result = readToServerlessServer(bc); - if (bc.offset < bc.view.byteLength) { - throw new bare.BareError(bc.offset, "remaining bytes"); - } - return result; + readonly runnerId: Id + readonly runnerProtocolVersion: u16 +} + +export function readToServerlessServerInit(bc: bare.ByteCursor): ToServerlessServerInit { + return { + runnerId: readId(bc), + runnerProtocolVersion: bare.readU16(bc), + } +} + +export function writeToServerlessServerInit(bc: bare.ByteCursor, x: ToServerlessServerInit): void { + writeId(bc, x.runnerId) + bare.writeU16(bc, x.runnerProtocolVersion) +} + +export type ToServerlessServer = + | { readonly tag: "ToServerlessServerInit"; readonly val: ToServerlessServerInit } + +export function readToServerlessServer(bc: bare.ByteCursor): ToServerlessServer { + const offset = bc.offset + const tag = bare.readU8(bc) + switch (tag) { + case 0: + return { tag: "ToServerlessServerInit", val: readToServerlessServerInit(bc) } + default: { + bc.offset = offset + throw new bare.BareError(offset, "invalid tag") + } + } } +export function writeToServerlessServer(bc: bare.ByteCursor, x: ToServerlessServer): void { + switch (x.tag) { + case "ToServerlessServerInit": { + bare.writeU8(bc, 0) + writeToServerlessServerInit(bc, x.val) + break + } + } +} + +export function encodeToServerlessServer(x: ToServerlessServer, config?: Partial): Uint8Array { + const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG + const bc = new bare.ByteCursor( + new Uint8Array(fullConfig.initialBufferLength), + fullConfig, + ) + writeToServerlessServer(bc, x) + return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset) +} + +export function decodeToServerlessServer(bytes: Uint8Array): ToServerlessServer { + const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG) + const result = readToServerlessServer(bc) + if (bc.offset < bc.view.byteLength) { + throw new bare.BareError(bc.offset, "remaining bytes") + } + return result +} + + function assert(condition: boolean, message?: string): asserts condition { - if (!condition) throw new Error(message ?? "Assertion failed"); + if (!condition) throw new Error(message ?? "Assertion failed") } diff --git a/website/src/content/docs/self-hosting/tls.mdx b/website/src/content/docs/self-hosting/tls.mdx new file mode 100644 index 0000000000..a37c74baab --- /dev/null +++ b/website/src/content/docs/self-hosting/tls.mdx @@ -0,0 +1,19 @@ +--- +title: "TLS & Certificates" +description: "How Rivet validates TLS root certificates." +skill: true +--- + +Public CAs (Let's Encrypt, AWS ACM, and so on) work out of the box. You only need to read this page if you're running behind a corporate or private CA. + +Rivet reads the operating system trust store (`/etc/ssl/certs` on Linux, Keychain on macOS, Schannel on Windows) for all outbound HTTPS. Operator-installed corporate CAs live there and are honored automatically. + +To trust a private CA inside the official `rivetdev/engine` image, extend it the standard Debian way: + +```dockerfile +FROM rivetdev/engine:latest +COPY my-corp-ca.crt /usr/local/share/ca-certificates/ +RUN update-ca-certificates +``` + +Rebuild and redeploy. The same approach works for any machine running a Rivet client: install the CA into the OS trust store and Rivet picks it up. diff --git a/website/src/sitemap/mod.ts b/website/src/sitemap/mod.ts index 804028cc12..86f8cae014 100644 --- a/website/src/sitemap/mod.ts +++ b/website/src/sitemap/mod.ts @@ -775,6 +775,10 @@ export const sitemap = [ href: "/docs/self-hosting/multi-region", // icon: faGlobe, }, + { + title: "TLS & Certificates", + href: "/docs/self-hosting/tls", + }, { title: "Production Checklist", href: "/docs/self-hosting/production-checklist",