From a244555a44e32e6a2416c8b92b5a847f71a66dd7 Mon Sep 17 00:00:00 2001 From: Alan Daniel Date: Mon, 13 Apr 2026 16:38:19 -0400 Subject: [PATCH] fix: extension install link uses canonical store URLs, not siteConfig - Define CHROME_EXTENSION_STORE_URL / FIREFOX_EXTENSION_STORE_URL in extension-store-url - getExtensionStoreInstallUrl reads those constants only (avoids stale README URLs) - siteConfig re-exports same constants; detect FxiOS for Firefox iOS --- apps/dashboard/src/lib/extension-store-url.ts | 23 +++++++++++++------ apps/dashboard/src/lib/site-config.ts | 11 +++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/apps/dashboard/src/lib/extension-store-url.ts b/apps/dashboard/src/lib/extension-store-url.ts index aa05b0a..2aadb20 100644 --- a/apps/dashboard/src/lib/extension-store-url.ts +++ b/apps/dashboard/src/lib/extension-store-url.ts @@ -1,15 +1,24 @@ -import { siteConfig } from "#/lib/site-config"; +/** Canonical listing URLs (also used by `siteConfig` for SEO / consistency). */ +export const CHROME_EXTENSION_STORE_URL = + "https://chromewebstore.google.com/detail/celjddfjncnnkgfgldobcahfiimlebll/" as const; + +export const FIREFOX_EXTENSION_STORE_URL = + "https://addons.mozilla.org/en-US/firefox/addon/diffkit/" as const; + +function isFirefoxFamilyUserAgent(ua: string): boolean { + // Desktop Firefox: "Firefox/123"; Firefox iOS: "FxiOS/123"; avoid relying on siteConfig. + return /(?:Firefox|FxiOS)\//i.test(ua); +} /** * Resolves the correct extension listing for the user's browser (Firefox AMO vs Chrome Web Store). + * Uses inline URLs so the install link never depends on a mis-resolved or stale `siteConfig` bundle. */ export function getExtensionStoreInstallUrl(): string { if (typeof navigator === "undefined") { - return siteConfig.chromeExtensionStoreUrl; - } - const ua = navigator.userAgent; - if (/Firefox\//i.test(ua)) { - return siteConfig.firefoxExtensionStoreUrl; + return CHROME_EXTENSION_STORE_URL; } - return siteConfig.chromeExtensionStoreUrl; + return isFirefoxFamilyUserAgent(navigator.userAgent) + ? FIREFOX_EXTENSION_STORE_URL + : CHROME_EXTENSION_STORE_URL; } diff --git a/apps/dashboard/src/lib/site-config.ts b/apps/dashboard/src/lib/site-config.ts index 6b29abb..8c1c36e 100644 --- a/apps/dashboard/src/lib/site-config.ts +++ b/apps/dashboard/src/lib/site-config.ts @@ -1,3 +1,8 @@ +import { + CHROME_EXTENSION_STORE_URL, + FIREFOX_EXTENSION_STORE_URL, +} from "#/lib/extension-store-url"; + type SiteConfig = { name: string; domain: string; @@ -19,10 +24,8 @@ export const siteConfig: SiteConfig = { name: "DiffKit", domain: "diff-kit.com", url: "https://diff-kit.com", - chromeExtensionStoreUrl: - "https://chromewebstore.google.com/detail/celjddfjncnnkgfgldobcahfiimlebll/", - firefoxExtensionStoreUrl: - "https://addons.mozilla.org/en-US/firefox/addon/diffkit/", + chromeExtensionStoreUrl: CHROME_EXTENSION_STORE_URL, + firefoxExtensionStoreUrl: FIREFOX_EXTENSION_STORE_URL, githubRepositoryUrl: "https://github.com/stylessh/diffkit", themeColor: "#00C943", socialImagePath: "/logo512.png",