From 633481b6a57522defade603b68cde2233c9eeb1a Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Mon, 10 Nov 2025 15:29:04 -0800 Subject: [PATCH] chore(rivetkit): add support for conn params on onRequest and onWebSocket --- .../packages/rivetkit/src/actor/router-endpoints.ts | 7 +++++-- rivetkit-typescript/packages/rivetkit/src/actor/router.ts | 7 ++++++- .../packages/rivetkit/src/drivers/engine/actor-driver.ts | 1 + .../packages/rivetkit/src/drivers/file-system/manager.ts | 2 ++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/rivetkit-typescript/packages/rivetkit/src/actor/router-endpoints.ts b/rivetkit-typescript/packages/rivetkit/src/actor/router-endpoints.ts index e593a5150e..89abe6d4fc 100644 --- a/rivetkit-typescript/packages/rivetkit/src/actor/router-endpoints.ts +++ b/rivetkit-typescript/packages/rivetkit/src/actor/router-endpoints.ts @@ -335,11 +335,13 @@ export async function handleAction( } export async function handleRawRequest( + c: HonoContext, req: Request, actorDriver: ActorDriver, actorId: string, ): Promise { const actor = await actorDriver.loadActor(actorId); + const parameters = getRequestConnParams(c.req); // Track connection outside of scope for cleanup let createdConn: AnyConn | undefined; @@ -347,7 +349,7 @@ export async function handleRawRequest( try { const conn = await actor.connectionManager.prepareAndConnectConn( createRawRequestSocket(), - {}, + parameters, req, ); @@ -368,6 +370,7 @@ export async function handleRawWebSocket( actorDriver: ActorDriver, actorId: string, requestIdBuf: ArrayBuffer | undefined, + connParams: unknown | undefined, ): Promise { const exposeInternalError = req ? getRequestExposeInternalError(req) @@ -414,7 +417,7 @@ export async function handleRawWebSocket( ); const conn = await actor.connectionManager.prepareAndConnectConn( driver, - {}, + connParams ?? {}, newRequest, ); createdConn = conn; diff --git a/rivetkit-typescript/packages/rivetkit/src/actor/router.ts b/rivetkit-typescript/packages/rivetkit/src/actor/router.ts index e4c44d8ea3..5102e707fd 100644 --- a/rivetkit-typescript/packages/rivetkit/src/actor/router.ts +++ b/rivetkit-typescript/packages/rivetkit/src/actor/router.ts @@ -110,7 +110,6 @@ export function createActorRouter( const upgradeWebSocket = runConfig.getUpgradeWebSocket?.(); if (upgradeWebSocket) { return upgradeWebSocket(async (c) => { - // Parse configuration from Sec-WebSocket-Protocol header const protocols = c.req.header("sec-websocket-protocol"); const { encoding, connParams } = parseWebSocketProtocols(protocols); @@ -165,6 +164,7 @@ export function createActorRouter( }); return await handleRawRequest( + c, correctedRequest, actorDriver, c.env.actorId, @@ -178,12 +178,16 @@ export function createActorRouter( const url = new URL(c.req.url); const pathWithQuery = c.req.path + url.search; + const protocols = c.req.header("sec-websocket-protocol"); + const { connParams } = parseWebSocketProtocols(protocols); + loggerWithoutContext().debug({ msg: "actor router raw websocket", path: c.req.path, url: c.req.url, search: url.search, pathWithQuery, + connParams, }); return await handleRawWebSocket( @@ -192,6 +196,7 @@ export function createActorRouter( actorDriver, c.env.actorId, undefined, + connParams, ); })(c, noopNext()); } else { 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 c47337d692..320487c83c 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts @@ -562,6 +562,7 @@ export class EngineActorDriver implements ActorDriver { this, actorId, requestIdBuf, + connParams, ); } else { throw new Error(`Unreachable path: ${url.pathname}`); diff --git a/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/manager.ts b/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/manager.ts index d080642900..abf5e2a12e 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/manager.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/manager.ts @@ -189,6 +189,7 @@ export class FileSystemManagerDriver implements ManagerDriver { this.#actorDriver, actorId, undefined, + params, ); return new InlineWebSocketAdapter2(wsHandler); } else { @@ -246,6 +247,7 @@ export class FileSystemManagerDriver implements ManagerDriver { this.#actorDriver, actorId, undefined, + connParams, ); return upgradeWebSocket(() => wsHandler)(c, noopNext()); } else {