diff --git a/README.md b/README.md index 7030ff4..35f34b2 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,9 @@ Example `~/.config/bird/config.json5` (Firefox + GraphQL defaults): // Prefer Firefox cookies by default firefoxProfile: "default-release", // Optional: Sweetistics defaults if you want fallback/overrides - sweetisticsApiKey: "sweet-..." + sweetisticsApiKey: "sweet-...", + // Disable Chrome cookies entirely (optional) + allowChrome: false } ``` diff --git a/src/index.ts b/src/index.ts index 7ba5f9c..5cc23bc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,6 +44,8 @@ type BirdConfig = { firefoxProfile?: string; sweetisticsApiKey?: string; sweetisticsBaseUrl?: string; + allowChrome?: boolean; + allowFirefox?: boolean; }; function readConfigFile(path: string): Partial { @@ -210,6 +212,8 @@ program ct0: opts.ct0, chromeProfile: opts.chromeProfile || config.chromeProfile, firefoxProfile: opts.firefoxProfile || config.firefoxProfile, + allowChrome: config.allowChrome ?? true, + allowFirefox: config.allowFirefox ?? true, }); for (const warning of warnings) { @@ -299,6 +303,8 @@ program ct0: opts.ct0, chromeProfile: opts.chromeProfile || config.chromeProfile, firefoxProfile: opts.firefoxProfile || config.firefoxProfile, + allowChrome: config.allowChrome ?? true, + allowFirefox: config.allowFirefox ?? true, }); for (const warning of warnings) { @@ -390,6 +396,8 @@ program ct0: opts.ct0, chromeProfile: opts.chromeProfile || config.chromeProfile, firefoxProfile: opts.firefoxProfile || config.firefoxProfile, + allowChrome: config.allowChrome ?? true, + allowFirefox: config.allowFirefox ?? true, }); for (const warning of warnings) { @@ -778,6 +786,8 @@ program ct0: opts.ct0, chromeProfile: opts.chromeProfile || config.chromeProfile, firefoxProfile: opts.firefoxProfile || config.firefoxProfile, + allowChrome: config.allowChrome ?? true, + allowFirefox: config.allowFirefox ?? true, }); for (const warning of warnings) { diff --git a/src/lib/cookies.ts b/src/lib/cookies.ts index 88e6de3..83a9c2a 100644 --- a/src/lib/cookies.ts +++ b/src/lib/cookies.ts @@ -294,6 +294,8 @@ export async function resolveCredentials(options: { ct0?: string; chromeProfile?: string; firefoxProfile?: string; + allowChrome?: boolean; + allowFirefox?: boolean; }): Promise { const warnings: string[] = []; const cookies: TwitterCookies = { @@ -338,8 +340,11 @@ export async function resolveCredentials(options: { } } + const allowFirefox = options.allowFirefox ?? true; + const allowChrome = options.allowChrome ?? true; + // 3. Firefox cookies (preferred browser fallback) - if (!cookies.authToken || !cookies.ct0) { + if (allowFirefox && (!cookies.authToken || !cookies.ct0)) { const firefoxResult = await extractCookiesFromFirefox(options.firefoxProfile); warnings.push(...firefoxResult.warnings); @@ -354,7 +359,7 @@ export async function resolveCredentials(options: { } // 4. Chrome cookies (secondary browser fallback) - if (!cookies.authToken || !cookies.ct0) { + if (allowChrome && (!cookies.authToken || !cookies.ct0)) { const chromeResult = await extractCookiesFromChrome(options.chromeProfile); warnings.push(...chromeResult.warnings);