Skip to content

Commit

Permalink
feat: REST#raw (#7929)
Browse files Browse the repository at this point in the history
  • Loading branch information
didinele authored May 17, 2022
1 parent 5e9b757 commit dfe449c
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 8 deletions.
2 changes: 1 addition & 1 deletion packages/rest/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ export * from './lib/errors/RateLimitError';
export * from './lib/RequestManager';
export * from './lib/REST';
export * from './lib/utils/constants';
export { makeURLSearchParams } from './lib/utils/utils';
export { makeURLSearchParams, parseResponse } from './lib/utils/utils';
12 changes: 11 additions & 1 deletion packages/rest/src/lib/REST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
import type { HashData } from './RequestManager';
import type { IHandler } from './handlers/IHandler';
import { DefaultRestOptions, RESTEvents } from './utils/constants';
import { parseResponse } from './utils/utils';

/**
* Options to be passed when creating the REST instance
Expand Down Expand Up @@ -314,7 +315,16 @@ export class REST extends EventEmitter {
* Runs a request from the api
* @param options Request options
*/
public request(options: InternalRequest) {
public async request(options: InternalRequest) {
const response = await this.raw(options);
return parseResponse(response);
}

/**
* Runs a request from the API, yielding the raw Response object
* @param options Request options
*/
public raw(options: InternalRequest) {
return this.requestManager.queueRequest(options);
}
}
2 changes: 1 addition & 1 deletion packages/rest/src/lib/RequestManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ export class RequestManager extends EventEmitter {
* @param request All the information needed to make a request
* @returns The response from the api request
*/
public async queueRequest(request: InternalRequest): Promise<unknown> {
public async queueRequest(request: InternalRequest): Promise<Dispatcher.ResponseData> {
// Generalize the endpoint to its route data
const routeId = RequestManager.generateRouteData(request.fullRoute, request.method);
// Get the bucket hash for the generic route, or point to a global route otherwise
Expand Down
3 changes: 2 additions & 1 deletion packages/rest/src/lib/handlers/IHandler.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { Dispatcher } from 'undici';
import type { RequestOptions } from '../REST';
import type { HandlerRequestData, RouteData } from '../RequestManager';

Expand All @@ -7,7 +8,7 @@ export interface IHandler {
url: string,
options: RequestOptions,
requestData: HandlerRequestData,
) => Promise<unknown>;
) => Promise<Dispatcher.ResponseData>;
// eslint-disable-next-line @typescript-eslint/method-signature-style -- This is meant to be a getter returning a bool
get inactive(): boolean;
readonly id: string;
Expand Down
8 changes: 4 additions & 4 deletions packages/rest/src/lib/handlers/SequentialHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ export class SequentialHandler implements IHandler {
url: string,
options: RequestOptions,
requestData: HandlerRequestData,
): Promise<unknown> {
): Promise<Dispatcher.ResponseData> {
let queue = this.#asyncQueue;
let queueType = QueueType.Standard;
// Separate sublimited requests when already sublimited
Expand Down Expand Up @@ -228,7 +228,7 @@ export class SequentialHandler implements IHandler {
options: RequestOptions,
requestData: HandlerRequestData,
retries = 0,
): Promise<unknown> {
): Promise<Dispatcher.ResponseData> {
/*
* After calculations have been done, pre-emptively stop further requests
* Potentially loop until this task can run if e.g. the global rate limit is hit twice
Expand Down Expand Up @@ -392,7 +392,7 @@ export class SequentialHandler implements IHandler {
}

if (status >= 200 && status < 300) {
return parseResponse(res);
return res;
} else if (status === 429) {
// A rate limit was hit - this may happen if the route isn't associated with an official bucket hash yet, or when first globally rate limited
const isGlobal = this.globalLimited;
Expand Down Expand Up @@ -474,7 +474,7 @@ export class SequentialHandler implements IHandler {
// throw the API error
throw new DiscordAPIError(data, 'code' in data ? data.code : data.error, status, method, url, requestData);
}
return null;
return res;
}
}
}

0 comments on commit dfe449c

Please sign in to comment.