refactor: migrate from node-fetch to undici and clean up dependencies
This commit is contained in:
@@ -4,9 +4,8 @@ const Buffer = require('node:buffer').Buffer;
|
||||
const https = require('node:https');
|
||||
const { setTimeout } = require('node:timers');
|
||||
const makeFetchCookie = require('fetch-cookie');
|
||||
const FormData = require('form-data');
|
||||
const fetchOriginal = require('node-fetch');
|
||||
const { CookieJar } = require('tough-cookie');
|
||||
const { fetch: fetchOriginal, FormData } = require('undici');
|
||||
const { ciphers } = require('../util/Constants');
|
||||
const Util = require('../util/Util');
|
||||
|
||||
@@ -69,7 +68,6 @@ class APIRequest {
|
||||
const url = API + this.path;
|
||||
|
||||
let headers = {
|
||||
authority: 'discord.com',
|
||||
accept: '*/*',
|
||||
'accept-language': 'en-US',
|
||||
'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108"',
|
||||
@@ -84,9 +82,8 @@ class APIRequest {
|
||||
'x-super-properties': `${Buffer.from(JSON.stringify(this.client.options.ws.properties), 'ascii').toString(
|
||||
'base64',
|
||||
)}`,
|
||||
Referer: 'https://discord.com/channels/@me',
|
||||
referer: 'https://discord.com/channels/@me',
|
||||
origin: 'https://discord.com',
|
||||
'Referrer-Policy': 'strict-origin-when-cross-origin',
|
||||
...this.client.options.http.headers,
|
||||
'User-Agent': this.fullUserAgent,
|
||||
};
|
||||
@@ -152,6 +149,7 @@ class APIRequest {
|
||||
agent,
|
||||
body,
|
||||
signal: controller.signal,
|
||||
redirect: 'follow',
|
||||
}).finally(() => clearTimeout(timeout));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,21 @@ class DiscordAPIError extends Error {
|
||||
this.captcha = error?.captcha_service ? error : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* A special `40333` JSON error code is returned if your request is blocked by Cloudflare.
|
||||
* This may be due to a malformed request or improper user agent.
|
||||
* The response resembles a normal error structure:
|
||||
* @type {boolean}
|
||||
* @example
|
||||
* {
|
||||
* "message": "internal network error",
|
||||
* "code": 40333
|
||||
* }
|
||||
*/
|
||||
get isBlockedByCloudflare() {
|
||||
return this.code === 40333;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flattens an errors object returned from the API into an array.
|
||||
* @param {APIError} obj Discord errors object
|
||||
|
||||
@@ -4,7 +4,7 @@ const { Buffer } = require('node:buffer');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const stream = require('node:stream');
|
||||
const fetch = require('node-fetch');
|
||||
const { fetch } = require('undici');
|
||||
const { Error: DiscordError, TypeError } = require('../errors');
|
||||
const Invite = require('../structures/Invite');
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ const crypto = require('node:crypto');
|
||||
const EventEmitter = require('node:events');
|
||||
const { StringDecoder } = require('node:string_decoder');
|
||||
const { setTimeout } = require('node:timers');
|
||||
const fetch = require('node-fetch');
|
||||
const { fetch } = require('undici');
|
||||
const WebSocket = require('ws');
|
||||
const { UserAgent } = require('./Constants');
|
||||
const Options = require('./Options');
|
||||
|
||||
@@ -5,7 +5,7 @@ const { parse } = require('node:path');
|
||||
const process = require('node:process');
|
||||
const { setTimeout } = require('node:timers');
|
||||
const { Collection } = require('@discordjs/collection');
|
||||
const fetch = require('node-fetch');
|
||||
const { fetch } = require('undici');
|
||||
const { Colors, Events } = require('./Constants');
|
||||
const { Error: DiscordError, RangeError, TypeError } = require('../errors');
|
||||
const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
||||
|
||||
Reference in New Issue
Block a user