diff --git a/src/rest/APIRequest.js b/src/rest/APIRequest.js index ce044c471..6c7205f03 100644 --- a/src/rest/APIRequest.js +++ b/src/rest/APIRequest.js @@ -5,7 +5,7 @@ const FormData = require('@discordjs/form-data'); const fetch = require('node-fetch'); const { UserAgent } = require('../util/Constants'); -const agent = new https.Agent({ keepAlive: true }); +let agent = null; class APIRequest { constructor(rest, method, path, options) { @@ -30,6 +30,8 @@ class APIRequest { } make() { + agent ??= new https.Agent({ ...this.client.options.http.agent, keepAlive: true }); + const API = this.options.versioned === false ? this.client.options.http.api diff --git a/src/util/Options.js b/src/util/Options.js index c4a70bcfd..7f45f9d40 100644 --- a/src/util/Options.js +++ b/src/util/Options.js @@ -80,10 +80,18 @@ * sent in the initial guild member list, must be between 50 and 250 */ +/** + * HTTPS Agent options. + * @typedef {Object} AgentOptions + * @see {@link https://nodejs.org/api/https.html#https_class_https_agent} + * @see {@link https://nodejs.org/api/http.html#http_new_agent_options} + */ + /** * HTTP options * @typedef {Object} HTTPOptions * @property {number} [version=9] API version to use + * @property {AgentOptions} [agent={}] HTTPS Agent options * @property {string} [api='https://discord.com/api'] Base url of the API * @property {string} [cdn='https://cdn.discordapp.com'] Base url of the CDN * @property {string} [invite='https://discord.gg'] Base url of invites @@ -127,6 +135,7 @@ class Options extends null { version: 9, }, http: { + agent: {}, version: 9, api: 'https://discord.com/api', cdn: 'https://cdn.discordapp.com', diff --git a/typings/index.d.ts b/typings/index.d.ts index 385adec7c..dc3140d03 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -47,6 +47,7 @@ import { Snowflake, } from 'discord-api-types/v9'; import { EventEmitter } from 'events'; +import { AgentOptions } from 'https'; import { Stream } from 'stream'; import { MessagePort, Worker } from 'worker_threads'; import * as WebSocket from 'ws'; @@ -3893,6 +3894,7 @@ export interface HTTPErrorData { } export interface HTTPOptions { + agent?: Omit; api?: string; version?: number; host?: string;