From e27fa68c1fa9f9953933ff8b43fbc2b74101705e Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Thu, 30 Jul 2026 00:10:46 -0700 Subject: [PATCH] fix: address remote pairing review findings --- .../sidebar/AddRemoteHostFields.test.tsx | 38 +++++++++++++++++++ .../sidebar/AddRemoteHostFields.tsx | 13 +++++-- src/renderer/src/web/web-preload-api.test.ts | 29 ++++++++++++++ src/renderer/src/web/web-preload-api.ts | 6 ++- .../src/web/web-runtime-client-error.ts | 25 ++++++++++++ src/renderer/src/web/web-runtime-client.ts | 13 ++++--- src/shared/remote-pairing-address.test.ts | 4 ++ src/shared/remote-pairing-address.ts | 3 +- 8 files changed, 119 insertions(+), 12 deletions(-) create mode 100644 src/renderer/src/components/sidebar/AddRemoteHostFields.test.tsx create mode 100644 src/renderer/src/web/web-runtime-client-error.ts diff --git a/src/renderer/src/components/sidebar/AddRemoteHostFields.test.tsx b/src/renderer/src/components/sidebar/AddRemoteHostFields.test.tsx new file mode 100644 index 00000000000..631eb7b3025 --- /dev/null +++ b/src/renderer/src/components/sidebar/AddRemoteHostFields.test.tsx @@ -0,0 +1,38 @@ +import { renderToStaticMarkup } from 'react-dom/server' +import { describe, expect, it, vi } from 'vitest' +import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../../../shared/pairing' +import { parseHostAccessLink } from '../../../../shared/remote-pairing-address' +import { RemoteServerFields } from './AddRemoteHostFields' + +function loopbackAccessLink(): string { + return encodePairingOffer({ + v: PAIRING_OFFER_VERSION, + endpoint: 'ws://127.0.0.1:6768', + deviceToken: 'token', + publicKeyB64: 'key', + scope: 'runtime' + }) +} + +describe('RemoteServerFields', () => { + it('associates blocked loopback guidance with the access-link input', () => { + const pairingCode = loopbackAccessLink() + const markup = renderToStaticMarkup( + + ) + + expect(markup).toContain('aria-invalid="true"') + expect(markup).toContain('aria-describedby="add-server-loopback-blocked"') + expect(markup).toContain('id="add-server-loopback-blocked"') + }) +}) diff --git a/src/renderer/src/components/sidebar/AddRemoteHostFields.tsx b/src/renderer/src/components/sidebar/AddRemoteHostFields.tsx index 257baa18378..60a940dd0e0 100644 --- a/src/renderer/src/components/sidebar/AddRemoteHostFields.tsx +++ b/src/renderer/src/components/sidebar/AddRemoteHostFields.tsx @@ -148,6 +148,11 @@ export function RemoteServerFields({ const inputError = pairingCode.trim() !== '' && !parsedLink.ok const loopbackBlocked = parsedLink.ok && parsedLink.value.endpointKind === 'loopback' && !allowLoopback + const pairingCodeDescriptionId = inputError + ? 'add-server-pairing-code-error' + : loopbackBlocked + ? 'add-server-loopback-blocked' + : 'add-server-pairing-code-help' return (
onPairingCodeChange(event.target.value)} @@ -196,7 +201,7 @@ export function RemoteServerFields({ )}

{inputError ? ( -

+

) : null} @@ -239,7 +244,7 @@ export function RemoteServerFields({ ) : null} {loopbackBlocked ? ( -

+