Repository navigation
feat(remote-connect): carry the relay service version as a query parameter - #3808
Merged
Merged
Conversation
bobleer
force-pushed
the
feat/relay-endpoint-version-query
branch
3 times, most recently
from
November 7, 2026 18:00
8f730b5 to
de88c27
Compare
…meter The official endpoint moves from a versioned path to a versioned query: `https://remote.openbitfun.com/relay?v=1.0.9`. One proxy location now serves every build, and the bare origin is the account controller, so a release no longer needs its own location and an invitation can be opened without knowing a version path. `/v/1.0.2/` stays live on the same process and database. Both paths are one deployment: a stored token, master key, or device registration from either alias keeps working, and neither is reported as retired. Compatibility is enforced end to end: - product-domains owns the endpoint helpers: base extraction (version, query, fragment removed), version reading, live-alias deployment comparison, and page URLs that keep `?v=` before the fragment. - URL validation accepts exactly one `v=<version>` parameter and rejects every other query, so the query can never carry per-request data. Rust, Kotlin, and ArkTS validators follow the same rule. - Path joins (`join_relay_url`, page URLs, socket paths, RPC payload endpoints) always use the base, never the versioned string. - Pairing links keep the version before the fragment, and both mobile clients accept invitations from either live alias. Published Pages are served from a separate browser origin in deployment: a Page document executes user-authored JavaScript and must not share storage with the controller that holds the device key. The deploy template documents the query endpoint, the bare-origin controller, and the `/p/` redirect. Verified with `cargo test -p openbitfun-product-domains`, `cargo test -p openbitfun-services-integrations --features remote-connect`, mobile-web `test:account-login`, and the web-ui relay endpoint tests.
bobleer
force-pushed
the
feat/relay-endpoint-version-query
branch
from
November 7, 2026 18:00
de88c27 to
5396ee2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Moves the official Relay endpoint from a versioned path to a versioned query:
One proxy location now serves every build, and the bare origin is the account
controller, so a release no longer needs its own location and an invitation can
be opened without knowing a version path.
Compatibility
/v/1.0.2/stays live on the same process and database. Both paths are onedeployment: a stored token, master key, or device registration from either
alias keeps working, and neither is reported as retired.
is_retired_official_relaynow treats both live aliases as current and still retires any other
/v/<release>.How the version is handled
product-domainsowns the helpers:relay_endpoint_base(drops version,query, fragment, trailing slash),
relay_endpoint_version,same_relay_deployment,relay_page_url.v=<version>parameter and rejects every otherquery content, so the query can never carry per-request data. Rust, Kotlin,
and ArkTS validators implement the same rule.
join_relay_url, page URLs, socket path, RPCpayload endpoint). Only user-facing links keep
?v=, and it stays before thefragment:
.../relay/?v=1.0.9#/pair?did=....versioned string as the user-facing endpoint; both accept invitations from
either live alias.
Pages origin
Deployment now serves
/p/from a separate browser origin. A Page documentexecutes user-authored JavaScript and must not share storage with the controller
that holds the device key and Relay credential. The template documents the query
endpoint, the bare-origin controller, and the old-path redirect.
Verification
Kotlin and ArkTS suites were not executed locally; their assertions were updated
to the same rules.