Skip to content

Commit

Permalink
feat(REST): append additional information to the required User Agent (#…
Browse files Browse the repository at this point in the history
…6112)

Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
  • Loading branch information
QSmally and vladfrangu committed Jul 16, 2021
1 parent 8db6df3 commit f200f14
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 2 deletions.
3 changes: 3 additions & 0 deletions src/client/Client.js
Expand Up @@ -520,6 +520,9 @@ class Client extends BaseClient {
if (typeof options.failIfNotExists !== 'boolean') {
throw new TypeError('CLIENT_INVALID_OPTION', 'failIfNotExists', 'a boolean');
}
if (!Array.isArray(options.userAgentSuffix)) {
throw new TypeError('CLIENT_INVALID_OPTION', 'userAgentSuffix', 'an array of strings');
}
if (
typeof options.rejectOnRateLimit !== 'undefined' &&
!(typeof options.rejectOnRateLimit === 'function' || Array.isArray(options.rejectOnRateLimit))
Expand Down
10 changes: 8 additions & 2 deletions src/rest/APIRequest.js
Expand Up @@ -17,6 +17,9 @@ class APIRequest {
this.options = options;
this.retries = 0;

const { userAgentSuffix } = this.client.options;
this.fullUserAgent = `${UserAgent}${userAgentSuffix.length ? `, ${userAgentSuffix.join(', ')}` : ''}`;

let queryString = '';
if (options.query) {
const query = Object.entries(options.query)
Expand All @@ -33,11 +36,14 @@ class APIRequest {
? this.client.options.http.api
: `${this.client.options.http.api}/v${this.client.options.http.version}`;
const url = API + this.path;
let headers = { ...this.client.options.http.headers };

let headers = {
...this.client.options.http.headers,
'User-Agent': this.fullUserAgent,
};

if (this.options.auth !== false) headers.Authorization = this.rest.getAuth();
if (this.options.reason) headers['X-Audit-Log-Reason'] = encodeURIComponent(this.options.reason);
headers['User-Agent'] = UserAgent;
if (this.options.headers) headers = Object.assign(headers, this.options.headers);

let body;
Expand Down
3 changes: 3 additions & 0 deletions src/util/Options.js
Expand Up @@ -62,6 +62,8 @@
* {@link RateLimitError} will be thrown. Otherwise the request will be queued for later
* @property {number} [retryLimit=1] How many times to retry on 5XX errors (Infinity for indefinite amount of retries)
* @property {boolean} [failIfNotExists=true] Default value for {@link ReplyMessageOptions#failIfNotExists}
* @property {string[]} [userAgentSuffix] An array of additional bot info to be appended to the end of the required
* [User Agent](https://discord.com/developers/docs/reference#user-agent) header
* @property {PresenceData} [presence={}] Presence data to use upon login
* @property {IntentsResolvable} intents Intents to enable for this connection
* @property {WebsocketOptions} [ws] Options for the WebSocket
Expand Down Expand Up @@ -109,6 +111,7 @@ class Options extends null {
restTimeOffset: 500,
restSweepInterval: 60,
failIfNotExists: true,
userAgentSuffix: [],
presence: {},
ws: {
large_threshold: 50,
Expand Down
1 change: 1 addition & 0 deletions typings/index.d.ts
Expand Up @@ -2908,6 +2908,7 @@ export interface ClientOptions {
restSweepInterval?: number;
retryLimit?: number;
failIfNotExists?: boolean;
userAgentSuffix?: string[];
presence?: PresenceData;
intents: BitFieldResolvable<IntentsString, number>;
ws?: WebSocketOptions;
Expand Down

0 comments on commit f200f14

Please sign in to comment.