feat(cli): connect via relay using pairing offer URL (#639)

Pass `--host https://app.paseo.sh/#offer=...` (or `PASEO_HOST=...`) to
any CLI command and the connection routes through the relay with E2EE,
the same way the mobile and desktop apps connect. Same `paseo daemon
pair` link the app already accepts — no new pairing flow.

Closes #181
This commit is contained in:
Mohamed Boudra
2026-04-30 21:37:51 +08:00
committed by GitHub
parent c2ad4a02ef
commit 30f7842e8f
7 changed files with 373 additions and 27 deletions
+2 -12
View File
@@ -1,4 +1,3 @@
import { Buffer } from "buffer";
import {
buildDaemonWebSocketUrl,
buildRelayWebSocketUrl as buildSharedRelayWebSocketUrl,
@@ -9,6 +8,8 @@ import {
type HostPortParts,
} from "@server/shared/daemon-endpoints";
export { decodeOfferFragmentPayload } from "@server/shared/connection-offer";
export type { HostPortParts };
export {
@@ -19,17 +20,6 @@ export {
parseHostPort,
};
function decodeBase64UrlToUtf8(input: string): string {
const base64 = input.replace(/-/g, "+").replace(/_/g, "/");
const padded = base64.padEnd(base64.length + ((4 - (base64.length % 4)) % 4), "=");
return Buffer.from(padded, "base64").toString("utf8");
}
export function decodeOfferFragmentPayload(encoded: string): unknown {
const json = decodeBase64UrlToUtf8(encoded);
return JSON.parse(json) as unknown;
}
export function buildRelayWebSocketUrl(params: { endpoint: string; serverId: string }): string {
return buildSharedRelayWebSocketUrl({ ...params, role: "client" });
}