diff --git a/examples/next-js/src/app/api/registry/[...all]/route.ts b/examples/next-js/src/app/api/registry/[...all]/route.ts index ac7eeba05..11f449a75 100644 --- a/examples/next-js/src/app/api/registry/[...all]/route.ts +++ b/examples/next-js/src/app/api/registry/[...all]/route.ts @@ -6,8 +6,8 @@ const server = registry.createServer({ // It should match the path in your Next.js API route // For example, if your API route is at /api/registry/[...all], this should be "/api/registry" basePath: "/api/registry", - studio: { - // Tell RivetKit Studio where to find RivetKit Registry + inspector: { + // Tell RivetKit Inspector where to find RivetKit Registry defaultEndpoint: "http://localhost:3000/api/registry", }, }); diff --git a/packages/core/package.json b/packages/core/package.json index a4625c53f..c7bfc9b75 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -167,7 +167,7 @@ "on-change": "^5.0.1", "p-retry": "^6.2.1", "zod": "^3.25.76", - "@rivetkit/engine-runner": "https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@4b0f765" + "@rivetkit/engine-runner": "https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@21dd4b4" }, "devDependencies": { "@hono/node-server": "^1.18.2", diff --git a/packages/core/src/actor/router.ts b/packages/core/src/actor/router.ts index b356d50f3..0301d3ed1 100644 --- a/packages/core/src/actor/router.ts +++ b/packages/core/src/actor/router.ts @@ -235,7 +235,7 @@ export function createActorRouter( } }); - if (runConfig.studio.enabled) { + if (runConfig.inspector.enabled) { router.route( "/inspect", new Hono() diff --git a/packages/core/src/driver-test-suite/mod.ts b/packages/core/src/driver-test-suite/mod.ts index c38e153a0..0f857b5a3 100644 --- a/packages/core/src/driver-test-suite/mod.ts +++ b/packages/core/src/driver-test-suite/mod.ts @@ -157,7 +157,7 @@ export async function createTestRuntime( const config: RunConfig = RunConfigSchema.parse({ driver, getUpgradeWebSocket: () => upgradeWebSocket!, - studio: { + inspector: { enabled: true, token: () => "token", }, diff --git a/packages/core/src/drivers/engine/actor-driver.ts b/packages/core/src/drivers/engine/actor-driver.ts index bb3220a64..9c2e2ee71 100644 --- a/packages/core/src/drivers/engine/actor-driver.ts +++ b/packages/core/src/drivers/engine/actor-driver.ts @@ -80,12 +80,11 @@ export class EngineActorDriver implements ActorDriver { endpoint: config.endpoint, pegboardEndpoint: config.pegboardEndpoint, namespace: config.namespace, - addresses: config.addresses, totalSlots: config.totalSlots, runnerName: config.runnerName, runnerKey: config.runnerKey, metadata: { - inspectorToken: this.#runConfig.studio.token(), + inspectorToken: this.#runConfig.inspector.token(), }, prepopulateActorNames: Object.fromEntries( Object.keys(this.#registryConfig.use).map((name) => [ diff --git a/packages/core/src/drivers/engine/manager-driver.ts b/packages/core/src/drivers/engine/manager-driver.ts index 1982fbce6..a484b05f3 100644 --- a/packages/core/src/drivers/engine/manager-driver.ts +++ b/packages/core/src/drivers/engine/manager-driver.ts @@ -40,9 +40,9 @@ export class EngineManagerDriver implements ManagerDriver { constructor(config: Config, runConfig: RunConfig) { this.#config = config; this.#runConfig = runConfig; - if (!this.#runConfig.studio.token()) { + if (!this.#runConfig.inspector.token()) { const token = generateRandomString(); - this.#runConfig.studio.token = () => token; + this.#runConfig.inspector.token = () => token; } this.#importWebSocketPromise = importWebSocket(); } @@ -365,7 +365,7 @@ function buildGuardHeadersForHttp( // Add guard-specific headers headers.set("x-rivet-target", "actor"); headers.set("x-rivet-actor", actorId); - headers.set("x-rivet-addr", "main"); + headers.set("x-rivet-port", "main"); return headers; } @@ -378,7 +378,7 @@ function buildGuardHeadersForWebSocket( const headers: Record = {}; headers["x-rivet-target"] = "actor"; headers["x-rivet-actor"] = actorId; - headers["x-rivet-addr"] = "main"; + headers["x-rivet-port"] = "main"; headers[HEADER_EXPOSE_INTERNAL_ERROR] = "true"; headers[HEADER_ENCODING] = encoding; if (params) { diff --git a/packages/core/src/drivers/file-system/manager.ts b/packages/core/src/drivers/file-system/manager.ts index b5c64001f..ed400448f 100644 --- a/packages/core/src/drivers/file-system/manager.ts +++ b/packages/core/src/drivers/file-system/manager.ts @@ -54,9 +54,9 @@ export class FileSystemManagerDriver implements ManagerDriver { this.#state = state; this.#driverConfig = driverConfig; - if (runConfig.studio.enabled) { - if (!this.#runConfig.studio.token()) { - this.#runConfig.studio.token = () => + if (runConfig.inspector.enabled) { + if (!this.#runConfig.inspector.token()) { + this.#runConfig.inspector.token = () => this.#state.getOrCreateInspectorAccessToken(); } const startedAt = new Date().toISOString(); diff --git a/packages/core/src/inspector/config.ts b/packages/core/src/inspector/config.ts index a7ab7ec5c..88cd99cf5 100644 --- a/packages/core/src/inspector/config.ts +++ b/packages/core/src/inspector/config.ts @@ -6,7 +6,7 @@ import { getEnvUniversal } from "@/utils"; type CorsOptions = NonNullable[0]>; const defaultTokenFn = () => { - const envToken = getEnvUniversal("RIVETKIT_STUDIO_TOKEN"); + const envToken = getEnvUniversal("RIVETKIT_INSPECTOR_TOKEN"); if (envToken) { return envToken; @@ -18,11 +18,11 @@ const defaultTokenFn = () => { const defaultEnabled = () => { return ( getEnvUniversal("NODE_ENV") !== "production" || - !getEnvUniversal("RIVETKIT_STUDIO_DISABLE") + !getEnvUniversal("RIVETKIT_INSPECTOR_DISABLE") ); }; -const defaultStudioOrigins = [ +const defaultInspectorOrigins = [ "http://localhost:43708", "https://studio.rivet.gg", ]; @@ -30,7 +30,7 @@ const defaultStudioOrigins = [ const defaultCors: CorsOptions = { origin: (origin) => { if ( - defaultStudioOrigins.includes(origin) || + defaultInspectorOrigins.includes(origin) || (origin.startsWith("https://") && origin.endsWith("rivet-gg.vercel.app")) ) { return origin; @@ -59,7 +59,7 @@ export const InspectorConfigSchema = z .default(() => defaultCors), /** - * Token used to access the Studio. + * Token used to access the Inspector. */ token: z .function() @@ -68,9 +68,9 @@ export const InspectorConfigSchema = z .default(() => defaultTokenFn), /** - * Default RivetKit server endpoint for Rivet Studio to connect to. This should be the same endpoint as what you use for your Rivet client to connect to RivetKit. + * Default RivetKit server endpoint for Rivet Inspector to connect to. This should be the same endpoint as what you use for your Rivet client to connect to RivetKit. * - * This is a convenience property just for printing out the studio URL. + * This is a convenience property just for printing out the inspector URL. */ defaultEndpoint: z.string().optional(), }) diff --git a/packages/core/src/inspector/utils.ts b/packages/core/src/inspector/utils.ts index cea574bc7..9d46a16fb 100644 --- a/packages/core/src/inspector/utils.ts +++ b/packages/core/src/inspector/utils.ts @@ -28,7 +28,7 @@ export function compareSecrets(providedSecret: string, validSecret: string) { export const secureInspector = (runConfig: RunConfig) => createMiddleware(async (c, next) => { - if (!runConfig.studio.enabled) { + if (!runConfig.inspector.enabled) { return c.text("Inspector is not enabled", 503); } @@ -37,7 +37,7 @@ export const secureInspector = (runConfig: RunConfig) => return c.text("Unauthorized", 401); } - const inspectorToken = runConfig.studio.token?.(); + const inspectorToken = runConfig.inspector.token?.(); if (!inspectorToken) { return c.text("Unauthorized", 401); } @@ -50,16 +50,16 @@ export const secureInspector = (runConfig: RunConfig) => await next(); }); -export function getStudioUrl(runConfig: RunConfigInput | undefined) { - if (!runConfig?.studio?.enabled) { +export function getInspectorUrl(runConfig: RunConfigInput | undefined) { + if (!runConfig?.inspector?.enabled) { return "disabled"; } - const accessToken = runConfig?.studio?.token?.(); + const accessToken = runConfig?.inspector?.token?.(); if (!accessToken) { inspectorLogger().warn( - "Studio Token is not set, but Studio is enabled. Please set it in the run configuration `inspector.token` or via `RIVETKIT_STUDIO_TOKEN` environment variable. Studio will not be accessible.", + "Inspector Token is not set, but Inspector is enabled. Please set it in the run configuration `inspector.token` or via `RIVETKIT_INSPECTOR_TOKEN` environment variable. Inspector will not be accessible.", ); return "disabled"; } @@ -68,8 +68,8 @@ export function getStudioUrl(runConfig: RunConfigInput | undefined) { url.searchParams.set("t", accessToken); - if (runConfig?.studio?.defaultEndpoint) { - url.searchParams.set("u", runConfig.studio.defaultEndpoint); + if (runConfig?.inspector?.defaultEndpoint) { + url.searchParams.set("u", runConfig.inspector.defaultEndpoint); } return url.href; diff --git a/packages/core/src/manager/router.ts b/packages/core/src/manager/router.ts index 38397300b..9587b751b 100644 --- a/packages/core/src/manager/router.ts +++ b/packages/core/src/manager/router.ts @@ -160,7 +160,7 @@ export function createManagerRouter( router.use("*", loggerMiddleware(logger())); - if (runConfig.cors || runConfig.studio?.cors) { + if (runConfig.cors || runConfig.inspector?.cors) { router.use("*", async (c, next) => { // Don't apply to WebSocket routes // HACK: This could be insecure if we had a varargs path. We have to check the path suffix for WS since we don't know the path that this router was mounted. @@ -179,19 +179,19 @@ export function createManagerRouter( return cors({ ...(runConfig.cors ?? {}), - ...(runConfig.studio?.cors ?? {}), + ...(runConfig.inspector?.cors ?? {}), origin: (origin, c) => { - const studioOrigin = runConfig.studio?.cors?.origin; + const inspectorOrigin = runConfig.inspector?.cors?.origin; - if (studioOrigin !== undefined) { - if (typeof studioOrigin === "function") { - const allowed = studioOrigin(origin, c); + if (inspectorOrigin !== undefined) { + if (typeof inspectorOrigin === "function") { + const allowed = inspectorOrigin(origin, c); if (allowed) return allowed; // Proceed to next CORS config if none provided - } else if (Array.isArray(studioOrigin)) { - return studioOrigin.includes(origin) ? origin : undefined; + } else if (Array.isArray(inspectorOrigin)) { + return inspectorOrigin.includes(origin) ? origin : undefined; } else { - return studioOrigin; + return inspectorOrigin; } } @@ -207,12 +207,12 @@ export function createManagerRouter( return null; }, allowMethods: (origin, c) => { - const studioMethods = runConfig.studio?.cors?.allowMethods; - if (studioMethods) { - if (typeof studioMethods === "function") { - return studioMethods(origin, c); + const inspectorMethods = runConfig.inspector?.cors?.allowMethods; + if (inspectorMethods) { + if (typeof inspectorMethods === "function") { + return inspectorMethods(origin, c); } - return studioMethods; + return inspectorMethods; } if (runConfig.cors?.allowMethods) { @@ -226,14 +226,14 @@ export function createManagerRouter( }, allowHeaders: [ ...(runConfig.cors?.allowHeaders ?? []), - ...(runConfig.studio?.cors?.allowHeaders ?? []), + ...(runConfig.inspector?.cors?.allowHeaders ?? []), ...ALLOWED_PUBLIC_HEADERS, "Content-Type", "User-Agent", ], credentials: runConfig.cors?.credentials ?? - runConfig.studio?.cors?.credentials ?? + runConfig.inspector?.cors?.credentials ?? true, })(c, next); }); @@ -562,12 +562,12 @@ export function createManagerRouter( }); } - if (runConfig.studio?.enabled) { + if (runConfig.inspector?.enabled) { router.route( "/actors/inspect", new Hono() .use( - cors(runConfig.studio.cors), + cors(runConfig.inspector.cors), secureInspector(runConfig), universalActorProxy({ registryConfig, @@ -584,7 +584,7 @@ export function createManagerRouter( "/inspect", new Hono() .use( - cors(runConfig.studio.cors), + cors(runConfig.inspector.cors), secureInspector(runConfig), async (c, next) => { const inspector = managerDriver.inspector; diff --git a/packages/core/src/registry/mod.ts b/packages/core/src/registry/mod.ts index ab2a34a97..6bba862f3 100644 --- a/packages/core/src/registry/mod.ts +++ b/packages/core/src/registry/mod.ts @@ -3,7 +3,7 @@ import { createActorRouter } from "@/actor/router"; import { type Client, createClientWithDriver } from "@/client/client"; import { chooseDefaultDriver } from "@/drivers/default"; import { createInlineClientDriver } from "@/inline-client-driver/mod"; -import { getStudioUrl } from "@/inspector/utils"; +import { getInspectorUrl } from "@/inspector/utils"; import { createManagerRouter } from "@/manager/router"; import { type RegistryActors, @@ -73,9 +73,9 @@ export class Registry { definitions: Object.keys(this.#config.use).length, ...driverLog, }); - if (config.studio?.enabled) { - logger().info("studio ready", { - url: getStudioUrl(config), + if (config.inspector?.enabled) { + logger().info("inspector ready", { + url: getInspectorUrl(config), }); } diff --git a/packages/core/src/registry/run-config.ts b/packages/core/src/registry/run-config.ts index 4b57a961d..c5ef590b1 100644 --- a/packages/core/src/registry/run-config.ts +++ b/packages/core/src/registry/run-config.ts @@ -39,7 +39,7 @@ export const RunConfigSchema = z maxIncomingMessageSize: z.number().optional().default(65_536), - studio: InspectorConfigSchema, + inspector: InspectorConfigSchema, /** * Base path for the router. This is used to prefix all routes. diff --git a/packages/core/src/test/mod.ts b/packages/core/src/test/mod.ts index 464e9ad71..0f23e775c 100644 --- a/packages/core/src/test/mod.ts +++ b/packages/core/src/test/mod.ts @@ -6,7 +6,7 @@ import { type Client, createClient } from "@/client/mod"; import { chooseDefaultDriver } from "@/drivers/default"; import { createFileSystemOrMemoryDriver } from "@/drivers/file-system/mod"; import { createInlineClientDriver } from "@/inline-client-driver/mod"; -import { getStudioUrl } from "@/inspector/utils"; +import { getInspectorUrl } from "@/inspector/utils"; import { createManagerRouter } from "@/manager/router"; import type { Registry } from "@/registry/mod"; import { RunConfigSchema } from "@/registry/run-config"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bfaaef3a6..20af54285 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1012,8 +1012,8 @@ importers: specifier: ^0.19.10 version: 0.19.10(hono@4.8.3)(zod@3.25.76) '@rivetkit/engine-runner': - specifier: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@4b0f765 - version: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@4b0f765(hono@4.8.3) + specifier: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@21dd4b4 + version: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@21dd4b4 '@rivetkit/fast-json-patch': specifier: ^3.1.2 version: 3.1.2 @@ -2581,14 +2581,18 @@ 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@4b0f76504c5028a6363af8bbcddcda9555acf315': - resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@4b0f76504c5028a6363af8bbcddcda9555acf315} + '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2': + resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2} version: 1.0.0 - '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@4b0f765': - resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@4b0f765} + '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@21dd4b4': + resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@21dd4b4} version: 0.0.0 + '@rivetkit/engine-tunnel-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-tunnel-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2': + resolution: {tarball: https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-tunnel-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2} + version: 1.0.0 + '@rivetkit/fast-json-patch@3.1.2': resolution: {integrity: sha512-CtA50xgsSSzICQduF/NDShPRzvucnNvsW/lQO0WgMTT1XAj9Lfae4pm7r3llFwilgG+9iq76Hv1LUqNy72v6yw==} @@ -6006,20 +6010,23 @@ snapshots: dependencies: zod: 3.25.76 - '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@4b0f76504c5028a6363af8bbcddcda9555acf315': + '@rivetkit/engine-runner-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2': dependencies: '@bare-ts/lib': 0.4.0 - '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@4b0f765(hono@4.8.3)': + '@rivetkit/engine-runner@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner@21dd4b4': 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@4b0f76504c5028a6363af8bbcddcda9555acf315 + '@rivetkit/engine-runner-protocol': https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-runner-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2 + '@rivetkit/engine-tunnel-protocol': https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-tunnel-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2 ws: 8.18.3 transitivePeerDependencies: - bufferutil - - hono - utf-8-validate + '@rivetkit/engine-tunnel-protocol@https://pkg.pr.new/rivet-gg/engine/@rivetkit/engine-tunnel-protocol@21dd4b46b439b443d67e11ff9139cf9fb273bfb2': + dependencies: + '@bare-ts/lib': 0.4.0 + '@rivetkit/fast-json-patch@3.1.2': {} '@rolldown/pluginutils@1.0.0-beta.11': {}