aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/lib/aclog.js
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2015-12-05 22:58:12 +0900
committerKazuki Yamaguchi <k@rhe.jp>2015-12-05 22:58:12 +0900
commit850c485806e3289993952e8a5207693921e828ba (patch)
treef2ba6501f230f7bca1b614ba2733c0bbb4da86b6 /frontend/src/lib/aclog.js
parent8b4e26890936995cc5b7a9ce2ac8d29ec56904d2 (diff)
downloadaclog-850c485806e3289993952e8a5207693921e828ba.tar.gz
split frontend
Diffstat (limited to 'frontend/src/lib/aclog.js')
-rw-r--r--frontend/src/lib/aclog.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/frontend/src/lib/aclog.js b/frontend/src/lib/aclog.js
new file mode 100644
index 0000000..742ac06
--- /dev/null
+++ b/frontend/src/lib/aclog.js
@@ -0,0 +1,81 @@
+import Settings from "../settings";
+import Storage from "storage";
+
+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 continueRequest = promise => {
+ return promise.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) => {
+ if (Settings.debug) console.log("[API Request] " + endpoint + " query: " + encodeQuery(params));
+ var url = Settings.backendPrefix + "/i/api/" + endpoint + ".json?" + encodeQuery(params);
+ return continueRequest(fetch(url, {
+ method: "get",
+ credentials: "include",
+ }));
+}
+
+var post = (endpoint, body) => {
+ if (Settings.debug) console.log("[API Request] " + endpoint + " body: " + encodeQuery(body));
+ var url = Settings.backendPrefix + "/i/api/" + endpoint + ".json";
+ return continueRequest(fetch(url, {
+ method: "post",
+ credentials: "include",
+ headers: {
+ "content-type": "application/x-www-form-urlencoded; charset=UTF-8"
+ },
+ body: encodeQuery(Object.assign({ authenticity_token: Storage.store.authenticity_token }, 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 }),
+ },
+ 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"),
+ },
+ apidocs: {
+ load: () => get("apidocs/all"),
+ },
+ 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"),
+ }
+};