export interface InstanceInfo { url: string; token?: string; } export class MastodonAPIError extends Error { public status: number; constructor(status: number, error: string) { super(error); this.status = status; } } export function isLoggedIn(instance: InstanceInfo) { return !!instance.token; } export async function fetchAPI( instance: InstanceInfo, path: string, options?: any ): Promise { const opts = { ...options }; if (opts.headers == null) opts.headers = {}; if (instance.token != null) { opts.headers['Authorization'] = instance.token; } const response = await fetch(`${instance.url}${path}`, opts); if (response.status != 200) { const json = await response.json(); throw new MastodonAPIError(response.status, json.error); } return response; }