core/adapters/webhook.adapter.ts
core/adapters/webhook.adapter.ts is a file in Bane's Lab Deploy. 28 lines of code and 9 definitions.
import {
ATTACHMENT_FIELD,
ATTACHMENT_TYPE,
JSON_TYPE,
PAYLOAD_FIELD,
} from "#configuration/constants/discord.constants";
import type { Attachment, WebhookMessage, WebhookRequest } from "#types/discord.types";
const CONTENT_TYPE = "Content-Type";
const METHOD = "POST";
const payloadOf = function payloadOf(message: WebhookMessage): string {
return JSON.stringify({ content: message.content, embeds: [message.embed] });
};
const jsonRequest = function jsonRequest(message: WebhookMessage): WebhookRequest {
return { body: payloadOf(message), headers: { [CONTENT_TYPE]: JSON_TYPE }, method: METHOD };
};
const formRequest = function formRequest(message: WebhookMessage, attachment: Attachment): WebhookRequest {
const form = new FormData();
form.append(PAYLOAD_FIELD, payloadOf(message));
form.append(ATTACHMENT_FIELD, new File([attachment.content], attachment.name, { type: ATTACHMENT_TYPE }));
return { body: form, method: METHOD };
};
export const postWebhook = async function postWebhook(url: string, message: WebhookMessage): Promise<void> {
const request = message.attachment === null ? jsonRequest(message) : formRequest(message, message.attachment);
const response = await fetch(url, request);
if (!response.ok) {
throw new Error(`${String(response.status)} ${response.statusText}`);
}
};