summaryrefslogtreecommitdiff
path: root/src/server/api
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2019-02-23 11:20:58 +0900
committerGitHub <noreply@github.com>2019-02-23 11:20:58 +0900
commit52774bbe6402aee076b2e0648bd1f4764924da8a (patch)
treea0e3f34ce6d000dd880a6a6c152e98e139076a14 /src/server/api
parent投稿を削除したときにお気に入りからも削除するように (diff)
downloadsharkey-52774bbe6402aee076b2e0648bd1f4764924da8a.tar.gz
sharkey-52774bbe6402aee076b2e0648bd1f4764924da8a.tar.bz2
sharkey-52774bbe6402aee076b2e0648bd1f4764924da8a.zip
Introduce OpenAPI specs (#4351)
* wip * wip * wip * Update index.ts * Update gen-openapi-spec.ts * Update api.ja-JP.md * Fix * Improve doc * Update gen-openapi-spec.ts * Update redoc.html * Improve doc * Update gen-openapi-spec.ts * Improve doc * Update CHANGELOG.md
Diffstat (limited to 'src/server/api')
-rw-r--r--src/server/api/api-handler.ts2
-rw-r--r--src/server/api/call.ts3
-rw-r--r--src/server/api/endpoints.ts22
-rw-r--r--src/server/api/endpoints/admin/abuse-user-reports.ts2
-rw-r--r--src/server/api/endpoints/admin/drive/files.ts2
-rw-r--r--src/server/api/endpoints/admin/drive/show-file.ts2
-rw-r--r--src/server/api/endpoints/admin/emoji/add.ts2
-rw-r--r--src/server/api/endpoints/admin/emoji/list.ts2
-rw-r--r--src/server/api/endpoints/admin/emoji/remove.ts2
-rw-r--r--src/server/api/endpoints/admin/emoji/update.ts2
-rw-r--r--src/server/api/endpoints/admin/federation/remove-all-following.ts2
-rw-r--r--src/server/api/endpoints/admin/federation/update-instance.ts2
-rw-r--r--src/server/api/endpoints/admin/invite.ts2
-rw-r--r--src/server/api/endpoints/admin/moderators/add.ts2
-rw-r--r--src/server/api/endpoints/admin/moderators/remove.ts2
-rw-r--r--src/server/api/endpoints/admin/queue/clear.ts2
-rw-r--r--src/server/api/endpoints/admin/remove-abuse-user-report.ts2
-rw-r--r--src/server/api/endpoints/admin/reset-password.ts2
-rw-r--r--src/server/api/endpoints/admin/show-user.ts2
-rw-r--r--src/server/api/endpoints/admin/show-users.ts2
-rw-r--r--src/server/api/endpoints/admin/silence-user.ts2
-rw-r--r--src/server/api/endpoints/admin/suspend-user.ts2
-rw-r--r--src/server/api/endpoints/admin/unsilence-user.ts2
-rw-r--r--src/server/api/endpoints/admin/unsuspend-user.ts2
-rw-r--r--src/server/api/endpoints/admin/unverify-user.ts2
-rw-r--r--src/server/api/endpoints/admin/update-meta.ts2
-rw-r--r--src/server/api/endpoints/admin/update-remote-user.ts2
-rw-r--r--src/server/api/endpoints/admin/verify-user.ts2
-rw-r--r--src/server/api/endpoints/aggregation/hashtags.ts2
-rw-r--r--src/server/api/endpoints/ap/show.ts2
-rw-r--r--src/server/api/endpoints/app/create.ts2
-rw-r--r--src/server/api/endpoints/app/show.ts2
-rw-r--r--src/server/api/endpoints/auth/accept.ts2
-rw-r--r--src/server/api/endpoints/auth/session/generate.ts2
-rw-r--r--src/server/api/endpoints/auth/session/show.ts2
-rw-r--r--src/server/api/endpoints/auth/session/userkey.ts2
-rw-r--r--src/server/api/endpoints/blocking/create.ts2
-rw-r--r--src/server/api/endpoints/blocking/delete.ts2
-rw-r--r--src/server/api/endpoints/blocking/list.ts2
-rw-r--r--src/server/api/endpoints/charts/active-users.ts11
-rw-r--r--src/server/api/endpoints/charts/drive.ts11
-rw-r--r--src/server/api/endpoints/charts/federation.ts11
-rw-r--r--src/server/api/endpoints/charts/hashtag.ts11
-rw-r--r--src/server/api/endpoints/charts/instance.ts11
-rw-r--r--src/server/api/endpoints/charts/network.ts11
-rw-r--r--src/server/api/endpoints/charts/notes.ts11
-rw-r--r--src/server/api/endpoints/charts/user/drive.ts11
-rw-r--r--src/server/api/endpoints/charts/user/following.ts11
-rw-r--r--src/server/api/endpoints/charts/user/notes.ts11
-rw-r--r--src/server/api/endpoints/charts/user/reactions.ts11
-rw-r--r--src/server/api/endpoints/charts/users.ts11
-rw-r--r--src/server/api/endpoints/drive.ts2
-rw-r--r--src/server/api/endpoints/drive/files.ts11
-rw-r--r--src/server/api/endpoints/drive/files/attached_notes.ts2
-rw-r--r--src/server/api/endpoints/drive/files/check_existence.ts2
-rw-r--r--src/server/api/endpoints/drive/files/create.ts10
-rw-r--r--src/server/api/endpoints/drive/files/delete.ts2
-rw-r--r--src/server/api/endpoints/drive/files/find.ts2
-rw-r--r--src/server/api/endpoints/drive/files/show.ts6
-rw-r--r--src/server/api/endpoints/drive/files/update.ts2
-rw-r--r--src/server/api/endpoints/drive/files/upload_from_url.ts2
-rw-r--r--src/server/api/endpoints/drive/folders.ts2
-rw-r--r--src/server/api/endpoints/drive/folders/create.ts2
-rw-r--r--src/server/api/endpoints/drive/folders/delete.ts2
-rw-r--r--src/server/api/endpoints/drive/folders/find.ts2
-rw-r--r--src/server/api/endpoints/drive/folders/show.ts2
-rw-r--r--src/server/api/endpoints/drive/folders/update.ts2
-rw-r--r--src/server/api/endpoints/drive/stream.ts2
-rw-r--r--src/server/api/endpoints/federation/instances.ts2
-rw-r--r--src/server/api/endpoints/federation/show-instance.ts2
-rw-r--r--src/server/api/endpoints/following/create.ts2
-rw-r--r--src/server/api/endpoints/following/delete.ts2
-rw-r--r--src/server/api/endpoints/following/requests/accept.ts2
-rw-r--r--src/server/api/endpoints/following/requests/cancel.ts2
-rw-r--r--src/server/api/endpoints/following/requests/list.ts2
-rw-r--r--src/server/api/endpoints/following/requests/reject.ts2
-rw-r--r--src/server/api/endpoints/games/reversi/games.ts2
-rw-r--r--src/server/api/endpoints/games/reversi/games/show.ts2
-rw-r--r--src/server/api/endpoints/games/reversi/games/surrender.ts2
-rw-r--r--src/server/api/endpoints/games/reversi/invitations.ts2
-rw-r--r--src/server/api/endpoints/games/reversi/match.ts2
-rw-r--r--src/server/api/endpoints/games/reversi/match/cancel.ts2
-rw-r--r--src/server/api/endpoints/hashtags/list.ts2
-rw-r--r--src/server/api/endpoints/hashtags/search.ts2
-rw-r--r--src/server/api/endpoints/hashtags/trend.ts2
-rw-r--r--src/server/api/endpoints/hashtags/users.ts2
-rw-r--r--src/server/api/endpoints/i.ts2
-rw-r--r--src/server/api/endpoints/i/clear-follow-request-notification.ts2
-rw-r--r--src/server/api/endpoints/i/favorites.ts2
-rw-r--r--src/server/api/endpoints/i/notifications.ts2
-rw-r--r--src/server/api/endpoints/i/pin.ts2
-rw-r--r--src/server/api/endpoints/i/read_all_messaging_messages.ts2
-rw-r--r--src/server/api/endpoints/i/read_all_unread_notes.ts2
-rw-r--r--src/server/api/endpoints/i/unpin.ts2
-rw-r--r--src/server/api/endpoints/i/update.ts2
-rw-r--r--src/server/api/endpoints/messaging/history.ts2
-rw-r--r--src/server/api/endpoints/messaging/messages.ts2
-rw-r--r--src/server/api/endpoints/messaging/messages/create.ts2
-rw-r--r--src/server/api/endpoints/messaging/messages/delete.ts2
-rw-r--r--src/server/api/endpoints/messaging/messages/read.ts2
-rw-r--r--src/server/api/endpoints/meta.ts2
-rw-r--r--src/server/api/endpoints/mute/create.ts2
-rw-r--r--src/server/api/endpoints/mute/delete.ts2
-rw-r--r--src/server/api/endpoints/mute/list.ts2
-rw-r--r--src/server/api/endpoints/my/apps.ts2
-rw-r--r--src/server/api/endpoints/notes.ts2
-rw-r--r--src/server/api/endpoints/notes/conversation.ts9
-rw-r--r--src/server/api/endpoints/notes/create.ts4
-rw-r--r--src/server/api/endpoints/notes/delete.ts2
-rw-r--r--src/server/api/endpoints/notes/favorites/create.ts2
-rw-r--r--src/server/api/endpoints/notes/favorites/delete.ts2
-rw-r--r--src/server/api/endpoints/notes/featured.ts11
-rw-r--r--src/server/api/endpoints/notes/global-timeline.ts9
-rw-r--r--src/server/api/endpoints/notes/hybrid-timeline.ts9
-rw-r--r--src/server/api/endpoints/notes/local-timeline.ts9
-rw-r--r--src/server/api/endpoints/notes/mentions.ts11
-rw-r--r--src/server/api/endpoints/notes/polls/recommendation.ts2
-rw-r--r--src/server/api/endpoints/notes/polls/vote.ts2
-rw-r--r--src/server/api/endpoints/notes/reactions.ts2
-rw-r--r--src/server/api/endpoints/notes/reactions/create.ts2
-rw-r--r--src/server/api/endpoints/notes/reactions/delete.ts2
-rw-r--r--src/server/api/endpoints/notes/renotes.ts9
-rw-r--r--src/server/api/endpoints/notes/replies.ts11
-rw-r--r--src/server/api/endpoints/notes/search.ts9
-rw-r--r--src/server/api/endpoints/notes/search_by_tag.ts11
-rw-r--r--src/server/api/endpoints/notes/show.ts6
-rw-r--r--src/server/api/endpoints/notes/state.ts2
-rw-r--r--src/server/api/endpoints/notes/timeline.ts11
-rw-r--r--src/server/api/endpoints/notes/user-list-timeline.ts9
-rw-r--r--src/server/api/endpoints/notes/watching/create.ts2
-rw-r--r--src/server/api/endpoints/notes/watching/delete.ts2
-rw-r--r--src/server/api/endpoints/notifications/mark_all_as_read.ts2
-rw-r--r--src/server/api/endpoints/stats.ts2
-rw-r--r--src/server/api/endpoints/sw/register.ts2
-rw-r--r--src/server/api/endpoints/username/available.ts2
-rw-r--r--src/server/api/endpoints/users.ts2
-rw-r--r--src/server/api/endpoints/users/followers.ts2
-rw-r--r--src/server/api/endpoints/users/following.ts2
-rw-r--r--src/server/api/endpoints/users/get_frequently_replied_users.ts2
-rw-r--r--src/server/api/endpoints/users/lists/create.ts2
-rw-r--r--src/server/api/endpoints/users/lists/delete.ts2
-rw-r--r--src/server/api/endpoints/users/lists/list.ts2
-rw-r--r--src/server/api/endpoints/users/lists/pull.ts2
-rw-r--r--src/server/api/endpoints/users/lists/push.ts2
-rw-r--r--src/server/api/endpoints/users/lists/show.ts2
-rw-r--r--src/server/api/endpoints/users/lists/update.ts2
-rw-r--r--src/server/api/endpoints/users/notes.ts9
-rw-r--r--src/server/api/endpoints/users/recommendation.ts2
-rw-r--r--src/server/api/endpoints/users/relation.ts4
-rw-r--r--src/server/api/endpoints/users/report-abuse.ts2
-rw-r--r--src/server/api/endpoints/users/search.ts2
-rw-r--r--src/server/api/endpoints/users/show.ts6
-rw-r--r--src/server/api/error.ts7
-rw-r--r--src/server/api/gen-openapi-spec.ts507
154 files changed, 1051 insertions, 30 deletions
diff --git a/src/server/api/api-handler.ts b/src/server/api/api-handler.ts
index fdfaea1ff2..00af69703e 100644
--- a/src/server/api/api-handler.ts
+++ b/src/server/api/api-handler.ts
@@ -26,7 +26,7 @@ export default (endpoint: IEndpoint, ctx: Koa.BaseContext) => new Promise((res)
call(endpoint.name, user, app, body, (ctx.req as any).file).then(res => {
reply(res);
}).catch(e => {
- reply(e.kind == 'client' ? 400 : 500, e);
+ reply(e.httpStatusCode ? e.httpStatusCode : e.kind == 'client' ? 400 : 500, e);
});
}).catch(() => {
reply(403, new ApiError({
diff --git a/src/server/api/call.ts b/src/server/api/call.ts
index 106f0937b6..4b3d4cfbe3 100644
--- a/src/server/api/call.ts
+++ b/src/server/api/call.ts
@@ -21,6 +21,7 @@ export default async (endpoint: string, user: IUser, app: IApp, data: any, file?
message: 'No such endpoint.',
code: 'NO_SUCH_ENDPOINT',
id: 'f8080b67-5f9c-4eb7-8c18-7f1eeae8f709',
+ httpStatusCode: 404
});
}
@@ -33,6 +34,7 @@ export default async (endpoint: string, user: IUser, app: IApp, data: any, file?
message: 'Credential required.',
code: 'CREDENTIAL_REQUIRED',
id: '1384574d-a912-4b81-8601-c7b1c4085df1',
+ httpStatusCode: 401
});
}
@@ -63,6 +65,7 @@ export default async (endpoint: string, user: IUser, app: IApp, data: any, file?
message: 'Rate limit exceeded. Please try again later.',
code: 'RATE_LIMIT_EXCEEDED',
id: 'd5826d14-3982-4d2e-8011-b9e9f02499ef',
+ httpStatusCode: 429
});
});
}
diff --git a/src/server/api/endpoints.ts b/src/server/api/endpoints.ts
index 6765a63e9f..2873dd3c1e 100644
--- a/src/server/api/endpoints.ts
+++ b/src/server/api/endpoints.ts
@@ -2,18 +2,30 @@ import { Context } from 'cafy';
import * as path from 'path';
import * as glob from 'glob';
+export type Param = {
+ validator: Context<any>;
+ transform?: any;
+ default?: any;
+ desc?: { [key: string]: string };
+ ref?: string;
+};
+
export interface IEndpointMeta {
stability?: string; //'deprecated' | 'experimental' | 'stable';
desc?: { [key: string]: string };
+ tags?: string[];
+
params?: {
+ [key: string]: Param;
+ };
+
+ errors?: {
[key: string]: {
- validator: Context<any>;
- transform?: any;
- default?: any;
- desc?: { [key: string]: string };
- ref?: string;
+ message: string;
+ code: string;
+ id: string;
};
};
diff --git a/src/server/api/endpoints/admin/abuse-user-reports.ts b/src/server/api/endpoints/admin/abuse-user-reports.ts
index 602171abb8..d9fe3429ce 100644
--- a/src/server/api/endpoints/admin/abuse-user-reports.ts
+++ b/src/server/api/endpoints/admin/abuse-user-reports.ts
@@ -4,6 +4,8 @@ import Report, { packMany } from '../../../../models/abuse-user-report';
import define from '../../define';
export const meta = {
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/drive/files.ts b/src/server/api/endpoints/admin/drive/files.ts
index 318b2de1b2..8ed417a429 100644
--- a/src/server/api/endpoints/admin/drive/files.ts
+++ b/src/server/api/endpoints/admin/drive/files.ts
@@ -4,6 +4,8 @@ import define from '../../../define';
import { fallback } from '../../../../../prelude/symbol';
export const meta = {
+ tags: ['admin'],
+
requireCredential: false,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/drive/show-file.ts b/src/server/api/endpoints/admin/drive/show-file.ts
index 9b993584eb..405b6d44ce 100644
--- a/src/server/api/endpoints/admin/drive/show-file.ts
+++ b/src/server/api/endpoints/admin/drive/show-file.ts
@@ -5,6 +5,8 @@ import DriveFile from '../../../../../models/drive-file';
import { ApiError } from '../../../error';
export const meta = {
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/emoji/add.ts b/src/server/api/endpoints/admin/emoji/add.ts
index b84e9d34d6..99439f89a6 100644
--- a/src/server/api/endpoints/admin/emoji/add.ts
+++ b/src/server/api/endpoints/admin/emoji/add.ts
@@ -7,6 +7,8 @@ export const meta = {
'ja-JP': 'カスタム絵文字を追加します。'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/emoji/list.ts b/src/server/api/endpoints/admin/emoji/list.ts
index f51a536fab..954f8f96c6 100644
--- a/src/server/api/endpoints/admin/emoji/list.ts
+++ b/src/server/api/endpoints/admin/emoji/list.ts
@@ -7,6 +7,8 @@ export const meta = {
'ja-JP': 'カスタム絵文字を取得します。'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/emoji/remove.ts b/src/server/api/endpoints/admin/emoji/remove.ts
index 9699a00121..4c69dffbae 100644
--- a/src/server/api/endpoints/admin/emoji/remove.ts
+++ b/src/server/api/endpoints/admin/emoji/remove.ts
@@ -8,6 +8,8 @@ export const meta = {
'ja-JP': 'カスタム絵文字を削除します。'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/emoji/update.ts b/src/server/api/endpoints/admin/emoji/update.ts
index 7d065eaddb..38d90c65a3 100644
--- a/src/server/api/endpoints/admin/emoji/update.ts
+++ b/src/server/api/endpoints/admin/emoji/update.ts
@@ -8,6 +8,8 @@ export const meta = {
'ja-JP': 'カスタム絵文字を更新します。'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/federation/remove-all-following.ts b/src/server/api/endpoints/admin/federation/remove-all-following.ts
index 1a272aeb05..98afdfc2a5 100644
--- a/src/server/api/endpoints/admin/federation/remove-all-following.ts
+++ b/src/server/api/endpoints/admin/federation/remove-all-following.ts
@@ -5,6 +5,8 @@ import User from '../../../../../models/user';
import deleteFollowing from '../../../../../services/following/delete';
export const meta = {
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/federation/update-instance.ts b/src/server/api/endpoints/admin/federation/update-instance.ts
index 50eb4ba135..0d127b53b3 100644
--- a/src/server/api/endpoints/admin/federation/update-instance.ts
+++ b/src/server/api/endpoints/admin/federation/update-instance.ts
@@ -3,6 +3,8 @@ import define from '../../../define';
import Instance from '../../../../../models/instance';
export const meta = {
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/invite.ts b/src/server/api/endpoints/admin/invite.ts
index 3c2b323498..28aa301957 100644
--- a/src/server/api/endpoints/admin/invite.ts
+++ b/src/server/api/endpoints/admin/invite.ts
@@ -7,6 +7,8 @@ export const meta = {
'ja-JP': '招待コードを発行します。'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/moderators/add.ts b/src/server/api/endpoints/admin/moderators/add.ts
index 58515381d0..2271bcd1a9 100644
--- a/src/server/api/endpoints/admin/moderators/add.ts
+++ b/src/server/api/endpoints/admin/moderators/add.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Mark a user as moderator.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireAdmin: true,
diff --git a/src/server/api/endpoints/admin/moderators/remove.ts b/src/server/api/endpoints/admin/moderators/remove.ts
index 75627fb631..84143d3e35 100644
--- a/src/server/api/endpoints/admin/moderators/remove.ts
+++ b/src/server/api/endpoints/admin/moderators/remove.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Unmark a user as moderator.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireAdmin: true,
diff --git a/src/server/api/endpoints/admin/queue/clear.ts b/src/server/api/endpoints/admin/queue/clear.ts
index 9a1e565955..f0fd00f1ad 100644
--- a/src/server/api/endpoints/admin/queue/clear.ts
+++ b/src/server/api/endpoints/admin/queue/clear.ts
@@ -2,6 +2,8 @@ import define from '../../../define';
import { destroy } from '../../../../../queue';
export const meta = {
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/remove-abuse-user-report.ts b/src/server/api/endpoints/admin/remove-abuse-user-report.ts
index c0c40c85da..fa17e2c937 100644
--- a/src/server/api/endpoints/admin/remove-abuse-user-report.ts
+++ b/src/server/api/endpoints/admin/remove-abuse-user-report.ts
@@ -4,6 +4,8 @@ import define from '../../define';
import AbuseUserReport from '../../../../models/abuse-user-report';
export const meta = {
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/reset-password.ts b/src/server/api/endpoints/admin/reset-password.ts
index b274dc2a7d..73901d8358 100644
--- a/src/server/api/endpoints/admin/reset-password.ts
+++ b/src/server/api/endpoints/admin/reset-password.ts
@@ -10,6 +10,8 @@ export const meta = {
'ja-JP': '指定したユーザーのパスワードをリセットします。',
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/show-user.ts b/src/server/api/endpoints/admin/show-user.ts
index 5fcf4c3867..985f71a873 100644
--- a/src/server/api/endpoints/admin/show-user.ts
+++ b/src/server/api/endpoints/admin/show-user.ts
@@ -8,6 +8,8 @@ export const meta = {
'ja-JP': '指定したユーザーの情報を取得します。',
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/show-users.ts b/src/server/api/endpoints/admin/show-users.ts
index 9d1c5ea986..5feb1b4fd8 100644
--- a/src/server/api/endpoints/admin/show-users.ts
+++ b/src/server/api/endpoints/admin/show-users.ts
@@ -4,6 +4,8 @@ import define from '../../define';
import { fallback } from '../../../../prelude/symbol';
export const meta = {
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/silence-user.ts b/src/server/api/endpoints/admin/silence-user.ts
index 532025563f..2557d8de6a 100644
--- a/src/server/api/endpoints/admin/silence-user.ts
+++ b/src/server/api/endpoints/admin/silence-user.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Make silence a user.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/suspend-user.ts b/src/server/api/endpoints/admin/suspend-user.ts
index 321c3955e6..83b39fb0b9 100644
--- a/src/server/api/endpoints/admin/suspend-user.ts
+++ b/src/server/api/endpoints/admin/suspend-user.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Suspend a user.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/unsilence-user.ts b/src/server/api/endpoints/admin/unsilence-user.ts
index bb039eb8da..01bf41aaef 100644
--- a/src/server/api/endpoints/admin/unsilence-user.ts
+++ b/src/server/api/endpoints/admin/unsilence-user.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Unsilence a user.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/unsuspend-user.ts b/src/server/api/endpoints/admin/unsuspend-user.ts
index 4732e44369..5da35f28e6 100644
--- a/src/server/api/endpoints/admin/unsuspend-user.ts
+++ b/src/server/api/endpoints/admin/unsuspend-user.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Unsuspend a user.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/unverify-user.ts b/src/server/api/endpoints/admin/unverify-user.ts
index 857cceb1ec..d3ca05cb39 100644
--- a/src/server/api/endpoints/admin/unverify-user.ts
+++ b/src/server/api/endpoints/admin/unverify-user.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Mark a user as unverified.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index 1fb87d0a98..46fdeff759 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -7,6 +7,8 @@ export const meta = {
'ja-JP': 'インスタンスの設定を更新します。'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/update-remote-user.ts b/src/server/api/endpoints/admin/update-remote-user.ts
index 8d1db33ba4..a74685912c 100644
--- a/src/server/api/endpoints/admin/update-remote-user.ts
+++ b/src/server/api/endpoints/admin/update-remote-user.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Update specified remote user information.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/admin/verify-user.ts b/src/server/api/endpoints/admin/verify-user.ts
index 77db8e6e60..f67b6c3bf0 100644
--- a/src/server/api/endpoints/admin/verify-user.ts
+++ b/src/server/api/endpoints/admin/verify-user.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Mark a user as verified.'
},
+ tags: ['admin'],
+
requireCredential: true,
requireModerator: true,
diff --git a/src/server/api/endpoints/aggregation/hashtags.ts b/src/server/api/endpoints/aggregation/hashtags.ts
index 6de36a1d1a..978e9f64b7 100644
--- a/src/server/api/endpoints/aggregation/hashtags.ts
+++ b/src/server/api/endpoints/aggregation/hashtags.ts
@@ -3,6 +3,8 @@ import define from '../../define';
import fetchMeta from '../../../../misc/fetch-meta';
export const meta = {
+ tags: ['hashtags'],
+
requireCredential: false,
};
diff --git a/src/server/api/endpoints/ap/show.ts b/src/server/api/endpoints/ap/show.ts
index 8dd9f96f90..72c8537905 100644
--- a/src/server/api/endpoints/ap/show.ts
+++ b/src/server/api/endpoints/ap/show.ts
@@ -10,6 +10,8 @@ import Resolver from '../../../../remote/activitypub/resolver';
import { ApiError } from '../../error';
export const meta = {
+ tags: ['federation'],
+
desc: {
'ja-JP': 'URIを指定してActivityPubオブジェクトを参照します。'
},
diff --git a/src/server/api/endpoints/app/create.ts b/src/server/api/endpoints/app/create.ts
index ef8bd66076..67b1b8150a 100644
--- a/src/server/api/endpoints/app/create.ts
+++ b/src/server/api/endpoints/app/create.ts
@@ -4,6 +4,8 @@ import App, { pack } from '../../../../models/app';
import define from '../../define';
export const meta = {
+ tags: ['app'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/app/show.ts b/src/server/api/endpoints/app/show.ts
index 72755ce01d..f3f5b843b3 100644
--- a/src/server/api/endpoints/app/show.ts
+++ b/src/server/api/endpoints/app/show.ts
@@ -5,6 +5,8 @@ import define from '../../define';
import { ApiError } from '../../error';
export const meta = {
+ tags: ['app'],
+
params: {
appId: {
validator: $.type(ID),
diff --git a/src/server/api/endpoints/auth/accept.ts b/src/server/api/endpoints/auth/accept.ts
index 964ee6559f..cedf7821fe 100644
--- a/src/server/api/endpoints/auth/accept.ts
+++ b/src/server/api/endpoints/auth/accept.ts
@@ -8,6 +8,8 @@ import define from '../../define';
import { ApiError } from '../../error';
export const meta = {
+ tags: ['auth'],
+
requireCredential: true,
secure: true,
diff --git a/src/server/api/endpoints/auth/session/generate.ts b/src/server/api/endpoints/auth/session/generate.ts
index 9f0f184719..b6bfb5590b 100644
--- a/src/server/api/endpoints/auth/session/generate.ts
+++ b/src/server/api/endpoints/auth/session/generate.ts
@@ -7,6 +7,8 @@ import define from '../../../define';
import { ApiError } from '../../../error';
export const meta = {
+ tags: ['auth'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/auth/session/show.ts b/src/server/api/endpoints/auth/session/show.ts
index 5e9e68c2c4..4287950f3e 100644
--- a/src/server/api/endpoints/auth/session/show.ts
+++ b/src/server/api/endpoints/auth/session/show.ts
@@ -4,6 +4,8 @@ import define from '../../../define';
import { ApiError } from '../../../error';
export const meta = {
+ tags: ['auth'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/auth/session/userkey.ts b/src/server/api/endpoints/auth/session/userkey.ts
index 17d62886a5..d4c3d77772 100644
--- a/src/server/api/endpoints/auth/session/userkey.ts
+++ b/src/server/api/endpoints/auth/session/userkey.ts
@@ -7,6 +7,8 @@ import define from '../../../define';
import { ApiError } from '../../../error';
export const meta = {
+ tags: ['auth'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/blocking/create.ts b/src/server/api/endpoints/blocking/create.ts
index 71c3ed3165..e723cb0386 100644
--- a/src/server/api/endpoints/blocking/create.ts
+++ b/src/server/api/endpoints/blocking/create.ts
@@ -16,6 +16,8 @@ export const meta = {
'en-US': 'Block a user.'
},
+ tags: ['blocking', 'users'],
+
limit: {
duration: ms('1hour'),
max: 100
diff --git a/src/server/api/endpoints/blocking/delete.ts b/src/server/api/endpoints/blocking/delete.ts
index 426d88c1c0..2a9fdc5e24 100644
--- a/src/server/api/endpoints/blocking/delete.ts
+++ b/src/server/api/endpoints/blocking/delete.ts
@@ -16,6 +16,8 @@ export const meta = {
'en-US': 'Unblock a user.'
},
+ tags: ['blocking', 'users'],
+
limit: {
duration: ms('1hour'),
max: 100
diff --git a/src/server/api/endpoints/blocking/list.ts b/src/server/api/endpoints/blocking/list.ts
index 088b2c488a..2921f48f20 100644
--- a/src/server/api/endpoints/blocking/list.ts
+++ b/src/server/api/endpoints/blocking/list.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Get blocking users.'
},
+ tags: ['blocking', 'account'],
+
requireCredential: true,
kind: 'following-read',
diff --git a/src/server/api/endpoints/charts/active-users.ts b/src/server/api/endpoints/charts/active-users.ts
index 11f86d0baa..9dad942e06 100644
--- a/src/server/api/endpoints/charts/active-users.ts
+++ b/src/server/api/endpoints/charts/active-users.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': 'アクティブユーザーのチャートを取得します。'
},
+ tags: ['charts', 'users'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -24,7 +26,14 @@ export const meta = {
'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/drive.ts b/src/server/api/endpoints/charts/drive.ts
index 9244ef7481..5438d76486 100644
--- a/src/server/api/endpoints/charts/drive.ts
+++ b/src/server/api/endpoints/charts/drive.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': 'ドライブのチャートを取得します。'
},
+ tags: ['charts', 'drive'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -24,7 +26,14 @@ export const meta = {
'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/federation.ts b/src/server/api/endpoints/charts/federation.ts
index c98c9f6cbb..c7b34f1015 100644
--- a/src/server/api/endpoints/charts/federation.ts
+++ b/src/server/api/endpoints/charts/federation.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': 'フェデレーションのチャートを取得します。'
},
+ tags: ['charts'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -24,7 +26,14 @@ export const meta = {
'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/hashtag.ts b/src/server/api/endpoints/charts/hashtag.ts
index 5905fdc1a2..4db6e62408 100644
--- a/src/server/api/endpoints/charts/hashtag.ts
+++ b/src/server/api/endpoints/charts/hashtag.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': 'ハッシュタグごとのチャートを取得します。'
},
+ tags: ['charts', 'hashtags'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -31,7 +33,14 @@ export const meta = {
'ja-JP': '対象のハッシュタグ'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/instance.ts b/src/server/api/endpoints/charts/instance.ts
index e47334c7ce..3fe85f086a 100644
--- a/src/server/api/endpoints/charts/instance.ts
+++ b/src/server/api/endpoints/charts/instance.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': 'インスタンスごとのチャートを取得します。'
},
+ tags: ['charts'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -32,7 +34,14 @@ export const meta = {
'en-US': 'Target instance host'
}
}
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/network.ts b/src/server/api/endpoints/charts/network.ts
index fa1917f753..48b1d0f66f 100644
--- a/src/server/api/endpoints/charts/network.ts
+++ b/src/server/api/endpoints/charts/network.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': 'ネットワークのチャートを取得します。'
},
+ tags: ['charts'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -24,7 +26,14 @@ export const meta = {
'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/notes.ts b/src/server/api/endpoints/charts/notes.ts
index 006a8d6e21..d254bb854c 100644
--- a/src/server/api/endpoints/charts/notes.ts
+++ b/src/server/api/endpoints/charts/notes.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': '投稿のチャートを取得します。'
},
+ tags: ['charts', 'notes'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -24,7 +26,14 @@ export const meta = {
'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/user/drive.ts b/src/server/api/endpoints/charts/user/drive.ts
index 6383ddf2f8..32645b38c6 100644
--- a/src/server/api/endpoints/charts/user/drive.ts
+++ b/src/server/api/endpoints/charts/user/drive.ts
@@ -10,6 +10,8 @@ export const meta = {
'ja-JP': 'ユーザーごとのドライブのチャートを取得します。'
},
+ tags: ['charts', 'drive', 'users'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -34,7 +36,14 @@ export const meta = {
'en-US': 'Target user ID'
}
}
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/user/following.ts b/src/server/api/endpoints/charts/user/following.ts
index 9443b56a40..73f0c1e4f0 100644
--- a/src/server/api/endpoints/charts/user/following.ts
+++ b/src/server/api/endpoints/charts/user/following.ts
@@ -10,6 +10,8 @@ export const meta = {
'ja-JP': 'ユーザーごとのフォロー/フォロワーのチャートを取得します。'
},
+ tags: ['charts', 'users', 'following'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -34,7 +36,14 @@ export const meta = {
'en-US': 'Target user ID'
}
}
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/user/notes.ts b/src/server/api/endpoints/charts/user/notes.ts
index da642fc761..6a95911b11 100644
--- a/src/server/api/endpoints/charts/user/notes.ts
+++ b/src/server/api/endpoints/charts/user/notes.ts
@@ -10,6 +10,8 @@ export const meta = {
'ja-JP': 'ユーザーごとの投稿のチャートを取得します。'
},
+ tags: ['charts', 'users', 'notes'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -34,7 +36,14 @@ export const meta = {
'en-US': 'Target user ID'
}
}
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/user/reactions.ts b/src/server/api/endpoints/charts/user/reactions.ts
index e440b3ae34..51ff83f20e 100644
--- a/src/server/api/endpoints/charts/user/reactions.ts
+++ b/src/server/api/endpoints/charts/user/reactions.ts
@@ -10,6 +10,8 @@ export const meta = {
'ja-JP': 'ユーザーごとの被リアクション数のチャートを取得します。'
},
+ tags: ['charts', 'users', 'reactions'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -34,7 +36,14 @@ export const meta = {
'en-US': 'Target user ID'
}
}
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/charts/users.ts b/src/server/api/endpoints/charts/users.ts
index ea32b7afd8..0b1b18bbe7 100644
--- a/src/server/api/endpoints/charts/users.ts
+++ b/src/server/api/endpoints/charts/users.ts
@@ -9,6 +9,8 @@ export const meta = {
'ja-JP': 'ユーザーのチャートを取得します。'
},
+ tags: ['charts', 'users'],
+
params: {
span: {
validator: $.str.or(['day', 'hour']),
@@ -24,7 +26,14 @@ export const meta = {
'ja-JP': '最大数。例えば 30 を指定したとすると、スパンが"day"の場合は30日分のデータが、スパンが"hour"の場合は30時間分のデータが返ります。'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'object',
+ },
+ },
};
export default define(meta, async (ps) => {
diff --git a/src/server/api/endpoints/drive.ts b/src/server/api/endpoints/drive.ts
index 54afe55cb9..9c4482f915 100644
--- a/src/server/api/endpoints/drive.ts
+++ b/src/server/api/endpoints/drive.ts
@@ -8,6 +8,8 @@ export const meta = {
'en-US': 'Get drive information.'
},
+ tags: ['drive', 'account'],
+
requireCredential: true,
kind: 'drive-read'
diff --git a/src/server/api/endpoints/drive/files.ts b/src/server/api/endpoints/drive/files.ts
index 1c12f0dc07..f108e820e7 100644
--- a/src/server/api/endpoints/drive/files.ts
+++ b/src/server/api/endpoints/drive/files.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Get files of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-read',
@@ -38,7 +40,14 @@ export const meta = {
type: {
validator: $.optional.str.match(/^[a-zA-Z\/\-\*]+$/)
}
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'DriveFile',
+ },
+ },
};
export default define(meta, async (ps, user) => {
diff --git a/src/server/api/endpoints/drive/files/attached_notes.ts b/src/server/api/endpoints/drive/files/attached_notes.ts
index 506444b183..c1d828b05a 100644
--- a/src/server/api/endpoints/drive/files/attached_notes.ts
+++ b/src/server/api/endpoints/drive/files/attached_notes.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get the notes that specified file of drive attached.'
},
+ tags: ['drive', 'notes'],
+
requireCredential: true,
kind: 'drive-read',
diff --git a/src/server/api/endpoints/drive/files/check_existence.ts b/src/server/api/endpoints/drive/files/check_existence.ts
index aafd46fb2d..12680d5419 100644
--- a/src/server/api/endpoints/drive/files/check_existence.ts
+++ b/src/server/api/endpoints/drive/files/check_existence.ts
@@ -8,6 +8,8 @@ export const meta = {
'en-US': 'Returns whether the file with the given MD5 hash exists in the user\'s drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-read',
diff --git a/src/server/api/endpoints/drive/files/create.ts b/src/server/api/endpoints/drive/files/create.ts
index c96e4bbf19..b2979c4888 100644
--- a/src/server/api/endpoints/drive/files/create.ts
+++ b/src/server/api/endpoints/drive/files/create.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Upload a file to drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
limit: {
@@ -35,7 +37,7 @@ export const meta = {
},
isSensitive: {
- validator: $.optional.or($.bool, $.str),
+ validator: $.optional.either($.bool, $.str),
default: false,
transform: (v: any): boolean => v === true || v === 'true',
desc: {
@@ -45,7 +47,7 @@ export const meta = {
},
force: {
- validator: $.optional.or($.bool, $.str),
+ validator: $.optional.either($.bool, $.str),
default: false,
transform: (v: any): boolean => v === true || v === 'true',
desc: {
@@ -54,6 +56,10 @@ export const meta = {
}
},
+ res: {
+ type: 'DriveFile',
+ },
+
errors: {
invalidFileName: {
message: 'Invalid file name.',
diff --git a/src/server/api/endpoints/drive/files/delete.ts b/src/server/api/endpoints/drive/files/delete.ts
index 2dc493efeb..dd4e187fcd 100644
--- a/src/server/api/endpoints/drive/files/delete.ts
+++ b/src/server/api/endpoints/drive/files/delete.ts
@@ -14,6 +14,8 @@ export const meta = {
'en-US': 'Delete a file of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-write',
diff --git a/src/server/api/endpoints/drive/files/find.ts b/src/server/api/endpoints/drive/files/find.ts
index 6eb909b9d0..0d4102a48f 100644
--- a/src/server/api/endpoints/drive/files/find.ts
+++ b/src/server/api/endpoints/drive/files/find.ts
@@ -6,6 +6,8 @@ import define from '../../../define';
export const meta = {
requireCredential: true,
+ tags: ['drive'],
+
kind: 'drive-read',
params: {
diff --git a/src/server/api/endpoints/drive/files/show.ts b/src/server/api/endpoints/drive/files/show.ts
index f844d434fe..c2442c65c4 100644
--- a/src/server/api/endpoints/drive/files/show.ts
+++ b/src/server/api/endpoints/drive/files/show.ts
@@ -14,6 +14,8 @@ export const meta = {
'en-US': 'Get specified file of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-read',
@@ -37,6 +39,10 @@ export const meta = {
}
},
+ res: {
+ type: 'DriveFile',
+ },
+
errors: {
noSuchFile: {
message: 'No such file.',
diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts
index f24cc6bcd3..c8803bec3a 100644
--- a/src/server/api/endpoints/drive/files/update.ts
+++ b/src/server/api/endpoints/drive/files/update.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Update specified file of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-write',
diff --git a/src/server/api/endpoints/drive/files/upload_from_url.ts b/src/server/api/endpoints/drive/files/upload_from_url.ts
index 8d25530ddd..93a9fa62fa 100644
--- a/src/server/api/endpoints/drive/files/upload_from_url.ts
+++ b/src/server/api/endpoints/drive/files/upload_from_url.ts
@@ -10,6 +10,8 @@ export const meta = {
'ja-JP': 'ドライブに指定されたURLに存在するファイルをアップロードします。'
},
+ tags: ['drive'],
+
limit: {
duration: ms('1hour'),
max: 60
diff --git a/src/server/api/endpoints/drive/folders.ts b/src/server/api/endpoints/drive/folders.ts
index 6982060850..a0b972f71d 100644
--- a/src/server/api/endpoints/drive/folders.ts
+++ b/src/server/api/endpoints/drive/folders.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Get folders of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-read',
diff --git a/src/server/api/endpoints/drive/folders/create.ts b/src/server/api/endpoints/drive/folders/create.ts
index a54c780b8e..5fab0b91a1 100644
--- a/src/server/api/endpoints/drive/folders/create.ts
+++ b/src/server/api/endpoints/drive/folders/create.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Create a folder of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-write',
diff --git a/src/server/api/endpoints/drive/folders/delete.ts b/src/server/api/endpoints/drive/folders/delete.ts
index 26a71d57df..9f22bf9ea7 100644
--- a/src/server/api/endpoints/drive/folders/delete.ts
+++ b/src/server/api/endpoints/drive/folders/delete.ts
@@ -14,6 +14,8 @@ export const meta = {
'en-US': 'Delete specified folder of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-write',
diff --git a/src/server/api/endpoints/drive/folders/find.ts b/src/server/api/endpoints/drive/folders/find.ts
index 25d89f9fbb..17769567ad 100644
--- a/src/server/api/endpoints/drive/folders/find.ts
+++ b/src/server/api/endpoints/drive/folders/find.ts
@@ -4,6 +4,8 @@ import DriveFolder, { pack } from '../../../../../models/drive-folder';
import define from '../../../define';
export const meta = {
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-read',
diff --git a/src/server/api/endpoints/drive/folders/show.ts b/src/server/api/endpoints/drive/folders/show.ts
index 0d98158b92..0337436221 100644
--- a/src/server/api/endpoints/drive/folders/show.ts
+++ b/src/server/api/endpoints/drive/folders/show.ts
@@ -12,6 +12,8 @@ export const meta = {
'en-US': 'Get specified folder of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-read',
diff --git a/src/server/api/endpoints/drive/folders/update.ts b/src/server/api/endpoints/drive/folders/update.ts
index 585664ba0a..1dc0e63878 100644
--- a/src/server/api/endpoints/drive/folders/update.ts
+++ b/src/server/api/endpoints/drive/folders/update.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Update specified folder of drive.'
},
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-write',
diff --git a/src/server/api/endpoints/drive/stream.ts b/src/server/api/endpoints/drive/stream.ts
index d5872470fd..f6586a8523 100644
--- a/src/server/api/endpoints/drive/stream.ts
+++ b/src/server/api/endpoints/drive/stream.ts
@@ -4,6 +4,8 @@ import DriveFile, { packMany } from '../../../../models/drive-file';
import define from '../../define';
export const meta = {
+ tags: ['drive'],
+
requireCredential: true,
kind: 'drive-read',
diff --git a/src/server/api/endpoints/federation/instances.ts b/src/server/api/endpoints/federation/instances.ts
index 34da9dff7b..f81f81822e 100644
--- a/src/server/api/endpoints/federation/instances.ts
+++ b/src/server/api/endpoints/federation/instances.ts
@@ -3,6 +3,8 @@ import define from '../../define';
import Instance from '../../../../models/instance';
export const meta = {
+ tags: ['federation'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/federation/show-instance.ts b/src/server/api/endpoints/federation/show-instance.ts
index e443abcdaa..e7f68620af 100644
--- a/src/server/api/endpoints/federation/show-instance.ts
+++ b/src/server/api/endpoints/federation/show-instance.ts
@@ -3,6 +3,8 @@ import define from '../../define';
import Instance from '../../../../models/instance';
export const meta = {
+ tags: ['federation'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/following/create.ts b/src/server/api/endpoints/following/create.ts
index a4e68f5806..81b2399551 100644
--- a/src/server/api/endpoints/following/create.ts
+++ b/src/server/api/endpoints/following/create.ts
@@ -16,6 +16,8 @@ export const meta = {
'en-US': 'Follow a user.'
},
+ tags: ['following', 'users'],
+
limit: {
duration: ms('1hour'),
max: 100
diff --git a/src/server/api/endpoints/following/delete.ts b/src/server/api/endpoints/following/delete.ts
index faa42cacf5..8f8249b1e8 100644
--- a/src/server/api/endpoints/following/delete.ts
+++ b/src/server/api/endpoints/following/delete.ts
@@ -16,6 +16,8 @@ export const meta = {
'en-US': 'Unfollow a user.'
},
+ tags: ['following', 'users'],
+
limit: {
duration: ms('1hour'),
max: 100
diff --git a/src/server/api/endpoints/following/requests/accept.ts b/src/server/api/endpoints/following/requests/accept.ts
index cc42ca9c30..0975990c02 100644
--- a/src/server/api/endpoints/following/requests/accept.ts
+++ b/src/server/api/endpoints/following/requests/accept.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Accept a follow request.'
},
+ tags: ['following', 'account'],
+
requireCredential: true,
kind: 'following-write',
diff --git a/src/server/api/endpoints/following/requests/cancel.ts b/src/server/api/endpoints/following/requests/cancel.ts
index eb3abfa3e6..371f9f0ed3 100644
--- a/src/server/api/endpoints/following/requests/cancel.ts
+++ b/src/server/api/endpoints/following/requests/cancel.ts
@@ -12,6 +12,8 @@ export const meta = {
'en-US': 'Cancel a follow request.'
},
+ tags: ['following', 'account'],
+
requireCredential: true,
kind: 'following-write',
diff --git a/src/server/api/endpoints/following/requests/list.ts b/src/server/api/endpoints/following/requests/list.ts
index f660277649..c9bcedf929 100644
--- a/src/server/api/endpoints/following/requests/list.ts
+++ b/src/server/api/endpoints/following/requests/list.ts
@@ -7,6 +7,8 @@ export const meta = {
'en-US': 'Get all pending received follow requests.'
},
+ tags: ['following', 'account'],
+
requireCredential: true,
kind: 'following-read'
diff --git a/src/server/api/endpoints/following/requests/reject.ts b/src/server/api/endpoints/following/requests/reject.ts
index 908e64acc9..5e59d4bc97 100644
--- a/src/server/api/endpoints/following/requests/reject.ts
+++ b/src/server/api/endpoints/following/requests/reject.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Reject a follow request.'
},
+ tags: ['following', 'account'],
+
requireCredential: true,
kind: 'following-write',
diff --git a/src/server/api/endpoints/games/reversi/games.ts b/src/server/api/endpoints/games/reversi/games.ts
index b188ba996d..e3c22c7611 100644
--- a/src/server/api/endpoints/games/reversi/games.ts
+++ b/src/server/api/endpoints/games/reversi/games.ts
@@ -4,6 +4,8 @@ import ReversiGame, { pack } from '../../../../../models/games/reversi/game';
import define from '../../../define';
export const meta = {
+ tags: ['games'],
+
params: {
limit: {
validator: $.optional.num.range(1, 100),
diff --git a/src/server/api/endpoints/games/reversi/games/show.ts b/src/server/api/endpoints/games/reversi/games/show.ts
index d70ab8de92..766ca90119 100644
--- a/src/server/api/endpoints/games/reversi/games/show.ts
+++ b/src/server/api/endpoints/games/reversi/games/show.ts
@@ -6,6 +6,8 @@ import define from '../../../../define';
import { ApiError } from '../../../../error';
export const meta = {
+ tags: ['games'],
+
params: {
gameId: {
validator: $.type(ID),
diff --git a/src/server/api/endpoints/games/reversi/games/surrender.ts b/src/server/api/endpoints/games/reversi/games/surrender.ts
index 954ae07ebc..446210894d 100644
--- a/src/server/api/endpoints/games/reversi/games/surrender.ts
+++ b/src/server/api/endpoints/games/reversi/games/surrender.ts
@@ -6,6 +6,8 @@ import define from '../../../../define';
import { ApiError } from '../../../../error';
export const meta = {
+ tags: ['games'],
+
desc: {
'ja-JP': '指定したリバーシの対局で投了します。'
},
diff --git a/src/server/api/endpoints/games/reversi/invitations.ts b/src/server/api/endpoints/games/reversi/invitations.ts
index 034c84bdd5..c204770578 100644
--- a/src/server/api/endpoints/games/reversi/invitations.ts
+++ b/src/server/api/endpoints/games/reversi/invitations.ts
@@ -2,6 +2,8 @@ import Matching, { pack as packMatching } from '../../../../../models/games/reve
import define from '../../../define';
export const meta = {
+ tags: ['games'],
+
requireCredential: true
};
diff --git a/src/server/api/endpoints/games/reversi/match.ts b/src/server/api/endpoints/games/reversi/match.ts
index 6913ee13d5..e66765944d 100644
--- a/src/server/api/endpoints/games/reversi/match.ts
+++ b/src/server/api/endpoints/games/reversi/match.ts
@@ -9,6 +9,8 @@ import { ApiError } from '../../../error';
import { getUser } from '../../../common/getters';
export const meta = {
+ tags: ['games'],
+
requireCredential: true,
params: {
diff --git a/src/server/api/endpoints/games/reversi/match/cancel.ts b/src/server/api/endpoints/games/reversi/match/cancel.ts
index 03b76babd7..fb230032d8 100644
--- a/src/server/api/endpoints/games/reversi/match/cancel.ts
+++ b/src/server/api/endpoints/games/reversi/match/cancel.ts
@@ -2,6 +2,8 @@ import Matching from '../../../../../../models/games/reversi/matching';
import define from '../../../../define';
export const meta = {
+ tags: ['games'],
+
requireCredential: true
};
diff --git a/src/server/api/endpoints/hashtags/list.ts b/src/server/api/endpoints/hashtags/list.ts
index bfeba1d168..5939c10192 100644
--- a/src/server/api/endpoints/hashtags/list.ts
+++ b/src/server/api/endpoints/hashtags/list.ts
@@ -3,6 +3,8 @@ import define from '../../define';
import Hashtag from '../../../../models/hashtag';
export const meta = {
+ tags: ['hashtags'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/hashtags/search.ts b/src/server/api/endpoints/hashtags/search.ts
index eff50f4134..ff7ca44f51 100644
--- a/src/server/api/endpoints/hashtags/search.ts
+++ b/src/server/api/endpoints/hashtags/search.ts
@@ -8,6 +8,8 @@ export const meta = {
'ja-JP': 'ハッシュタグを検索します。'
},
+ tags: ['hashtags'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/hashtags/trend.ts b/src/server/api/endpoints/hashtags/trend.ts
index bf036642d0..8b8dd70245 100644
--- a/src/server/api/endpoints/hashtags/trend.ts
+++ b/src/server/api/endpoints/hashtags/trend.ts
@@ -16,6 +16,8 @@ const requiredUsers = 3; // 最低何人がそのタグを投稿している必
const max = 5;
export const meta = {
+ tags: ['hashtags'],
+
requireCredential: false,
};
diff --git a/src/server/api/endpoints/hashtags/users.ts b/src/server/api/endpoints/hashtags/users.ts
index b77bdf6aa8..f589c37b82 100644
--- a/src/server/api/endpoints/hashtags/users.ts
+++ b/src/server/api/endpoints/hashtags/users.ts
@@ -5,6 +5,8 @@ import define from '../../define';
export const meta = {
requireCredential: false,
+ tags: ['hashtags', 'users'],
+
params: {
tag: {
validator: $.str,
diff --git a/src/server/api/endpoints/i.ts b/src/server/api/endpoints/i.ts
index 7ef4ddd264..b7fe404ec3 100644
--- a/src/server/api/endpoints/i.ts
+++ b/src/server/api/endpoints/i.ts
@@ -8,6 +8,8 @@ export const meta = {
'ja-JP': '自分のアカウント情報を取得します。'
},
+ tags: ['account'],
+
requireCredential: true,
params: {},
diff --git a/src/server/api/endpoints/i/clear-follow-request-notification.ts b/src/server/api/endpoints/i/clear-follow-request-notification.ts
index 2c656965d5..38c6ec1cef 100644
--- a/src/server/api/endpoints/i/clear-follow-request-notification.ts
+++ b/src/server/api/endpoints/i/clear-follow-request-notification.ts
@@ -2,6 +2,8 @@ import User from '../../../../models/user';
import define from '../../define';
export const meta = {
+ tags: ['account', 'following'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/i/favorites.ts b/src/server/api/endpoints/i/favorites.ts
index b9bef38c69..7ea6f7b966 100644
--- a/src/server/api/endpoints/i/favorites.ts
+++ b/src/server/api/endpoints/i/favorites.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Get favorited notes'
},
+ tags: ['account', 'notes', 'favorites'],
+
requireCredential: true,
kind: 'favorites-read',
diff --git a/src/server/api/endpoints/i/notifications.ts b/src/server/api/endpoints/i/notifications.ts
index 693d279965..3d038e5d34 100644
--- a/src/server/api/endpoints/i/notifications.ts
+++ b/src/server/api/endpoints/i/notifications.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get notifications.'
},
+ tags: ['account', 'notifications'],
+
requireCredential: true,
kind: 'account-read',
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index 0b6b1b0db9..8d853d45c8 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -12,6 +12,8 @@ export const meta = {
'ja-JP': '指定した投稿をピン留めします。'
},
+ tags: ['account', 'notes'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/i/read_all_messaging_messages.ts b/src/server/api/endpoints/i/read_all_messaging_messages.ts
index 6bc6e16b4d..bbbfa0d7b3 100644
--- a/src/server/api/endpoints/i/read_all_messaging_messages.ts
+++ b/src/server/api/endpoints/i/read_all_messaging_messages.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Mark all talk messages as read.'
},
+ tags: ['account', 'messaging'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/i/read_all_unread_notes.ts b/src/server/api/endpoints/i/read_all_unread_notes.ts
index 16db17cb04..742c2d9908 100644
--- a/src/server/api/endpoints/i/read_all_unread_notes.ts
+++ b/src/server/api/endpoints/i/read_all_unread_notes.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Mark all messages as read.'
},
+ tags: ['account'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/i/unpin.ts b/src/server/api/endpoints/i/unpin.ts
index 472e811562..184d46f2c3 100644
--- a/src/server/api/endpoints/i/unpin.ts
+++ b/src/server/api/endpoints/i/unpin.ts
@@ -12,6 +12,8 @@ export const meta = {
'ja-JP': '指定した投稿のピン留めを解除します。'
},
+ tags: ['account', 'notes'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index df7da46774..22e76925ba 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -20,6 +20,8 @@ export const meta = {
'en-US': 'Update myself'
},
+ tags: ['account'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/messaging/history.ts b/src/server/api/endpoints/messaging/history.ts
index e42bf79c54..0425ef0213 100644
--- a/src/server/api/endpoints/messaging/history.ts
+++ b/src/server/api/endpoints/messaging/history.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Show messaging history.'
},
+ tags: ['messaging'],
+
requireCredential: true,
kind: 'messaging-read',
diff --git a/src/server/api/endpoints/messaging/messages.ts b/src/server/api/endpoints/messaging/messages.ts
index 34d3f4cfd5..f1408f87fe 100644
--- a/src/server/api/endpoints/messaging/messages.ts
+++ b/src/server/api/endpoints/messaging/messages.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get messages of messaging.'
},
+ tags: ['messaging'],
+
requireCredential: true,
kind: 'messaging-read',
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index 7ff6526295..cf32b4461d 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -19,6 +19,8 @@ export const meta = {
'en-US': 'Create a message of messaging.'
},
+ tags: ['messaging'],
+
requireCredential: true,
kind: 'messaging-write',
diff --git a/src/server/api/endpoints/messaging/messages/delete.ts b/src/server/api/endpoints/messaging/messages/delete.ts
index 5bc492c19d..0ca12846c1 100644
--- a/src/server/api/endpoints/messaging/messages/delete.ts
+++ b/src/server/api/endpoints/messaging/messages/delete.ts
@@ -14,6 +14,8 @@ export const meta = {
'en-US': 'Delete a message.'
},
+ tags: ['messaging'],
+
requireCredential: true,
kind: 'messaging-write',
diff --git a/src/server/api/endpoints/messaging/messages/read.ts b/src/server/api/endpoints/messaging/messages/read.ts
index 98f195d753..aa8ecdc4ff 100644
--- a/src/server/api/endpoints/messaging/messages/read.ts
+++ b/src/server/api/endpoints/messaging/messages/read.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Mark as read a message of messaging.'
},
+ tags: ['messaging'],
+
requireCredential: true,
kind: 'messaging-write',
diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index 82769506c6..07a475d4c2 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -14,6 +14,8 @@ export const meta = {
'en-US': 'Get the information of this instance.'
},
+ tags: ['meta'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/mute/create.ts b/src/server/api/endpoints/mute/create.ts
index 3b2546176e..7eaee90a05 100644
--- a/src/server/api/endpoints/mute/create.ts
+++ b/src/server/api/endpoints/mute/create.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Mute a user'
},
+ tags: ['mute', 'users'],
+
requireCredential: true,
kind: 'account/write',
diff --git a/src/server/api/endpoints/mute/delete.ts b/src/server/api/endpoints/mute/delete.ts
index 93af5834b8..1a03f6371b 100644
--- a/src/server/api/endpoints/mute/delete.ts
+++ b/src/server/api/endpoints/mute/delete.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Unmute a user'
},
+ tags: ['mute', 'users'],
+
requireCredential: true,
kind: 'account/write',
diff --git a/src/server/api/endpoints/mute/list.ts b/src/server/api/endpoints/mute/list.ts
index 84699c2373..da7189b488 100644
--- a/src/server/api/endpoints/mute/list.ts
+++ b/src/server/api/endpoints/mute/list.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Get muted users.'
},
+ tags: ['mute', 'account'],
+
requireCredential: true,
kind: 'account/read',
diff --git a/src/server/api/endpoints/my/apps.ts b/src/server/api/endpoints/my/apps.ts
index 0eeeb5f858..1a936c918b 100644
--- a/src/server/api/endpoints/my/apps.ts
+++ b/src/server/api/endpoints/my/apps.ts
@@ -3,6 +3,8 @@ import App, { pack } from '../../../../models/app';
import define from '../../define';
export const meta = {
+ tags: ['account', 'app'],
+
desc: {
'ja-JP': '自分のアプリケーション一覧を取得します。',
'en-US': 'Get my apps'
diff --git a/src/server/api/endpoints/notes.ts b/src/server/api/endpoints/notes.ts
index f8d6fdd2ba..b4716ac3eb 100644
--- a/src/server/api/endpoints/notes.ts
+++ b/src/server/api/endpoints/notes.ts
@@ -8,6 +8,8 @@ export const meta = {
'ja-JP': '投稿を取得します。'
},
+ tags: ['notes'],
+
params: {
local: {
validator: $.optional.bool,
diff --git a/src/server/api/endpoints/notes/conversation.ts b/src/server/api/endpoints/notes/conversation.ts
index 2f08de9e8f..702d8dc430 100644
--- a/src/server/api/endpoints/notes/conversation.ts
+++ b/src/server/api/endpoints/notes/conversation.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Show conversation of a note.'
},
+ tags: ['notes'],
+
requireCredential: false,
params: {
@@ -34,6 +36,13 @@ export const meta = {
},
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
noSuchNote: {
message: 'No such note.',
diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index d24cd7b123..a4f262bdad 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -25,6 +25,8 @@ export const meta = {
'ja-JP': '投稿します。'
},
+ tags: ['notes'],
+
requireCredential: true,
limit: {
@@ -175,7 +177,7 @@ export const meta = {
type: 'object',
props: {
createdNote: {
- type: 'entity(Note)',
+ type: 'Note',
desc: {
'ja-JP': '作成した投稿'
}
diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts
index 8ca5a3bb08..399f9288d6 100644
--- a/src/server/api/endpoints/notes/delete.ts
+++ b/src/server/api/endpoints/notes/delete.ts
@@ -15,6 +15,8 @@ export const meta = {
'en-US': 'Delete a note.'
},
+ tags: ['notes'],
+
requireCredential: true,
kind: 'note-write',
diff --git a/src/server/api/endpoints/notes/favorites/create.ts b/src/server/api/endpoints/notes/favorites/create.ts
index 26e3e34d55..9cde1a7dcf 100644
--- a/src/server/api/endpoints/notes/favorites/create.ts
+++ b/src/server/api/endpoints/notes/favorites/create.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Favorite a note.'
},
+ tags: ['favorites'],
+
requireCredential: true,
kind: 'favorite-write',
diff --git a/src/server/api/endpoints/notes/favorites/delete.ts b/src/server/api/endpoints/notes/favorites/delete.ts
index d79a3d88cb..e2c787f3b5 100644
--- a/src/server/api/endpoints/notes/favorites/delete.ts
+++ b/src/server/api/endpoints/notes/favorites/delete.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Unfavorite a note.'
},
+ tags: ['favorites'],
+
requireCredential: true,
kind: 'favorite-write',
diff --git a/src/server/api/endpoints/notes/featured.ts b/src/server/api/endpoints/notes/featured.ts
index 08cc677abd..0d2187bb06 100644
--- a/src/server/api/endpoints/notes/featured.ts
+++ b/src/server/api/endpoints/notes/featured.ts
@@ -10,6 +10,8 @@ export const meta = {
'en-US': 'Get featured notes.'
},
+ tags: ['notes'],
+
requireCredential: false,
params: {
@@ -20,7 +22,14 @@ export const meta = {
'ja-JP': '最大数'
}
}
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
};
export default define(meta, async (ps, user) => {
diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts
index 8670f8edbb..b62d8e25a3 100644
--- a/src/server/api/endpoints/notes/global-timeline.ts
+++ b/src/server/api/endpoints/notes/global-timeline.ts
@@ -12,6 +12,8 @@ export const meta = {
'ja-JP': 'グローバルタイムラインを取得します。'
},
+ tags: ['notes'],
+
params: {
withFiles: {
validator: $.optional.bool,
@@ -51,6 +53,13 @@ export const meta = {
},
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
gtlDisabled: {
message: 'Global timeline has been disabled.',
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index f3050caeca..153436b9bb 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -14,6 +14,8 @@ export const meta = {
'ja-JP': 'ハイブリッドタイムラインを取得します。'
},
+ tags: ['notes'],
+
params: {
limit: {
validator: $.optional.num.range(1, 100),
@@ -92,6 +94,13 @@ export const meta = {
},
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
stlDisabled: {
message: 'Social timeline has been disabled.',
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index 44328ebede..06c6d7a533 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -13,6 +13,8 @@ export const meta = {
'ja-JP': 'ローカルタイムラインを取得します。'
},
+ tags: ['notes'],
+
params: {
withFiles: {
validator: $.optional.bool,
@@ -67,6 +69,13 @@ export const meta = {
},
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
ltlDisabled: {
message: 'Local timeline has been disabled.',
diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index 090f184f7b..91333174ed 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get mentions of myself.'
},
+ tags: ['notes'],
+
requireCredential: true,
params: {
@@ -39,7 +41,14 @@ export const meta = {
visibility: {
validator: $.optional.str,
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
};
export default define(meta, async (ps, user) => {
diff --git a/src/server/api/endpoints/notes/polls/recommendation.ts b/src/server/api/endpoints/notes/polls/recommendation.ts
index 61a1840b88..0a05e89c6f 100644
--- a/src/server/api/endpoints/notes/polls/recommendation.ts
+++ b/src/server/api/endpoints/notes/polls/recommendation.ts
@@ -10,6 +10,8 @@ export const meta = {
'en-US': 'Get recommended polls.'
},
+ tags: ['notes'],
+
requireCredential: true,
params: {
diff --git a/src/server/api/endpoints/notes/polls/vote.ts b/src/server/api/endpoints/notes/polls/vote.ts
index 00840579dd..60007db136 100644
--- a/src/server/api/endpoints/notes/polls/vote.ts
+++ b/src/server/api/endpoints/notes/polls/vote.ts
@@ -18,6 +18,8 @@ export const meta = {
'en-US': 'Vote poll of a note.'
},
+ tags: ['notes'],
+
requireCredential: true,
kind: 'vote-write',
diff --git a/src/server/api/endpoints/notes/reactions.ts b/src/server/api/endpoints/notes/reactions.ts
index 74f22cc774..c67dd6d82b 100644
--- a/src/server/api/endpoints/notes/reactions.ts
+++ b/src/server/api/endpoints/notes/reactions.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Show reactions of a note.'
},
+ tags: ['notes', 'reactions'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/notes/reactions/create.ts b/src/server/api/endpoints/notes/reactions/create.ts
index 816c6a9c29..291e10bbd0 100644
--- a/src/server/api/endpoints/notes/reactions/create.ts
+++ b/src/server/api/endpoints/notes/reactions/create.ts
@@ -14,6 +14,8 @@ export const meta = {
'en-US': 'React to a note.'
},
+ tags: ['reactions', 'notes'],
+
requireCredential: true,
kind: 'reaction-write',
diff --git a/src/server/api/endpoints/notes/reactions/delete.ts b/src/server/api/endpoints/notes/reactions/delete.ts
index 1afa6526f5..2ccfb93293 100644
--- a/src/server/api/endpoints/notes/reactions/delete.ts
+++ b/src/server/api/endpoints/notes/reactions/delete.ts
@@ -12,6 +12,8 @@ export const meta = {
'en-US': 'Unreact to a note.'
},
+ tags: ['reactions', 'notes'],
+
requireCredential: true,
kind: 'reaction-write',
diff --git a/src/server/api/endpoints/notes/renotes.ts b/src/server/api/endpoints/notes/renotes.ts
index b4c99b1f4e..15dcf55dce 100644
--- a/src/server/api/endpoints/notes/renotes.ts
+++ b/src/server/api/endpoints/notes/renotes.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Show a renotes of a note.'
},
+ tags: ['notes'],
+
requireCredential: false,
params: {
@@ -39,6 +41,13 @@ export const meta = {
}
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
noSuchNote: {
message: 'No such note.',
diff --git a/src/server/api/endpoints/notes/replies.ts b/src/server/api/endpoints/notes/replies.ts
index 080917f6f6..c80fd73205 100644
--- a/src/server/api/endpoints/notes/replies.ts
+++ b/src/server/api/endpoints/notes/replies.ts
@@ -11,6 +11,8 @@ export const meta = {
'en-US': 'Get replies of a note.'
},
+ tags: ['notes'],
+
requireCredential: false,
params: {
@@ -32,7 +34,14 @@ export const meta = {
validator: $.optional.num.min(0),
default: 0
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
};
export default define(meta, async (ps, user) => {
diff --git a/src/server/api/endpoints/notes/search.ts b/src/server/api/endpoints/notes/search.ts
index 3eec2e3189..edc8a14560 100644
--- a/src/server/api/endpoints/notes/search.ts
+++ b/src/server/api/endpoints/notes/search.ts
@@ -12,6 +12,8 @@ export const meta = {
'en-US': 'Search notes.'
},
+ tags: ['notes'],
+
requireCredential: false,
params: {
@@ -30,6 +32,13 @@ export const meta = {
}
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
searchingNotAvailable: {
message: 'Searching not available.',
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index a4fd1903ef..0030e2e37a 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -11,6 +11,8 @@ export const meta = {
'ja-JP': '指定されたタグが付けられた投稿を取得します。'
},
+ tags: ['notes', 'hashtags'],
+
params: {
tag: {
validator: $.optional.str,
@@ -100,7 +102,14 @@ export const meta = {
validator: $.optional.num.range(1, 30),
default: 10
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
};
export default define(meta, async (ps, me) => {
diff --git a/src/server/api/endpoints/notes/show.ts b/src/server/api/endpoints/notes/show.ts
index f4fd06c03d..6d8dc73ff2 100644
--- a/src/server/api/endpoints/notes/show.ts
+++ b/src/server/api/endpoints/notes/show.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get a note.'
},
+ tags: ['notes'],
+
requireCredential: false,
params: {
@@ -26,6 +28,10 @@ export const meta = {
}
},
+ res: {
+ type: 'Note',
+ },
+
errors: {
noSuchNote: {
message: 'No such note.',
diff --git a/src/server/api/endpoints/notes/state.ts b/src/server/api/endpoints/notes/state.ts
index 07e35480fd..4944802849 100644
--- a/src/server/api/endpoints/notes/state.ts
+++ b/src/server/api/endpoints/notes/state.ts
@@ -12,6 +12,8 @@ export const meta = {
'en-US': 'Get state of a note.'
},
+ tags: ['notes'],
+
requireCredential: true,
params: {
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index cb6900a10b..9ec8070f71 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get timeline of myself.'
},
+ tags: ['notes'],
+
requireCredential: true,
params: {
@@ -91,7 +93,14 @@ export const meta = {
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
}
},
- }
+ },
+
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
};
export default define(meta, async (ps, user) => {
diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts
index 1969b924ad..45e96fbdac 100644
--- a/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -14,6 +14,8 @@ export const meta = {
'en-US': 'Get timeline of a user list.'
},
+ tags: ['notes', 'lists'],
+
requireCredential: true,
params: {
@@ -102,6 +104,13 @@ export const meta = {
},
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
noSuchList: {
message: 'No such list.',
diff --git a/src/server/api/endpoints/notes/watching/create.ts b/src/server/api/endpoints/notes/watching/create.ts
index 7361237e8d..2b2de1bd3b 100644
--- a/src/server/api/endpoints/notes/watching/create.ts
+++ b/src/server/api/endpoints/notes/watching/create.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Watch a note.'
},
+ tags: ['notes'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/notes/watching/delete.ts b/src/server/api/endpoints/notes/watching/delete.ts
index 33fbef570c..512db793ea 100644
--- a/src/server/api/endpoints/notes/watching/delete.ts
+++ b/src/server/api/endpoints/notes/watching/delete.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Unwatch a note.'
},
+ tags: ['notes'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/notifications/mark_all_as_read.ts b/src/server/api/endpoints/notifications/mark_all_as_read.ts
index 91e10b46eb..e5df648285 100644
--- a/src/server/api/endpoints/notifications/mark_all_as_read.ts
+++ b/src/server/api/endpoints/notifications/mark_all_as_read.ts
@@ -9,6 +9,8 @@ export const meta = {
'en-US': 'Mark all notifications as read.'
},
+ tags: ['notifications', 'account'],
+
requireCredential: true,
kind: 'notification-write'
diff --git a/src/server/api/endpoints/stats.ts b/src/server/api/endpoints/stats.ts
index 43d7c44952..fa67ce25fc 100644
--- a/src/server/api/endpoints/stats.ts
+++ b/src/server/api/endpoints/stats.ts
@@ -10,6 +10,8 @@ export const meta = {
'en-US': 'Get the instance\'s statistics'
},
+ tags: ['meta'],
+
params: {
}
};
diff --git a/src/server/api/endpoints/sw/register.ts b/src/server/api/endpoints/sw/register.ts
index 870c13555f..0b81b06abe 100644
--- a/src/server/api/endpoints/sw/register.ts
+++ b/src/server/api/endpoints/sw/register.ts
@@ -4,6 +4,8 @@ import define from '../../define';
import fetchMeta from '../../../../misc/fetch-meta';
export const meta = {
+ tags: ['account'],
+
requireCredential: true,
params: {
diff --git a/src/server/api/endpoints/username/available.ts b/src/server/api/endpoints/username/available.ts
index a651bc4d55..1d098eb399 100644
--- a/src/server/api/endpoints/username/available.ts
+++ b/src/server/api/endpoints/username/available.ts
@@ -4,6 +4,8 @@ import { validateUsername } from '../../../../models/user';
import define from '../../define';
export const meta = {
+ tags: ['users'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/users.ts b/src/server/api/endpoints/users.ts
index f7e7a10011..7147a3541c 100644
--- a/src/server/api/endpoints/users.ts
+++ b/src/server/api/endpoints/users.ts
@@ -7,6 +7,8 @@ import { getHideUserIds } from '../common/get-hide-users';
const nonnull = { $ne: null as any };
export const meta = {
+ tags: ['users'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/users/followers.ts b/src/server/api/endpoints/users/followers.ts
index cb5b047626..32c75fc8d4 100644
--- a/src/server/api/endpoints/users/followers.ts
+++ b/src/server/api/endpoints/users/followers.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get followers of a user.'
},
+ tags: ['users'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/users/following.ts b/src/server/api/endpoints/users/following.ts
index 04abe5f4b3..3ce103621b 100644
--- a/src/server/api/endpoints/users/following.ts
+++ b/src/server/api/endpoints/users/following.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Get following users of a user.'
},
+ tags: ['users'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/users/get_frequently_replied_users.ts b/src/server/api/endpoints/users/get_frequently_replied_users.ts
index 0b90e489c2..6f9c746acd 100644
--- a/src/server/api/endpoints/users/get_frequently_replied_users.ts
+++ b/src/server/api/endpoints/users/get_frequently_replied_users.ts
@@ -9,6 +9,8 @@ import { ApiError } from '../../error';
import { getUser } from '../../common/getters';
export const meta = {
+ tags: ['users'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/users/lists/create.ts b/src/server/api/endpoints/users/lists/create.ts
index a3d91b6c25..00d2538c9f 100644
--- a/src/server/api/endpoints/users/lists/create.ts
+++ b/src/server/api/endpoints/users/lists/create.ts
@@ -8,6 +8,8 @@ export const meta = {
'en-US': 'Create a user list'
},
+ tags: ['lists'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/users/lists/delete.ts b/src/server/api/endpoints/users/lists/delete.ts
index 6aaf4701d4..d8faaa928c 100644
--- a/src/server/api/endpoints/users/lists/delete.ts
+++ b/src/server/api/endpoints/users/lists/delete.ts
@@ -10,6 +10,8 @@ export const meta = {
'en-US': 'Delete a user list'
},
+ tags: ['lists'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/users/lists/list.ts b/src/server/api/endpoints/users/lists/list.ts
index 5bd662878d..632f4e7e5b 100644
--- a/src/server/api/endpoints/users/lists/list.ts
+++ b/src/server/api/endpoints/users/lists/list.ts
@@ -6,6 +6,8 @@ export const meta = {
'ja-JP': '自分の作成したユーザーリスト一覧を取得します。'
},
+ tags: ['lists', 'account'],
+
requireCredential: true,
kind: 'account-read'
diff --git a/src/server/api/endpoints/users/lists/pull.ts b/src/server/api/endpoints/users/lists/pull.ts
index 7c438ff3d6..0eee1975db 100644
--- a/src/server/api/endpoints/users/lists/pull.ts
+++ b/src/server/api/endpoints/users/lists/pull.ts
@@ -13,6 +13,8 @@ export const meta = {
'en-US': 'Remove a user to a user list.'
},
+ tags: ['lists', 'users'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/users/lists/push.ts b/src/server/api/endpoints/users/lists/push.ts
index c63bbb6ac0..6b47f9dc71 100644
--- a/src/server/api/endpoints/users/lists/push.ts
+++ b/src/server/api/endpoints/users/lists/push.ts
@@ -16,6 +16,8 @@ export const meta = {
'en-US': 'Add a user to a user list.'
},
+ tags: ['lists', 'users'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/users/lists/show.ts b/src/server/api/endpoints/users/lists/show.ts
index 3bd8ce6573..2f3c8889ad 100644
--- a/src/server/api/endpoints/users/lists/show.ts
+++ b/src/server/api/endpoints/users/lists/show.ts
@@ -10,6 +10,8 @@ export const meta = {
'en-US': 'Show a user list.'
},
+ tags: ['lists', 'account'],
+
requireCredential: true,
kind: 'account-read',
diff --git a/src/server/api/endpoints/users/lists/update.ts b/src/server/api/endpoints/users/lists/update.ts
index 842ae189ee..5897693144 100644
--- a/src/server/api/endpoints/users/lists/update.ts
+++ b/src/server/api/endpoints/users/lists/update.ts
@@ -10,6 +10,8 @@ export const meta = {
'en-US': 'Update a user list'
},
+ tags: ['lists'],
+
requireCredential: true,
kind: 'account-write',
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index 1c5882d5b2..f8942fb2d3 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -11,6 +11,8 @@ export const meta = {
'ja-JP': '指定したユーザーのタイムラインを取得します。'
},
+ tags: ['users', 'notes'],
+
params: {
userId: {
validator: $.type(ID),
@@ -124,6 +126,13 @@ export const meta = {
},
},
+ res: {
+ type: 'array',
+ items: {
+ type: 'Note',
+ },
+ },
+
errors: {
noSuchUser: {
message: 'No such user.',
diff --git a/src/server/api/endpoints/users/recommendation.ts b/src/server/api/endpoints/users/recommendation.ts
index dc37bc56ba..2261ee7df4 100644
--- a/src/server/api/endpoints/users/recommendation.ts
+++ b/src/server/api/endpoints/users/recommendation.ts
@@ -15,6 +15,8 @@ export const meta = {
'ja-JP': 'おすすめのユーザー一覧を取得します。'
},
+ tags: ['users'],
+
requireCredential: true,
kind: 'account-read',
diff --git a/src/server/api/endpoints/users/relation.ts b/src/server/api/endpoints/users/relation.ts
index 5b7b4d8e4d..f4121aa0d0 100644
--- a/src/server/api/endpoints/users/relation.ts
+++ b/src/server/api/endpoints/users/relation.ts
@@ -8,11 +8,13 @@ export const meta = {
'ja-JP': 'ユーザー間のリレーションを取得します。'
},
+ tags: ['users'],
+
requireCredential: true,
params: {
userId: {
- validator: $.or($.type(ID), $.arr($.type(ID)).unique()),
+ validator: $.either($.type(ID), $.arr($.type(ID)).unique()),
transform: (v: any): ObjectId | ObjectId[] => Array.isArray(v) ? v.map(x => transform(x)) : transform(v),
desc: {
'ja-JP': 'ユーザーID (配列でも可)'
diff --git a/src/server/api/endpoints/users/report-abuse.ts b/src/server/api/endpoints/users/report-abuse.ts
index 36f797f5e6..0f23f8f0c3 100644
--- a/src/server/api/endpoints/users/report-abuse.ts
+++ b/src/server/api/endpoints/users/report-abuse.ts
@@ -12,6 +12,8 @@ export const meta = {
'ja-JP': '指定したユーザーを迷惑なユーザーであると報告します。'
},
+ tags: ['users'],
+
requireCredential: true,
params: {
diff --git a/src/server/api/endpoints/users/search.ts b/src/server/api/endpoints/users/search.ts
index 6fd390f283..a6b50b687f 100644
--- a/src/server/api/endpoints/users/search.ts
+++ b/src/server/api/endpoints/users/search.ts
@@ -8,6 +8,8 @@ export const meta = {
'ja-JP': 'ユーザーを検索します。'
},
+ tags: ['users'],
+
requireCredential: false,
params: {
diff --git a/src/server/api/endpoints/users/show.ts b/src/server/api/endpoints/users/show.ts
index 4f870b8b92..4e59945eba 100644
--- a/src/server/api/endpoints/users/show.ts
+++ b/src/server/api/endpoints/users/show.ts
@@ -13,6 +13,8 @@ export const meta = {
'ja-JP': '指定したユーザーの情報を取得します。'
},
+ tags: ['users'],
+
requireCredential: false,
params: {
@@ -42,6 +44,10 @@ export const meta = {
}
},
+ res: {
+ type: 'User',
+ },
+
errors: {
failedToResolveRemoteUser: {
message: 'Failed to resolve remote user.',
diff --git a/src/server/api/error.ts b/src/server/api/error.ts
index 6b5c44cac2..ca441d5811 100644
--- a/src/server/api/error.ts
+++ b/src/server/api/error.ts
@@ -3,14 +3,16 @@ export class ApiError extends Error {
public code: string;
public id: string;
public kind: string;
+ public httpStatusCode?: number;
public info?: any;
- constructor(e?: { message: string, code: string, id: string, kind?: 'client' | 'server' }, info?: any) {
+ constructor(e?: { message: string, code: string, id: string, kind?: 'client' | 'server', httpStatusCode?: number }, info?: any) {
if (e == null) e = {
message: 'Internal error occurred. Please contact us if the error persists.',
code: 'INTERNAL_ERROR',
id: '5d37dbcb-891e-41ca-a3d6-e690c97775ac',
- kind: 'server'
+ kind: 'server',
+ httpStatusCode: 500
};
super(e.message);
@@ -18,6 +20,7 @@ export class ApiError extends Error {
this.code = e.code;
this.id = e.id;
this.kind = e.kind || 'client';
+ this.httpStatusCode = e.httpStatusCode;
this.info = info;
}
}
diff --git a/src/server/api/gen-openapi-spec.ts b/src/server/api/gen-openapi-spec.ts
new file mode 100644
index 0000000000..3b0669087e
--- /dev/null
+++ b/src/server/api/gen-openapi-spec.ts
@@ -0,0 +1,507 @@
+import endpoints from './endpoints';
+import { Context } from 'cafy';
+import config from '../../config';
+
+const basicErrors = {
+ '400': {
+ 'INVALID_PARAM': {
+ value: {
+ error: {
+ message: 'Invalid param.',
+ code: 'INVALID_PARAM',
+ id: '3d81ceae-475f-4600-b2a8-2bc116157532',
+ }
+ }
+ }
+ },
+ '401': {
+ 'CREDENTIAL_REQUIRED': {
+ value: {
+ error: {
+ message: 'Credential required.',
+ code: 'CREDENTIAL_REQUIRED',
+ id: '1384574d-a912-4b81-8601-c7b1c4085df1',
+ }
+ }
+ }
+ },
+ '403': {
+ 'AUTHENTICATION_FAILED': {
+ value: {
+ error: {
+ message: 'Authentication failed. Please ensure your token is correct.',
+ code: 'AUTHENTICATION_FAILED',
+ id: 'b0a7f5f8-dc2f-4171-b91f-de88ad238e14',
+ }
+ }
+ }
+ },
+ '418': {
+ 'I_AM_AI': {
+ value: {
+ error: {
+ message: 'You sent a request to Ai-chan, Misskey\'s showgirl, instead of the server.',
+ code: 'I_AM_AI',
+ id: '60c46cd1-f23a-46b1-bebe-5d2b73951a84',
+ }
+ }
+ }
+ },
+ '429': {
+ 'RATE_LIMIT_EXCEEDED': {
+ value: {
+ error: {
+ message: 'Rate limit exceeded. Please try again later.',
+ code: 'RATE_LIMIT_EXCEEDED',
+ id: 'd5826d14-3982-4d2e-8011-b9e9f02499ef',
+ }
+ }
+ }
+ },
+ '500': {
+ 'INTERNAL_ERROR': {
+ value: {
+ error: {
+ message: 'Internal error occurred. Please contact us if the error persists.',
+ code: 'INTERNAL_ERROR',
+ id: '5d37dbcb-891e-41ca-a3d6-e690c97775ac',
+ }
+ }
+ }
+ }
+};
+
+const schemas = {
+ Error: {
+ type: 'object',
+ properties: {
+ error: {
+ type: 'object',
+ description: 'An error object.',
+ properties: {
+ code: {
+ type: 'string',
+ description: 'An error code.',
+ },
+ message: {
+ type: 'string',
+ description: 'An error message.',
+ },
+ id: {
+ type: 'string',
+ format: 'uuid',
+ description: 'An error ID. This ID is static.',
+ }
+ },
+ required: ['code', 'id', 'message']
+ },
+ },
+ required: ['error']
+ },
+
+ User: {
+ type: 'object',
+ properties: {
+ id: {
+ type: 'string',
+ format: 'id',
+ description: 'The unique identifier for this User.'
+ },
+ username: {
+ type: 'string',
+ description: 'The screen name, handle, or alias that this user identifies themselves with.',
+ example: 'ai'
+ },
+ name: {
+ type: 'string',
+ nullable: true,
+ description: 'The name of the user, as they’ve defined it.',
+ example: '藍'
+ },
+ host: {
+ type: 'string',
+ nullable: true,
+ example: 'misskey.example.com'
+ },
+ description: {
+ type: 'string',
+ nullable: true,
+ description: 'The user-defined UTF-8 string describing their account.',
+ example: 'Hi masters, I am Ai!'
+ },
+ createdAt: {
+ type: 'string',
+ format: 'date-time',
+ description: 'The date that the user account was created on Misskey.'
+ },
+ followersCount: {
+ type: 'number',
+ description: 'The number of followers this account currently has.'
+ },
+ followingCount: {
+ type: 'number',
+ description: 'The number of users this account is following.'
+ },
+ notesCount: {
+ type: 'number',
+ description: 'The number of Notes (including renotes) issued by the user.'
+ },
+ isBot: {
+ type: 'boolean',
+ description: 'Whether this account is a bot.'
+ },
+ isCat: {
+ type: 'boolean',
+ description: 'Whether this account is a cat.'
+ },
+ isAdmin: {
+ type: 'boolean',
+ description: 'Whether this account is the admin.'
+ },
+ isVerified: {
+ type: 'boolean'
+ },
+ isLocked: {
+ type: 'boolean'
+ },
+ },
+ required: ['id', 'name', 'username', 'createdAt']
+ },
+
+ Note: {
+ type: 'object',
+ properties: {
+ id: {
+ type: 'string',
+ format: 'id',
+ description: 'The unique identifier for this Note.'
+ },
+ createdAt: {
+ type: 'string',
+ format: 'date-time',
+ description: 'The date that the Note was created on Misskey.'
+ },
+ text: {
+ type: 'string'
+ },
+ cw: {
+ type: 'string'
+ },
+ userId: {
+ type: 'string',
+ format: 'id',
+ },
+ user: {
+ $ref: '#/components/schemas/User'
+ },
+ replyId: {
+ type: 'string',
+ format: 'id',
+ },
+ renoteId: {
+ type: 'string',
+ format: 'id',
+ },
+ reply: {
+ $ref: '#/components/schemas/Note'
+ },
+ renote: {
+ $ref: '#/components/schemas/Note'
+ },
+ viaMobile: {
+ type: 'boolean'
+ },
+ visibility: {
+ type: 'string'
+ },
+ },
+ required: ['id', 'userId', 'createdAt']
+ },
+
+ DriveFile: {
+ type: 'object',
+ properties: {
+ id: {
+ type: 'string',
+ format: 'id',
+ description: 'The unique identifier for this Drive file.'
+ },
+ createdAt: {
+ type: 'string',
+ format: 'date-time',
+ description: 'The date that the Drive file was created on Misskey.'
+ },
+ name: {
+ type: 'string',
+ description: 'The file name with extension.',
+ example: 'lenna.jpg'
+ },
+ type: {
+ type: 'string',
+ description: 'The MIME type of this Drive file.',
+ example: 'image/jpeg'
+ },
+ md5: {
+ type: 'string',
+ format: 'md5',
+ description: 'The MD5 hash of this Drive file.',
+ example: '15eca7fba0480996e2245f5185bf39f2'
+ },
+ datasize: {
+ type: 'number',
+ description: 'The size of this Drive file. (bytes)',
+ example: 51469
+ },
+ folderId: {
+ type: 'string',
+ format: 'id',
+ nullable: true,
+ description: 'The parent folder ID of this Drive file.',
+ },
+ isSensitive: {
+ type: 'boolean',
+ description: 'Whether this Drive file is sensitive.',
+ },
+ },
+ required: ['id', 'createdAt', 'name', 'type', 'datasize', 'md5']
+ }
+};
+
+export function genOpenapiSpec(lang = 'ja-JP') {
+ const spec = {
+ openapi: '3.0.0',
+
+ info: {
+ version: 'v1',
+ title: 'Misskey API',
+ description: 'Misskey is a decentralized microblogging platform.',
+ 'x-logo': { url: '/assets/api-doc.png' }
+ },
+
+ servers: [{
+ url: config.api_url
+ }],
+
+ paths: {} as any,
+
+ components: {
+ schemas: schemas,
+
+ securitySchemes: {
+ ApiKeyAuth: {
+ type: 'apiKey',
+ in: 'body',
+ name: 'i'
+ }
+ }
+ }
+ };
+
+ function genProps(props: { [key: string]: Context & { desc: any, default: any }; }) {
+ const properties = {} as any;
+
+ const kvs = Object.entries(props);
+
+ for (const kv of kvs) {
+ properties[kv[0]] = genProp(kv[1], kv[1].desc, kv[1].default);
+ }
+
+ return properties;
+ }
+
+ function genProp(param: Context, desc?: string, _default?: any): any {
+ const required = param.name === 'Object' ? (param as any).props ? Object.entries((param as any).props).filter(([k, v]: any) => !v.isOptional).map(([k, v]) => k) : [] : [];
+ return {
+ description: desc,
+ default: _default,
+ ...(_default ? { default: _default } : {}),
+ type: param.name === 'ID' ? 'string' : param.name.toLowerCase(),
+ ...(param.name === 'ID' ? { example: 'xxxxxxxxxxxxxxxxxxxxxxxx', format: 'id' } : {}),
+ nullable: param.isNullable,
+ ...(param.name === 'String' ? {
+ ...((param as any).enum ? { enum: (param as any).enum } : {}),
+ ...((param as any).minLength ? { minLength: (param as any).minLength } : {}),
+ ...((param as any).maxLength ? { maxLength: (param as any).maxLength } : {}),
+ } : {}),
+ ...(param.name === 'Number' ? {
+ ...((param as any).minimum ? { minimum: (param as any).minimum } : {}),
+ ...((param as any).maximum ? { maximum: (param as any).maximum } : {}),
+ } : {}),
+ ...(param.name === 'Object' ? {
+ ...(required.length > 0 ? { required } : {}),
+ properties: (param as any).props ? genProps((param as any).props) : {}
+ } : {}),
+ ...(param.name === 'Array' ? {
+ items: (param as any).ctx ? genProp((param as any).ctx) : {}
+ } : {})
+ };
+ }
+
+ for (const endpoint of endpoints.filter(ep => !ep.meta.secure)) {
+ const porops = {} as any;
+ const errors = {} as any;
+
+ if (endpoint.meta.errors) {
+ for (const e of Object.values(endpoint.meta.errors)) {
+ errors[e.code] = {
+ value: {
+ error: e
+ }
+ };
+ }
+ }
+
+ if (endpoint.meta.params) {
+ for (const kv of Object.entries(endpoint.meta.params)) {
+ if (kv[1].desc) (kv[1].validator as any).desc = kv[1].desc[lang];
+ if (kv[1].default) (kv[1].validator as any).default = kv[1].default;
+ porops[kv[0]] = kv[1].validator;
+ }
+ }
+
+ const required = endpoint.meta.params ? Object.entries(endpoint.meta.params).filter(([k, v]) => !v.validator.isOptional).map(([k, v]) => k) : [];
+
+ const resSchema = endpoint.meta.res ? renderType(endpoint.meta.res) : {};
+
+ function renderType(x: any) {
+ const res = {} as any;
+
+ if (['User', 'Note', 'DriveFile'].includes(x.type)) {
+ res['$ref'] = `#/components/schemas/${x.type}`;
+ } else if (x.type === 'object') {
+ res['type'] = 'object';
+ if (x.props) {
+ const props = {} as any;
+ for (const kv of Object.entries(x.props)) {
+ props[kv[0]] = renderType(kv[1]);
+ }
+ res['properties'] = props;
+ }
+ } else if (x.type === 'array') {
+ res['type'] = 'array';
+ if (x.items) {
+ res['items'] = renderType(x.items);
+ }
+ } else {
+ res['type'] = x.type;
+ }
+
+ return res;
+ }
+
+ const info = {
+ summary: endpoint.name,
+ description: endpoint.meta.desc ? endpoint.meta.desc[lang] : 'No description provided.',
+ ...(endpoint.meta.tags ? {
+ tags: endpoint.meta.tags
+ } : {}),
+ ...(endpoint.meta.requireCredential ? {
+ security: [{
+ ApiKeyAuth: []
+ }]
+ } : {}),
+ requestBody: {
+ required: true,
+ content: {
+ 'application/json': {
+ schema: {
+ type: 'object',
+ ...(required.length > 0 ? { required } : {}),
+ properties: endpoint.meta.params ? genProps(porops) : {}
+ }
+ }
+ }
+ },
+ responses: {
+ ...(endpoint.meta.res ? {
+ '200': {
+ description: 'OK (with results)',
+ content: {
+ 'application/json': {
+ schema: resSchema
+ }
+ }
+ }
+ } : {
+ '204': {
+ description: 'OK (without any results)',
+ }
+ }),
+ '400': {
+ description: 'Client error',
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/Error'
+ },
+ examples: { ...errors, ...basicErrors['400'] }
+ }
+ }
+ },
+ '401': {
+ description: 'Authentication error',
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/Error'
+ },
+ examples: basicErrors['401']
+ }
+ }
+ },
+ '403': {
+ description: 'Forbiddon error',
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/Error'
+ },
+ examples: basicErrors['403']
+ }
+ }
+ },
+ '418': {
+ description: 'I\'m Ai',
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/Error'
+ },
+ examples: basicErrors['418']
+ }
+ }
+ },
+ ...(endpoint.meta.limit ? {
+ '429': {
+ description: 'To many requests',
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/Error'
+ },
+ examples: basicErrors['429']
+ }
+ }
+ }
+ } : {}),
+ '500': {
+ description: 'Internal server error',
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/Error'
+ },
+ examples: basicErrors['500']
+ }
+ }
+ },
+ }
+ };
+
+ spec.paths['/' + endpoint.name] = {
+ post: info
+ };
+ }
+
+ return spec;
+}