export interface MicropubChannel { uid: string, name: string } export interface MF2 { type: string[], properties: { [key:string]: (string | MF2 | {[key:string]: string})[] | undefined } } export interface MicropubConfig { channels: MicropubChannel[], "media-endpoint": string } export async function query_channels(endpoint: string, token: string): Promise { const response = await fetch(endpoint + "?q=config", { headers: { "Authorization": `Bearer ${token}` } }) if (response.ok) { const config = await response.json() as MicropubConfig; return config["channels"] } else { throw new Error(`Micropub endpoint returned ${response.status}: ${await response.json()}`) } } export async function submit(endpoint: string, token: string, mf2: MF2) { try { const response = await fetch(endpoint, { method: "POST", headers: { "Authorization": `Bearer ${token}`, "Content-Type": "application/json" }, body: JSON.stringify(mf2) }) if (response.status != 201 && response.status != 202) { let err = await response.json(); console.error("Micropub error!", err); return err; } else { return { "location": response.headers.get("Location") } } } catch (e) { console.error("Network error!", e) throw e } }