diff --git a/src/lib/PoWebClient.spec.ts b/src/lib/PoWebClient.spec.ts index 58736a03..074cbd00 100644 --- a/src/lib/PoWebClient.spec.ts +++ b/src/lib/PoWebClient.spec.ts @@ -7,6 +7,26 @@ import { ServerError } from './errors'; import { CRA_CONTENT_TYPE, PoWebClient } from './PoWebClient'; describe('PoWebClient', () => { + describe('Common Axios instance attributes', () => { + test('responseType should be ArrayBuffer', () => { + const client = PoWebClient.initLocal(); + + expect(client.internalAxios.defaults.responseType).toEqual('arraybuffer'); + }); + + test('maxContentLength should be 1 MiB', () => { + const client = PoWebClient.initLocal(); + + expect(client.internalAxios.defaults.maxContentLength).toEqual(1048576); + }); + + test('Redirects should be disabled', () => { + const client = PoWebClient.initLocal(); + + expect(client.internalAxios.defaults.maxRedirects).toEqual(0); + }); + }); + describe('initLocal', () => { test('Host name should be the localhost IP address', () => { const client = PoWebClient.initLocal(); diff --git a/src/lib/PoWebClient.ts b/src/lib/PoWebClient.ts index 20d5e8eb..d72598e3 100644 --- a/src/lib/PoWebClient.ts +++ b/src/lib/PoWebClient.ts @@ -9,6 +9,8 @@ const DEFAULT_REMOVE_PORT = 443; const DEFAULT_LOCAL_TIMEOUT_MS = 3_000; const DEFAULT_REMOTE_TIMEOUT_MS = 5_000; +const OCTETS_IN_ONE_MIB = 2 ** 20; + export const CRA_CONTENT_TYPE = 'application/vnd.relaynet.cra'; /** @@ -49,10 +51,13 @@ export class PoWebClient { ) { const httpSchema = useTLS ? 'https' : 'http'; const agentName = useTLS ? 'httpsAgent' : 'httpAgent'; - const agent = useTLS ? new HttpsAgent({ keepAlive: true }) : new HttpAgent({ keepAlive: true }); + const agentClass = useTLS ? HttpsAgent : HttpAgent; this.internalAxios = axios.create({ + [agentName]: new agentClass({ keepAlive: true }), baseURL: `${httpSchema}://${hostName}:${port}/v1`, - [agentName]: agent, + maxContentLength: OCTETS_IN_ONE_MIB, + maxRedirects: 0, + responseType: 'arraybuffer', timeout: timeoutMs, }); }