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\//); + }); +});