feat: add GitHub Releases fallback for binary downloads

If cloakbrowser.dev is unreachable, automatically retry download
from GitHub Releases. Applies to both Python and JS wrappers.
This commit is contained in:
CloakHQ
2026-03-02 02:59:17 +01:00
parent 0bbc170747
commit 2f1f592b3a
5 changed files with 57 additions and 5 deletions
+9
View File
@@ -91,12 +91,21 @@ export const DOWNLOAD_BASE_URL =
export const GITHUB_API_URL =
"https://api.github.com/repos/CloakHQ/cloakbrowser/releases";
export const GITHUB_DOWNLOAD_BASE_URL =
"https://github.com/CloakHQ/cloakbrowser/releases/download";
export function getDownloadUrl(version?: string): string {
const v = version || CHROMIUM_VERSION;
const tag = getPlatformTag();
return `${DOWNLOAD_BASE_URL}/chromium-v${v}/cloakbrowser-${tag}.tar.gz`;
}
export function getFallbackDownloadUrl(version?: string): string {
const v = version || CHROMIUM_VERSION;
const tag = getPlatformTag();
return `${GITHUB_DOWNLOAD_BASE_URL}/chromium-v${v}/cloakbrowser-${tag}.tar.gz`;
}
export function getEffectiveVersion(): string {
const marker = path.join(getCacheDir(), "latest_version");
try {
+13 -2
View File
@@ -21,6 +21,7 @@ import {
getCacheDir,
getDownloadUrl,
getEffectiveVersion,
getFallbackDownloadUrl,
getLocalBinaryOverride,
getPlatformTag,
versionNewer,
@@ -135,7 +136,8 @@ export async function checkForUpdate(): Promise<string | null> {
// ---------------------------------------------------------------------------
async function downloadAndExtract(version?: string): Promise<void> {
const url = getDownloadUrl(version);
const primaryUrl = getDownloadUrl(version);
const fallbackUrl = getFallbackDownloadUrl(version);
const binaryDir = getBinaryDir(version);
const binaryPath = getBinaryPath(version);
@@ -149,7 +151,16 @@ async function downloadAndExtract(version?: string): Promise<void> {
);
try {
await downloadFile(url, tmpPath);
// Try primary server, fall back to GitHub Releases
try {
await downloadFile(primaryUrl, tmpPath);
} catch (primaryErr) {
console.warn(
`[cloakbrowser] Primary download failed (${primaryErr instanceof Error ? primaryErr.message : primaryErr}), trying GitHub Releases...`
);
await downloadFile(fallbackUrl, tmpPath);
}
await extractArchive(tmpPath, binaryDir, binaryPath);
console.log(
`[cloakbrowser] Visit https://cloakbrowser.dev for docs and release notifications.`