Centralize and standardize User-Agent string

Introduce a centralized RMAB_USER_AGENT constant (ReadMeABook/<version>) 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.
This commit is contained in:
kikootwo
2026-05-18 09:45:57 -04:00
parent a2d25e8a39
commit fb0445d95f
3 changed files with 24 additions and 3 deletions
+2 -2
View File
@@ -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 },
},
);
+9 -1
View File
@@ -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}`;
+13
View File
@@ -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/<semver> 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\//);
});
});