fix(RequestManager): inference of image/apng (#9014)

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
DD
2023-01-06 17:23:11 +02:00
committed by GitHub
parent 0ff67d8e7a
commit ecb4281d1e
2 changed files with 14 additions and 2 deletions

View File

@@ -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
@@ -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);

View File

@@ -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>>;