summaryrefslogtreecommitdiff
path: root/node_modules/discord.js/src/rest/APIRequest.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/discord.js/src/rest/APIRequest.js')
-rw-r--r--node_modules/discord.js/src/rest/APIRequest.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/rest/APIRequest.js b/node_modules/discord.js/src/rest/APIRequest.js
new file mode 100644
index 0000000..36ad0d7
--- /dev/null
+++ b/node_modules/discord.js/src/rest/APIRequest.js
@@ -0,0 +1,65 @@
+'use strict';
+
+const https = require('https');
+const FormData = require('@discordjs/form-data');
+const AbortController = require('abort-controller');
+const fetch = require('node-fetch');
+const { browser, UserAgent } = require('../util/Constants');
+
+if (https.Agent) var agent = new https.Agent({ keepAlive: true });
+
+class APIRequest {
+ constructor(rest, method, path, options) {
+ this.rest = rest;
+ this.client = rest.client;
+ this.method = method;
+ this.route = options.route;
+ this.options = options;
+
+ let queryString = '';
+ if (options.query) {
+ // Filter out undefined query options
+ const query = Object.entries(options.query).filter(([, value]) => value !== null && typeof value !== 'undefined');
+ queryString = new URLSearchParams(query).toString();
+ }
+ this.path = `${path}${queryString && `?${queryString}`}`;
+ }
+
+ make() {
+ const API =
+ this.options.versioned === false
+ ? this.client.options.http.api
+ : `${this.client.options.http.api}/v${this.client.options.http.version}`;
+ const url = API + this.path;
+ let headers = {};
+
+ if (this.options.auth !== false) headers.Authorization = this.rest.getAuth();
+ if (this.options.reason) headers['X-Audit-Log-Reason'] = encodeURIComponent(this.options.reason);
+ if (!browser) headers['User-Agent'] = UserAgent;
+ if (this.options.headers) headers = Object.assign(headers, this.options.headers);
+
+ let body;
+ if (this.options.files && this.options.files.length) {
+ body = new FormData();
+ for (const file of this.options.files) if (file && file.file) body.append(file.name, file.file, file.name);
+ if (typeof this.options.data !== 'undefined') body.append('payload_json', JSON.stringify(this.options.data));
+ if (!browser) headers = Object.assign(headers, body.getHeaders());
+ // eslint-disable-next-line eqeqeq
+ } else if (this.options.data != null) {
+ body = JSON.stringify(this.options.data);
+ headers['Content-Type'] = 'application/json';
+ }
+
+ const controller = new AbortController();
+ const timeout = this.client.setTimeout(() => controller.abort(), this.client.options.restRequestTimeout);
+ return fetch(url, {
+ method: this.method,
+ headers,
+ agent,
+ body,
+ signal: controller.signal,
+ }).finally(() => this.client.clearTimeout(timeout));
+ }
+}
+
+module.exports = APIRequest;