import type { DiscordWebhookPayload, DiscordWebhookResponse } from './types.js';
import { WebhookError } from '../utils/errors.js';
export class DiscordWebhookClient {
constructor(private webhookUrl: string) {}
async send(payload: DiscordWebhookPayload): Promise<DiscordWebhookResponse> {
try {
const response = await fetch(`${this.webhookUrl}?wait=true`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (!response.ok) {
const errorText = await response.text();
let errorData: unknown;
try {
errorData = JSON.parse(errorText);
} catch {
errorData = errorText;
}
throw new WebhookError(
`Discord API error: ${response.statusText}`,
response.status,
errorData
);
}
const data = (await response.json()) as DiscordWebhookResponse;
return data;
} catch (error) {
if (error instanceof WebhookError) {
throw error;
}
throw new WebhookError(
`Failed to send webhook: ${error instanceof Error ? error.message : 'Unknown error'}`,
undefined,
error
);
}
}
}