import axios from "axios"; import { DateTime } from "luxon"; type UserInfo = { name: string; patreon: boolean; timezone: string | null; }; export type GuildInfo = { id: string; name: string; }; type EmbedField = { title: string; value: string; inline: boolean; }; export type Reminder = { attachment: string | null; attachment_name: string | null; avatar: string | null; channel: string; content: string; embed_author: string; embed_author_url: string | null; embed_color: number; embed_description: string; embed_footer: string; embed_footer_url: string | null; embed_image_url: string | null; embed_thumbnail_url: string | null; embed_title: string; embed_fields: EmbedField[] | null; enabled: boolean; expires: DateTime | null; interval_seconds: number | null; interval_days: number | null; interval_months: number | null; name: string; restartable: boolean; tts: boolean; uid: string; username: string; utc_time: DateTime; }; type ChannelInfo = { id: string; name: string; }; export function fetchUserInfo(): Promise { return axios.get("/dashboard/api/user").then((resp) => resp.data) as Promise; } export function fetchUserGuilds(): Promise { return axios.get("/dashboard/api/user/guilds").then((resp) => resp.data) as Promise< GuildInfo[] >; } export function fetchGuildReminders(guild: string): Promise { return axios .get(`/dashboard/api/guild/${guild}/reminders`) .then((resp) => resp.data) .then((value) => value.map((reminder) => ({ ...reminder, utc_time: DateTime.fromISO(reminder.utc_time), expires: reminder.expires === null ? null : DateTime.fromISO(reminder.expires), })), ) as Promise; } export function fetchGuildChannels(guild: string): Promise { return axios.get(`/dashboard/api/guild/${guild}/channels`).then((resp) => resp.data) as Promise< ChannelInfo[] >; }