Skip to content

Commit

Permalink
fix(RequestManager): inference of image/apng (#9014)
Browse files Browse the repository at this point in the history
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
  • Loading branch information
didinele and kodiakhq[bot] committed Jan 6, 2023
1 parent 0ff67d8 commit ecb4281
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
11 changes: 9 additions & 2 deletions packages/rest/src/lib/RequestManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { FormData, type RequestInit, type BodyInit, type Dispatcher, type Agent
import type { RESTOptions, RestEvents, RequestOptions } from './REST.js';
import type { IHandler } from './handlers/IHandler.js';
import { SequentialHandler } from './handlers/SequentialHandler.js';
import { DefaultRestOptions, DefaultUserAgent, RESTEvents } from './utils/constants.js';
import { DefaultRestOptions, DefaultUserAgent, OverwrittenMimeTypes, RESTEvents } from './utils/constants.js';
import { resolveBody } from './utils/utils.js';

// Make this a lazy dynamic import as file-type is a pure ESM package
Expand Down Expand Up @@ -419,7 +419,14 @@ export class RequestManager extends EventEmitter {
if (Buffer.isBuffer(file.data)) {
// Try to infer the content type from the buffer if one isn't passed
const { fileTypeFromBuffer } = await getFileType();
const contentType = file.contentType ?? (await fileTypeFromBuffer(file.data))?.mime;
let contentType = file.contentType;
if (!contentType) {
const parsedType = (await fileTypeFromBuffer(file.data))?.mime;
if (parsedType) {
contentType = OverwrittenMimeTypes[parsedType as keyof typeof OverwrittenMimeTypes] ?? parsedType;
}
}

formData.append(fileKey, new Blob([file.data], { type: contentType }), file.name);
} else {
formData.append(fileKey, new Blob([`${file.data}`], { type: file.contentType }), file.name);
Expand Down
5 changes: 5 additions & 0 deletions packages/rest/src/lib/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,8 @@ export const ALLOWED_SIZES = [16, 32, 64, 128, 256, 512, 1_024, 2_048, 4_096] as
export type ImageExtension = typeof ALLOWED_EXTENSIONS[number];
export type StickerExtension = typeof ALLOWED_STICKER_EXTENSIONS[number];
export type ImageSize = typeof ALLOWED_SIZES[number];

export const OverwrittenMimeTypes = {
// https://github.com/discordjs/discord.js/issues/8557
'image/apng': 'image/png',
} as const satisfies Readonly<Record<string, string>>;

0 comments on commit ecb4281

Please sign in to comment.