From 6729567402402a7a0888c4f10526d11a4cc22d93 Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Mon, 13 Oct 2025 18:33:00 -0700 Subject: [PATCH] chore(core): add actor names to metadata endpoint --- examples/counter-serverless/src/server.ts | 4 ++-- packages/rivetkit/src/common/router.ts | 9 ++++++++- packages/rivetkit/src/drivers/engine/actor-driver.ts | 9 ++------- packages/rivetkit/src/manager/router.ts | 8 ++++++-- packages/rivetkit/src/registry/config.ts | 8 ++++++++ 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/examples/counter-serverless/src/server.ts b/examples/counter-serverless/src/server.ts index d66d25754..01ff0b439 100644 --- a/examples/counter-serverless/src/server.ts +++ b/examples/counter-serverless/src/server.ts @@ -2,6 +2,6 @@ import { registry } from "./registry"; registry.start({ runnerKind: "serverless", - runEngine: true, - autoConfigureServerless: true, + autoConfigureServerless: { url: "http://localhost:8080" }, + endpoint: "http://localhost:6420", }); diff --git a/packages/rivetkit/src/common/router.ts b/packages/rivetkit/src/common/router.ts index b88c1c8d5..b0184a0ef 100644 --- a/packages/rivetkit/src/common/router.ts +++ b/packages/rivetkit/src/common/router.ts @@ -5,6 +5,7 @@ import { getRequestEncoding, getRequestExposeInternalError, } from "@/actor/router-endpoints"; +import { buildActorNames, type RegistryConfig } from "@/registry/config"; import type { RunnerConfig } from "@/registry/run-config"; import { getEndpoint } from "@/remote-manager-driver/api-utils"; import { HttpResponseError } from "@/schemas/client-protocol/mod"; @@ -93,6 +94,7 @@ export interface MetadataResponse { | { serverless: Record } | { normal: Record }; }; + actorNames: ReturnType; /** * Endpoint that the client should connect to to access this runner. * @@ -105,7 +107,11 @@ export interface MetadataResponse { clientEndpoint?: string; } -export function handleMetadataRequest(c: HonoContext, runConfig: RunnerConfig) { +export function handleMetadataRequest( + c: HonoContext, + registryConfig: RegistryConfig, + runConfig: RunnerConfig, +) { const response: MetadataResponse = { runtime: "rivetkit", version: VERSION, @@ -115,6 +121,7 @@ export function handleMetadataRequest(c: HonoContext, runConfig: RunnerConfig) { ? { serverless: {} } : { normal: {} }, }, + actorNames: buildActorNames(registryConfig), // Do not return client endpoint if default server disabled clientEndpoint: runConfig.overrideServerAddress ?? diff --git a/packages/rivetkit/src/drivers/engine/actor-driver.ts b/packages/rivetkit/src/drivers/engine/actor-driver.ts index d08e22249..d15350688 100644 --- a/packages/rivetkit/src/drivers/engine/actor-driver.ts +++ b/packages/rivetkit/src/drivers/engine/actor-driver.ts @@ -33,7 +33,7 @@ import { type ManagerDriver, serializeEmptyPersistData, } from "@/driver-helpers/mod"; -import type { RegistryConfig } from "@/registry/config"; +import { buildActorNames, type RegistryConfig } from "@/registry/config"; import type { RunnerConfig } from "@/registry/run-config"; import { getEndpoint } from "@/remote-manager-driver/api-utils"; import { @@ -103,12 +103,7 @@ export class EngineActorDriver implements ActorDriver { metadata: { inspectorToken: this.#runConfig.inspector.token(), }, - prepopulateActorNames: Object.fromEntries( - Object.keys(this.#registryConfig.use).map((name) => [ - name, - { metadata: {} }, - ]), - ), + prepopulateActorNames: buildActorNames(registryConfig), onConnected: () => { if (hasDisconnected) { logger().info({ diff --git a/packages/rivetkit/src/manager/router.ts b/packages/rivetkit/src/manager/router.ts index 4d2e1fed0..e812a90f8 100644 --- a/packages/rivetkit/src/manager/router.ts +++ b/packages/rivetkit/src/manager/router.ts @@ -212,7 +212,9 @@ function addServerlessRoutes( router.get("/health", (c) => handleHealthRequest(c)); - router.get("/metadata", (c) => handleMetadataRequest(c, runConfig)); + router.get("/metadata", (c) => + handleMetadataRequest(c, registryConfig, runConfig), + ); } function addManagerRoutes( @@ -643,7 +645,9 @@ function addManagerRoutes( router.get("/health", (c) => handleHealthRequest(c)); - router.get("/metadata", (c) => handleMetadataRequest(c, runConfig)); + router.get("/metadata", (c) => + handleMetadataRequest(c, registryConfig, runConfig), + ); managerDriver.modifyManagerRouter?.( registryConfig, diff --git a/packages/rivetkit/src/registry/config.ts b/packages/rivetkit/src/registry/config.ts index 9a6428211..d3c023548 100644 --- a/packages/rivetkit/src/registry/config.ts +++ b/packages/rivetkit/src/registry/config.ts @@ -30,3 +30,11 @@ export type RegistryConfigInput = Omit< z.input, "use" > & { use: A }; + +export function buildActorNames( + registryConfig: RegistryConfig, +): Record }> { + return Object.fromEntries( + Object.keys(registryConfig.use).map((name) => [name, { metadata: {} }]), + ); +}