feat(relay): add Rust, Python, and Node clients - #714
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f962e728d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9b768f8565
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d10b77c608
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a8b6483e47
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
a8b6483 to
ed81487
Compare
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 976a0fa72a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let (trace_id, etag) = metadata_parts(&metadata_value); | ||
| Ok(CompleteOutcome { | ||
| kind: "complete".into(), | ||
| value: serde_json::to_value(value).map_err(|_| serialization_error())?, |
There was a problem hiding this comment.
Preserve 64-bit integers in Node responses
When Relay returns an integer domain property outside JavaScript's safe range, such as 9007199254740993, this serde_json::Value is handed to napi-rs while the workspace enables only async and serde-json, not napi6. In that configuration, napi-rs converts the i64 through a JavaScript Number, silently changing this example to 9007199254740992; the collection-page helpers repeat the same conversion. Relay accepts full SQLite i64 domain values, so preserve these values losslessly, such as through BigInt with matching declarations, or reject unsafe integers rather than returning corrupted records.
Useful? React with 👍 / 👎.
| || !value | ||
| .bytes() | ||
| .all(|byte| byte.is_ascii_alphanumeric() || matches!(byte, b'-' | b'.' | b'_' | b'~')) |
There was a problem hiding this comment.
Enforce camelCase for request member names
When a caller supplies a field, list-filter, or lookup-selector name such as registration_status, this validator accepts it and the client performs authentication and HTTP I/O, but Relay deployments can only compile lower-camelCase property, filter, and selector names. Such requests therefore deterministically fail at the server (request.fields_invalid, filter.unknown_field, or an invalid lookup body). Apply Relay's valid_camel_identifier grammar here so RecordOptions::fields, ListRequest::filter, and LookupRequest::selector reject universally invalid names locally across Rust, Python, and Node.
Useful? React with 👍 / 👎.
Summary
registry-relay-clientas the canonical typed Rust SDK for the complete fixed Relay V2 HTTP surfaceregistry-relay-http-contractso the server and SDK share route, media-type, and Problem identifiers without runtime couplingSecurity and behavior
Verification
cargo deny checkpassed advisories, bans, licenses, and sources; existing duplicate and yanked dependency warnings remain warningsFollow-up
The Python tutorial is deliberately
draft: true: v0.19.0 has no Relay client wheel, so only a local-candidate dry run was possible. Publish it after a v0.19.1 or later release provides the matching wheel and a clean reader-mode run passes.The independent review also identified a likely pre-existing cyclic-input abort risk in the existing Evidence Node binding. It is outside this Relay package change and should receive the same bounded JavaScript graph hardening before its next release.