rainbow-fe/src/lib/mastoapi/util.ts

39 lines
825 B
TypeScript

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<Response> {
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;
}