39 lines
825 B
TypeScript
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;
|
|
}
|