authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-06-20 10:56:12-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-06-20 10:56:12-07:00
logd87ec967bf5ef884486479e887e74307276d3e74
treeb3e5da709a275a09822ed33f4939fa42df098493
parente55dd0067dde55770a4f7f7d1720615fcfd56389
signature Signed by PGP key B5690EEEBB952194

[codex] Structure empty mobile pairing payload errors (#3372)

Co-authored-by: codex <codex@users.noreply.github.com>

2 files changed, 18 insertions(+), 3 deletions(-)

apps/mobile/src/features/connection/pairing.test.ts+7-2
......@@ -1,6 +1,10 @@
11import { describe, expect, it } from "vite-plus/test";
22
3import { extractPairingUrlFromQrPayload, parsePairingUrl } from "./pairing";
3import {
4 extractPairingUrlFromQrPayload,
5 PairingQrPayloadEmptyError,
6 parsePairingUrl,
7} from "./pairing";
48
59describe("extractPairingUrlFromQrPayload", () => {
610 it("trims raw pairing urls from qr payloads", () => {
......@@ -18,7 +22,8 @@ describe("extractPairingUrlFromQrPayload", () => {
1822 });
1923
2024 it("rejects empty qr payloads", () => {
21 expect(() => extractPairingUrlFromQrPayload(" ")).toThrow(
25 expect(() => extractPairingUrlFromQrPayload(" ")).toThrowError(PairingQrPayloadEmptyError);
26 expect(() => extractPairingUrlFromQrPayload(" ")).toThrowError(
2227 "Scanned QR code did not contain a pairing URL.",
2328 );
2429 });
apps/mobile/src/features/connection/pairing.ts+11-1
......@@ -1,7 +1,17 @@
11import { readHostedPairingRequest } from "@t3tools/shared/remote";
2import * as Schema from "effect/Schema";
23
34const MOBILE_PAIRING_URL_PARAM = "pairingUrl";
45
6export class PairingQrPayloadEmptyError extends Schema.TaggedErrorClass<PairingQrPayloadEmptyError>()(
7 "PairingQrPayloadEmptyError",
8 {},
9) {
10 override get message(): string {
11 return "Scanned QR code did not contain a pairing URL.";
12 }
13}
14
515export function buildPairingUrl(host: string, code: string): string {
616 const h = host.trim();
717 const c = code.trim();
......@@ -48,7 +58,7 @@ export function parsePairingUrl(url: string): { host: string; code: string } {
4858export function extractPairingUrlFromQrPayload(payload: string): string {
4959 const trimmed = payload.trim();
5060 if (!trimmed) {
51 throw new Error("Scanned QR code did not contain a pairing URL.");
61 throw new PairingQrPayloadEmptyError({});
5262 }
5363
5464 try {