mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-16 11:33:30 +01:00
feat: no-de-no-de, now with extra buns (#9683)
BREAKING CHANGE: The REST and RequestManager classes now extend AsyncEventEmitter from `@vladfrangu/async_event_emitter`, which aids in cross-compatibility between Node, Deno, Bun, CF Workers, Vercel Functions, etc. BREAKING CHANGE: DefaultUserAgentAppendix has been adapted to support multiple different platforms (previously mentioned Deno, Bun, CF Workers, etc) BREAKING CHANGE: the entry point for `@discordjs/rest` will now differ in non-node-like environments (CF Workers, etc.) Co-authored-by: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> Co-authored-by: suneettipirneni <suneettipirneni@icloud.com>
This commit is contained in:
@@ -1,11 +1,7 @@
|
||||
import process from 'node:process';
|
||||
import { lazy } from '@discordjs/util';
|
||||
import { getUserAgentAppendix } from '@discordjs/util';
|
||||
import { APIVersion } from 'discord-api-types/v10';
|
||||
import type { RESTOptions } from '../REST.js';
|
||||
|
||||
const getUndiciRequest = lazy(async () => {
|
||||
return import('../../strategies/undiciRequest.js');
|
||||
});
|
||||
import { getDefaultStrategy } from '../../environment.js';
|
||||
import type { RESTOptions, ResponseLike } from '../REST.js';
|
||||
|
||||
export const DefaultUserAgent =
|
||||
`DiscordBot (https://discord.js.org, [VI]{{inject}}[/VI])` as `DiscordBot (https://discord.js.org, ${string})`;
|
||||
@@ -13,7 +9,7 @@ export const DefaultUserAgent =
|
||||
/**
|
||||
* The default string to append onto the user agent.
|
||||
*/
|
||||
export const DefaultUserAgentAppendix = process.release?.name === 'node' ? `Node.js/${process.version}` : '';
|
||||
export const DefaultUserAgentAppendix = getUserAgentAppendix();
|
||||
|
||||
export const DefaultRestOptions = {
|
||||
agent: null,
|
||||
@@ -32,9 +28,8 @@ export const DefaultRestOptions = {
|
||||
hashSweepInterval: 14_400_000, // 4 Hours
|
||||
hashLifetime: 86_400_000, // 24 Hours
|
||||
handlerSweepInterval: 3_600_000, // 1 Hour
|
||||
async makeRequest(...args) {
|
||||
const strategy = await getUndiciRequest();
|
||||
return strategy.makeRequest(...args);
|
||||
async makeRequest(...args): Promise<ResponseLike> {
|
||||
return getDefaultStrategy()(...args);
|
||||
},
|
||||
} as const satisfies Required<RESTOptions>;
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { URLSearchParams } from 'node:url';
|
||||
import type { RESTPatchAPIChannelJSONBody, Snowflake } from 'discord-api-types/v10';
|
||||
import type { RateLimitData, ResponseLike } from '../REST.js';
|
||||
import { type RequestManager, RequestMethod } from '../RequestManager.js';
|
||||
@@ -121,3 +120,23 @@ export async function onRateLimit(manager: RequestManager, rateLimitData: RateLi
|
||||
export function calculateUserDefaultAvatarIndex(userId: Snowflake) {
|
||||
return Number(BigInt(userId) >> 22n) % 6;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sleeps for a given amount of time.
|
||||
*
|
||||
* @param ms - The amount of time (in milliseconds) to sleep for
|
||||
*/
|
||||
export async function sleep(ms: number): Promise<void> {
|
||||
return new Promise<void>((resolve) => {
|
||||
setTimeout(() => resolve(), ms);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies that a value is a buffer-like object.
|
||||
*
|
||||
* @param value - The value to check
|
||||
*/
|
||||
export function isBufferLike(value: unknown): value is ArrayBuffer | Buffer | Uint8Array | Uint8ClampedArray {
|
||||
return value instanceof ArrayBuffer || value instanceof Uint8Array || value instanceof Uint8ClampedArray;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user