summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/admin
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/endpoints/admin')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts58
-rw-r--r--packages/backend/src/server/api/endpoints/admin/accounts/create.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/admin/accounts/delete.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/create.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/delete.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/list.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/ad/update.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/announcements/create.ts37
-rw-r--r--packages/backend/src/server/api/endpoints/admin/announcements/delete.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/announcements/list.ts41
-rw-r--r--packages/backend/src/server/api/endpoints/admin/announcements/update.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/delete-logs.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/drive/files.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/admin/drive/show-file.ts113
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts39
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/add.ts14
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/copy.ts23
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts37
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/delete.ts (renamed from packages/backend/src/server/api/endpoints/admin/emoji/remove.ts)7
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts21
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts41
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/list.ts41
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts39
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts35
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts35
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/update.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/get-index-stats.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/get-table-stats.ts9
-rw-r--r--packages/backend/src/server/api/endpoints/admin/invite.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/admin/moderators/add.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/moderators/remove.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/promo/create.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/clear.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts17
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts17
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/jobs.ts33
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/stats.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/admin/relays/add.ts23
-rw-r--r--packages/backend/src/server/api/endpoints/admin/relays/list.ts27
-rw-r--r--packages/backend/src/server/api/endpoints/admin/relays/remove.ts7
-rw-r--r--packages/backend/src/server/api/endpoints/admin/reset-password.ts13
-rw-r--r--packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts25
-rw-r--r--packages/backend/src/server/api/endpoints/admin/resync-chart.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/send-email.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/server-info.ts65
-rw-r--r--packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts39
-rw-r--r--packages/backend/src/server/api/endpoints/admin/show-user.ts137
-rw-r--r--packages/backend/src/server/api/endpoints/admin/show-users.ts15
-rw-r--r--packages/backend/src/server/api/endpoints/admin/silence-user.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/suspend-user.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/unsilence-user.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/update-meta.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/vacuum.ts5
61 files changed, 743 insertions, 468 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts b/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts
index 774506bf0d..ed7b146d03 100644
--- a/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts
+++ b/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts
@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -46,70 +46,76 @@ export const meta = {
]),
default: 'combined',
},
+
+ forwarded: {
+ validator: $.optional.bool,
+ default: false,
+ },
},
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,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
format: 'id',
example: 'xxxxxxxxxx',
},
createdAt: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
format: 'date-time',
},
comment: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
},
resolved: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
example: false,
},
reporterId: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
format: 'id',
},
targetUserId: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
format: 'id',
},
assigneeId: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
format: 'id',
},
reporter: {
- type: 'object' as const,
- nullable: false as const, optional: false as const,
+ type: 'object',
+ nullable: false, optional: false,
ref: 'User',
},
targetUser: {
- type: 'object' as const,
- nullable: false as const, optional: false as const,
+ type: 'object',
+ nullable: false, optional: false,
ref: 'User',
},
assignee: {
- type: 'object' as const,
- nullable: true as const, optional: true as const,
+ type: 'object',
+ nullable: true, optional: true,
ref: 'User',
},
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const query = makePaginationQuery(AbuseUserReports.createQueryBuilder('report'), ps.sinceId, ps.untilId);
diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
index b1cdb29a56..20f1232959 100644
--- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
@@ -16,18 +16,19 @@ export const meta = {
},
res: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
ref: 'User',
properties: {
token: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, _me) => {
const me = _me ? await Users.findOneOrFail(_me.id) : null;
const noUsers = (await Users.count({
diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts b/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
index 3881e02bba..1701c1e3a7 100644
--- a/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
@@ -9,7 +9,7 @@ import { ID } from '@/misc/cafy-id';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -17,8 +17,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId);
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/create.ts b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
index e41d015646..00ad2012fe 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
@@ -6,7 +6,7 @@ import { genId } from '@/misc/gen-id';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -32,8 +32,9 @@ export const meta = {
validator: $.str.min(1),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
await Ads.insert({
id: genId(),
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/delete.ts b/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
index ab5cd96d0f..c0124e2484 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
@@ -7,7 +7,7 @@ import { ApiError } from '../../../error';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -23,8 +23,9 @@ export const meta = {
id: 'ccac9863-3a03-416e-b899-8a64041118b1',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const ad = await Ads.findOne(ps.id);
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/list.ts b/packages/backend/src/server/api/endpoints/admin/ad/list.ts
index f22dd0e961..7a83637f3b 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/list.ts
@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../../common/make-pagination-query';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -24,8 +24,9 @@ export const meta = {
validator: $.optional.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const query = makePaginationQuery(Ads.createQueryBuilder('ad'), ps.sinceId, ps.untilId)
.andWhere('ad.expiresAt > :now', { now: new Date() });
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/update.ts b/packages/backend/src/server/api/endpoints/admin/ad/update.ts
index 1d91cfd162..c2b09ab9cf 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/update.ts
@@ -7,7 +7,7 @@ import { ApiError } from '../../../error';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -44,8 +44,9 @@ export const meta = {
id: 'b7aa1727-1354-47bc-a182-3a9c3973d300',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const ad = await Ads.findOne(ps.id);
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
index 886cacff73..24c4caa37d 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
@@ -6,7 +6,7 @@ import { genId } from '@/misc/gen-id';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -22,50 +22,51 @@ 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',
example: 'xxxxxxxxxx',
},
createdAt: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'date-time',
},
updatedAt: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
format: 'date-time',
},
title: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
text: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
imageUrl: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
- const announcement = await Announcements.save({
+ const announcement = await Announcements.insert({
id: genId(),
createdAt: new Date(),
updatedAt: null,
title: ps.title,
text: ps.text,
imageUrl: ps.imageUrl,
- });
+ }).then(x => Announcements.findOneOrFail(x.identifiers[0]));
return announcement;
});
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts b/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts
index ade9ef581e..5548f99006 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts
@@ -7,7 +7,7 @@ import { ApiError } from '../../../error';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -23,8 +23,9 @@ export const meta = {
id: 'ecad8040-a276-4e85-bda9-015a708d291e',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const announcement = await Announcements.findOne(ps.id);
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
index f25b5e8efc..e5cc53ccdd 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../../common/make-pagination-query';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -26,49 +26,50 @@ 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',
example: 'xxxxxxxxxx',
},
createdAt: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'date-time',
},
updatedAt: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
format: 'date-time',
},
text: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
title: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
imageUrl: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
reads: {
- 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) => {
const query = makePaginationQuery(Announcements.createQueryBuilder('announcement'), ps.sinceId, ps.untilId);
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts
index 3fa8440ebd..f66293bb18 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts
@@ -7,7 +7,7 @@ import { ApiError } from '../../../error';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -32,8 +32,9 @@ export const meta = {
id: 'd3aae5a7-6372-4cb4-b61c-f511ffc2d7cc',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const announcement = await Announcements.findOne(ps.id);
diff --git a/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts b/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts
index 50979d53e8..249e63a0f8 100644
--- a/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts
@@ -7,7 +7,7 @@ import { ID } from '@/misc/cafy-id';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -15,8 +15,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const files = await DriveFiles.find({
userId: ps.userId,
diff --git a/packages/backend/src/server/api/endpoints/admin/delete-logs.ts b/packages/backend/src/server/api/endpoints/admin/delete-logs.ts
deleted file mode 100644
index 9d37ceb434..0000000000
--- a/packages/backend/src/server/api/endpoints/admin/delete-logs.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import define from '../../define';
-import { Logs } from '@/models/index';
-
-export const meta = {
- tags: ['admin'],
-
- requireCredential: true as const,
- requireModerator: true,
-};
-
-export default define(meta, async (ps) => {
- await Logs.clear(); // TRUNCATE
-});
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts b/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts
index 76a6acff59..acabbfef5c 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts
@@ -4,10 +4,11 @@ import { createCleanRemoteFilesJob } from '@/queue/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
createCleanRemoteFilesJob();
});
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts b/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts
index ae0e396b4f..452e7069a8 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts
@@ -6,10 +6,11 @@ import { DriveFiles } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const files = await DriveFiles.find({
userId: IsNull(),
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/files.ts b/packages/backend/src/server/api/endpoints/admin/drive/files.ts
index ee07245db7..264f549867 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/files.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/files.ts
@@ -7,7 +7,7 @@ import { ID } from '@/misc/cafy-id';
export const meta = {
tags: ['admin'],
- requireCredential: false as const,
+ requireCredential: false,
requireModerator: true,
params: {
@@ -44,16 +44,17 @@ 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: 'DriveFile',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const query = makePaginationQuery(DriveFiles.createQueryBuilder('file'), ps.sinceId, ps.untilId);
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts b/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
index ab8e3d68e9..5d9a1f2703 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
@@ -7,7 +7,7 @@ import { DriveFiles } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -29,138 +29,139 @@ 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',
example: 'xxxxxxxxxx',
},
createdAt: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'date-time',
},
userId: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
format: 'id',
example: 'xxxxxxxxxx',
},
userHost: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
md5: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'md5',
example: '15eca7fba0480996e2245f5185bf39f2',
},
name: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
example: 'lenna.jpg',
},
type: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
example: 'image/jpeg',
},
size: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
example: 51469,
},
comment: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
blurhash: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
properties: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
width: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
example: 1280,
},
height: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
example: 720,
},
avgColor: {
- type: 'string' as const,
- optional: true as const, nullable: false as const,
+ type: 'string',
+ optional: true, nullable: false,
example: 'rgb(40,65,87)',
},
},
},
storedInternal: {
- type: 'boolean' as const,
- optional: false as const, nullable: true as const,
+ type: 'boolean',
+ optional: false, nullable: true,
example: true,
},
url: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
format: 'url',
},
thumbnailUrl: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
format: 'url',
},
webpublicUrl: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
format: 'url',
},
accessKey: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
thumbnailAccessKey: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
webpublicAccessKey: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
uri: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
src: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
folderId: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
format: 'id',
example: 'xxxxxxxxxx',
},
isSensitive: {
- type: 'boolean' as const,
- optional: false as const, nullable: false as const,
+ type: 'boolean',
+ optional: false, nullable: false,
},
isLink: {
- type: 'boolean' as const,
- optional: false as const, nullable: false as const,
+ type: 'boolean',
+ optional: false, nullable: false,
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const file = ps.fileId ? await DriveFiles.findOne(ps.fileId) : await DriveFiles.findOne({
where: [{
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts
new file mode 100644
index 0000000000..f0fd73c276
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts
@@ -0,0 +1,39 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { ID } from '@/misc/cafy-id';
+import { Emojis } from '@/models/index';
+import { getConnection, In } from 'typeorm';
+import { ApiError } from '../../../error';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ ids: {
+ validator: $.arr($.type(ID)),
+ },
+
+ aliases: {
+ validator: $.arr($.str),
+ },
+ },
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, async (ps) => {
+ const emojis = await Emojis.find({
+ id: In(ps.ids),
+ });
+
+ for (const emoji of emojis) {
+ await Emojis.update(emoji.id, {
+ updatedAt: new Date(),
+ aliases: [...new Set(emoji.aliases.concat(ps.aliases))],
+ });
+ }
+
+ await getConnection().queryResultCache!.remove(['meta_emojis']);
+});
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
index 407d9920d9..1dfeae262f 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
@@ -12,7 +12,7 @@ import { publishBroadcastStream } from '@/services/stream';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -28,8 +28,9 @@ export const meta = {
id: 'fc46b5a4-6b92-4c33-ac66-b806659bb5cf',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const file = await DriveFiles.findOne(ps.fileId);
@@ -37,16 +38,17 @@ export default define(meta, async (ps, me) => {
const name = file.name.split('.')[0].match(/^[a-z0-9_]+$/) ? file.name.split('.')[0] : `_${rndstr('a-z0-9', 8)}_`;
- const emoji = await Emojis.save({
+ const emoji = await Emojis.insert({
id: genId(),
updatedAt: new Date(),
name: name,
category: null,
host: null,
aliases: [],
- url: file.url,
- type: file.type,
- });
+ originalUrl: file.url,
+ publicUrl: file.webpublicUrl ?? file.url,
+ type: file.webpublicType ?? file.type,
+ }).then(x => Emojis.findOneOrFail(x.identifiers[0]));
await getConnection().queryResultCache!.remove(['meta_emojis']);
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
index ae02df65e2..17cbf208aa 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
@@ -6,13 +6,13 @@ import { getConnection } from 'typeorm';
import { ApiError } from '../../../error';
import { DriveFile } from '@/models/entities/drive-file';
import { ID } from '@/misc/cafy-id';
-import uploadFromUrl from '@/services/drive/upload-from-url';
+import { uploadFromUrl } from '@/services/drive/upload-from-url';
import { publishBroadcastStream } from '@/services/stream';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -30,18 +30,19 @@ 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',
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const emoji = await Emojis.findOne(ps.emojiId);
@@ -53,7 +54,7 @@ export default define(meta, async (ps, me) => {
try {
// Create file
- driveFile = await uploadFromUrl(emoji.url, null, null, null, false, true);
+ driveFile = await uploadFromUrl({ url: emoji.originalUrl, user: null, force: true });
} catch (e) {
throw new ApiError();
}
@@ -64,9 +65,9 @@ export default define(meta, async (ps, me) => {
name: emoji.name,
host: null,
aliases: [],
- url: driveFile.url,
- type: driveFile.type,
- fileId: driveFile.id,
+ originalUrl: driveFile.url,
+ publicUrl: driveFile.webpublicUrl ?? driveFile.url,
+ type: driveFile.webpublicType ?? driveFile.type,
}).then(x => Emojis.findOneOrFail(x.identifiers[0]));
await getConnection().queryResultCache!.remove(['meta_emojis']);
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts
new file mode 100644
index 0000000000..797a5de672
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts
@@ -0,0 +1,37 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { ID } from '@/misc/cafy-id';
+import { Emojis } from '@/models/index';
+import { getConnection, In } from 'typeorm';
+import { insertModerationLog } from '@/services/insert-moderation-log';
+import { ApiError } from '../../../error';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ ids: {
+ validator: $.arr($.type(ID)),
+ },
+ },
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, async (ps, me) => {
+ const emojis = await Emojis.find({
+ id: In(ps.ids),
+ });
+
+ for (const emoji of emojis) {
+ await Emojis.delete(emoji.id);
+
+ await getConnection().queryResultCache!.remove(['meta_emojis']);
+
+ insertModerationLog(me, 'deleteEmoji', {
+ emoji: emoji,
+ });
+ }
+});
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/remove.ts b/packages/backend/src/server/api/endpoints/admin/emoji/delete.ts
index 78085470a9..1580439024 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/remove.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/delete.ts
@@ -9,7 +9,7 @@ import { ApiError } from '../../../error';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -25,8 +25,9 @@ export const meta = {
id: 'be83669b-773a-44b7-b1f8-e5e5170ac3c2',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const emoji = await Emojis.findOne(ps.id);
@@ -36,7 +37,7 @@ export default define(meta, async (ps, me) => {
await getConnection().queryResultCache!.remove(['meta_emojis']);
- insertModerationLog(me, 'removeEmoji', {
+ insertModerationLog(me, 'deleteEmoji', {
emoji: emoji,
});
});
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts b/packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts
new file mode 100644
index 0000000000..8856a38f24
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts
@@ -0,0 +1,21 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { createImportCustomEmojisJob } from '@/queue/index';
+import ms from 'ms';
+import { ID } from '@/misc/cafy-id';
+
+export const meta = {
+ secure: true,
+ requireCredential: true,
+ requireModerator: true,
+ params: {
+ fileId: {
+ validator: $.type(ID),
+ },
+ },
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, async (ps, user) => {
+ createImportCustomEmojisJob(user, ps.fileId);
+});
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
index 090ba2b64a..6e502547f5 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
@@ -8,7 +8,7 @@ import { ID } from '@/misc/cafy-id';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -37,46 +37,47 @@ 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',
},
aliases: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
+ type: 'array',
+ optional: false, nullable: false,
items: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
},
name: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
category: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
host: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
url: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const q = makePaginationQuery(Emojis.createQueryBuilder('emoji'), ps.sinceId, ps.untilId);
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/list.ts b/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
index 89cb60acaf..76ef190f94 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
@@ -8,7 +8,7 @@ import { Emoji } from '@/models/entities/emoji';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -32,46 +32,47 @@ 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',
},
aliases: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
+ type: 'array',
+ optional: false, nullable: false,
items: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
},
name: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
category: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
host: {
- type: 'string' as const,
- optional: false as const, nullable: true as const,
+ type: 'string',
+ optional: false, nullable: true,
},
url: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const q = makePaginationQuery(Emojis.createQueryBuilder('emoji'), ps.sinceId, ps.untilId)
.andWhere(`emoji.host IS NULL`);
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts
new file mode 100644
index 0000000000..c49f84b7fb
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts
@@ -0,0 +1,39 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { ID } from '@/misc/cafy-id';
+import { Emojis } from '@/models/index';
+import { getConnection, In } from 'typeorm';
+import { ApiError } from '../../../error';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ ids: {
+ validator: $.arr($.type(ID)),
+ },
+
+ aliases: {
+ validator: $.arr($.str),
+ },
+ },
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, async (ps) => {
+ const emojis = await Emojis.find({
+ id: In(ps.ids),
+ });
+
+ for (const emoji of emojis) {
+ await Emojis.update(emoji.id, {
+ updatedAt: new Date(),
+ aliases: emoji.aliases.filter(x => !ps.aliases.includes(x)),
+ });
+ }
+
+ await getConnection().queryResultCache!.remove(['meta_emojis']);
+});
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts
new file mode 100644
index 0000000000..06197820f0
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts
@@ -0,0 +1,35 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { ID } from '@/misc/cafy-id';
+import { Emojis } from '@/models/index';
+import { getConnection, In } from 'typeorm';
+import { ApiError } from '../../../error';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ ids: {
+ validator: $.arr($.type(ID)),
+ },
+
+ aliases: {
+ validator: $.arr($.str),
+ },
+ },
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, async (ps) => {
+ await Emojis.update({
+ id: In(ps.ids),
+ }, {
+ updatedAt: new Date(),
+ aliases: ps.aliases,
+ });
+
+ await getConnection().queryResultCache!.remove(['meta_emojis']);
+});
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts
new file mode 100644
index 0000000000..f0645f111b
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts
@@ -0,0 +1,35 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { ID } from '@/misc/cafy-id';
+import { Emojis } from '@/models/index';
+import { getConnection, In } from 'typeorm';
+import { ApiError } from '../../../error';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ ids: {
+ validator: $.arr($.type(ID)),
+ },
+
+ category: {
+ validator: $.optional.nullable.str,
+ },
+ },
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, async (ps) => {
+ await Emojis.update({
+ id: In(ps.ids),
+ }, {
+ updatedAt: new Date(),
+ category: ps.category,
+ });
+
+ await getConnection().queryResultCache!.remove(['meta_emojis']);
+});
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
index c61d8cb320..54a2cf9517 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
@@ -8,7 +8,7 @@ import { ApiError } from '../../../error';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -36,8 +36,9 @@ export const meta = {
id: '684dec9d-a8c2-4364-9aa8-456c49cb1dc8',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const emoji = await Emojis.findOne(ps.id);
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts b/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts
index d9e003d35d..db023c6f0b 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts
@@ -6,7 +6,7 @@ import { DriveFiles } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -14,8 +14,9 @@ export const meta = {
validator: $.str,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const files = await DriveFiles.find({
userHost: ps.host,
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts b/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts
index 9e7a8ec476..b68252ef2e 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts
@@ -7,7 +7,7 @@ import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -15,8 +15,9 @@ export const meta = {
validator: $.str,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const instance = await Instances.findOne({ host: toPuny(ps.host) });
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts b/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts
index 8fc964fd2f..4de8ad1336 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts
@@ -6,7 +6,7 @@ import { Followings, Users } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -14,8 +14,9 @@ export const meta = {
validator: $.str,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const followings = await Followings.find({
followerHost: ps.host,
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
index 4ea1275f7c..6ac2f1f467 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
@@ -6,7 +6,7 @@ import { toPuny } from '@/misc/convert-host';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -18,8 +18,9 @@ export const meta = {
validator: $.bool,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const instance = await Instances.findOne({ host: toPuny(ps.host) });
diff --git a/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts b/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts
index f2b06d0ef2..9a2bccec77 100644
--- a/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts
+++ b/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts
@@ -2,15 +2,16 @@ import define from '../../define';
import { getConnection } from 'typeorm';
export const meta = {
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
tags: ['admin'],
params: {
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async () => {
const stats = await
getConnection().query(`SELECT * FROM pg_indexes;`)
diff --git a/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts b/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
index 64f0292943..1c5f250676 100644
--- a/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
+++ b/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
@@ -2,7 +2,7 @@ import define from '../../define';
import { getConnection } from 'typeorm';
export const meta = {
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
tags: ['admin'],
@@ -11,8 +11,8 @@ export const meta = {
},
res: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
example: {
migrations: {
count: 66,
@@ -20,8 +20,9 @@ export const meta = {
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async () => {
const sizes = await
getConnection().query(`
diff --git a/packages/backend/src/server/api/endpoints/admin/invite.ts b/packages/backend/src/server/api/endpoints/admin/invite.ts
index b9452c83d2..3428709c04 100644
--- a/packages/backend/src/server/api/endpoints/admin/invite.ts
+++ b/packages/backend/src/server/api/endpoints/admin/invite.ts
@@ -6,26 +6,27 @@ import { genId } from '@/misc/gen-id';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {},
res: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
code: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
example: '2ERUA5VR',
maxLength: 8,
minLength: 8,
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async () => {
const code = rndstr({
length: 8,
diff --git a/packages/backend/src/server/api/endpoints/admin/moderators/add.ts b/packages/backend/src/server/api/endpoints/admin/moderators/add.ts
index 8e3419bf66..0308cf2761 100644
--- a/packages/backend/src/server/api/endpoints/admin/moderators/add.ts
+++ b/packages/backend/src/server/api/endpoints/admin/moderators/add.ts
@@ -6,7 +6,7 @@ import { Users } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireAdmin: true,
params: {
@@ -14,8 +14,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts b/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts
index 5a5a91e9ce..bdb976e9ec 100644
--- a/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts
+++ b/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts
@@ -6,7 +6,7 @@ import { Users } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireAdmin: true,
params: {
@@ -14,8 +14,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/promo/create.ts b/packages/backend/src/server/api/endpoints/admin/promo/create.ts
index 245780c2d1..f2735ac9f8 100644
--- a/packages/backend/src/server/api/endpoints/admin/promo/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/promo/create.ts
@@ -8,7 +8,7 @@ import { PromoNotes } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -34,8 +34,9 @@ export const meta = {
id: 'ae427aa2-7a41-484f-a18c-2c1104051604',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {
const note = await getNote(ps.noteId).catch(e => {
if (e.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote);
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/clear.ts b/packages/backend/src/server/api/endpoints/admin/queue/clear.ts
index 3a7ae6b4b0..3c8e7a27a2 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/clear.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/clear.ts
@@ -5,12 +5,13 @@ import { insertModerationLog } from '@/services/insert-moderation-log';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
destroy();
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts b/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
index cb2d1d0d79..4760e2c310 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
@@ -5,25 +5,25 @@ import define from '../../../define';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
},
res: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
+ type: 'array',
+ optional: false, nullable: false,
items: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
+ type: 'array',
+ optional: false, nullable: false,
items: {
anyOf: [
{
- type: 'string' as const,
+ type: 'string',
},
{
- type: 'number' as const,
+ type: 'number',
},
],
},
@@ -33,8 +33,9 @@ export const meta = {
12,
]],
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const jobs = await deliverQueue.getJobs(['delayed']);
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts b/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
index d524002faf..a95aabc506 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
@@ -5,25 +5,25 @@ import { inboxQueue } from '@/queue/queues';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
},
res: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
+ type: 'array',
+ optional: false, nullable: false,
items: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
+ type: 'array',
+ optional: false, nullable: false,
items: {
anyOf: [
{
- type: 'string' as const,
+ type: 'string',
},
{
- type: 'number' as const,
+ type: 'number',
},
],
},
@@ -33,8 +33,9 @@ export const meta = {
12,
]],
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const jobs = await inboxQueue.getJobs(['delayed']);
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/jobs.ts b/packages/backend/src/server/api/endpoints/admin/queue/jobs.ts
index ece1d46f3f..df0b4a8f13 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/jobs.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/jobs.ts
@@ -5,7 +5,7 @@ import define from '../../../define';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -24,38 +24,39 @@ 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',
},
data: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
},
attempts: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
},
maxAttempts: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
},
timestamp: {
- 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) => {
const queue =
ps.domain === 'deliver' ? deliverQueue :
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/stats.ts b/packages/backend/src/server/api/endpoints/admin/queue/stats.ts
index 1fc42ea0b5..dab0be5dbc 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/stats.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/stats.ts
@@ -4,31 +4,36 @@ import define from '../../../define';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {},
res: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
deliver: {
+ optional: false, nullable: false,
ref: 'QueueCount',
},
inbox: {
+ optional: false, nullable: false,
ref: 'QueueCount',
},
db: {
+ optional: false, nullable: false,
ref: 'QueueCount',
},
objectStorage: {
+ optional: false, nullable: false,
ref: 'QueueCount',
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const deliverJobCounts = await deliverQueue.getJobCounts();
const inboxJobCounts = await inboxQueue.getJobCounts();
diff --git a/packages/backend/src/server/api/endpoints/admin/relays/add.ts b/packages/backend/src/server/api/endpoints/admin/relays/add.ts
index 80609aee94..65890a00f7 100644
--- a/packages/backend/src/server/api/endpoints/admin/relays/add.ts
+++ b/packages/backend/src/server/api/endpoints/admin/relays/add.ts
@@ -7,8 +7,8 @@ import { ApiError } from '../../../error';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
- requireModerator: true as const,
+ requireCredential: true,
+ requireModerator: true,
params: {
inbox: {
@@ -25,22 +25,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',
},
inbox: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'url',
},
status: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
default: 'requesting',
enum: [
'requesting',
@@ -50,8 +50,9 @@ export const meta = {
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {
try {
if (new URL(ps.inbox).protocol !== 'https:') throw 'https only';
diff --git a/packages/backend/src/server/api/endpoints/admin/relays/list.ts b/packages/backend/src/server/api/endpoints/admin/relays/list.ts
index ef103fbb31..bdddf13374 100644
--- a/packages/backend/src/server/api/endpoints/admin/relays/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/relays/list.ts
@@ -4,32 +4,32 @@ import { listRelay } from '@/services/relay';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
- requireModerator: true as const,
+ requireCredential: true,
+ requireModerator: true,
params: {
},
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',
},
inbox: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'url',
},
status: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
default: 'requesting',
enum: [
'requesting',
@@ -40,8 +40,9 @@ export const meta = {
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {
return await listRelay();
});
diff --git a/packages/backend/src/server/api/endpoints/admin/relays/remove.ts b/packages/backend/src/server/api/endpoints/admin/relays/remove.ts
index e7ddef30fc..4b04e620c1 100644
--- a/packages/backend/src/server/api/endpoints/admin/relays/remove.ts
+++ b/packages/backend/src/server/api/endpoints/admin/relays/remove.ts
@@ -5,16 +5,17 @@ import { removeRelay } from '@/services/relay';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
- requireModerator: true as const,
+ requireCredential: true,
+ requireModerator: true,
params: {
inbox: {
validator: $.str,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, user) => {
return await removeRelay(ps.inbox);
});
diff --git a/packages/backend/src/server/api/endpoints/admin/reset-password.ts b/packages/backend/src/server/api/endpoints/admin/reset-password.ts
index bdd7ef27b8..b6cf1ee2d0 100644
--- a/packages/backend/src/server/api/endpoints/admin/reset-password.ts
+++ b/packages/backend/src/server/api/endpoints/admin/reset-password.ts
@@ -8,7 +8,7 @@ import { Users, UserProfiles } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -18,19 +18,20 @@ export const meta = {
},
res: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
password: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
minLength: 8,
maxLength: 8,
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts b/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts
index 94158ecfdb..b00457f092 100644
--- a/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts
+++ b/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts
@@ -1,21 +1,32 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
-import { AbuseUserReports } from '@/models/index';
+import { AbuseUserReports, Users } from '@/models/index';
+import { getInstanceActor } from '@/services/instance-actor';
+import { deliver } from '@/queue/index';
+import { renderActivity } from '@/remote/activitypub/renderer/index';
+import { renderFlag } from '@/remote/activitypub/renderer/flag';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
reportId: {
validator: $.type(ID),
},
+
+ forward: {
+ validator: $.optional.boolean,
+ required: false,
+ default: false,
+ },
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const report = await AbuseUserReports.findOne(ps.reportId);
@@ -23,8 +34,16 @@ export default define(meta, async (ps, me) => {
throw new Error('report not found');
}
+ if (ps.forward && report.targetUserHost != null) {
+ const actor = await getInstanceActor();
+ const targetUser = await Users.findOne(report.targetUserId);
+
+ deliver(actor, renderActivity(renderFlag(actor, [targetUser.uri], report.comment)), targetUser.inbox);
+ }
+
await AbuseUserReports.update(report.id, {
resolved: true,
assigneeId: me.id,
+ forwarded: ps.forward && report.targetUserHost != null,
});
});
diff --git a/packages/backend/src/server/api/endpoints/admin/resync-chart.ts b/packages/backend/src/server/api/endpoints/admin/resync-chart.ts
index e01dfce1b6..d80d2b0426 100644
--- a/packages/backend/src/server/api/endpoints/admin/resync-chart.ts
+++ b/packages/backend/src/server/api/endpoints/admin/resync-chart.ts
@@ -5,10 +5,11 @@ import { insertModerationLog } from '@/services/insert-moderation-log';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
insertModerationLog(me, 'chartResync');
diff --git a/packages/backend/src/server/api/endpoints/admin/send-email.ts b/packages/backend/src/server/api/endpoints/admin/send-email.ts
index 4797aa7a2b..c2972c35fa 100644
--- a/packages/backend/src/server/api/endpoints/admin/send-email.ts
+++ b/packages/backend/src/server/api/endpoints/admin/send-email.ts
@@ -5,7 +5,7 @@ import { sendEmail } from '@/services/send-email';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -19,8 +19,9 @@ export const meta = {
validator: $.str,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
await sendEmail(ps.to, ps.subject, ps.text, ps.text);
});
diff --git a/packages/backend/src/server/api/endpoints/admin/server-info.ts b/packages/backend/src/server/api/endpoints/admin/server-info.ts
index 4ddc39deb0..cd282e364c 100644
--- a/packages/backend/src/server/api/endpoints/admin/server-info.ts
+++ b/packages/backend/src/server/api/endpoints/admin/server-info.ts
@@ -5,7 +5,7 @@ import define from '../../define';
import { redisClient } from '../../../../db/redis';
export const meta = {
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
tags: ['admin', 'meta'],
@@ -14,82 +14,83 @@ export const meta = {
},
res: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
machine: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
os: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
example: 'linux',
},
node: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
psql: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
cpu: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
model: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
cores: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
},
},
},
mem: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
total: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
format: 'bytes',
},
},
},
fs: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
total: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
format: 'bytes',
},
used: {
- type: 'number' as const,
- optional: false as const, nullable: false as const,
+ type: 'number',
+ optional: false, nullable: false,
format: 'bytes',
},
},
},
net: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
properties: {
interface: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
example: 'eth0',
},
},
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async () => {
const memStats = await si.mem();
const fsStats = await si.fsSize();
diff --git a/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts b/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts
index 19d4be973f..84e2b84bb5 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts
@@ -7,7 +7,7 @@ import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -26,45 +26,46 @@ 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',
},
createdAt: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'date-time',
},
type: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
},
info: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
+ type: 'object',
+ optional: false, nullable: false,
},
userId: {
- type: 'string' as const,
- optional: false as const, nullable: false as const,
+ type: 'string',
+ optional: false, nullable: false,
format: 'id',
},
user: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
- ref: 'User',
+ type: 'object',
+ optional: false, nullable: false,
+ ref: 'UserDetailed',
},
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps) => {
const query = makePaginationQuery(ModerationLogs.createQueryBuilder('report'), ps.sinceId, ps.untilId);
diff --git a/packages/backend/src/server/api/endpoints/admin/show-user.ts b/packages/backend/src/server/api/endpoints/admin/show-user.ts
index 21cc9e5abc..c2a6a294b5 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-user.ts
@@ -6,7 +6,7 @@ import { Users } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -16,149 +16,150 @@ export const meta = {
},
res: {
- type: 'object' as const,
- nullable: false as const, optional: false as const,
+ type: 'object',
+ nullable: false, optional: false,
properties: {
id: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
format: 'id',
},
createdAt: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
format: 'date-time',
},
updatedAt: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
format: 'date-time',
},
lastFetchedAt: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
username: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
},
name: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
folowersCount: {
- type: 'number' as const,
- nullable: false as const, optional: false as const,
+ type: 'number',
+ nullable: false, optional: true,
},
followingCount: {
- type: 'number' as const,
- nullable: false as const, optional: false as const,
+ type: 'number',
+ nullable: false, optional: false,
},
notesCount: {
- type: 'number' as const,
- nullable: false as const, optional: false as const,
+ type: 'number',
+ nullable: false, optional: false,
},
avatarId: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
bannerId: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
tags: {
- type: 'array' as const,
- nullable: false as const, optional: false as const,
+ type: 'array',
+ nullable: false, optional: false,
items: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
},
},
avatarUrl: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
format: 'url',
},
bannerUrl: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
format: 'url',
},
avatarBlurhash: {
- type: 'any' as const,
- nullable: true as const, optional: false as const,
+ type: 'any',
+ nullable: true, optional: false,
default: null,
},
bannerBlurhash: {
- type: 'any' as const,
- nullable: true as const, optional: false as const,
+ type: 'any',
+ nullable: true, optional: false,
default: null,
},
isSuspended: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
},
isSilenced: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
},
isLocked: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
},
isBot: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
},
isCat: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
},
isAdmin: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
},
isModerator: {
- type: 'boolean' as const,
- nullable: false as const, optional: false as const,
+ type: 'boolean',
+ nullable: false, optional: false,
},
emojis: {
- type: 'array' as const,
- nullable: false as const, optional: false as const,
+ type: 'array',
+ nullable: false, optional: false,
items: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: false, optional: false,
},
},
host: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
inbox: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
sharedInbox: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
featured: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
uri: {
- type: 'string' as const,
- nullable: true as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
},
token: {
- type: 'string' as const,
- nullable: false as const, optional: false as const,
+ type: 'string',
+ nullable: true, optional: false,
default: '<MASKED>',
},
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/show-users.ts b/packages/backend/src/server/api/endpoints/admin/show-users.ts
index 9c57917cb2..d3dde99b72 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-users.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-users.ts
@@ -5,7 +5,7 @@ import { Users } from '@/models/index';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -64,16 +64,17 @@ export const meta = {
},
res: {
- type: 'array' as const,
- nullable: false as const, optional: false as const,
+ type: 'array',
+ nullable: false, optional: false,
items: {
- type: 'object' as const,
- nullable: false as const, optional: false as const,
- ref: 'User',
+ type: 'object',
+ nullable: false, optional: false,
+ ref: 'UserDetailed',
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const query = Users.createQueryBuilder('user');
diff --git a/packages/backend/src/server/api/endpoints/admin/silence-user.ts b/packages/backend/src/server/api/endpoints/admin/silence-user.ts
index 9f5135b1a6..872bd2a6ac 100644
--- a/packages/backend/src/server/api/endpoints/admin/silence-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/silence-user.ts
@@ -7,7 +7,7 @@ import { insertModerationLog } from '@/services/insert-moderation-log';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -15,8 +15,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
index c062dcc93f..2bb1875fc0 100644
--- a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
@@ -11,7 +11,7 @@ import { publishUserEvent } from '@/services/stream';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -19,8 +19,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts b/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts
index bc081c8487..a4c6ff2ade 100644
--- a/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts
@@ -7,7 +7,7 @@ import { insertModerationLog } from '@/services/insert-moderation-log';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -15,8 +15,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts b/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
index 73a5bc739b..5ab56d51c7 100644
--- a/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
@@ -8,7 +8,7 @@ import { doPostUnsuspend } from '@/services/unsuspend-user';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -16,8 +16,9 @@ export const meta = {
validator: $.type(ID),
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
index e67088e0aa..aa2d1222f7 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -9,7 +9,7 @@ import { ID } from '@/misc/cafy-id';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireAdmin: true,
params: {
@@ -297,8 +297,9 @@ export const meta = {
validator: $.optional.bool,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const set = {} as Partial<Meta>;
diff --git a/packages/backend/src/server/api/endpoints/admin/vacuum.ts b/packages/backend/src/server/api/endpoints/admin/vacuum.ts
index d08dfdd9ea..4229ef0d29 100644
--- a/packages/backend/src/server/api/endpoints/admin/vacuum.ts
+++ b/packages/backend/src/server/api/endpoints/admin/vacuum.ts
@@ -6,7 +6,7 @@ import { insertModerationLog } from '@/services/insert-moderation-log';
export const meta = {
tags: ['admin'],
- requireCredential: true as const,
+ requireCredential: true,
requireModerator: true,
params: {
@@ -17,8 +17,9 @@ export const meta = {
validator: $.bool,
},
},
-};
+} as const;
+// eslint-disable-next-line import/no-default-export
export default define(meta, async (ps, me) => {
const params: string[] = [];