summaryrefslogtreecommitdiff
path: root/packages/client
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-06-25 18:26:31 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-06-25 18:26:31 +0900
commit58e83f8e4f634bfd95a3afc847a875413120c301 (patch)
tree9882477cac227f59c904900b0271ac1bc4e6f517 /packages/client
parentrefactor(client): extract tooltip logic of chart (diff)
downloadmisskey-58e83f8e4f634bfd95a3afc847a875413120c301.tar.gz
misskey-58e83f8e4f634bfd95a3afc847a875413120c301.tar.bz2
misskey-58e83f8e4f634bfd95a3afc847a875413120c301.zip
feat: allow GET for some endpoints
Resolve #8263
Diffstat (limited to 'packages/client')
-rw-r--r--packages/client/src/components/chart.vue36
-rw-r--r--packages/client/src/components/instance-card-mini.vue2
-rw-r--r--packages/client/src/components/user-card-mini.vue2
-rw-r--r--packages/client/src/os.ts33
-rw-r--r--packages/client/src/pages/admin/overview.vue4
-rw-r--r--packages/client/src/widgets/activity.vue10
-rw-r--r--packages/client/src/widgets/federation.vue6
7 files changed, 63 insertions, 30 deletions
diff --git a/packages/client/src/components/chart.vue b/packages/client/src/components/chart.vue
index d9075dd077..fc7c4ff950 100644
--- a/packages/client/src/components/chart.vue
+++ b/packages/client/src/components/chart.vue
@@ -342,7 +342,7 @@ const exportData = () => {
};
const fetchFederationChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/federation', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/federation', { limit: props.limit, span: props.span });
return {
series: [{
name: 'Received',
@@ -392,7 +392,7 @@ const fetchFederationChart = async (): Promise<typeof chartData> => {
};
const fetchApRequestChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/ap-request', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/ap-request', { limit: props.limit, span: props.span });
return {
series: [{
name: 'In',
@@ -414,7 +414,7 @@ const fetchApRequestChart = async (): Promise<typeof chartData> => {
};
const fetchNotesChart = async (type: string): Promise<typeof chartData> => {
- const raw = await os.api('charts/notes', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/notes', { limit: props.limit, span: props.span });
return {
series: [{
name: 'All',
@@ -461,7 +461,7 @@ const fetchNotesChart = async (type: string): Promise<typeof chartData> => {
};
const fetchNotesTotalChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/notes', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/notes', { limit: props.limit, span: props.span });
return {
series: [{
name: 'Combined',
@@ -480,7 +480,7 @@ const fetchNotesTotalChart = async (): Promise<typeof chartData> => {
};
const fetchUsersChart = async (total: boolean): Promise<typeof chartData> => {
- const raw = await os.api('charts/users', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/users', { limit: props.limit, span: props.span });
return {
series: [{
name: 'Combined',
@@ -508,7 +508,7 @@ const fetchUsersChart = async (total: boolean): Promise<typeof chartData> => {
};
const fetchActiveUsersChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/active-users', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/active-users', { limit: props.limit, span: props.span });
return {
series: [{
name: 'Read & Write',
@@ -560,7 +560,7 @@ const fetchActiveUsersChart = async (): Promise<typeof chartData> => {
};
const fetchDriveChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/drive', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/drive', { limit: props.limit, span: props.span });
return {
bytes: true,
series: [{
@@ -596,7 +596,7 @@ const fetchDriveChart = async (): Promise<typeof chartData> => {
};
const fetchDriveFilesChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/drive', { limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/drive', { limit: props.limit, span: props.span });
return {
series: [{
name: 'All',
@@ -631,7 +631,7 @@ const fetchDriveFilesChart = async (): Promise<typeof chartData> => {
};
const fetchInstanceRequestsChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
return {
series: [{
name: 'In',
@@ -653,7 +653,7 @@ const fetchInstanceRequestsChart = async (): Promise<typeof chartData> => {
};
const fetchInstanceUsersChart = async (total: boolean): Promise<typeof chartData> => {
- const raw = await os.api('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
return {
series: [{
name: 'Users',
@@ -668,7 +668,7 @@ const fetchInstanceUsersChart = async (total: boolean): Promise<typeof chartData
};
const fetchInstanceNotesChart = async (total: boolean): Promise<typeof chartData> => {
- const raw = await os.api('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
return {
series: [{
name: 'Notes',
@@ -683,7 +683,7 @@ const fetchInstanceNotesChart = async (total: boolean): Promise<typeof chartData
};
const fetchInstanceFfChart = async (total: boolean): Promise<typeof chartData> => {
- const raw = await os.api('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
return {
series: [{
name: 'Following',
@@ -706,7 +706,7 @@ const fetchInstanceFfChart = async (total: boolean): Promise<typeof chartData> =
};
const fetchInstanceDriveUsageChart = async (total: boolean): Promise<typeof chartData> => {
- const raw = await os.api('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
return {
bytes: true,
series: [{
@@ -722,7 +722,7 @@ const fetchInstanceDriveUsageChart = async (total: boolean): Promise<typeof char
};
const fetchInstanceDriveFilesChart = async (total: boolean): Promise<typeof chartData> => {
- const raw = await os.api('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/instance', { host: props.args.host, limit: props.limit, span: props.span });
return {
series: [{
name: 'Drive files',
@@ -737,7 +737,7 @@ const fetchInstanceDriveFilesChart = async (total: boolean): Promise<typeof char
};
const fetchPerUserNotesChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/user/notes', { userId: props.args.user.id, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/user/notes', { userId: props.args.user.id, limit: props.limit, span: props.span });
return {
series: [...(props.args.withoutAll ? [] : [{
name: 'All',
@@ -769,7 +769,7 @@ const fetchPerUserNotesChart = async (): Promise<typeof chartData> => {
};
const fetchPerUserFollowingChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/user/following', { userId: props.args.user.id, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/user/following', { userId: props.args.user.id, limit: props.limit, span: props.span });
return {
series: [{
name: 'Local',
@@ -784,7 +784,7 @@ const fetchPerUserFollowingChart = async (): Promise<typeof chartData> => {
};
const fetchPerUserFollowersChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/user/following', { userId: props.args.user.id, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/user/following', { userId: props.args.user.id, limit: props.limit, span: props.span });
return {
series: [{
name: 'Local',
@@ -799,7 +799,7 @@ const fetchPerUserFollowersChart = async (): Promise<typeof chartData> => {
};
const fetchPerUserDriveChart = async (): Promise<typeof chartData> => {
- const raw = await os.api('charts/user/drive', { userId: props.args.user.id, limit: props.limit, span: props.span });
+ const raw = await os.apiGet('charts/user/drive', { userId: props.args.user.id, limit: props.limit, span: props.span });
return {
series: [{
name: 'Inc',
diff --git a/packages/client/src/components/instance-card-mini.vue b/packages/client/src/components/instance-card-mini.vue
index 0bac6c0ad0..de16dacf7b 100644
--- a/packages/client/src/components/instance-card-mini.vue
+++ b/packages/client/src/components/instance-card-mini.vue
@@ -20,7 +20,7 @@ const props = defineProps<{
const chart = $ref(null);
-os.api('charts/instance', { host: props.instance.host, limit: 16, span: 'day' }).then(res => {
+os.apiGet('charts/instance', { host: props.instance.host, limit: 16, span: 'day' }).then(res => {
chart = res;
});
</script>
diff --git a/packages/client/src/components/user-card-mini.vue b/packages/client/src/components/user-card-mini.vue
index d83e4a56f5..2c3e0fe956 100644
--- a/packages/client/src/components/user-card-mini.vue
+++ b/packages/client/src/components/user-card-mini.vue
@@ -21,7 +21,7 @@ const props = defineProps<{
const chart = $ref(null);
-os.api('charts/user/notes', { userId: props.user.id, limit: 16, span: 'day' }).then(res => {
+os.apiGet('charts/user/notes', { userId: props.user.id, limit: 16, span: 'day' }).then(res => {
chart = res;
});
</script>
diff --git a/packages/client/src/os.ts b/packages/client/src/os.ts
index e823d3719c..00dae867d6 100644
--- a/packages/client/src/os.ts
+++ b/packages/client/src/os.ts
@@ -52,6 +52,39 @@ export const api = ((endpoint: string, data: Record<string, any> = {}, token?: s
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
+ 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;
+
export const apiWithDialog = ((
endpoint: string,
data: Record<string, any> = {},
diff --git a/packages/client/src/pages/admin/overview.vue b/packages/client/src/pages/admin/overview.vue
index 82b3c33852..f81f6104c7 100644
--- a/packages/client/src/pages/admin/overview.vue
+++ b/packages/client/src/pages/admin/overview.vue
@@ -90,11 +90,11 @@ onMounted(async () => {
os.api('stats', {}).then(statsResponse => {
stats = statsResponse;
- os.api('charts/users', { limit: 2, span: 'day' }).then(chart => {
+ os.apiGet('charts/users', { limit: 2, span: 'day' }).then(chart => {
usersComparedToThePrevDay = stats.originalUsersCount - chart.local.total[1];
});
- os.api('charts/notes', { limit: 2, span: 'day' }).then(chart => {
+ os.apiGet('charts/notes', { limit: 2, span: 'day' }).then(chart => {
notesComparedToThePrevDay = stats.originalNotesCount - chart.local.total[1];
});
});
diff --git a/packages/client/src/widgets/activity.vue b/packages/client/src/widgets/activity.vue
index 7fb9f5894c..265bde4a3b 100644
--- a/packages/client/src/widgets/activity.vue
+++ b/packages/client/src/widgets/activity.vue
@@ -15,12 +15,12 @@
<script lang="ts" setup>
import { onMounted, onUnmounted, reactive, ref, watch } from 'vue';
-import { GetFormResultType } from '@/scripts/form';
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
-import * as os from '@/os';
-import MkContainer from '@/components/ui/container.vue';
import XCalendar from './activity.calendar.vue';
import XChart from './activity.chart.vue';
+import { GetFormResultType } from '@/scripts/form';
+import * as os from '@/os';
+import MkContainer from '@/components/ui/container.vue';
import { $i } from '@/account';
const name = 'activity';
@@ -67,7 +67,7 @@ const toggleView = () => {
save();
};
-os.api('charts/user/notes', {
+os.apiGet('charts/user/notes', {
userId: $i.id,
span: 'day',
limit: 7 * 21,
@@ -76,7 +76,7 @@ os.api('charts/user/notes', {
total: res.diffs.normal[i] + res.diffs.reply[i] + res.diffs.renote[i],
notes: res.diffs.normal[i],
replies: res.diffs.reply[i],
- renotes: res.diffs.renote[i]
+ renotes: res.diffs.renote[i],
}));
fetching.value = false;
});
diff --git a/packages/client/src/widgets/federation.vue b/packages/client/src/widgets/federation.vue
index a3862077bb..afe7af0e96 100644
--- a/packages/client/src/widgets/federation.vue
+++ b/packages/client/src/widgets/federation.vue
@@ -20,8 +20,8 @@
<script lang="ts" setup>
import { onMounted, onUnmounted, ref } from 'vue';
-import { GetFormResultType } from '@/scripts/form';
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { GetFormResultType } from '@/scripts/form';
import MkContainer from '@/components/ui/container.vue';
import MkMiniChart from '@/components/mini-chart.vue';
import * as os from '@/os';
@@ -56,9 +56,9 @@ const fetching = ref(true);
const fetch = async () => {
const fetchedInstances = await os.api('federation/instances', {
sort: '+lastCommunicatedAt',
- limit: 5
+ limit: 5,
});
- const fetchedCharts = await Promise.all(fetchedInstances.map(i => os.api('charts/instance', { host: i.host, limit: 16, span: 'hour' })));
+ const fetchedCharts = await Promise.all(fetchedInstances.map(i => os.apiGet('charts/instance', { host: i.host, limit: 16, span: 'hour' })));
instances.value = fetchedInstances;
charts.value = fetchedCharts;
fetching.value = false;