diff --git a/packages/core/package.json b/packages/core/package.json index 5244f29b5..843b49bda 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -172,7 +172,7 @@ "@hono/node-server": "^1.18.2", "@hono/node-ws": "^1.1.1", "@rivet-gg/actor-core": "^25.1.0", - "@rivetkit/engine-runner": "https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@472", + "@rivetkit/engine-runner": "https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@7f23f3a", "@types/invariant": "^2", "@types/node": "^22.13.1", "@types/ws": "^8", diff --git a/packages/core/src/drivers/engine/actor-driver.ts b/packages/core/src/drivers/engine/actor-driver.ts index 46a28cfeb..1504ce5c9 100644 --- a/packages/core/src/drivers/engine/actor-driver.ts +++ b/packages/core/src/drivers/engine/actor-driver.ts @@ -4,17 +4,9 @@ import type { } from "@rivetkit/engine-runner"; import { Runner } from "@rivetkit/engine-runner"; import * as cbor from "cbor-x"; -import { WSContext, WSContextInit } from "hono/ws"; +import { WSContext } from "hono/ws"; import invariant from "invariant"; -import { ActionContext } from "@/actor/action"; -import { generateConnId, generateConnToken } from "@/actor/connection"; -import { - CONN_DRIVER_GENERIC_HTTP, - type GenericHttpDriverState, -} from "@/actor/generic-conn-driver"; -import * as protoHttpAction from "@/actor/protocol/http/action"; -import { deserialize, EncodingSchema, serialize } from "@/actor/protocol/serde"; -import { ActorHandle } from "@/client/actor-handle"; +import { EncodingSchema } from "@/actor/protocol/serde"; import type { Client } from "@/client/client"; import { type ActorDriver, @@ -27,10 +19,10 @@ import { } from "@/driver-helpers/mod"; import type { ActorRouter, - AnyActorInstance as CoreAnyActorInstance, RegistryConfig, RunConfig, UniversalWebSocket, + UpgradeWebSocketArgs, } from "@/mod"; import { createActorRouter, @@ -51,7 +43,6 @@ import { logger } from "./log"; interface ActorHandler { actor?: AnyActorInstance; actorStartPromise?: PromiseWithResolvers; - metadata: RunnerActorConfig["metadata"]; genericConnGlobalState: GenericConnGlobalState; persistedData?: Uint8Array; } @@ -93,6 +84,7 @@ export class EngineActorDriver implements ActorDriver { addresses: config.addresses, totalSlots: config.totalSlots, runnerName: config.runnerName, + runnerKey: config.runnerKey, prepopulateActorNames: Object.keys(this.#registryConfig.use), onConnected: () => { if (hasDisconnected) { @@ -201,13 +193,13 @@ export class EngineActorDriver implements ActorDriver { ): Promise { logger().debug("runner actor starting", { actorId, - name: config.metadata.actor.name, - keys: config.metadata.actor.keys, + name: config.name, + key: config.key, generation, }); // Deserialize input - let input; + let input: any; if (config.input) { input = cbor.decode(config.input); } @@ -218,19 +210,19 @@ export class EngineActorDriver implements ActorDriver { handler = { genericConnGlobalState: new GenericConnGlobalState(), actorStartPromise: Promise.withResolvers(), - metadata: config.metadata, persistedData: serializeEmptyPersistData(input), }; this.#actors.set(actorId, handler); } - const name = config.metadata.actor.name as string; - const key = deserializeActorKey(config.metadata.actor.keys[0]); + const name = config.name as string; + invariant(config.key, "actor should have a key"); + const key = deserializeActorKey(config.key); // Create actor instance const definition = lookupInRegistry( this.#registryConfig, - config.metadata.actor.name as string, // TODO: Remove cast + config.name as string, // TODO: Remove cast ); handler.actor = definition.instantiate(); @@ -299,7 +291,7 @@ export class EngineActorDriver implements ActorDriver { // Fetch WS handler // // We store the promise since we need to add WebSocket event listeners immediately that will wait for the promise to resolve - let wsHandlerPromise; + let wsHandlerPromise: Promise; if (url.pathname === PATH_CONNECT_WEBSOCKET) { wsHandlerPromise = handleWebSocketConnect( request, diff --git a/packages/core/src/drivers/engine/config.ts b/packages/core/src/drivers/engine/config.ts index e05070a29..43aa694e5 100644 --- a/packages/core/src/drivers/engine/config.ts +++ b/packages/core/src/drivers/engine/config.ts @@ -15,6 +15,10 @@ export const ConfigSchema = z runnerName: z .string() .default(getEnvUniversal("RIVET_RUNNER") ?? "rivetkit"), + // TODO: Automatically attempt ot determine key by common env vars (e.g. k8s pod name) + runnerKey: z + .string() + .default(getEnvUniversal("RIVET_RUNNER_KEY") ?? crypto.randomUUID()), totalSlots: z.number().default(100_000), addresses: z .record( diff --git a/packages/core/src/drivers/engine/kv.ts b/packages/core/src/drivers/engine/kv.ts index 30895243a..6b3fe5955 100644 --- a/packages/core/src/drivers/engine/kv.ts +++ b/packages/core/src/drivers/engine/kv.ts @@ -1,3 +1,3 @@ export const KEYS = { - PERSIST_DATA: [Uint8Array.from([1, 1])], + PERSIST_DATA: Uint8Array.from([1, 1]), }; diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts index e6b91b79c..47fcd0762 100644 --- a/packages/core/tsup.config.ts +++ b/packages/core/tsup.config.ts @@ -3,5 +3,4 @@ import defaultConfig from "../../tsup.base.ts"; export default defineConfig({ ...defaultConfig, - noExternal: ["@rivetkit/engine-runner", "@rivetkit/engine-runner-protocol"], }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 347e50710..1322130bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -679,7 +679,7 @@ importers: version: 5.4.19(@types/node@22.15.32) vitest: specifier: ^3.1.1 - version: 3.2.4(@types/node@22.15.32)(@vitest/ui@3.1.1)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) examples/raw-websocket-handler-proxy: dependencies: @@ -722,7 +722,7 @@ importers: version: 6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) vitest: specifier: ^3.1.1 - version: 3.2.4(@types/node@22.15.32)(@vitest/ui@3.1.1)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) examples/react: dependencies: @@ -1046,8 +1046,8 @@ importers: specifier: ^25.1.0 version: 25.2.0 '@rivetkit/engine-runner': - specifier: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@472 - version: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@472(hono@4.8.3) + specifier: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@7f23f3a + version: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@7f23f3a(hono@4.8.3) '@types/invariant': specifier: ^2 version: 2.2.37 @@ -1194,7 +1194,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.1.1 - version: 3.2.4(@types/node@22.15.32)(@vitest/ui@3.1.1)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) packages/frameworks/framework-base: dependencies: @@ -2578,12 +2578,12 @@ packages: '@rivet-gg/actor-core@25.2.0': resolution: {integrity: sha512-4K72XcDLVAz44Ae6G6GuyzWyxQZOLN8jM/W+sVKm6fHr70X8FNCSC5+/9hFIxz/OH9E6q6Wi3V/UN/k6immUBQ==} - '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@a029157d5d2a679b5bd5d619942a494477154822': - resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@a029157d5d2a679b5bd5d619942a494477154822} + '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@7f23f3afce4ae0548e50f331afafdfbdda51ae52': + resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@7f23f3afce4ae0548e50f331afafdfbdda51ae52} version: 1.0.0 - '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@472': - resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@472} + '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@7f23f3a': + resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@7f23f3a} version: 0.0.0 '@rivetkit/fast-json-patch@3.1.2': @@ -6001,14 +6001,14 @@ snapshots: dependencies: zod: 3.25.76 - '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@a029157d5d2a679b5bd5d619942a494477154822': + '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@7f23f3afce4ae0548e50f331afafdfbdda51ae52': dependencies: '@bare-ts/lib': 0.4.0 - '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@472(hono@4.8.3)': + '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@7f23f3a(hono@4.8.3)': dependencies: '@hono/node-server': 1.18.2(hono@4.8.3) - '@rivetkit/engine-runner-protocol': https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@a029157d5d2a679b5bd5d619942a494477154822 + '@rivetkit/engine-runner-protocol': https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@7f23f3afce4ae0548e50f331afafdfbdda51ae52 ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -8596,7 +8596,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8675,6 +8675,47 @@ snapshots: - tsx - yaml + vitest@3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.0 + debug: 4.4.1 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + picomatch: 4.0.2 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.3.5(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@22.15.32)(tsx@4.20.3)(yaml@2.8.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.15.32 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vitest@3.2.4(@types/node@24.0.4)(tsx@4.20.3)(yaml@2.8.0): dependencies: '@types/chai': 5.2.2