-
Notifications
You must be signed in to change notification settings - Fork 76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(sdks/actor): add http api for calling rpcs #1950
feat(sdks/actor): add http api for calling rpcs #1950
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR Summary
This PR adds HTTP RPC support to the Rivet actor system, enabling RPC calls over HTTP alongside existing WebSocket connections, with improved development workflows.
- Added HTTP RPC endpoint
/rpc/:name
insdks/actor/runtime/src/actor.ts
with proper request validation and error handling - Introduced Zod schemas in
sdks/actor/protocol/src/http/rpc.ts
for runtime validation of HTTP RPC requests/responses - Modified
Connection
class insdks/actor/runtime/src/connection.ts
to support optional WebSocket connections for HTTP-only RPCs - Changed WebSocket connection URL format from
/connect?version=1&format=...
to/v1/connect?format=...
insdks/actor/client/src/handle.ts
- Added
dev
scripts with watch mode across multiple packages for improved development workflow
8 file(s) reviewed, 7 comment(s)
Edit PR Review Bot Settings | Greptile
@@ -31,6 +31,7 @@ | |||
"sideEffects": false, | |||
"scripts": { | |||
"build": "tsup src/mod.ts src/query.ts", | |||
"dev": "yarn build --watch", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: consider using 'tsup --watch' directly instead of 'yarn build --watch' to avoid potential yarn command resolution issues
@@ -22,6 +22,7 @@ | |||
"sideEffects": false, | |||
"scripts": { | |||
"build": "tsup src/mod.ts", | |||
"dev": "yarn build --watch", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: consider using tsup src/mod.ts --watch
directly instead of yarn build --watch
to avoid potential issues with yarn command resolution
} | ||
export const RequestSchema = z.object({ | ||
// Args | ||
a: z.array(z.unknown()), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: consider adding validation for empty arrays since they likely indicate invalid RPC calls
} | ||
export const ResponseOkSchema = z.object({ | ||
// Output | ||
o: z.unknown(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: consider adding validation for null/undefined output values which could indicate bugs in RPC handlers
// Message | ||
m: z.string(), | ||
// Metadata | ||
md: z.unknown().optional(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: metadata should be z.record() instead of z.unknown() to ensure object type
@@ -64,6 +64,7 @@ | |||
"sideEffects": false, | |||
"scripts": { | |||
"build": "tsup src/http/rpc.ts src/http/inspect.ts src/ws/mod.ts src/ws/to_client.ts src/ws/to_server.ts", | |||
"dev": "yarn build --watch", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: consider using 'tsup --watch' directly instead of 'yarn build --watch' for better cross-platform compatibility
const contentLength = Number(c.req.header("content-length") || "0"); | ||
if (contentLength > this.#config.protocol.maxIncomingMessageSize) { | ||
throw new errors.MessageTooLong(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Content-Length validation happens after parsing the body. Move this check before c.req.json() to prevent potential DoS attacks.
Deploying rivet with
|
Latest commit: |
b8aefc8
|
Status: | ✅ Deploy successful! |
Preview URL: | https://036625ae.rivet.pages.dev |
Branch Preview URL: | https://01-23-feat-sdks-actor-add-ht.rivet.pages.dev |
Merge activity
|
<!-- Please make sure there is an issue that this PR is correlated to. --> ## Changes <!-- If there are frontend changes, please include screenshots. -->
Changes