aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/lib/aclog.js
blob: 39525a3b7d63402d15e61956fc13033935bec1cf (plain)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import Settings from "../../settings";
import Storage from "storage";
import utils from "utils";

var encodeQuery = params => {
  if (!params) return "";
  var keys = Object.keys(params);
  if (keys.length === 0) return "";

  return keys.map(key => [key, params[key]].map(encodeURIComponent).join("=")).join("&");
}

var request = (method, endpoint, params, body) => {
  if (Settings.debug) console.log("[API Request] " + method + " " + endpoint + " query: " + encodeQuery(params) + " body: " + encodeQuery(body));
  var url = utils.getCurrentBaseUrl() + "/i/api/" + endpoint + ".json";
  var opts = {
    method: method,
    credentials: "include",
    headers: { },
  };

  if (method === "post") {
    opts.headers["content-type"] = "application/x-www-form-urlencoded; charset=UTF-8";
    opts.body = encodeQuery(Object.assign({ authenticity_token: Storage.store.authenticity_token }, body));
  } else {
    url += "?" + encodeQuery(params);
  }

  return fetch(url, opts).then(res => res.json().then(json => [res, json])).then(xx => {
    var [res, json] = xx;
    if (res.status >= 400) {
      var error = new Error(res.statusText);
      error.response = json;
      throw error;
    }

    Storage.update(json);
    return json.data;
  });
};

var get = (endpoint, params) => request("get", endpoint, params, null);
var post = (endpoint, body) => request("post", endpoint, null, body);

export default {
  users: {
    suggestScreenName: (head) => get("users/suggest_screen_name", { head: head }),
    favorited_by: (sn) => get("users/favorited_by", { screen_name: sn }),
    favorited_users: (sn) => get("users/favorited_users", { screen_name: sn }),
    stats_compact: (sn) => get("users/stats_compact", { screen_name: sn }),
    lookup: (sns) => get("users/lookup", { screen_name: sns.join(",") }),
  },
  tweets: {
    __tweets: (url, query) => get(url, query),
    responses: (id_str) => get("tweets/responses", { id: id_str }),
    show: (id_str) => get("tweets/show", { id: id_str }),
    update: (id_str) => post("tweets/update", { id: id_str }),
  },
  about: {
    status: () => get("about/status"),
  },
  sessions: {
    redirect: (callback) => get("sessions/redirect", { oauth_callback: callback }),
    callback: (verifier) => get("sessions/callback", { oauth_verifier: verifier }),
    destroy: () => post("sessions/destroy"),
    verify: () => get("sessions/verify"),
  },
  optout: {
    redirect: (cb) => post("optout/redirect", { oauth_callback: cb }),
    callback: (verifier) => get("optout/callback", { oauth_verifier: verifier }),
  },
  settings: {
    get: () => get("settings/get"),
    update: (settings) => post("settings/update", settings),
  }
};