summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/i
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-02-19 14:05:32 +0900
committerGitHub <noreply@github.com>2022-02-19 14:05:32 +0900
commit510de87607283d4d49239b1d14026a577299c99e (patch)
treed56933864d6cf07751e2e2a11a373ee752338c80 /packages/backend/src/server/api/endpoints/i
parentupdate deps (diff)
downloadsharkey-510de87607283d4d49239b1d14026a577299c99e.tar.gz
sharkey-510de87607283d4d49239b1d14026a577299c99e.tar.bz2
sharkey-510de87607283d4d49239b1d14026a577299c99e.zip
refactor: use ajv instead of cafy (#8324)
* wip * wip * Update abuse-user-reports.ts * Update files.ts * Update list-remote.ts * Update list.ts * Update show-users.ts * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update update.ts * Update search.ts * Update reactions.ts * Update search.ts * wip * wip * wip * wip * Update update.ts * Update relation.ts * Update available.ts * wip * wip * wip * Update packages/backend/src/server/api/define.ts Co-authored-by: Johann150 <johann.galle@protonmail.com> * Update define.ts * Update define.ts * typo * wip * wip * wip * wip * wip * wip * wip * wip * Update update.ts * wip * Update signup.ts * Update call.ts * minimum for limit * type * remove needless annotation * wip * Update signup.ts * wip * wip * fix * Update create.ts Co-authored-by: Johann150 <johann.galle@protonmail.com>
Diffstat (limited to 'packages/backend/src/server/api/endpoints/i')
-rw-r--r--packages/backend/src/server/api/endpoints/i/2fa/done.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/i/2fa/key-done.ts32
-rw-r--r--packages/backend/src/server/api/endpoints/i/2fa/password-less.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/i/2fa/register-key.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/i/2fa/register.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts17
-rw-r--r--packages/backend/src/server/api/endpoints/i/2fa/unregister.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/i/apps.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/authorized-apps.ts28
-rw-r--r--packages/backend/src/server/api/endpoints/i/change-password.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/delete-account.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/i/export-blocking.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/i/export-following.ts20
-rw-r--r--packages/backend/src/server/api/endpoints/i/export-mute.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/i/export-notes.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/i/export-user-lists.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/i/favorites.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/i/gallery/likes.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/i/gallery/posts.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/i/import-blocking.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/import-following.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/import-muting.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/import-user-lists.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/notifications.ts63
-rw-r--r--packages/backend/src/server/api/endpoints/i/page-likes.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/i/pages.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/i/pin.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts9
-rw-r--r--packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts9
-rw-r--r--packages/backend/src/server/api/endpoints/i/read-announcement.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/regenerate-token.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/get-all.ts16
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/get-detail.ts25
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/get.ts25
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts16
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/keys.ts16
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/remove.ts25
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/scopes.ts9
-rw-r--r--packages/backend/src/server/api/endpoints/i/registry/set.ts26
-rw-r--r--packages/backend/src/server/api/endpoints/i/revoke-token.ts14
-rw-r--r--packages/backend/src/server/api/endpoints/i/signin-history.ts27
-rw-r--r--packages/backend/src/server/api/endpoints/i/unpin.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/i/update-email.ts22
-rw-r--r--packages/backend/src/server/api/endpoints/i/update.ts166
-rw-r--r--packages/backend/src/server/api/endpoints/i/user-group-invites.ts31
46 files changed, 466 insertions, 581 deletions
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/done.ts b/packages/backend/src/server/api/endpoints/i/2fa/done.ts
index 4853908693..8d82ab3886 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/done.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/done.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as speakeasy from 'speakeasy';
import define from '../../../define';
import { UserProfiles } from '@/models/index';
@@ -7,16 +6,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- token: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ token: { type: 'string' },
},
+ required: ['token'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const token = ps.token.replace(/\s/g, '');
const profile = await UserProfiles.findOneOrFail(user.id);
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts b/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts
index 26e9a60886..5052afda97 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import { promisify } from 'util';
import * as cbor from 'cbor';
@@ -14,35 +13,28 @@ import { procedures, hash } from '../../../2fa';
import { publishMainStream } from '@/services/stream';
const cborDecodeFirst = promisify(cbor.decodeFirst) as any;
+const rpIdHashReal = hash(Buffer.from(config.hostname, 'utf-8'));
export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- clientDataJSON: {
- validator: $.str,
- },
- attestationObject: {
- validator: $.str,
- },
- password: {
- validator: $.str,
- },
- challengeId: {
- validator: $.str,
- },
- name: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ clientDataJSON: { type: 'string' },
+ attestationObject: { type: 'string' },
+ password: { type: 'string' },
+ challengeId: { type: 'string' },
+ name: { type: 'string' },
},
+ required: ['clientDataJSON', 'attestationObject', 'password', 'challengeId', 'name'],
} as const;
-const rpIdHashReal = hash(Buffer.from(config.hostname, 'utf-8'));
-
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts b/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts
index 854848a434..2830f8994a 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../../define';
import { UserProfiles } from '@/models/index';
@@ -6,16 +5,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- value: {
- validator: $.boolean,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ value: { type: 'boolean' },
},
+ required: ['value'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
await UserProfiles.update(user.id, {
usePasswordLessLogin: ps.value,
});
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts b/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts
index 057e54c69b..da3ff421a7 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../../define';
import { UserProfiles, AttestationChallenges } from '@/models/index';
@@ -13,16 +12,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- password: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ password: { type: 'string' },
},
+ required: ['password'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/register.ts b/packages/backend/src/server/api/endpoints/i/2fa/register.ts
index c5cfb9dfad..32acc838b7 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/register.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/register.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import * as speakeasy from 'speakeasy';
import * as QRCode from 'qrcode';
@@ -10,16 +9,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- password: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ password: { type: 'string' },
},
+ required: ['password'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts b/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts
index 03e1d0434d..3004ce36a1 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../../define';
import { UserProfiles, UserSecurityKeys, Users } from '@/models/index';
@@ -8,19 +7,19 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- password: {
- validator: $.str,
- },
- credentialId: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ password: { type: 'string' },
+ credentialId: { type: 'string' },
},
+ required: ['password', 'credentialId'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts b/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts
index a19ad6810d..b8e89bac72 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../../define';
import { UserProfiles } from '@/models/index';
@@ -7,16 +6,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- password: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ password: { type: 'string' },
},
+ required: ['password'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/apps.ts b/packages/backend/src/server/api/endpoints/i/apps.ts
index 63999b0981..f45b6745b8 100644
--- a/packages/backend/src/server/api/endpoints/i/apps.ts
+++ b/packages/backend/src/server/api/endpoints/i/apps.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../define';
import { AccessTokens } from '@/models/index';
@@ -6,21 +5,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- sort: {
- validator: $.optional.str.or([
- '+createdAt',
- '-createdAt',
- '+lastUsedAt',
- '-lastUsedAt',
- ]),
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ sort: { type: 'string', enum: ['+createdAt', '-createdAt', '+lastUsedAt', '-lastUsedAt'] },
},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = AccessTokens.createQueryBuilder('token')
.where('token.userId = :userId', { userId: user.id });
diff --git a/packages/backend/src/server/api/endpoints/i/authorized-apps.ts b/packages/backend/src/server/api/endpoints/i/authorized-apps.ts
index 52122b851b..e417f3e81a 100644
--- a/packages/backend/src/server/api/endpoints/i/authorized-apps.ts
+++ b/packages/backend/src/server/api/endpoints/i/authorized-apps.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../define';
import { AccessTokens, Apps } from '@/models/index';
@@ -6,33 +5,26 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- offset: {
- validator: $.optional.num.min(0),
- default: 0,
- },
-
- sort: {
- validator: $.optional.str.or('desc|asc'),
- default: 'desc',
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ offset: { type: 'integer', default: 0 },
+ sort: { type: 'string', enum: ['desc', 'asc'], default: "desc" },
},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
// Get tokens
const tokens = await AccessTokens.find({
where: {
userId: user.id,
},
- take: ps.limit!,
+ take: ps.limit,
skip: ps.offset,
order: {
id: ps.sort == 'asc' ? 1 : -1,
diff --git a/packages/backend/src/server/api/endpoints/i/change-password.ts b/packages/backend/src/server/api/endpoints/i/change-password.ts
index 7b6c137737..eac60ee183 100644
--- a/packages/backend/src/server/api/endpoints/i/change-password.ts
+++ b/packages/backend/src/server/api/endpoints/i/change-password.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../define';
import { UserProfiles } from '@/models/index';
@@ -7,20 +6,19 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- currentPassword: {
- validator: $.str,
- },
-
- newPassword: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ currentPassword: { type: 'string' },
+ newPassword: { type: 'string', minLength: 1 },
},
+ required: ['currentPassword', 'newPassword'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/delete-account.ts b/packages/backend/src/server/api/endpoints/i/delete-account.ts
index e1eee949fc..6f689c0b4e 100644
--- a/packages/backend/src/server/api/endpoints/i/delete-account.ts
+++ b/packages/backend/src/server/api/endpoints/i/delete-account.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import define from '../../define';
import { UserProfiles, Users } from '@/models/index';
@@ -10,16 +9,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- password: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ password: { type: 'string' },
},
+ required: ['password'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
const userDetailed = await Users.findOneOrFail(user.id);
if (userDetailed.isDeleted) {
diff --git a/packages/backend/src/server/api/endpoints/i/export-blocking.ts b/packages/backend/src/server/api/endpoints/i/export-blocking.ts
index 44d8a1cb38..afa6f2fc8e 100644
--- a/packages/backend/src/server/api/endpoints/i/export-blocking.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-blocking.ts
@@ -11,7 +11,13 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
createExportBlockingJob(user);
});
diff --git a/packages/backend/src/server/api/endpoints/i/export-following.ts b/packages/backend/src/server/api/endpoints/i/export-following.ts
index 5d1617d57b..4dd8cda398 100644
--- a/packages/backend/src/server/api/endpoints/i/export-following.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-following.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../define';
import { createExportFollowingJob } from '@/queue/index';
import ms from 'ms';
@@ -10,19 +9,18 @@ export const meta = {
duration: ms('1hour'),
max: 1,
},
- params: {
- excludeMuting: {
- validator: $.optional.bool,
- default: false,
- },
- excludeInactive: {
- validator: $.optional.bool,
- default: false,
- },
+} as const;
+
+const paramDef = {
+ type: 'object',
+ properties: {
+ excludeMuting: { type: 'boolean', default: false },
+ excludeInactive: { type: 'boolean', default: false },
},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
createExportFollowingJob(user, ps.excludeMuting, ps.excludeInactive);
});
diff --git a/packages/backend/src/server/api/endpoints/i/export-mute.ts b/packages/backend/src/server/api/endpoints/i/export-mute.ts
index 27ce8f0b29..ca8a7b997c 100644
--- a/packages/backend/src/server/api/endpoints/i/export-mute.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-mute.ts
@@ -11,7 +11,13 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
createExportMuteJob(user);
});
diff --git a/packages/backend/src/server/api/endpoints/i/export-notes.ts b/packages/backend/src/server/api/endpoints/i/export-notes.ts
index 25b1849e80..fc155d9d0f 100644
--- a/packages/backend/src/server/api/endpoints/i/export-notes.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-notes.ts
@@ -11,7 +11,13 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
createExportNotesJob(user);
});
diff --git a/packages/backend/src/server/api/endpoints/i/export-user-lists.ts b/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
index d28b699c5a..22cbf973f8 100644
--- a/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
@@ -11,7 +11,13 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
createExportUserListsJob(user);
});
diff --git a/packages/backend/src/server/api/endpoints/i/favorites.ts b/packages/backend/src/server/api/endpoints/i/favorites.ts
index 92c767876b..45f5d99cce 100644
--- a/packages/backend/src/server/api/endpoints/i/favorites.ts
+++ b/packages/backend/src/server/api/endpoints/i/favorites.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { NoteFavorites } from '@/models/index';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -11,21 +9,6 @@ export const meta = {
kind: 'read:favorites',
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
- },
-
res: {
type: 'array',
optional: false, nullable: false,
@@ -37,14 +20,24 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
+ },
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = makePaginationQuery(NoteFavorites.createQueryBuilder('favorite'), ps.sinceId, ps.untilId)
.andWhere(`favorite.userId = :meId`, { meId: user.id })
.leftJoinAndSelect('favorite.note', 'note');
const favorites = await query
- .take(ps.limit!)
+ .take(ps.limit)
.getMany();
return await NoteFavorites.packMany(favorites, user);
diff --git a/packages/backend/src/server/api/endpoints/i/gallery/likes.ts b/packages/backend/src/server/api/endpoints/i/gallery/likes.ts
index f1c5763593..dc862a6b05 100644
--- a/packages/backend/src/server/api/endpoints/i/gallery/likes.ts
+++ b/packages/backend/src/server/api/endpoints/i/gallery/likes.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { GalleryLikes } from '@/models/index';
import { makePaginationQuery } from '../../../common/make-pagination-query';
@@ -11,21 +9,6 @@ export const meta = {
kind: 'read:gallery-likes',
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
- },
-
res: {
type: 'object',
optional: false, nullable: false,
@@ -44,14 +27,24 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
+ },
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = makePaginationQuery(GalleryLikes.createQueryBuilder('like'), ps.sinceId, ps.untilId)
.andWhere(`like.userId = :meId`, { meId: user.id })
.leftJoinAndSelect('like.post', 'post');
const likes = await query
- .take(ps.limit!)
+ .take(ps.limit)
.getMany();
return await GalleryLikes.packMany(likes, user);
diff --git a/packages/backend/src/server/api/endpoints/i/gallery/posts.ts b/packages/backend/src/server/api/endpoints/i/gallery/posts.ts
index d46d42f633..fbab8795ca 100644
--- a/packages/backend/src/server/api/endpoints/i/gallery/posts.ts
+++ b/packages/backend/src/server/api/endpoints/i/gallery/posts.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { GalleryPosts } from '@/models/index';
import { makePaginationQuery } from '../../../common/make-pagination-query';
@@ -11,21 +9,6 @@ export const meta = {
kind: 'read:gallery',
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
- },
-
res: {
type: 'array',
optional: false, nullable: false,
@@ -37,13 +20,23 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
+ },
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = makePaginationQuery(GalleryPosts.createQueryBuilder('post'), ps.sinceId, ps.untilId)
.andWhere(`post.userId = :meId`, { meId: user.id });
const posts = await query
- .take(ps.limit!)
+ .take(ps.limit)
.getMany();
return await GalleryPosts.packMany(posts, user);
diff --git a/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts b/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts
index 4e1a4d3db9..2b31b89ff1 100644
--- a/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts
+++ b/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts
@@ -8,9 +8,6 @@ export const meta = {
kind: 'read:account',
- params: {
- },
-
res: {
type: 'object',
optional: false, nullable: false,
@@ -23,8 +20,14 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
return {
count: await MutedNotes.count({
userId: user.id,
diff --git a/packages/backend/src/server/api/endpoints/i/import-blocking.ts b/packages/backend/src/server/api/endpoints/i/import-blocking.ts
index acc5797420..b90bfb1402 100644
--- a/packages/backend/src/server/api/endpoints/i/import-blocking.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-blocking.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { createImportBlockingJob } from '@/queue/index';
import ms from 'ms';
@@ -15,12 +13,6 @@ export const meta = {
max: 1,
},
- params: {
- fileId: {
- validator: $.type(ID),
- },
- },
-
errors: {
noSuchFile: {
message: 'No such file.',
@@ -48,8 +40,16 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ fileId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['fileId'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const file = await DriveFiles.findOne(ps.fileId);
if (file == null) throw new ApiError(meta.errors.noSuchFile);
diff --git a/packages/backend/src/server/api/endpoints/i/import-following.ts b/packages/backend/src/server/api/endpoints/i/import-following.ts
index 35006746fb..75388502a5 100644
--- a/packages/backend/src/server/api/endpoints/i/import-following.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-following.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { createImportFollowingJob } from '@/queue/index';
import ms from 'ms';
@@ -14,12 +12,6 @@ export const meta = {
max: 1,
},
- params: {
- fileId: {
- validator: $.type(ID),
- },
- },
-
errors: {
noSuchFile: {
message: 'No such file.',
@@ -47,8 +39,16 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ fileId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['fileId'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const file = await DriveFiles.findOne(ps.fileId);
if (file == null) throw new ApiError(meta.errors.noSuchFile);
diff --git a/packages/backend/src/server/api/endpoints/i/import-muting.ts b/packages/backend/src/server/api/endpoints/i/import-muting.ts
index 7bbb2e008e..e1c3df33e1 100644
--- a/packages/backend/src/server/api/endpoints/i/import-muting.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-muting.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { createImportMutingJob } from '@/queue/index';
import ms from 'ms';
@@ -15,12 +13,6 @@ export const meta = {
max: 1,
},
- params: {
- fileId: {
- validator: $.type(ID),
- },
- },
-
errors: {
noSuchFile: {
message: 'No such file.',
@@ -48,8 +40,16 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ fileId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['fileId'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const file = await DriveFiles.findOne(ps.fileId);
if (file == null) throw new ApiError(meta.errors.noSuchFile);
diff --git a/packages/backend/src/server/api/endpoints/i/import-user-lists.ts b/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
index 759d41b6cd..eb1302a98c 100644
--- a/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { createImportUserListsJob } from '@/queue/index';
import ms from 'ms';
@@ -14,12 +12,6 @@ export const meta = {
max: 1,
},
- params: {
- fileId: {
- validator: $.type(ID),
- },
- },
-
errors: {
noSuchFile: {
message: 'No such file.',
@@ -47,8 +39,16 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ fileId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['fileId'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const file = await DriveFiles.findOne(ps.fileId);
if (file == null) throw new ApiError(meta.errors.noSuchFile);
diff --git a/packages/backend/src/server/api/endpoints/i/notifications.ts b/packages/backend/src/server/api/endpoints/i/notifications.ts
index 59efd32bb2..bb1d6a49b3 100644
--- a/packages/backend/src/server/api/endpoints/i/notifications.ts
+++ b/packages/backend/src/server/api/endpoints/i/notifications.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import { readNotification } from '../../common/read-notification';
import define from '../../define';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -16,44 +14,6 @@ export const meta = {
kind: 'read:notifications',
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
-
- following: {
- validator: $.optional.bool,
- default: false,
- },
-
- unreadOnly: {
- validator: $.optional.bool,
- default: false,
- },
-
- markAsRead: {
- validator: $.optional.bool,
- default: true,
- },
-
- includeTypes: {
- validator: $.optional.arr($.str.or(notificationTypes as unknown as string[])),
- },
-
- excludeTypes: {
- validator: $.optional.arr($.str.or(notificationTypes as unknown as string[])),
- },
- },
-
res: {
type: 'array',
optional: false, nullable: false,
@@ -65,8 +25,27 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
+ following: { type: 'boolean', default: false },
+ unreadOnly: { type: 'boolean', default: false },
+ markAsRead: { type: 'boolean', default: true },
+ includeTypes: { type: 'array', items: {
+ type: 'string', enum: notificationTypes,
+ } },
+ excludeTypes: { type: 'array', items: {
+ type: 'string', enum: notificationTypes,
+ } },
+ },
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
// includeTypes が空の場合はクエリしない
if (ps.includeTypes && ps.includeTypes.length === 0) {
return [];
@@ -125,7 +104,7 @@ export default define(meta, async (ps, user) => {
query.andWhere(`notification.isRead = false`);
}
- const notifications = await query.take(ps.limit!).getMany();
+ const notifications = await query.take(ps.limit).getMany();
// Mark all as read
if (notifications.length > 0 && ps.markAsRead) {
diff --git a/packages/backend/src/server/api/endpoints/i/page-likes.ts b/packages/backend/src/server/api/endpoints/i/page-likes.ts
index 59239c7446..e66bc616c2 100644
--- a/packages/backend/src/server/api/endpoints/i/page-likes.ts
+++ b/packages/backend/src/server/api/endpoints/i/page-likes.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { PageLikes } from '@/models/index';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -11,21 +9,6 @@ export const meta = {
kind: 'read:page-likes',
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
- },
-
res: {
type: 'object',
optional: false, nullable: false,
@@ -44,14 +27,24 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
+ },
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = makePaginationQuery(PageLikes.createQueryBuilder('like'), ps.sinceId, ps.untilId)
.andWhere(`like.userId = :meId`, { meId: user.id })
.leftJoinAndSelect('like.page', 'page');
const likes = await query
- .take(ps.limit!)
+ .take(ps.limit)
.getMany();
return await PageLikes.packMany(likes, user);
diff --git a/packages/backend/src/server/api/endpoints/i/pages.ts b/packages/backend/src/server/api/endpoints/i/pages.ts
index bef775d063..dbc58021b9 100644
--- a/packages/backend/src/server/api/endpoints/i/pages.ts
+++ b/packages/backend/src/server/api/endpoints/i/pages.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Pages } from '@/models/index';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -11,21 +9,6 @@ export const meta = {
kind: 'read:pages',
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
- },
-
res: {
type: 'array',
optional: false, nullable: false,
@@ -37,13 +20,23 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
+ },
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = makePaginationQuery(Pages.createQueryBuilder('page'), ps.sinceId, ps.untilId)
.andWhere(`page.userId = :meId`, { meId: user.id });
const pages = await query
- .take(ps.limit!)
+ .take(ps.limit)
.getMany();
return await Pages.packMany(pages);
diff --git a/packages/backend/src/server/api/endpoints/i/pin.ts b/packages/backend/src/server/api/endpoints/i/pin.ts
index a940d1b99b..a09618ebe8 100644
--- a/packages/backend/src/server/api/endpoints/i/pin.ts
+++ b/packages/backend/src/server/api/endpoints/i/pin.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import { addPinned } from '@/services/i/pin';
import define from '../../define';
import { ApiError } from '../../error';
@@ -12,12 +10,6 @@ export const meta = {
kind: 'write:account',
- params: {
- noteId: {
- validator: $.type(ID),
- },
- },
-
errors: {
noSuchNote: {
message: 'No such note.',
@@ -45,8 +37,16 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ noteId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['noteId'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
await addPinned(user, ps.noteId).catch(e => {
if (e.id === '70c4e51f-5bea-449c-a030-53bee3cce202') throw new ApiError(meta.errors.noSuchNote);
if (e.id === '15a018eb-58e5-4da1-93be-330fcc5e4e1a') throw new ApiError(meta.errors.pinLimitExceeded);
diff --git a/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts b/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts
index 4e4fb3840f..b0185a3e37 100644
--- a/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts
+++ b/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts
@@ -8,13 +8,16 @@ export const meta = {
requireCredential: true,
kind: 'write:account',
+} as const;
- params: {
- },
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
// Update documents
await MessagingMessages.update({
recipientId: user.id,
diff --git a/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts b/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts
index 99f17ddfc9..45638c2579 100644
--- a/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts
+++ b/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts
@@ -8,13 +8,16 @@ export const meta = {
requireCredential: true,
kind: 'write:account',
+} as const;
- params: {
- },
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
// Remove documents
await NoteUnreads.delete({
userId: user.id,
diff --git a/packages/backend/src/server/api/endpoints/i/read-announcement.ts b/packages/backend/src/server/api/endpoints/i/read-announcement.ts
index e9bb66264b..f3cedddb35 100644
--- a/packages/backend/src/server/api/endpoints/i/read-announcement.ts
+++ b/packages/backend/src/server/api/endpoints/i/read-announcement.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { genId } from '@/misc/gen-id';
@@ -13,12 +11,6 @@ export const meta = {
kind: 'write:account',
- params: {
- announcementId: {
- validator: $.type(ID),
- },
- },
-
errors: {
noSuchAnnouncement: {
message: 'No such announcement.',
@@ -28,8 +20,16 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ announcementId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['announcementId'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
// Check if announcement exists
const announcement = await Announcements.findOne(ps.announcementId);
diff --git a/packages/backend/src/server/api/endpoints/i/regenerate-token.ts b/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
index a20719363b..71a3ea08af 100644
--- a/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
+++ b/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import * as bcrypt from 'bcryptjs';
import { publishMainStream, publishUserEvent } from '@/services/stream';
import generateUserToken from '../../common/generate-native-user-token';
@@ -9,16 +8,18 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- password: {
- validator: $.str,
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ password: { type: 'string' },
},
+ required: ['password'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/registry/get-all.ts b/packages/backend/src/server/api/endpoints/i/registry/get-all.ts
index 2941b441e2..0429cd283a 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/get-all.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/get-all.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../../define';
import { RegistryItems } from '@/models/index';
@@ -6,17 +5,20 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- scope: {
- validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)),
- default: [],
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ scope: { type: 'array', default: [], items: {
+ type: 'string', pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1),
+ } },
},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.where('item.domain IS NULL')
.andWhere('item.userId = :userId', { userId: user.id })
diff --git a/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts b/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts
index 51371353c9..194a922718 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../../define';
import { RegistryItems } from '@/models/index';
import { ApiError } from '../../../error';
@@ -8,17 +7,6 @@ export const meta = {
secure: true,
- params: {
- key: {
- validator: $.str,
- },
-
- scope: {
- validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)),
- default: [],
- },
- },
-
errors: {
noSuchKey: {
message: 'No such key.',
@@ -28,8 +16,19 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ key: { type: 'string' },
+ scope: { type: 'array', default: [], items: {
+ type: 'string', pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1),
+ } },
+ },
+ required: ['key'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.where('item.domain IS NULL')
.andWhere('item.userId = :userId', { userId: user.id })
diff --git a/packages/backend/src/server/api/endpoints/i/registry/get.ts b/packages/backend/src/server/api/endpoints/i/registry/get.ts
index ac617defb0..7d413e3528 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/get.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/get.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../../define';
import { RegistryItems } from '@/models/index';
import { ApiError } from '../../../error';
@@ -8,17 +7,6 @@ export const meta = {
secure: true,
- params: {
- key: {
- validator: $.str,
- },
-
- scope: {
- validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)),
- default: [],
- },
- },
-
errors: {
noSuchKey: {
message: 'No such key.',
@@ -28,8 +16,19 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ key: { type: 'string' },
+ scope: { type: 'array', default: [], items: {
+ type: 'string', pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1),
+ } },
+ },
+ required: ['key'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.where('item.domain IS NULL')
.andWhere('item.userId = :userId', { userId: user.id })
diff --git a/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts b/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts
index 0445922188..52e0d6fac5 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../../define';
import { RegistryItems } from '@/models/index';
@@ -6,17 +5,20 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- scope: {
- validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)),
- default: [],
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ scope: { type: 'array', default: [], items: {
+ type: 'string', pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1),
+ } },
},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.where('item.domain IS NULL')
.andWhere('item.userId = :userId', { userId: user.id })
diff --git a/packages/backend/src/server/api/endpoints/i/registry/keys.ts b/packages/backend/src/server/api/endpoints/i/registry/keys.ts
index a3c9d0e5ee..c494ed8f5c 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/keys.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/keys.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../../define';
import { RegistryItems } from '@/models/index';
@@ -6,17 +5,20 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- scope: {
- validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)),
- default: [],
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ scope: { type: 'array', default: [], items: {
+ type: 'string', pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1),
+ } },
},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.select('item.key')
.where('item.domain IS NULL')
diff --git a/packages/backend/src/server/api/endpoints/i/registry/remove.ts b/packages/backend/src/server/api/endpoints/i/registry/remove.ts
index 08185f224b..5bc55bd297 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/remove.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/remove.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import define from '../../../define';
import { RegistryItems } from '@/models/index';
import { ApiError } from '../../../error';
@@ -8,17 +7,6 @@ export const meta = {
secure: true,
- params: {
- key: {
- validator: $.str,
- },
-
- scope: {
- validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)),
- default: [],
- },
- },
-
errors: {
noSuchKey: {
message: 'No such key.',
@@ -28,8 +16,19 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ key: { type: 'string' },
+ scope: { type: 'array', default: [], items: {
+ type: 'string', pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1),
+ } },
+ },
+ required: ['key'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.where('item.domain IS NULL')
.andWhere('item.userId = :userId', { userId: user.id })
diff --git a/packages/backend/src/server/api/endpoints/i/registry/scopes.ts b/packages/backend/src/server/api/endpoints/i/registry/scopes.ts
index 9de68ac6e8..e04d123a1f 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/scopes.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/scopes.ts
@@ -5,13 +5,16 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- },
+const paramDef = {
+ type: 'object',
+ properties: {},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.select('item.scope')
.where('item.domain IS NULL')
diff --git a/packages/backend/src/server/api/endpoints/i/registry/set.ts b/packages/backend/src/server/api/endpoints/i/registry/set.ts
index 27884046b4..c78f4383be 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/set.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/set.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import { publishMainStream } from '@/services/stream';
import define from '../../../define';
import { RegistryItems } from '@/models/index';
@@ -8,25 +7,22 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- key: {
- validator: $.str.min(1),
- },
-
- value: {
- validator: $.nullable.any,
- },
-
- scope: {
- validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)),
- default: [],
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ key: { type: 'string', minLength: 1 },
+ value: {},
+ scope: { type: 'array', default: [], items: {
+ type: 'string', pattern: /^[a-zA-Z0-9_]+$/.toString().slice(1, -1),
+ } },
},
+ required: ['key', 'value'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = RegistryItems.createQueryBuilder('item')
.where('item.domain IS NULL')
.andWhere('item.userId = :userId', { userId: user.id })
diff --git a/packages/backend/src/server/api/endpoints/i/revoke-token.ts b/packages/backend/src/server/api/endpoints/i/revoke-token.ts
index 51721c5b58..14800346c1 100644
--- a/packages/backend/src/server/api/endpoints/i/revoke-token.ts
+++ b/packages/backend/src/server/api/endpoints/i/revoke-token.ts
@@ -1,23 +1,23 @@
-import $ from 'cafy';
import define from '../../define';
import { AccessTokens } from '@/models/index';
-import { ID } from '@/misc/cafy-id';
import { publishUserEvent } from '@/services/stream';
export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- tokenId: {
- validator: $.type(ID),
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ tokenId: { type: 'string', format: 'misskey:id' },
},
+ required: ['tokenId'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const token = await AccessTokens.findOne(ps.tokenId);
if (token) {
diff --git a/packages/backend/src/server/api/endpoints/i/signin-history.ts b/packages/backend/src/server/api/endpoints/i/signin-history.ts
index 796e2ec309..468972c239 100644
--- a/packages/backend/src/server/api/endpoints/i/signin-history.ts
+++ b/packages/backend/src/server/api/endpoints/i/signin-history.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { Signins } from '@/models/index';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -8,29 +6,24 @@ export const meta = {
requireCredential: true,
secure: true,
+} as const;
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
},
+ required: [],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = makePaginationQuery(Signins.createQueryBuilder('signin'), ps.sinceId, ps.untilId)
.andWhere(`signin.userId = :meId`, { meId: user.id });
- const history = await query.take(ps.limit!).getMany();
+ const history = await query.take(ps.limit).getMany();
return await Promise.all(history.map(record => Signins.pack(record)));
});
diff --git a/packages/backend/src/server/api/endpoints/i/unpin.ts b/packages/backend/src/server/api/endpoints/i/unpin.ts
index 9c82b74960..895bfd0c28 100644
--- a/packages/backend/src/server/api/endpoints/i/unpin.ts
+++ b/packages/backend/src/server/api/endpoints/i/unpin.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import { removePinned } from '@/services/i/pin';
import define from '../../define';
import { ApiError } from '../../error';
@@ -12,12 +10,6 @@ export const meta = {
kind: 'write:account',
- params: {
- noteId: {
- validator: $.type(ID),
- },
- },
-
errors: {
noSuchNote: {
message: 'No such note.',
@@ -33,8 +25,16 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ noteId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['noteId'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
await removePinned(user, ps.noteId).catch(e => {
if (e.id === 'b302d4cf-c050-400a-bbb3-be208681f40c') throw new ApiError(meta.errors.noSuchNote);
throw e;
diff --git a/packages/backend/src/server/api/endpoints/i/update-email.ts b/packages/backend/src/server/api/endpoints/i/update-email.ts
index b4479aa50d..1450eabc2a 100644
--- a/packages/backend/src/server/api/endpoints/i/update-email.ts
+++ b/packages/backend/src/server/api/endpoints/i/update-email.ts
@@ -1,4 +1,3 @@
-import $ from 'cafy';
import { publishMainStream } from '@/services/stream';
import define from '../../define';
import rndstr from 'rndstr';
@@ -20,16 +19,6 @@ export const meta = {
max: 3,
},
- params: {
- password: {
- validator: $.str,
- },
-
- email: {
- validator: $.optional.nullable.str,
- },
- },
-
errors: {
incorrectPassword: {
message: 'Incorrect password.',
@@ -45,8 +34,17 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ password: { type: 'string' },
+ email: { type: 'string', nullable: true },
+ },
+ required: ['password'],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const profile = await UserProfiles.findOneOrFail(user.id);
// Compare password
diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts
index aec7bbd2e1..0a5188609b 100644
--- a/packages/backend/src/server/api/endpoints/i/update.ts
+++ b/packages/backend/src/server/api/endpoints/i/update.ts
@@ -1,7 +1,5 @@
const RE2 = require('re2');
-import $ from 'cafy';
import * as mfm from 'mfm-js';
-import { ID } from '@/misc/cafy-id';
import { publishMainStream, publishUserEvent } from '@/services/stream';
import acceptAllFollowRequests from '@/services/following/requests/accept-all';
import { publishToFollowers } from '@/services/i/update';
@@ -24,116 +22,6 @@ export const meta = {
kind: 'write:account',
- params: {
- name: {
- validator: $.optional.nullable.use(Users.validateName),
- },
-
- description: {
- validator: $.optional.nullable.use(Users.validateDescription),
- },
-
- lang: {
- validator: $.optional.nullable.str.or(Object.keys(langmap)),
- },
-
- location: {
- validator: $.optional.nullable.use(Users.validateLocation),
- },
-
- birthday: {
- validator: $.optional.nullable.use(Users.validateBirthday),
- },
-
- avatarId: {
- validator: $.optional.nullable.type(ID),
- },
-
- bannerId: {
- validator: $.optional.nullable.type(ID),
- },
-
- fields: {
- validator: $.optional.arr($.object()).range(1, 4),
- },
-
- isLocked: {
- validator: $.optional.bool,
- },
-
- isExplorable: {
- validator: $.optional.bool,
- },
-
- hideOnlineStatus: {
- validator: $.optional.bool,
- },
-
- publicReactions: {
- validator: $.optional.bool,
- },
-
- ffVisibility: {
- validator: $.optional.str,
- },
-
- carefulBot: {
- validator: $.optional.bool,
- },
-
- autoAcceptFollowed: {
- validator: $.optional.bool,
- },
-
- noCrawle: {
- validator: $.optional.bool,
- },
-
- isBot: {
- validator: $.optional.bool,
- },
-
- isCat: {
- validator: $.optional.bool,
- },
-
- showTimelineReplies: {
- validator: $.optional.bool,
- },
-
- injectFeaturedNote: {
- validator: $.optional.bool,
- },
-
- receiveAnnouncementEmail: {
- validator: $.optional.bool,
- },
-
- alwaysMarkNsfw: {
- validator: $.optional.bool,
- },
-
- pinnedPageId: {
- validator: $.optional.nullable.type(ID),
- },
-
- mutedWords: {
- validator: $.optional.arr($.either($.arr($.str.min(1)).min(1), $.str)),
- },
-
- mutedInstances: {
- validator: $.optional.arr($.str),
- },
-
- mutingNotificationTypes: {
- validator: $.optional.arr($.str.or(notificationTypes as unknown as string[])),
- },
-
- emailNotificationTypes: {
- validator: $.optional.arr($.str),
- },
- },
-
errors: {
noSuchAvatar: {
message: 'No such avatar file.',
@@ -179,8 +67,60 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ name: { ...Users.nameSchema, nullable: true },
+ description: { ...Users.descriptionSchema, nullable: true },
+ location: { ...Users.locationSchema, nullable: true },
+ birthday: { ...Users.birthdaySchema, nullable: true },
+ lang: { type: 'string', enum: Object.keys(langmap), nullable: true },
+ avatarId: { type: 'string', format: 'misskey:id', nullable: true },
+ bannerId: { type: 'string', format: 'misskey:id', nullable: true },
+ fields: { type: 'array',
+ minItems: 0,
+ maxItems: 8,
+ items: {
+ type: 'object',
+ properties: {
+ name: { type: 'string' },
+ value: { type: 'string' },
+ },
+ required: ['name', 'value'],
+ },
+ },
+ isLocked: { type: 'boolean' },
+ isExplorable: { type: 'boolean' },
+ hideOnlineStatus: { type: 'boolean' },
+ publicReactions: { type: 'boolean' },
+ carefulBot: { type: 'boolean' },
+ autoAcceptFollowed: { type: 'boolean' },
+ noCrawle: { type: 'boolean' },
+ isBot: { type: 'boolean' },
+ isCat: { type: 'boolean' },
+ showTimelineReplies: { type: 'boolean' },
+ injectFeaturedNote: { type: 'boolean' },
+ receiveAnnouncementEmail: { type: 'boolean' },
+ alwaysMarkNsfw: { type: 'boolean' },
+ ffVisibility: { type: 'string', enum: ['public', 'followers', 'private'] },
+ pinnedPageId: { type: 'array', items: {
+ type: 'string', format: 'misskey:id',
+ } },
+ mutedWords: { type: 'array' },
+ mutedInstances: { type: 'array', items: {
+ type: 'string',
+ } },
+ mutingNotificationTypes: { type: 'array', items: {
+ type: 'string', enum: notificationTypes,
+ } },
+ emailNotificationTypes: { type: 'array', items: {
+ type: 'string',
+ } },
+ },
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, _user, token) => {
+export default define(meta, paramDef, async (ps, _user, token) => {
const user = await Users.findOneOrFail(_user.id);
const isSecure = token == null;
diff --git a/packages/backend/src/server/api/endpoints/i/user-group-invites.ts b/packages/backend/src/server/api/endpoints/i/user-group-invites.ts
index 76a3131e6d..6c38240913 100644
--- a/packages/backend/src/server/api/endpoints/i/user-group-invites.ts
+++ b/packages/backend/src/server/api/endpoints/i/user-group-invites.ts
@@ -1,5 +1,3 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { UserGroupInvitations } from '@/models/index';
import { makePaginationQuery } from '../../common/make-pagination-query';
@@ -11,21 +9,6 @@ export const meta = {
kind: 'read:user-groups',
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10,
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
- },
-
res: {
type: 'array',
optional: false, nullable: false,
@@ -48,14 +31,24 @@ export const meta = {
},
} as const;
+const paramDef = {
+ type: 'object',
+ properties: {
+ limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
+ sinceId: { type: 'string', format: 'misskey:id' },
+ untilId: { type: 'string', format: 'misskey:id' },
+ },
+ required: [],
+} as const;
+
// eslint-disable-next-line import/no-default-export
-export default define(meta, async (ps, user) => {
+export default define(meta, paramDef, async (ps, user) => {
const query = makePaginationQuery(UserGroupInvitations.createQueryBuilder('invitation'), ps.sinceId, ps.untilId)
.andWhere(`invitation.userId = :meId`, { meId: user.id })
.leftJoinAndSelect('invitation.userGroup', 'user_group');
const invitations = await query
- .take(ps.limit!)
+ .take(ps.limit)
.getMany();
return await UserGroupInvitations.packMany(invitations);