summaryrefslogtreecommitdiff
path: root/src/web/app/common/scripts/api.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-11-13 18:05:35 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-11-13 18:05:35 +0900
commitbc9a8283c66d7588f931d4b802f7ab1fa7aa3226 (patch)
treecac529d136737c95b1656564756da8c4ae84df32 /src/web/app/common/scripts/api.ts
parent:v: (diff)
downloadsharkey-bc9a8283c66d7588f931d4b802f7ab1fa7aa3226.tar.gz
sharkey-bc9a8283c66d7588f931d4b802f7ab1fa7aa3226.tar.bz2
sharkey-bc9a8283c66d7588f931d4b802f7ab1fa7aa3226.zip
なんかもうめっちゃ変えた
Diffstat (limited to 'src/web/app/common/scripts/api.ts')
-rw-r--r--src/web/app/common/scripts/api.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/web/app/common/scripts/api.ts b/src/web/app/common/scripts/api.ts
new file mode 100644
index 0000000000..2a9d78e87d
--- /dev/null
+++ b/src/web/app/common/scripts/api.ts
@@ -0,0 +1,46 @@
+/**
+ * API Request
+ */
+
+import CONFIG from './config';
+
+let spinner = null;
+let pending = 0;
+
+/**
+ * Send a request to API
+ * @param {string|Object} i Credential
+ * @param {string} endpoint Endpoint
+ * @param {any} [data={}] Data
+ * @return {Promise<any>} Response
+ */
+export default (i, endpoint, data = {}): Promise<any> => {
+ if (++pending === 1) {
+ spinner = document.createElement('div');
+ spinner.setAttribute('id', 'wait');
+ document.body.appendChild(spinner);
+ }
+
+ // Append the credential
+ if (i != null) (data as any).i = typeof i === 'object' ? i.token : i;
+
+ return new Promise((resolve, reject) => {
+ // Send request
+ fetch(endpoint.indexOf('://') > -1 ? endpoint : `${CONFIG.apiUrl}/${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);
+ });
+};