From 6b37c0927409a0b1651b6435405299e2c2394f4d Mon Sep 17 00:00:00 2001 From: tamaina Date: Tue, 10 Jan 2023 13:53:06 +0900 Subject: refactor: api, apiGet関数をosから@/scripts/api.tsに分離する (#9510) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * split api? * fix * :v: * no vue split? * Revert "no vue split?" This reverts commit 27ccec971e2925184a58da65c3472655def2617c. --- packages/frontend/src/scripts/api.ts | 79 ++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 packages/frontend/src/scripts/api.ts (limited to 'packages/frontend/src/scripts/api.ts') diff --git a/packages/frontend/src/scripts/api.ts b/packages/frontend/src/scripts/api.ts new file mode 100644 index 0000000000..82b1ba3cea --- /dev/null +++ b/packages/frontend/src/scripts/api.ts @@ -0,0 +1,79 @@ +import { Endpoints } from 'misskey-js/built/api.types'; +import { ref } from 'vue'; +import { apiUrl } from '@/config'; +import { $i } from '@/account'; +export const pendingApiRequestsCount = ref(0); + +// Implements Misskey.api.ApiClient.request +export function api(endpoint: E, data: P = {} as any, token?: string | null | undefined): Promise { + pendingApiRequestsCount.value++; + + const onFinally = () => { + pendingApiRequestsCount.value--; + }; + + const promise = new Promise((resolve, reject) => { + // Append a credential + if ($i) (data as any).i = $i.token; + if (token !== undefined) (data as any).i = token; + + // Send request + window.fetch(endpoint.indexOf('://') > -1 ? endpoint : `${apiUrl}/${endpoint}`, { + method: 'POST', + body: JSON.stringify(data), + credentials: 'omit', + cache: 'no-cache', + headers: { + 'Content-Type': 'application/json', + }, + }).then(async (res) => { + const body = res.status === 204 ? null : await res.json(); + + if (res.status === 200) { + resolve(body); + } else if (res.status === 204) { + resolve(); + } else { + reject(body.error); + } + }).catch(reject); + }); + + promise.then(onFinally, onFinally); + + return promise; +}; + +// Implements Misskey.api.ApiClient.request +export function apiGet(endpoint: E, data: P = {} as any): Promise { + pendingApiRequestsCount.value++; + + const onFinally = () => { + pendingApiRequestsCount.value--; + }; + + const query = new URLSearchParams(data as any); + + const promise = new Promise((resolve, reject) => { + // Send request + window.fetch(`${apiUrl}/${endpoint}?${query}`, { + method: 'GET', + credentials: 'omit', + cache: 'default', + }).then(async (res) => { + const body = res.status === 204 ? null : await res.json(); + + if (res.status === 200) { + resolve(body); + } else if (res.status === 204) { + resolve(); + } else { + reject(body.error); + } + }).catch(reject); + }); + + promise.then(onFinally, onFinally); + + return promise; +}; -- cgit v1.2.3-freya