diff --git a/packages/rest/__tests__/DiscordAPIError.test.ts b/packages/rest/__tests__/DiscordAPIError.test.ts index 814f9b3..2e5ef5c 100644 --- a/packages/rest/__tests__/DiscordAPIError.test.ts +++ b/packages/rest/__tests__/DiscordAPIError.test.ts @@ -8,7 +8,7 @@ test('Unauthorized', () => { 'PATCH', 'https://discord.com/api/v9/guilds/:id', { - attachments: undefined, + files: undefined, body: undefined, }, ); @@ -19,7 +19,7 @@ test('Unauthorized', () => { expect(error.name).toBe('DiscordAPIError[0]'); expect(error.status).toBe(401); expect(error.url).toBe('https://discord.com/api/v9/guilds/:id'); - expect(error.requestBody.attachments).toBe(undefined); + expect(error.requestBody.files).toBe(undefined); expect(error.requestBody.json).toBe(undefined); }); @@ -37,7 +37,7 @@ test('Invalid Form Body Error (error.{property}._errors.{index})', () => { 'PATCH', 'https://discord.com/api/v9/users/@me', { - attachments: undefined, + files: undefined, body: { username: 'a', }, @@ -52,7 +52,7 @@ test('Invalid Form Body Error (error.{property}._errors.{index})', () => { expect(error.name).toBe('DiscordAPIError[50035]'); expect(error.status).toBe(400); expect(error.url).toBe('https://discord.com/api/v9/users/@me'); - expect(error.requestBody.attachments).toBe(undefined); + expect(error.requestBody.files).toBe(undefined); expect(error.requestBody.json).toStrictEqual({ username: 'a' }); }); diff --git a/packages/rest/__tests__/REST.test.ts b/packages/rest/__tests__/REST.test.ts index 1684a66..172d87e 100644 --- a/packages/rest/__tests__/REST.test.ts +++ b/packages/rest/__tests__/REST.test.ts @@ -38,7 +38,7 @@ nock(`${DefaultRestOptions.api}/v${DefaultRestOptions.version}`) .reply(200, (_, body) => body) .post('/postEcho') .reply(200, (_, body) => body) - .post('/postAttachment') + .post('/postFile') .times(5) .reply(200, (_, body) => ({ body: body @@ -109,16 +109,16 @@ test('getReason encoded', async () => { expect(await api.get('/getReason', { reason: '😄' })).toStrictEqual({ reason: '%F0%9F%98%84' }); }); -test('postAttachment empty', async () => { - expect(await api.post('/postAttachment', { attachments: [] })).toStrictEqual({ +test('postFile empty', async () => { + expect(await api.post('/postFile', { files: [] })).toStrictEqual({ body: '', }); }); -test('postAttachment attachment', async () => { +test('postFile file', async () => { expect( - await api.post('/postAttachment', { - attachments: [{ fileName: 'out.txt', rawBuffer: Buffer.from('Hello') }], + await api.post('/postFile', { + files: [{ fileName: 'out.txt', rawBuffer: Buffer.from('Hello') }], }), ).toStrictEqual({ body: [ @@ -130,10 +130,10 @@ test('postAttachment attachment', async () => { }); }); -test('postAttachment attachment and JSON', async () => { +test('postFile file and JSON', async () => { expect( - await api.post('/postAttachment', { - attachments: [{ fileName: 'out.txt', rawBuffer: Buffer.from('Hello') }], + await api.post('/postFile', { + files: [{ fileName: 'out.txt', rawBuffer: Buffer.from('Hello') }], body: { foo: 'bar' }, }), ).toStrictEqual({ @@ -149,14 +149,14 @@ test('postAttachment attachment and JSON', async () => { }); }); -test('postAttachment attachments and JSON', async () => { +test('postFile files and JSON', async () => { expect( - await api.post('/postAttachment', { - attachments: [ + await api.post('/postFile', { + files: [ { fileName: 'out.txt', rawBuffer: Buffer.from('Hello') }, { fileName: 'out.txt', rawBuffer: Buffer.from('Hi') }, ], - body: { attachments: [{ id: 0, description: 'test' }] }, + body: { files: [{ id: 0, description: 'test' }] }, }), ).toStrictEqual({ body: [ @@ -170,15 +170,15 @@ test('postAttachment attachments and JSON', async () => { 'Hi', 'Content-Disposition: form-data; name="payload_json"', '', - '{"attachments":[{"id":0,"description":"test"}]}', + '{"files":[{"id":0,"description":"test"}]}', ].join('\n'), }); }); -test('postAttachment sticker and JSON', async () => { +test('postFile sticker and JSON', async () => { expect( - await api.post('/postAttachment', { - attachments: [{ key: 'file', fileName: 'sticker.png', rawBuffer: Buffer.from('Sticker') }], + await api.post('/postFile', { + files: [{ key: 'file', fileName: 'sticker.png', rawBuffer: Buffer.from('Sticker') }], body: { foo: 'bar' }, appendToFormData: true, }), @@ -242,7 +242,7 @@ test('Request and Response Events', async () => { method: 'get', path: '/request', route: '/request', - data: { attachments: undefined, body: undefined }, + data: { files: undefined, body: undefined }, retries: 0, }) as APIRequest, ); @@ -251,7 +251,7 @@ test('Request and Response Events', async () => { method: 'get', path: '/request', route: '/request', - data: { attachments: undefined, body: undefined }, + data: { files: undefined, body: undefined }, retries: 0, }) as APIRequest, expect.objectContaining({ status: 200, statusText: 'OK' }) as Response, diff --git a/packages/rest/src/lib/REST.ts b/packages/rest/src/lib/REST.ts index f181613..49892c7 100644 --- a/packages/rest/src/lib/REST.ts +++ b/packages/rest/src/lib/REST.ts @@ -142,7 +142,7 @@ export interface APIRequest { /** * The data that was used to form the body of this request */ - data: Pick; + data: Pick; /** * The number of times this request has been attempted */ diff --git a/packages/rest/src/lib/RequestManager.ts b/packages/rest/src/lib/RequestManager.ts index 60eb642..6e08fcb 100644 --- a/packages/rest/src/lib/RequestManager.ts +++ b/packages/rest/src/lib/RequestManager.ts @@ -12,21 +12,21 @@ import { DefaultRestOptions, DefaultUserAgent } from './utils/constants'; let agent: Agent | null = null; /** - * Represents an attachment to be added to the request + * Represents a file to be added to the request */ -export interface RawAttachment { +export interface RawFile { /** * The name of the file */ fileName: string; /** - * An explicit key to use for key of the formdata field for this attachment. - * When not provided, the index of the file in the attachments array is used in the form `files[${index}]`. + * An explicit key to use for key of the formdata field for this file. + * When not provided, the index of the file in the files array is used in the form `files[${index}]`. * If you wish to alter the placeholder snowflake, you must provide this property in the same form (`files[${placeholder}]`) */ key?: string; /** - * The actual data for the attachment + * The actual data for the file */ rawBuffer: Buffer; } @@ -36,13 +36,9 @@ export interface RawAttachment { */ export interface RequestData { /** - * Whether to append JSON data to form data instead of `payload_json` when sending attachments + * Whether to append JSON data to form data instead of `payload_json` when sending files */ appendToFormData?: boolean; - /** - * Files to be attached to this request - */ - attachments?: RawAttachment[] | undefined; /** * If this request needs the `Authorization` header * @default true @@ -58,13 +54,17 @@ export interface RequestData { * If providing as BodyInit, set `passThroughBody: true` */ body?: BodyInit | unknown; + /** + * Files to be attached to this request + */ + files?: RawFile[] | undefined; /** * Additional headers to add to this request */ headers?: Record; /** * Whether to pass-through the body property directly to `fetch()`. - * This only applies when attachments is NOT present + * This only applies when files is NOT present */ passThroughBody?: boolean; /** @@ -212,7 +212,7 @@ export class RequestManager extends EventEmitter { const { url, fetchOptions } = this.resolveRequest(request); // Queue the request - return handler.queueRequest(routeId, url, fetchOptions, { body: request.body, attachments: request.attachments }); + return handler.queueRequest(routeId, url, fetchOptions, { body: request.body, files: request.files }); } /** @@ -275,12 +275,12 @@ export class RequestManager extends EventEmitter { let finalBody: RequestInit['body']; let additionalHeaders: Record = {}; - if (request.attachments?.length) { + if (request.files?.length) { const formData = new FormData(); // Attach all files to the request - for (const [index, attachment] of request.attachments.entries()) { - formData.append(attachment.key ?? `files[${index}]`, attachment.rawBuffer, attachment.fileName); + for (const [index, file] of request.files.entries()) { + formData.append(file.key ?? `files[${index}]`, file.rawBuffer, file.fileName); } // If a JSON body was added as well, attach it to the form data, using payload_json unless otherwise specified diff --git a/packages/rest/src/lib/errors/DiscordAPIError.ts b/packages/rest/src/lib/errors/DiscordAPIError.ts index d9625cb..e8a9cac 100644 --- a/packages/rest/src/lib/errors/DiscordAPIError.ts +++ b/packages/rest/src/lib/errors/DiscordAPIError.ts @@ -1,4 +1,4 @@ -import type { InternalRequest, RawAttachment } from '../RequestManager'; +import type { InternalRequest, RawFile } from '../RequestManager'; interface DiscordErrorFieldInformation { code: string; @@ -23,7 +23,7 @@ export interface OAuthErrorData { } export interface RequestBody { - attachments: RawAttachment[] | undefined; + files: RawFile[] | undefined; json: unknown | undefined; } @@ -56,11 +56,11 @@ export class DiscordAPIError extends Error { public status: number, public method: string, public url: string, - bodyData: Pick, + bodyData: Pick, ) { super(DiscordAPIError.getMessage(rawError)); - this.requestBody = { attachments: bodyData.attachments, json: bodyData.body }; + this.requestBody = { files: bodyData.files, json: bodyData.body }; } /** diff --git a/packages/rest/src/lib/errors/HTTPError.ts b/packages/rest/src/lib/errors/HTTPError.ts index 31d4c31..909fda6 100644 --- a/packages/rest/src/lib/errors/HTTPError.ts +++ b/packages/rest/src/lib/errors/HTTPError.ts @@ -21,10 +21,10 @@ export class HTTPError extends Error { public status: number, public method: string, public url: string, - bodyData: Pick, + bodyData: Pick, ) { super(message); - this.requestBody = { attachments: bodyData.attachments, json: bodyData.body }; + this.requestBody = { files: bodyData.files, json: bodyData.body }; } } diff --git a/packages/rest/src/lib/handlers/IHandler.ts b/packages/rest/src/lib/handlers/IHandler.ts index cd04871..074bb4c 100644 --- a/packages/rest/src/lib/handlers/IHandler.ts +++ b/packages/rest/src/lib/handlers/IHandler.ts @@ -6,6 +6,6 @@ export interface IHandler { routeId: RouteData, url: string, options: RequestInit, - bodyData: Pick, + bodyData: Pick, ): Promise; } diff --git a/packages/rest/src/lib/handlers/SequentialHandler.ts b/packages/rest/src/lib/handlers/SequentialHandler.ts index f21abd7..d92edf3 100644 --- a/packages/rest/src/lib/handlers/SequentialHandler.ts +++ b/packages/rest/src/lib/handlers/SequentialHandler.ts @@ -168,7 +168,7 @@ export class SequentialHandler { routeId: RouteData, url: string, options: RequestInit, - bodyData: Pick, + bodyData: Pick, ): Promise { let queue = this.#asyncQueue; let queueType = QueueType.Standard; @@ -225,7 +225,7 @@ export class SequentialHandler { routeId: RouteData, url: string, options: RequestInit, - bodyData: Pick, + bodyData: Pick, retries = 0, ): Promise { /*