Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 54 additions & 81 deletions rivetkit-typescript/packages/rivetkit/src/registry/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,17 +160,17 @@ export const RegistryConfigSchema = z
});
}

// advertiseEndpoint required in production without endpoint
// clientEndpoint required in production without endpoint
if (
!isDevEnv &&
!resolvedEndpoint &&
!config.serverless.advertiseEndpoint
!config.serverless.clientEndpoint
) {
ctx.addIssue({
code: "custom",
message:
"advertiseEndpoint is required in production mode without endpoint",
path: ["advertiseEndpoint"],
"clientEndpoint is required in production mode without endpoint",
path: ["clientEndpoint"],
});
}
}
Expand All @@ -185,87 +185,60 @@ export const RegistryConfigSchema = z
const token =
resolvedEndpoint?.token ?? config.token ?? getRivetToken();

if (config.serverless) {
let serveManager: boolean;
let advertiseEndpoint: string;

if (endpoint) {
// Remote endpoint provided:
// - Do not start manager server
// - Redirect clients to remote endpoint
serveManager = config.serveManager ?? false;
advertiseEndpoint =
config.serverless.advertiseEndpoint ?? endpoint;
} else if (isDevEnv) {
// Development mode, no endpoint:
// - Start manager server
// - Redirect clients to local server
serveManager = config.serveManager ?? true;
advertiseEndpoint =
config.serverless.advertiseEndpoint ??
`http://localhost:${config.managerPort}`;
} else {
// Production mode, no endpoint:
// - Do not start manager server
// - Use file system driver
serveManager = config.serveManager ?? false;
invariant(
config.serverless.advertiseEndpoint,
"advertiseEndpoint is required in production mode without endpoint",
);
advertiseEndpoint = config.serverless.advertiseEndpoint;
}

// If endpoint is set or spawning engine, we'll use engine driver - disable manager inspector
const willUseEngine = !!endpoint || config.serverless.spawnEngine;
const inspector = willUseEngine
? {
...config.inspector,
enabled: { manager: false, actor: true },
}
: config.inspector;
// Logic:
// - If endpoint provided: do not start manager server
// - If dev mode without endpoint: start manager server
// - If prod mode without endpoint: do not start manager server
let serveManager: boolean;
let clientEndpoint: string;

return {
...config,
endpoint,
namespace,
token,
serveManager,
advertiseEndpoint,
inspector,
};
if (endpoint) {
// Remote endpoint provided:
// - Do not start manager server
// - Redirect clients to remote endpoint
serveManager = config.serveManager ?? false;
clientEndpoint = config.serverless.clientEndpoint ?? endpoint;
} else if (isDevEnv) {
// Development mode, no endpoint:
// - Start manager server
// - Redirect clients to local server
serveManager = config.serveManager ?? true;
clientEndpoint =
config.serverless.clientEndpoint ??
`http://localhost:${config.managerPort}`;
} else {
// Runner logic:
// - If endpoint provided: do not start manager server
// - If dev mode without endpoint: start manager server
// - If prod mode without endpoint: do not start manager server
let serveManager: boolean;
if (endpoint) {
serveManager = config.serveManager ?? false;
} else if (isDevEnv) {
serveManager = config.serveManager ?? true;
} else {
serveManager = config.serveManager ?? false;
}
// Production mode, no endpoint:
// - Do not start manager server
// - Use file system driver
serveManager = config.serveManager ?? false;
invariant(
config.serverless.clientEndpoint,
"clientEndpoint is required in production mode without endpoint",
);
clientEndpoint = config.serverless.clientEndpoint;
}

// If endpoint is set, we'll use engine driver - disable manager inspector
const willUseEngine = !!endpoint;
const inspector = willUseEngine
? {
...config.inspector,
enabled: { manager: false, actor: true },
}
: config.inspector;
// If endpoint is set or spawning engine, we'll use engine driver - disable manager inspector
const willUseEngine = !!endpoint || config.serverless.spawnEngine;
const inspector = willUseEngine
? {
...config.inspector,
enabled: { manager: false, actor: true },
}
: config.inspector;

return {
...config,
endpoint,
namespace,
token,
serveManager,
inspector,
};
}
return {
...config,
serverless: {
...config.serverless,
clientEndpoint,
},
endpoint,
namespace,
token,
serveManager,
inspector,
};
});

export type RegistryConfig = z.infer<typeof RegistryConfigSchema>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export const ServerlessConfigSchema = z.object({
*
* Auto-determined based on endpoint and NODE_ENV if not specified.
*/
advertiseEndpoint: z.string().optional(),
clientEndpoint: z.string().optional(),
});
export type ServerlessConfigInput = z.input<typeof ServerlessConfigSchema>;
export type ServerlessConfig = z.infer<typeof ServerlessConfigSchema>;
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ export class Registry<A extends RegistryActors> {
(kind === "serverless" && config.serverless.spawnEngine)
) {
console.log(
` - Endpoint: ${config.serverless.advertiseEndpoint}`,
` - Endpoint: ${config.endpoint ?? config.serverless.clientEndpoint}`,
);
}
if (kind === "serverless" && config.serverless.spawnEngine) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export function buildServerlessRouter(
c,
config,
{ serverless: {} },
config.serverless.advertiseEndpoint,
config.serverless.clientEndpoint,
),
);
});
Expand Down
Loading