refactor: APIエンドポイントファイルの定義を良い感じにする (#8154)

* Fix API Schema Error

* Delete SimpleSchema/SimpleObj
and Move schemas to dedicated files

* Userのスキーマを分割してみる

* define packMany type

* add ,

* Ensure enum schema and Make "as const" put once

* test?

* Revert "test?"

This reverts commit 97dc9bfa70.

* Revert "Fix API Schema Error"

This reverts commit 21b6176d97.

* ✌️

* clean up

* test?

* wip

* wip

* better schema def

* ✌️

* fix

* add minLength property

* wip

* wip

* wip

* anyOf/oneOf/allOfに対応? ~ relation.ts

* refactor!

* Define MinimumSchema

* wip

* wip

* anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正

* anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正

* Update packages/backend/src/misc/schema.ts

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* fix

* array oneOfをより正確な型に

* array oneOfをより正確な型に

* wip

* ✌️

* なんかもういろいろ

* remove

* very good schema

* api schema

* wip

* refactor: awaitAllの型定義を変えてみる

* fix

* specify types in awaitAll

* specify types in awaitAll

* ✌️

* wip

* ...

* ✌️

* AllowDateはやめておく

* 不必要なoptional: false, nullable: falseを廃止

* Packedが展開されないように

* 続packed

* wip

* define note type

* wip

* UserDetailedをMeDetailedかUserDetailedNotMeかを区別できるように

* wip

* wip

* wip specify user type of other schemas

* ok

* convertSchemaToOpenApiSchemaを改修

* convertSchemaToOpenApiSchemaを改修

* Fix

* fix

* ✌️

* wip

* 分割代入ではなくallOfで定義するように

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
This commit is contained in:
tamaina
2022-01-18 22:27:10 +09:00
committed by GitHub
parent a8fad1b61c
commit efb0ffc4ec
358 changed files with 3623 additions and 3417 deletions

View File

@@ -4,7 +4,7 @@ import define from '../../../define';
import { UserProfiles } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -13,7 +13,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -16,7 +16,7 @@ import { publishMainStream } from '@/services/stream';
const cborDecodeFirst = promisify(cbor.decodeFirst) as any;
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -37,7 +37,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
const rpIdHashReal = hash(Buffer.from(config.hostname, 'utf-8'));

View File

@@ -3,7 +3,7 @@ import define from '../../../define';
import { UserProfiles } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -12,7 +12,7 @@ export const meta = {
validator: $.boolean,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -10,7 +10,7 @@ import { hash } from '../../../2fa';
const randomBytes = promisify(crypto.randomBytes);
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -19,7 +19,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -7,7 +7,7 @@ import define from '../../../define';
import { UserProfiles } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -16,7 +16,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -5,7 +5,7 @@ import { UserProfiles, UserSecurityKeys, Users } from '@/models/index';
import { publishMainStream } from '@/services/stream';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -17,7 +17,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,7 +4,7 @@ import define from '../../../define';
import { UserProfiles } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -13,7 +13,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -3,7 +3,7 @@ import define from '../../define';
import { AccessTokens } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -17,7 +17,7 @@ export const meta = {
]),
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -3,7 +3,7 @@ import define from '../../define';
import { AccessTokens, Apps } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -23,7 +23,7 @@ export const meta = {
default: 'desc',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,7 +4,7 @@ import define from '../../define';
import { UserProfiles } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -17,7 +17,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -7,7 +7,7 @@ import { publishUserEvent } from '@/services/stream';
import { createDeleteAccountJob } from '@/queue';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -16,7 +16,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,12 +4,12 @@ import ms from 'ms';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1hour'),
max: 1,
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -5,7 +5,7 @@ import ms from 'ms';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1hour'),
max: 1,
@@ -20,7 +20,7 @@ export const meta = {
default: false,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,12 +4,12 @@ import ms from 'ms';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1hour'),
max: 1,
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,12 +4,12 @@ import ms from 'ms';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1day'),
max: 1,
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,12 +4,12 @@ import ms from 'ms';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1min'),
max: 1,
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
tags: ['account', 'notes', 'favorites'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:favorites',
@@ -27,15 +27,15 @@ export const meta = {
},
res: {
type: 'array' as const,
optional: false as const, nullable: false as const,
type: 'array',
optional: false, nullable: false,
items: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
ref: 'NoteFavorite',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../../common/make-pagination-query';
export const meta = {
tags: ['account', 'gallery'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:gallery-likes',
@@ -27,22 +27,22 @@ export const meta = {
},
res: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
properties: {
id: {
type: 'string' as const,
optional: false as const, nullable: false as const,
type: 'string',
optional: false, nullable: false,
format: 'id',
},
page: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
ref: 'GalleryPost',
},
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../../common/make-pagination-query';
export const meta = {
tags: ['account', 'gallery'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:gallery',
@@ -27,15 +27,15 @@ export const meta = {
},
res: {
type: 'array' as const,
optional: false as const, nullable: false as const,
type: 'array',
optional: false, nullable: false,
items: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
ref: 'GalleryPost',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,7 +4,7 @@ import { MutedNotes } from '@/models/index';
export const meta = {
tags: ['account'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:account',
@@ -12,16 +12,16 @@ export const meta = {
},
res: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
properties: {
count: {
type: 'number' as const,
optional: false as const, nullable: false as const,
type: 'number',
optional: false, nullable: false,
},
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -8,7 +8,7 @@ import { DriveFiles } from '@/models/index';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1hour'),
@@ -46,7 +46,7 @@ export const meta = {
id: '6f3a4dcc-f060-a707-4950-806fbdbe60d6',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -8,7 +8,7 @@ import { DriveFiles } from '@/models/index';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1hour'),
max: 1,
@@ -45,7 +45,7 @@ export const meta = {
id: '31a1b42c-06f7-42ae-8a38-a661c5c9f691',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -8,7 +8,7 @@ import { DriveFiles } from '@/models/index';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1hour'),
@@ -46,7 +46,7 @@ export const meta = {
id: 'd2f12af1-e7b4-feac-86a3-519548f2728e',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -8,7 +8,7 @@ import { DriveFiles } from '@/models/index';
export const meta = {
secure: true,
requireCredential: true as const,
requireCredential: true,
limit: {
duration: ms('1hour'),
max: 1,
@@ -45,7 +45,7 @@ export const meta = {
id: '99efe367-ce6e-4d44-93f8-5fae7b040356',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -12,7 +12,7 @@ import { Brackets } from 'typeorm';
export const meta = {
tags: ['account', 'notifications'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:notifications',
@@ -55,15 +55,15 @@ export const meta = {
},
res: {
type: 'array' as const,
optional: false as const, nullable: false as const,
type: 'array',
optional: false, nullable: false,
items: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
ref: 'Notification',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
tags: ['account', 'pages'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:page-likes',
@@ -27,22 +27,22 @@ export const meta = {
},
res: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
properties: {
id: {
type: 'string' as const,
optional: false as const, nullable: false as const,
type: 'string',
optional: false, nullable: false,
format: 'id',
},
page: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
ref: 'Page',
},
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
tags: ['account', 'pages'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:pages',
@@ -27,15 +27,15 @@ export const meta = {
},
res: {
type: 'array' as const,
optional: false as const, nullable: false as const,
type: 'array',
optional: false, nullable: false,
items: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
ref: 'Page',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -8,7 +8,7 @@ import { Users } from '@/models/index';
export const meta = {
tags: ['account', 'notes'],
requireCredential: true as const,
requireCredential: true,
kind: 'write:account',
@@ -39,11 +39,11 @@ export const meta = {
},
res: {
type: 'object' as const,
optional: false as const, nullable: false as const,
ref: 'User',
type: 'object',
optional: false, nullable: false,
ref: 'MeDetailed',
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {
@@ -54,7 +54,7 @@ export default define(meta, async (ps, user) => {
throw e;
});
return await Users.pack(user.id, user, {
return await Users.pack<true, true>(user.id, user, {
detail: true,
});
});

View File

@@ -5,13 +5,13 @@ import { MessagingMessages, UserGroupJoinings } from '@/models/index';
export const meta = {
tags: ['account', 'messaging'],
requireCredential: true as const,
requireCredential: true,
kind: 'write:account',
params: {
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -5,13 +5,13 @@ import { NoteUnreads } from '@/models/index';
export const meta = {
tags: ['account'],
requireCredential: true as const,
requireCredential: true,
kind: 'write:account',
params: {
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -9,7 +9,7 @@ import { publishMainStream } from '@/services/stream';
export const meta = {
tags: ['account'],
requireCredential: true as const,
requireCredential: true,
kind: 'write:account',
@@ -26,7 +26,7 @@ export const meta = {
id: '184663db-df88-4bc2-8b52-fb85f0681939',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -6,7 +6,7 @@ import define from '../../define';
import { Users, UserProfiles } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -15,7 +15,7 @@ export const meta = {
validator: $.str,
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -3,7 +3,7 @@ import define from '../../../define';
import { RegistryItems } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -13,7 +13,7 @@ export const meta = {
default: [],
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,7 +4,7 @@ import { RegistryItems } from '@/models/index';
import { ApiError } from '../../../error';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -26,7 +26,7 @@ export const meta = {
id: '97a1e8e7-c0f7-47d2-957a-92e61256e01a',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,7 +4,7 @@ import { RegistryItems } from '@/models/index';
import { ApiError } from '../../../error';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -26,7 +26,7 @@ export const meta = {
id: 'ac3ed68a-62f0-422b-a7bc-d5e09e8f6a6a',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -3,7 +3,7 @@ import define from '../../../define';
import { RegistryItems } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -13,7 +13,7 @@ export const meta = {
default: [],
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -3,7 +3,7 @@ import define from '../../../define';
import { RegistryItems } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -13,7 +13,7 @@ export const meta = {
default: [],
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -4,7 +4,7 @@ import { RegistryItems } from '@/models/index';
import { ApiError } from '../../../error';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -26,7 +26,7 @@ export const meta = {
id: '1fac4e8a-a6cd-4e39-a4a5-3a7e11f1b019',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -2,13 +2,13 @@ import define from '../../../define';
import { RegistryItems } from '@/models/index';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
params: {
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -5,7 +5,7 @@ import { RegistryItems } from '@/models/index';
import { genId } from '@/misc/gen-id';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -23,7 +23,7 @@ export const meta = {
default: [],
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -5,7 +5,7 @@ import { ID } from '@/misc/cafy-id';
import { publishUserEvent } from '@/services/stream';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -14,7 +14,7 @@ export const meta = {
validator: $.type(ID),
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -5,7 +5,7 @@ import { Signins } from '@/models/index';
import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -23,7 +23,7 @@ export const meta = {
validator: $.optional.type(ID),
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -8,7 +8,7 @@ import { Users } from '@/models/index';
export const meta = {
tags: ['account', 'notes'],
requireCredential: true as const,
requireCredential: true,
kind: 'write:account',
@@ -27,11 +27,11 @@ export const meta = {
},
res: {
type: 'object' as const,
optional: false as const, nullable: false as const,
ref: 'User',
type: 'object',
optional: false, nullable: false,
ref: 'MeDetailed',
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {
@@ -40,7 +40,7 @@ export default define(meta, async (ps, user) => {
throw e;
});
return await Users.pack(user.id, user, {
return await Users.pack<true, true>(user.id, user, {
detail: true,
});
});

View File

@@ -11,7 +11,7 @@ import { ApiError } from '../../error';
import { validateEmailForAccount } from '@/services/validate-email-for-account';
export const meta = {
requireCredential: true as const,
requireCredential: true,
secure: true,
@@ -43,7 +43,7 @@ export const meta = {
id: 'a2defefb-f220-8849-0af6-17f816099323',
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {

View File

@@ -19,7 +19,7 @@ import { normalizeForSearch } from '@/misc/normalize-for-search';
export const meta = {
tags: ['account'],
requireCredential: true as const,
requireCredential: true,
kind: 'write:account',
@@ -162,11 +162,11 @@ export const meta = {
},
res: {
type: 'object' as const,
optional: false as const, nullable: false as const,
ref: 'User',
type: 'object',
optional: false, nullable: false,
ref: 'MeDetailed',
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, _user, token) => {
@@ -279,7 +279,7 @@ export default define(meta, async (ps, _user, token) => {
if (Object.keys(updates).length > 0) await Users.update(user.id, updates);
if (Object.keys(profileUpdates).length > 0) await UserProfiles.update(user.id, profileUpdates);
const iObj = await Users.pack(user.id, user, {
const iObj = await Users.pack<true, true>(user.id, user, {
detail: true,
includeSecrets: isSecure,
});

View File

@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
tags: ['account', 'groups'],
requireCredential: true as const,
requireCredential: true,
kind: 'read:user-groups',
@@ -27,26 +27,26 @@ export const meta = {
},
res: {
type: 'array' as const,
optional: false as const, nullable: false as const,
type: 'array',
optional: false, nullable: false,
items: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
properties: {
id: {
type: 'string' as const,
optional: false as const, nullable: false as const,
type: 'string',
optional: false, nullable: false,
format: 'id',
},
group: {
type: 'object' as const,
optional: false as const, nullable: false as const,
type: 'object',
optional: false, nullable: false,
ref: 'UserGroup',
},
},
},
},
};
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {