summaryrefslogtreecommitdiff
path: root/src/web/app/common/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/web/app/common/scripts')
-rw-r--r--src/web/app/common/scripts/api.js44
-rw-r--r--src/web/app/common/scripts/api.ls51
2 files changed, 44 insertions, 51 deletions
diff --git a/src/web/app/common/scripts/api.js b/src/web/app/common/scripts/api.js
new file mode 100644
index 0000000000..924d697ebc
--- /dev/null
+++ b/src/web/app/common/scripts/api.js
@@ -0,0 +1,44 @@
+/**
+ * API Request
+ */
+
+let spinner = null;
+let pending = 0;
+
+/**
+ * Send a request to API
+ * @param {string|Object} i Credential
+ * @param {string} endpoint Endpoint
+ * @param {Object} [data={}] Data
+ * @return {Promise<Object>} Response
+ */
+module.exports = (i, endpoint, data = {}) => {
+ if (++pending === 1) {
+ spinner = document.createElement('div');
+ spinner.setAttribute('id', 'wait');
+ document.body.appendChild(spinner);
+ }
+
+ // Append the credential
+ if (i != null) data.i = typeof i === 'object' ? i.token : i;
+
+ return new Promise((resolve, reject) => {
+ // Send request
+ fetch(endpoint.indexOf('://') > -1 ? endpoint : `${CONFIG.api.url}/${endpoint}`, {
+ method: 'POST',
+ body: JSON.stringify(data),
+ credentials: endpoint === 'signin' ? 'include' : 'omit'
+ }).then(res => {
+ if (--pending === 0) spinner.parentNode.removeChild(spinner);
+ if (res.status === 200) {
+ res.json().then(resolve);
+ } else if (res.status === 204) {
+ resolve();
+ } else {
+ res.json().then(err => {
+ reject(err.error);
+ });
+ }
+ }).catch(reject);
+ });
+};
diff --git a/src/web/app/common/scripts/api.ls b/src/web/app/common/scripts/api.ls
deleted file mode 100644
index 47182b6a5a..0000000000
--- a/src/web/app/common/scripts/api.ls
+++ /dev/null
@@ -1,51 +0,0 @@
-riot = require \riot
-
-spinner = null
-pending = 0
-
-net = riot.observable!
-
-riot.mixin \net do
- net: net
-
-module.exports = (i, endpoint, data = {}) ->
- if ++pending == 1
- spinner := document.create-element \div
- ..set-attribute \id \wait
- document.body.append-child spinner
-
- if i? and typeof i == \object then i = i.token
-
- # append user token when signed in
- if i? then data.i = i
-
- opts =
- method: \POST
- body: JSON.stringify data
-
- if endpoint == \signin
- opts.credentials = \include
-
- ep = if (endpoint.index-of '://') > -1
- then endpoint
- else "#{CONFIG.api.url}/#{endpoint}"
-
- new Promise (resolve, reject) ->
- timer = set-timeout ->
- net.trigger \detected-slow-network
- , 5000ms
-
- fetch ep, opts
- .then (res) ->
- clear-timeout timer
- if --pending == 0
- spinner.parent-node.remove-child spinner
-
- if res.status == 200
- res.json!.then resolve
- else if res.status == 204
- resolve!
- else
- res.json!.then (err) ->
- reject err.error
- .catch reject