From fb0445d95fc7e32a15743bed00b89f62021e3a7f Mon Sep 17 00:00:00 2001 From: kikootwo Date: Mon, 18 May 2026 09:45:57 -0400 Subject: [PATCH] Centralize and standardize User-Agent string Introduce a centralized RMAB_USER_AGENT constant (ReadMeABook/) and update audible service calls to use it instead of hardcoded values. This avoids the default axios UA (which some indexers reject) and replaces the previous `rmab/` identifier. Adds unit tests to verify the User-Agent format and ensure it doesn't resemble generic bot signatures. --- src/lib/integrations/audible.service.ts | 4 ++-- src/lib/utils/user-agent.ts | 10 +++++++++- tests/lib/utils/user-agent.test.ts | 13 +++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 tests/lib/utils/user-agent.test.ts diff --git a/src/lib/integrations/audible.service.ts b/src/lib/integrations/audible.service.ts index b796c78..71529a2 100644 --- a/src/lib/integrations/audible.service.ts +++ b/src/lib/integrations/audible.service.ts @@ -677,7 +677,7 @@ export class AudibleService { { params: { region: audnexusRegion }, timeout: 10000, - headers: { 'User-Agent': 'ReadMeABook/1.0' }, + headers: { 'User-Agent': RMAB_USER_AGENT }, }, ); @@ -768,7 +768,7 @@ export class AudibleService { { params: { region: audnexusRegion }, timeout: 5000, - headers: { 'User-Agent': 'ReadMeABook/1.0' }, + headers: { 'User-Agent': RMAB_USER_AGENT }, }, ); diff --git a/src/lib/utils/user-agent.ts b/src/lib/utils/user-agent.ts index b2876d2..ddcf105 100644 --- a/src/lib/utils/user-agent.ts +++ b/src/lib/utils/user-agent.ts @@ -1,3 +1,11 @@ +/** + * Component: User-Agent Constant + * + * Centralized User-Agent string used for all outbound HTTP requests. + * Replaces the default `axios/x.y.z` UA, which is rejected by some + * indexers (e.g., NZBFinder) as a generic-bot signature. + */ + import { version } from '../../../package.json'; -export const RMAB_USER_AGENT = `rmab/${version}`; +export const RMAB_USER_AGENT = `ReadMeABook/${version}`; diff --git a/tests/lib/utils/user-agent.test.ts b/tests/lib/utils/user-agent.test.ts new file mode 100644 index 0000000..a9c9de0 --- /dev/null +++ b/tests/lib/utils/user-agent.test.ts @@ -0,0 +1,13 @@ +import { describe, it, expect } from 'vitest'; +import { RMAB_USER_AGENT } from '@/lib/utils/user-agent'; + +describe('RMAB_USER_AGENT', () => { + it('uses the ReadMeABook/ format', () => { + expect(RMAB_USER_AGENT).toMatch(/^ReadMeABook\/\d+\.\d+\.\d+/); + }); + + it('does not look like a generic bot signature', () => { + expect(RMAB_USER_AGENT).not.toMatch(/^axios\//); + expect(RMAB_USER_AGENT).not.toMatch(/^rmab\//); + }); +});