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>
This commit is contained in:
syuilo
2022-02-19 14:05:32 +09:00
committed by GitHub
parent 59785ea04c
commit 510de87607
320 changed files with 4395 additions and 5939 deletions

View File

@@ -1,5 +1,3 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { DriveFiles, Notes } from '@/models/index';
@@ -11,12 +9,6 @@ export const meta = {
kind: 'read:drive',
params: {
fileId: {
validator: $.type(ID),
},
},
res: {
type: 'array',
optional: false, nullable: false,
@@ -36,8 +28,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) => {
// Fetch file
const file = await DriveFiles.findOne({
id: ps.fileId,

View File

@@ -1,4 +1,3 @@
import $ from 'cafy';
import define from '../../../define';
import { DriveFiles } from '@/models/index';
@@ -9,20 +8,22 @@ export const meta = {
kind: 'read:drive',
params: {
md5: {
validator: $.str,
},
},
res: {
type: 'boolean',
optional: false, nullable: false,
},
} as const;
const paramDef = {
type: 'object',
properties: {
md5: { type: 'string' },
},
required: ['md5'],
} 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({
md5: ps.md5,
userId: user.id,

View File

@@ -1,6 +1,4 @@
import ms from 'ms';
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import { addFile } from '@/services/drive/add-file';
import define from '../../../define';
import { apiLogger } from '../../../logger';
@@ -22,33 +20,6 @@ export const meta = {
kind: 'write:drive',
params: {
folderId: {
validator: $.optional.nullable.type(ID),
default: null,
},
name: {
validator: $.optional.nullable.str,
default: null,
},
comment: {
validator: $.optional.nullable.str.max(DB_MAX_IMAGE_COMMENT_LENGTH),
default: null,
},
isSensitive: {
validator: $.optional.bool,
default: false,
},
force: {
validator: $.optional.bool,
default: false,
},
},
res: {
type: 'object',
optional: false, nullable: false,
@@ -64,8 +35,20 @@ export const meta = {
},
} as const;
const paramDef = {
type: 'object',
properties: {
folderId: { type: 'string', format: 'misskey:id', nullable: true, default: null },
name: { type: 'string', nullable: true, default: null },
comment: { type: 'string', nullable: true, maxLength: DB_MAX_IMAGE_COMMENT_LENGTH, default: null },
isSensitive: { type: 'boolean', default: false },
force: { type: 'boolean', default: false },
},
required: [],
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user, _, file, cleanup) => {
export default define(meta, paramDef, async (ps, user, _, file, cleanup) => {
// Get 'name' parameter
let name = ps.name || file.originalname;
if (name !== undefined && name !== null) {

View File

@@ -1,5 +1,3 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import { deleteFile } from '@/services/drive/delete-file';
import { publishDriveStream } from '@/services/stream';
import define from '../../../define';
@@ -13,12 +11,6 @@ export const meta = {
kind: 'write:drive',
params: {
fileId: {
validator: $.type(ID),
},
},
errors: {
noSuchFile: {
message: 'No such file.',
@@ -34,8 +26,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) {

View File

@@ -1,4 +1,3 @@
import $ from 'cafy';
import define from '../../../define';
import { DriveFiles } from '@/models/index';
@@ -9,12 +8,6 @@ export const meta = {
kind: 'read:drive',
params: {
md5: {
validator: $.str,
},
},
res: {
type: 'array',
optional: false, nullable: false,
@@ -26,8 +19,16 @@ export const meta = {
},
} as const;
const paramDef = {
type: 'object',
properties: {
md5: { type: 'string' },
},
required: ['md5'],
} 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 files = await DriveFiles.find({
md5: ps.md5,
userId: user.id,

View File

@@ -1,5 +1,3 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { DriveFiles } from '@/models/index';
@@ -10,17 +8,6 @@ export const meta = {
kind: 'read:drive',
params: {
name: {
validator: $.str,
},
folderId: {
validator: $.optional.nullable.type(ID),
default: null,
},
},
res: {
type: 'array',
optional: false, nullable: false,
@@ -32,8 +19,17 @@ export const meta = {
},
} as const;
const paramDef = {
type: 'object',
properties: {
name: { type: 'string' },
folderId: { type: 'string', format: 'misskey:id', nullable: true, default: null },
},
required: ['name'],
} 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 files = await DriveFiles.find({
name: ps.name,
userId: user.id,

View File

@@ -1,5 +1,3 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { DriveFile } from '@/models/entities/drive-file';
@@ -12,16 +10,6 @@ export const meta = {
kind: 'read:drive',
params: {
fileId: {
validator: $.optional.type(ID),
},
url: {
validator: $.optional.str,
},
},
res: {
type: 'object',
optional: false, nullable: false,
@@ -49,8 +37,17 @@ export const meta = {
},
} as const;
const paramDef = {
type: 'object',
properties: {
fileId: { type: 'string', format: 'misskey:id' },
url: { type: 'string' },
},
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) => {
let file: DriveFile | undefined;
if (ps.fileId) {

View File

@@ -1,5 +1,3 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import { publishDriveStream } from '@/services/stream';
import define from '../../../define';
import { ApiError } from '../../../error';
@@ -13,33 +11,13 @@ export const meta = {
kind: 'write:drive',
params: {
fileId: {
validator: $.type(ID),
},
folderId: {
validator: $.optional.nullable.type(ID),
default: undefined as any,
},
name: {
validator: $.optional.str.pipe(DriveFiles.validateFileName),
default: undefined as any,
},
isSensitive: {
validator: $.optional.bool,
default: undefined as any,
},
comment: {
validator: $.optional.nullable.str.max(DB_MAX_IMAGE_COMMENT_LENGTH),
default: undefined as any,
},
},
errors: {
invalidFileName: {
message: 'Invalid file name.',
code: 'INVALID_FILE_NAME',
id: '395e7156-f9f0-475e-af89-53c3c23080c2',
},
noSuchFile: {
message: 'No such file.',
code: 'NO_SUCH_FILE',
@@ -66,8 +44,20 @@ export const meta = {
},
} as const;
const paramDef = {
type: 'object',
properties: {
fileId: { type: 'string', format: 'misskey:id' },
folderId: { type: 'string', format: 'misskey:id', nullable: true },
name: { type: 'string' },
isSensitive: { type: 'boolean' },
comment: { type: 'string', nullable: true, maxLength: 512 },
},
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) {
@@ -79,6 +69,9 @@ export default define(meta, async (ps, user) => {
}
if (ps.name) file.name = ps.name;
if (!DriveFiles.validateFileName(file.name)) {
throw new ApiError(meta.errors.invalidFileName);
}
if (ps.comment !== undefined) file.comment = ps.comment;

View File

@@ -1,5 +1,3 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import ms from 'ms';
import { uploadFromUrl } from '@/services/drive/upload-from-url';
import define from '../../../define';
@@ -18,42 +16,23 @@ export const meta = {
requireCredential: true,
kind: 'write:drive',
} as const;
params: {
url: {
// TODO: Validate this url
validator: $.str,
},
folderId: {
validator: $.optional.nullable.type(ID),
default: null,
},
isSensitive: {
validator: $.optional.bool,
default: false,
},
comment: {
validator: $.optional.nullable.str.max(DB_MAX_IMAGE_COMMENT_LENGTH),
default: null,
},
marker: {
validator: $.optional.nullable.str,
default: null,
},
force: {
validator: $.optional.bool,
default: false,
},
const paramDef = {
type: 'object',
properties: {
url: { type: 'string' },
folderId: { type: 'string', format: 'misskey:id', nullable: true, default: null },
isSensitive: { type: 'boolean', default: false },
comment: { type: 'string', nullable: true, maxLength: 512, default: null },
marker: { type: 'string', nullable: true, default: null },
force: { type: 'boolean', default: false },
},
required: ['url'],
} 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) => {
uploadFromUrl({ url: ps.url, user, folderId: ps.folderId, sensitive: ps.isSensitive, force: ps.force, comment: ps.comment }).then(file => {
DriveFiles.pack(file, { self: true }).then(packedFile => {
publishMainStream(user.id, 'urlUploadFinished', {