From 3763786b9184d77779161b27dfcd06de1421f7e1 Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Tue, 4 Nov 2025 17:44:41 -0800 Subject: [PATCH] fix(rivetkit): fix duplicate runner key in serverless --- .../rivetkit/src/drivers/engine/actor-driver.ts | 10 +++++----- .../packages/rivetkit/src/drivers/engine/config.ts | 6 ++---- .../packages/rivetkit/src/manager/router.ts | 7 +++++++ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts index 393711ff19..44ed514a1d 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts @@ -99,7 +99,7 @@ export class EngineActorDriver implements ActorDriver { // HACK: Override inspector token (which are likely to be // removed later on) with token from x-rivet-token header - const token = runConfig.token ?? runConfig.token; + const token = runConfig.token; if (token && runConfig.inspector && runConfig.inspector.enabled) { runConfig.inspector.token = () => token; } @@ -116,10 +116,10 @@ export class EngineActorDriver implements ActorDriver { version: this.#version, endpoint: getEndpoint(runConfig), token, - namespace: runConfig.namespace ?? runConfig.namespace, - totalSlots: runConfig.totalSlots ?? runConfig.totalSlots, - runnerName: runConfig.runnerName ?? runConfig.runnerName, - runnerKey: runConfig.runnerKey, + namespace: runConfig.namespace, + totalSlots: runConfig.totalSlots, + runnerName: runConfig.runnerName, + runnerKey: runConfig.runnerKey ?? crypto.randomUUID(), metadata: { inspectorToken: this.#runConfig.inspector.token(), }, diff --git a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/config.ts b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/config.ts index db16dc070a..bb328d1eef 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/config.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/config.ts @@ -7,10 +7,8 @@ export const EngingConfigSchema = z /** Unique key for this runner. Runners connecting a given key will replace any other runner connected with the same key. */ runnerKey: z .string() - .default( - () => - getEnvUniversal("RIVET_RUNNER_KEY") ?? crypto.randomUUID(), - ), + .optional() + .transform((x) => x ?? getEnvUniversal("RIVET_RUNNER_KEY")), /** How many actors this runner can run. */ totalSlots: z.number().default(100_000), diff --git a/rivetkit-typescript/packages/rivetkit/src/manager/router.ts b/rivetkit-typescript/packages/rivetkit/src/manager/router.ts index ca6e6de1f1..abccea32d4 100644 --- a/rivetkit-typescript/packages/rivetkit/src/manager/router.ts +++ b/rivetkit-typescript/packages/rivetkit/src/manager/router.ts @@ -186,6 +186,13 @@ function addServerlessRoutes( newRunConfig.totalSlots = totalSlots; newRunConfig.runnerName = runnerName; newRunConfig.namespace = namespace; + if (newRunConfig.runnerKey) { + logger().warn({ + msg: "runner keys are not supported by serverless runners, this will be overwritten with a random runner key", + oldRunnerKey: newRunConfig.runnerKey, + }); + newRunConfig.runnerKey = undefined; + } // Create new actor driver with updated config const actorDriver = driverConfig.actor(