From a940fa1c800e3790fbedac0a13c461fbe3e00cbf Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Thu, 13 Aug 2026 10:12:12 +0300 Subject: [PATCH] remove use of URL.canParse --- src/lib/strings/url-helpers.ts | 9 +++++++++ src/state/session/session-core.ts | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/strings/url-helpers.ts b/src/lib/strings/url-helpers.ts index 08ecf4b566..6a4e3335f8 100644 --- a/src/lib/strings/url-helpers.ts +++ b/src/lib/strings/url-helpers.ts @@ -27,6 +27,15 @@ const TRUSTED_REGEX = new RegExp( )})|/|#)`, ) +export function canParseUrl(url: string | URL, base?: string | URL): boolean { + try { + new URL(url, base) + return true + } catch { + return false + } +} + export function isValidDomain(str: string): boolean { return !!TLDs.find(tld => { let i = str.lastIndexOf(tld) diff --git a/src/state/session/session-core.ts b/src/state/session/session-core.ts index cce2a0e2d5..dbed9bfa2f 100644 --- a/src/state/session/session-core.ts +++ b/src/state/session/session-core.ts @@ -6,6 +6,7 @@ import { } from '@atproto/lex-password-session' import {PUBLIC_BSKY_SERVICE} from '#/lib/constants' +import {canParseUrl} from '#/lib/strings/url-helpers' import {logger} from '#/logger' import {prefetchAgeAssuranceServerData} from '#/ageAssurance/data' import {features} from '#/analytics' @@ -102,7 +103,7 @@ export function buildBundle( * and let the session route against its own service instead. */ const agent = - storedPdsUrl && URL.canParse(storedPdsUrl) + storedPdsUrl && canParseUrl(storedPdsUrl) ? routeSessionToPds(session, storedPdsUrl) : session return {