about summary refs log tree commit diff
path: root/kittybox-rs/companion-lite/src/micropub_api.ts
blob: 9eb65a2f8e59de90a05f1607815dc760e176eb89 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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<MicropubChannel[]> {
  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
  }
}