summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2023-01-10 13:53:06 +0900
committerGitHub <noreply@github.com>2023-01-10 13:53:06 +0900
commit6b37c0927409a0b1651b6435405299e2c2394f4d (patch)
tree943e9f422990d546bfcd786b079c17e254146231
parent画面下部に必要なスペース関連の改善 (#9509) (diff)
downloadmisskey-6b37c0927409a0b1651b6435405299e2c2394f4d.tar.gz
misskey-6b37c0927409a0b1651b6435405299e2c2394f4d.tar.bz2
misskey-6b37c0927409a0b1651b6435405299e2c2394f4d.zip
refactor: api, apiGet関数をosから@/scripts/api.tsに分離する (#9510)
* split api? * fix * :v: * no vue split? * Revert "no vue split?" This reverts commit 27ccec971e2925184a58da65c3472655def2617c.
-rw-r--r--packages/frontend/src/os.ts82
-rw-r--r--packages/frontend/src/scripts/api.ts79
2 files changed, 81 insertions, 80 deletions
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index 6e36f18374..15d725defb 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -4,89 +4,11 @@ import { Component, markRaw, Ref, ref, defineAsyncComponent } from 'vue';
import { EventEmitter } from 'eventemitter3';
import insertTextAtCursor from 'insert-text-at-cursor';
import * as Misskey from 'misskey-js';
-import { apiUrl, url } from '@/config';
import MkPostFormDialog from '@/components/MkPostFormDialog.vue';
import MkWaitingDialog from '@/components/MkWaitingDialog.vue';
import { MenuItem } from '@/types/menu';
-import { $i } from '@/account';
-
-export const pendingApiRequestsCount = ref(0);
-
-const apiClient = new Misskey.api.APIClient({
- origin: url,
-});
-
-export const api = ((endpoint: string, data: Record<string, any> = {}, token?: string | null | undefined) => {
- 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;
-}) as typeof apiClient.request;
-
-export const apiGet = ((endpoint: string, data: Record<string, any> = {}) => {
- pendingApiRequestsCount.value++;
-
- const onFinally = () => {
- pendingApiRequestsCount.value--;
- };
-
- const query = new URLSearchParams(data);
-
- 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;
-}) as typeof apiClient.request;
+import { pendingApiRequestsCount, api, apiGet } from '@/scripts/api';
+export { pendingApiRequestsCount, api, apiGet };
export const apiWithDialog = ((
endpoint: string,
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<E extends keyof Endpoints, P extends Endpoints[E]['req']>(endpoint: E, data: P = {} as any, token?: string | null | undefined): Promise<Endpoints[E]['res']> {
+ pendingApiRequestsCount.value++;
+
+ const onFinally = () => {
+ pendingApiRequestsCount.value--;
+ };
+
+ const promise = new Promise<Endpoints[E]['res'] | void>((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<E extends keyof Endpoints, P extends Endpoints[E]['req']>(endpoint: E, data: P = {} as any): Promise<Endpoints[E]['res']> {
+ pendingApiRequestsCount.value++;
+
+ const onFinally = () => {
+ pendingApiRequestsCount.value--;
+ };
+
+ const query = new URLSearchParams(data as any);
+
+ const promise = new Promise<Endpoints[E]['res'] | void>((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;
+};