import * as http from 'http'; import { clearTimeout, setTimeout } from 'timers'; import { MongoCryptKMSRequestNetworkTimeoutError } from '../errors'; /** * @internal */ export function get( url: URL | string, options: http.RequestOptions = {} ): Promise<{ body: string; status: number | undefined }> { return new Promise((resolve, reject) => { /* eslint-disable prefer-const */ let timeoutId: NodeJS.Timeout; const request = http .get(url, options, response => { response.setEncoding('utf8'); let body = ''; response.on('data', chunk => (body += chunk)); response.on('end', () => { clearTimeout(timeoutId); resolve({ status: response.statusCode, body }); }); }) .on('error', error => { clearTimeout(timeoutId); reject(error); }) .end(); timeoutId = setTimeout(() => { request.destroy( new MongoCryptKMSRequestNetworkTimeoutError(`request timed out after 10 seconds`) ); }, 10000); }); }