From b7d4e5c4686bc8aac41d832567190002542a1743 Mon Sep 17 00:00:00 2001 From: Vika Date: Thu, 29 Sep 2022 22:39:28 +0300 Subject: companion-lite: port to TypeScript --- kittybox-rs/companion-lite/src/micropub_api.ts | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 kittybox-rs/companion-lite/src/micropub_api.ts (limited to 'kittybox-rs/companion-lite/src/micropub_api.ts') diff --git a/kittybox-rs/companion-lite/src/micropub_api.ts b/kittybox-rs/companion-lite/src/micropub_api.ts new file mode 100644 index 0000000..9eb65a2 --- /dev/null +++ b/kittybox-rs/companion-lite/src/micropub_api.ts @@ -0,0 +1,58 @@ +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 + } +} -- cgit 1.4.1