apps/api/src/discord.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import { REST } from "discord.js";
import type { RESTError } from "discord-api-types/v10";
import config from "@stealth-developers/config";
export interface OAuth2ErrorResponse {
error:
| "invalid_grant"
| "invalid_request"
| "invalid_client"
| "unsupported_grant_type"
| "invalid_scope";
error_description?: string;
}
export const client = new REST({
version: "10",
});
export async function makeRequest<T>(
url: string,
token: string,
options?: RequestInit,
): Promise<T | RESTError> {
const response = await fetch(url, {
...options,
headers: {
...options?.headers,
Authorization: `Bearer ${token}`,
},
});
if (!response.ok) return (await response.json()) as RESTError;
return (await response.json()) as T;
}
export const createClient = (token: string) => {
console.log("Creating client with token:", token);
return new REST({
version: "10",
}).setToken(token);
};
export const isOAuth2Error = (data: unknown): data is OAuth2ErrorResponse => {
return typeof data === "object" && data !== null && "error" in data;
};
export const isError = (data: unknown): data is RESTError => {
return typeof data === "object" && data !== null && "code" in data;
};
client.setToken(config.discord.token);
|