all repos — stealth-developers @ c44d4e7df8b225bf9d3c614395ffc7870cd96075

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